我看到了几个不同的研究小组,至少有一本书,他们谈到了使用Coq来设计认证的程序。对认证课程的定义有共识吗?据我所知,它真正的意思是程序被证明是完全正确的。现在,程序的类型可能是一些非常奇特的东西,比如一个列表,证明它是非空的,排序的,所有元素都是>= 5的,等等。然而,归根结底,一个经过认证的程序仅仅是一个Coq显示的完全和类型安全的程序,其中所有有趣的问题都归结为最终类型中包含了什么?
编辑1
基于wjedynak的回答,我看了Xavier Leroy的论文“Realistic Compiler的形式验证”,这篇论文在下面的答案中有链接。我认为这包含了一些很好的信息,但我认为在这一系列研究中更多的信息可以在桑德林·布拉齐和泽维尔·勒罗伊的论文Mechanized Semantics for the Clight Subset of the C Language中找到。这就是“正式验证”论文中添加优化的语言。在这篇文章中,Blazy和Leroy介绍了Clight语言的语法和语义,然后在第5节讨论了这些语义的验证。在第5节中,有一个用于验证编译器的不同策略的列表,在某种意义上,它概述了创建经过认证的程序的不同策略。它们是:
使用备用语义的semantics
属性
在任何情况下,可能还有一些要点可以添加,我当然希望听到更多。
回到我最初的问题,什么是认证计划的定义,对我来说仍然有点不清楚。Wjedynak在某种程度上提供了一个答案,但实际上Leroy的工作涉及在Coq中创建编译器,然后在某种意义上认证它。从理论上讲,这使得现在可以证明关于C程序的事情,因为我们现在可以进行C->Coq->证明。从这个意义上说,似乎有这样的工作流程,我们可以
在Coq或其他一些证明辅助工具中,根据步骤1中的程序模型,用X language
或者,我们可以在证明辅助工具中创建程序的规范,然后验证规范的属性,而不是程序本身。
在任何情况下,我仍然有兴趣听到替代定义,如果有人有他们。
发布于 2014-01-24 23:58:27
我同意这个概念似乎很模糊,但在我的理解中,经过认证的程序是配备/连同正确性证明的程序。现在,通过使用丰富且富有表现力的类型签名,您可以使它不再需要单独的证明,但这通常只是为了方便。真正的问题是我们所说的正确性是什么意思:这是一个规范问题。你可以看看例如Xavier Leroy。Formal verification of a realistic compiler。
发布于 2014-02-03 06:17:25
首先要注意的是,“认证”这个词有一点法国偏见:在其他地方,经常使用“已验证的”或“已证实的”。
在任何情况下,询问这实际上是什么意思都是很重要的。Leroy和CompCert是一个非常好的起点:这是一个关于C编译器验证的大项目,Leroy总是热衷于向他的听众解释为什么验证很重要。尤其是当与来自“认证机构”的人交谈时,他们通常意味着测试,而不是证明。
另一个大型验证项目是L4.verified,它使用Isabelle/HOL。exposition的这一部分解释了实际陈述和证明的内容,以及结果是什么。不幸的是,实际的证据是最高机密的,所以不能公开检查。
发布于 2017-08-02 23:30:32
认证程序是与程序满足其规范的证明(即证书)配对的程序。关键是存在一个可以独立于生成该证明的工具进行检查的证明对象。
经过验证的程序已经经过了验证,在这种情况下,这通常意味着它的规范已经在Coq这样的系统中被形式化并被证明是正确的,但证明不一定是由外部工具验证的。
这一区别在科学文献中得到了很好的证明,并不是法语国家所特有的。Xavier Leroy在的2.2节中非常清楚地描述了这一点。
https://stackoverflow.com/questions/21320138
复制相似问题