图片来源:福赛集团
形式化方法是用于设计、验证和规范软件和硬件问题的数学技术。这些本质上是编程语言理论研究的一个子集,用于研究复杂的计算机科学问题。
形式化方法分析基本上涉及以下步骤:
Formal Specification
Formal Proofs
Model Checking
Abstraction
形式证明开发和模型检查主要使用交互式定理证明器(通常称为证明助手)来完成。抽象是在模型各部分之间创建结构上合理的关系。
这是我尝试整理的一系列有用的阅读材料、视频和工具,以及该领域即将面临的一些挑战。
我试图让内容更加关注当前的研究和工业应用。寻找纯粹学术收藏的人必须参考《正式教育方法》——杰里米·阿维加德 (Jeremy Avigad)。
希望读者具备类型理论的一些基本知识。更多学术见解可以在这里找到 learn-tt。
软件基础:我强烈建议将此作为深入研究该领域的起始材料。这本书对于构建基本概念非常有帮助,并且是对该领域的非常完善的介绍。整个过程中提供了精美插图的概念和练习示例,使交互式定理证明学习变得有趣。
FRAP - Adam Chlipala :一本帮助您理解和推理程序形式正确性的书。命令式语言( C )启发的数据结构和算法示例极大地帮助我们开始思考它们的形式验证。
Certified Programming with Dependent Types - Adam Chlipala :使用 coq 学习定理证明的最佳theoretical books
之一。
形式验证 - Jacques Fleuriot :这门课程涉及使用一些更发达的工具(如 SAT 和 SMT 求解器)进行定理证明。
抽象解释 - Patrick Cousot有关抽象解释理论的最佳可用材料。它给出了程序突变的完整而纯粹的数学分析。程序行为作为不同抽象数学结构之间不断修改的关系得到了解释和证明!
逻辑与证明 - CMU 和精益简介:这是在 CMU 设计的课程,也可作为精益定理证明的入门材料
如果您觉得需要更多理论见解,请参阅上面的注释。
coq:最流行和最广泛使用的定理证明器。它支持许多功能,包括 ML 提取、项目打包(项目和 Makefile 创建)。有大量使用 coq 进行形式化的how-to
材料。任何人都可能会发现 Coq 中的 100 个定理非常有趣。
精益:微软研究院的一个相当新的定理证明器。有一个很好的交互式教程,很容易上手。
PRISM模型检查器:它是由牛津大学开发的模型检查器。
Nuprl:康奈尔大学证明细化逻辑项目下的定理证明器。
Agda:相当成熟的证明助手。具有与 Coq 类似的功能。经过一些 coq 经验后很容易学习。
伊莎贝尔:这是一个古老的定理证明者。具有很好的核心逻辑实现,但缺乏其他与用户体验相关的功能。
VCC:Microsoft 的并发 C 程序的机械验证器。
TLA+:用于建模语言和系统的高级语言(尤其是并发和分布式)。
Z3
CVC4
数学SAT5
SMT国际刑警组织
公主
证明助手对程序逻辑有非常强大的实现。有时仅通过使用它们来进行复杂的证明在战术上可能是不可能的。因此,当前的研究将这种基于强逻辑的推理原理与强大的 SMT 和 SMC 求解器相结合,以简化证明开发。下面是一些示例:
F星(F*)
SMTCoq
大多数项目或多或少都是各自定理证明器或 SAT/SMT/SMC/求解器的开发,因此可以在那里查找。这些是积极开发的其他一些项目。
DeepSpec 是一个伞式项目,专注于构建经过验证的软件系统。正在积极开展以下主要子项目:
ikos 是一个基于抽象解释理论的可靠、无错误的C 编译器。
Project Everest:这是一个旨在创建安全且经过验证的 HTTPS 生态系统的研究项目。
CertiCrypt:这是一个专注于使用 coq 证明助手对公钥加密进行建模的项目。
Iris:Iris 是一个在证明助手 Coq 中实现和验证的高阶并发分离逻辑框架。
VeriDeep - 深度神经网络的安全验证
VeHICal:项目重点是为人类网络物理系统的接口和控制的经过验证的协同设计奠定基础。
FastSMT - 通过学习优化公式数据集性能来增强 SMT 求解器的工具。它由苏黎世联邦理工学院 SRI 实验室开发,基于 Z3 SMT 求解器。
fm4cps - 信息物理系统的形式化方法,INRIA 和华东师范大学上海分校共同努力。
区块链的形式化方法:这是有史以来第一个专注于在区块链技术中使用形式化方法的研讨会。日期为2019 年 10 月 11 日。
CertiK :这是一家专注于使用正式方法使区块链可验证安全的初创公司。
FLoC 2018-机器学习峰会遇见形式化方法
验证机器学习 - Radboud University Nijmegen :关于在机器学习中使用验证方法的大学课程。
形式化方法与机器学习的结合 - 亚琛工业大学:2018 年关于使用形式化方法实现可验证安全机器学习进展的研讨会。
读物
视频
VeHICal :项目重点是为人类网络物理系统的接口和控制的经过验证的协同设计奠定基础。
fm4cps - 信息物理系统的形式化方法,INRIA 和华东师范大学上海分校共同努力。
这特别涉及改进现有编程语言的某些属性(例如并行性和并发性)。关于这一点可以很容易地查到很多,因为毕竟这是研究 PL 理论的唯一最重要的原因。这里列出的所有会议 ACM SIGPLAN 都包含有关编程语言开发的大部分研究论文,请查看它们。
欢迎任何建议。如果您愿意,请考虑提交拉取请求!