Postscript后记
回顾一下
- '函数式编程':
- “声明式” 编程风格 (在不可变的数据构造上递归,而非在可变的数组或指针结构上循环)
- 高阶函数
- 多态
- '逻辑',软件工程的数学基础:
逻辑 微积分 --------- ~ ------------------ 软件工程 机械工程/土木工程
- 归纳定义的集合和关系
- 归纳证明
- 证明对象
- 'Coq',一个强有力的证明辅助工具
- 函数式核心语言
- 核心策略
- 自动化
- '编程语言基础'
- 记法和定义技术,用于精确地描述
- 抽象语法
- 操作语义
- 大步风格
- 小步风格
- 类型系统
- 程序等价关系
- 霍尔逻辑
- 类型系统的基础元理论
- 可进性与保型性
- 可进性与保型性
- 子类型的理论
- 记法和定义技术,用于精确地描述
四处瞧瞧
CompCert
'CompCert' 是一个经过了完全形式化验证的 ISO C90 / ANSI C 优化编译器, 可以为 x86,ARM 和 PowerPC 处理器生成代码。CompCert 完全使用 Gallina 编写,并使用 Coq 的提取机制生成高效的 OCaml 程序。- 关于 CompCert 测试结果的惊人事实是其他编译器中端存在的缺陷在 CompCert 中都不存在。在 2011 年早期,仍在开发中的 CompCert 是我们测试中唯一 一个 CSmith 找不到错误代码缺陷的编译器。这并不是因为我们不够努力:我们花费了 六个 CPU-年来做这件事。 在证明框架中,安全检查是显式的和机器验证过的,而坚若磐石的 CompCert 强有力地支持了在这样一个证明框架中开发编译器优化会为用户带来切实的好处。
seL4
'seL4' 是一个完全形式化验证的微内核,被认为是世界上第一个对实现的正确性和 安全保证提供了端对端证明的操作系统内核。它使用 C 和 ARM 汇编实现,并使用 Isabelle 描述和验证规范。其实现开放了源代码。CertiKOS
'CertiKOS' 是一个设计清晰和完全形式化验证的虚拟机器监视器(Hypervisor), 使用 CompCert C 开发并经过 Coq 验证。Ironclad
'Ironclad 应用' 是一系列完全形式化验证的 Web 应用,包括一个用于安全地签署 声明的“公正人”程序,一个密码散列程序,一个多用户的可信计数器,以及一个差分隐私 数据库。Verdi
'Verdi' 是一个用于形式化验证分布式系统的框架。DeepSpec
'深度规范的科学(The Science of Deep Specification)' 是一项 NSF 资助的“远征”研究项目(2016 至 2020 年),目标是为软硬件系统提供完整的功能 正确性规范和验证。项目同时赞助了讲习班和暑期学校。- 网站:https://deepspec.org/
- 概况介绍:
REMS
'REMS' 是一个欧洲项目,关注对主流系统使用严谨的工程方法(Rigorous Engineering of Mainstream Systems)。它为广泛使用的重要接口、协议和 API 提供了精细的形式化规格,这些系统包括 C 语言, ELF 链接器的格式, ARM、Power、MIPS、CHERI 和 RISC-V 指令集,ARM 和 Power 处理器的弱内存模型, 以及 POSIX 文件系统。其他
- Vellvm(LLVM 优化过程的形式化规范和验证)
- Zach Tatlock 的形式化可信浏览器
- Tobias Nipkow 对大部分 Java 的形式化工作
- CakeML 形式化验证的 ML 编译器
- Greg Morrisett 对 x86 指令集进行的形式化规范,以及 RockSalt 软件错误分离(Software Fault Isolation)工具(可以称作是一个更快和更安全的 Google Native Client)
- Ur/Web 一个用于在 Coq 中嵌入形式化验证的 Web 应用的程序语言
- Princeton 大学开发的形式化验证软件工具链(Verified Software Toolchain)
继续前行
- 本书包含了一些可选章节,其中讲述的内容或许会对你有用。请查看
目录 和 章节依赖图
了解更多。
- 进一步学习霍尔逻辑和程序验证:
- The Formal Semantics of Programming Languages: An Introduction, by Glynn Winskel [Winskel 1993].
- Many practical verification tools, e.g. Microsoft's
Boogie system, Java Extended Static Checking, etc.
- 进一步学习编程语言基础:
- Concrete Semantics with Isabelle/HOL, by Tobias Nipkow and Gerwin Klein [Nipkow 2014]
- Types and Programming Languages, by Benjamin C. Pierce [Pierce 2002].
- Practical Foundations for Programming Languages, by Robert Harper [Harper 2016].
- Foundations for Programming Languages, by John
C. Mitchell [Mitchell 1996].
- Iron Lambda (http://iron.ouroborus.net/) 是一个 Coq 程序库,
提供了更多复杂函数式语言的形式化。它填补了本课程和当下的研究论文之间的缺口。
这个程序库为多种 STLC 和多态 lambda-演算(System F)的变种提供了至少可进性
和保型性定理。
- 最后,关于编程语言和形式化验证的学术会议有:
- Principles of Programming Langauges (POPL)
- Programming Language Design and Implementation (PLDI)
- International Conference on Functional Programming (ICFP)
- Computer Aided Verification (CAV)
- Interactive Theorem Proving (ITP)
- Certified Programs and Proofs (CPP)
- SPLASH/OOPSLA conferences
- Principles in Practice workshop (PiP)
- CoqPL workshop
(* 2022-03-14 05:28:27 (UTC+00) *)