首先,这是否只能在没有副作用的算法上才有可能?

其次,我在哪里可以了解这个过程,有什么好的书籍、文章等?

有帮助吗?

解决方案

COQ 是证明助理产生正确输出ocaml的。这是非常复杂的,虽然。我很少抽时间去寻找它,但我的同事开始,然后两个月后,停止使用它。这主要是因为他希望把事情做得更快,但如果你需要验证的算法,这可能是一个好主意。

下面是一个使用COQ和约证明算法会谈过程。结果 和是一个教程了解在COQ撰写学术论文。

其他提示

  1. 一般是很多 更轻松 在不涉及副作用的情况下验证/证明正确性,但这不是绝对要求。
  2. 您可能想查看一些正式规范语言的文档,例如 Z. 。正式规范本身并不是证明,但通常是证明的基础。

一般正确性的证明是非常具体的手头的算法。

然而,存在所使用并重新使用几种熟知的技巧。例如,使用递归算法可以使用循环不变的。

另一种常见的诀窍是减少原问题的一个问题为,其正确性的你的算法的证明是更容易显示,然后要么一般化简单的问题或示出的是,简单的问题可以被翻译成的溶液于原问题。 这里是一个描述。

如果你心里有一个特定的算法,你可以更好地在问如何构建该算法,而不是一般的回答证明做。

购买这些书籍: http://www.amazon.com/Science-Programming -Monographs-计算机/ DP / 0387964800

在格里斯书,科学规划是伟大的东西。患者,彻底,完整。

我认为验证一个算法的正确性。将验证其符合具有规范。有理论计算机科学的一个分支,叫形式化方法的这可能是你在找什么,如果你需要得到尽可能接近的证明就可以。维基百科,

  

形式化方法是一种特定类型的   对于数学为基础的技术   规范,发展和   软件和硬件验证   系统

您将可以找到许多学习资源和工具的链接的维基百科页面上,并从的形式化方法维基

逻辑在计算机科学,由胡特和Ryan,给人现代系统的用于验证系统合理可读概述。从前谈到证明程序的正确性时间的人 - 有可能会或可能不会有副作用的编程语言。我的印象从这本书中获得和其他地方是,真正的应用是不同的 - 例如证明的协议是正确的,或者一个芯片的浮点单元能够正确划分,或操纵链表无锁程序是正确的。

ACM计算概观第41卷第4期(2009年10月)上的软件验证一个特殊的问题。它看起来像您可以通过搜索“形式化方法:实践与经验”得到没有ACM账户的论文至少一个。

在工具邮资-C ,为此埃拉扎尔表明评价演示视频,给人你一个规范语言, ACSL ,编写函数的合同和各种分析仪用于验证一个C函数满足其合同和安全性能,例如不存在运行时错误的。

的扩展教程, ACSL通过示例时,显示的例子被指定的实际的C算法和验证,并从effectful酮(游离副作用酮被认为是更容易和略同于教程)分离自由副作用函数。这份文件也很有趣,因为它不是由它的描述工具的设计者写的,所以它提供了更新鲜,更说教看看这些技术。

如果您熟悉LISP那么你一定要看看ACL2:的 http://www.cs.utexas.edu/~moore/acl2/acl2-doc.html

Dijkstra的编程的纪律和他的EWDS奠定形式验证编程一门科学的基础。一个更简单的工作是Wirth的的系统编程的,其与简单的方法来使用验证开始。维尔特使用预先ISO帕斯卡尔的语言;迪杰斯特拉使用一个的Algol-68样形式主义称为留守(GCL)。因为Dijkstra算法和霍尔形式验证已经成熟,但这些旧的文本可能仍然是一个很好的起点。

由斯坦福人开发的PVS工具是说明书和验证系统。我的工作,并发现Theoram证明它是非常有用的。

WRT(1),你可能会在某种程度上“捕获”在程序变量算法的副作用旨在模型,使得基于状态的副作用来创建算法的模型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top