是否有用于纯功能编程语言的带注释的形式验证系统?


25

ACSL(Ansi C规范语言)是C代码的规范,带有特殊注释,可对C代码进行正式验证。

我没有研究它,但是我想ACSL验证器中使用的形式方法将类似于Hoare Logic。但是对于纯函数式语言(例如Haskell),我无法想象将使用哪种形式主义进行形式验证。

除了纯函数式语言,有人做过类似于ACSL的东西吗?如果不是,是否有针对功能语言的规范标注样式形式验证的研究?

我知道有一种依赖类型,许多语言(Agda,Idris等)都支持这种类型,但是在Haskell中,不进行某种(不可读的)类型wizardry很难实现依赖类型。考虑到这一点,由于Haskell具有比Agda和Idris更好的库支持,我相信这样的功能形式验证系统可能会有用,但是我不知道是否对此进行了研究。

Answers:


13

本田和吉田的

(可能)开创了纯函数语言的Hoare逻辑。这项工作基于Hennessy-Milner逻辑和Milner将功能编码到流程中,如下所述:

在另一个答案中提到的Régis-Gianas等人的工作类似于本田/吉田的上述第一项工作。这已扩展到有效的ML风格的语言:

所提到的逻辑是观察上完整的,意味着操作和逻辑语义是一致的。ArthurCharguéraud在验证Coq中的Hoare风格功能程序时使用了此完成方法。


15

您可能想看看Liquid Haskell,它允许使用类型细化而不是依赖类型。类型细化可以看作是一种受限的逻辑语言,它使您可以表达各种数据类型的居民的Hoare风格属性。另一种可能的候选语言语言,它提供类似的构造。F

细化类型与ACSL之类的符号之间似乎存在密切的对应关系。

最后,我只能建议仔细看一下Agda和Idris,因为它们可以编译为Haskell,并且旨在为用户提供一种可用的编程语言(尤其是Idris)。我怀疑可以将Haskell库集成到Idris代码中而不会带来太多麻烦。


没有太多麻烦 -并非如此。默认情况下,Idris是严格的,而Haskell是懒惰的。仅此而已就成为一个主要问题。与Haskell的兼容性也不是Idris设计的首要任务。
Bartek Banachewicz 2014年

很公平。不过,Agda默认情况下会检查终止,因此从理论上讲,严格性不是问题。当然,运行时间可能会大不相同。
科迪2014年



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.