他们来自微软,看起来像是助理?除了语法差异之外,还有哪些实际方面使它们彼此不同(比如说能够做自动化,表达能力等)?我是正式验证的新手。
编辑:我不要求哪一个更好,我只是对这些工具提供的不同功能之间的技术比较感兴趣。我正在寻找像this
这样的东西答案 0 :(得分:23)
每个工具都有独特的设计,由具有不同目标和理念的不同人构建和影响,但作者都是朋友,多年来一直坐在几个办公室内。
Rustan Leino将Dafny设计为他之前构建的许多系统的继承者,包括ESC Java和Spec#。
Dafny基于Java或C#之类的命令式语言,具有编写Hoare逻辑样式状态不变量的能力,这允许语言的用户验证有关方法的属性,以及使用可变状态,循环,数组等的对象上。 Dafny的核心理论是一个定制程序逻辑,主要由Rustan和少数合作者设计。 Dafny通过将它们编译为Boogie中间验证语言来排放它生成的验证条件,然后将它们编译成查询,然后传递给SMT求解器(如Z3或CVC4)以便放电。
Dafny的设计目标是与命令式面向对象语言非常相似,用户熟悉验证程序的附加功能。
F *基于由Nikhil Swamy和合作者设计的新类型理论,它起初是一种类似ML的编程语言,增加了以Dafny风格排出的细化类型,但在过去的几个版本中已经有了很大的发展。由于众多的外部补充,以及来自Dafny,Lean,LiquidHaskell等的影响,这几年。
F *还将其验证条件转换为像Dafny这样的SMT求解器,但不使用像Boogie这样的中间验证语言。 F *最近获得了使用受精益战术语言影响很大的战术的能力。
对于像Dafny和其他改进类型这样的工具,F *的主要创新是使用Dijkstra Monads来描述"效果"代码,让效果设计师控制生成的验证条件。 DM允许用户在不同级别进行推理,例如Pure
效果中的代码无法使用状态,或者抛出异常,用户可以忽略他们不会使用的有效功能。
精益设计受Coq和其他内涵类型理论的影响很大,而且与它们更相似,精益的目标是通过自动化技术(最好的自动化和交互式定理证明)( SMT)世界对类型理论的世界。它具有非常强大的元编程能力,并且已经获得越来越多的自动化。 Lean不需要SMT求解器,并以专门的方式为Lean的类型理论重新实现许多核心过程。
你可以将F *和Lean视为覆盖类似的空间,但强调到达那里的不同方式。
如果没有澄清,我很乐意详细说明。
资料来源:Lean的核心开发人员,F *的开发人员,有时也是Dafny的用户和贡献者,在MSR工作了大约7个月,亲自了解所有工具作者。