安全性通常通过强静态类型实现。虽然有非常强大的类型系统(依赖类型),但它们都不足以表达关于代码的任意形式证明。另一个问题是类型系统与单一编程语言紧密耦合,禁止形式证明重构。
我正在考虑的一个可能的框架是当程序员(或自动化工具)提供允许它们的形式证明时激活优化的编译器。例如唯一性,终止,数组边界检查,内存管理,安全性等。
是否有任何编程语言以某种方式实现这一概念?
我知道携带代码的证明,但它通常是作为传统类型系统和编译器实现的,它证明了程序转换下的类型安全。
答案 0 :(得分:1)
Isabelle/HOL校对助手的代码生成器基于您描述的原则。可以指定以声明方式给出的抽象关系,这意味着没有有效的算法来检查它是否适用于任意输入(尽管有可能为某些特定输入证明它)。然后定义一个函数来检查任意值的关系是否成立。这包括确保该功能是可计算的一些步骤,例如,表明它终止了。接下来,证明了关系和函数确实可以代替彼此使用。最后,通过此证明,可以告诉Isabelle该函数可用于为原始谓词生成代码(在支持的函数语言之一中)。
当然,如果有两个这样的功能,可以选择一个优选的功能来生成代码。这也可以被视为产生可证明相同结果的优化。