计算机程序的复杂性不断提高,计算机在社会中的地位日益重要,这使我想知道为什么我们仍然不集体使用编程语言,而您必须使用编程语言来正式证明代码可以正常工作。
我相信该术语是“认证编译器”(我在这里找到了它):一种编译一种编程语言的编译器,在该语言中,不仅必须编写代码,而且还必须声明代码规范并证明代码符合该规范。规范(或使用自动证明者这样做)。
在互联网上搜索时,我仅发现使用非常简单的编程语言的项目或尝试适应现代编程语言的失败项目。这引出我的问题:
是否有任何认证的编译器实现了成熟的编程语言,还是这很难/从理论上讲是不可能的?
此外,我还没有看到任何涉及可证明程序的复杂性类,例如“由图灵机确定的所有语言的类(存在证明该图灵机停止的证据)”,我将其称为作为模拟到,该组递归语言。
我可以看到学习这样的复杂类的优点:例如,对于停机问题是可判定的(I甚至猜想在明显的方式定义的。将可以决定的最大语言类别)。另外,我怀疑我们是否会排除任何实用的程序:当您无法证明程序终止时,谁会使用该程序?
所以我的第二个问题是:
我们对复杂性类了解多少,这些复杂性类要求其包含的语言具有可证明的某些属性?