Answers:
理查德·伯德(Richard Bird)的小组是证明函数式编程结果的事实上的方法之一。
特别是,您要求对方程式推理和列表归纳进行深入或更深入的研究,这在《构造函数编程》讲座中提供。
更一般地,Bird和de Moor撰写的“编程代数”一文也涉及功能算法的正确性,例如优化和动态编程问题。
如果您遇到其他有用的资源来解决此问题,请提及它们,也许我们可以将此文章转变为Wiki。
你可以开始
主题包括逻辑的基本概念,计算机辅助定理证明,Coq证明助手,功能编程,操作语义,Hoare逻辑和静态类型系统。博览会面向的读者范围很广,从高级本科生到博士生和研究人员。尽管一定程度的数学成熟度将有所帮助,但没有假定逻辑或编程语言具有特定背景。
您可以跳过(或略过)编程语言理论的各个部分,而仅学习如何处理从Preface到IndPrinciples的形式化证明。这本书写得真好,很有启发性。
然后,您可能要继续
在本卷中,您将学习如何指定和验证(证明正确性)排序算法,二进制搜索树,平衡的二进制搜索树和优先级队列。在使用本书之前,您应该对这些算法和数据结构有一定的了解,可以在任何标准的本科算法教科书中找到。您应该了解Software Foundations第1卷(Logic Foundations)中的所有材料。
警告说明:VFA仍处于beta版本!
事实证明,证明辅助功能和证明纯功能语言事物的示例的绝佳来源是证明助手,它通常包括纯函数语言作为其规范语言的一部分,可以在该函数语言上进行等式推理。
可能需要查阅一本类似《依赖类型的认证程序》的书,以在特定的证明助手(即Coq)中深入介绍这种推理。
我建议使用程序逻辑。它们在效果方面比打字系统好得多。
功能语言有许多程序逻辑。效果变得有趣起来。参见例如具有局部状态的高阶函数的逻辑推理。
ArthurCharguéraud的工作将程序逻辑方法与证明助手集成在一起,请参见此概述页面。