认证计算验证:从代码到数学证明
在软件开发和数学验证领域,确保代码的正确性以及数学证明的严谨性至关重要。本文将介绍如何对认证计算进行验证,特别是以图的最大基数匹配问题为例,详细阐述使用 VCC 和 Isabelle/HOL 工具进行验证的过程。
1. 验证工具选择
LEDA 是用 C++ 编写的,为了验证与原始实现尽可能接近的代码,我们选择了 VCC 和 Isabelle/HOL 这两个工具。
- VCC :是一个用于完整 C 代码的断言式一阶演绎代码验证器。它成熟且提供了丰富的断言语言,适合我们的需求。在 Verisoft XT 项目中,VCC 成功验证了数万个非平凡的 C 代码。它使用幽灵状态和代码来克服一阶推理的限制,提供了幽灵对象、幽灵字段等,确保信息不会从幽灵状态流向非幽灵状态,并且所有幽灵代码都会终止。
- Isabelle/HOL :是一个基于 Church 简单类型 lambda 演算的经典高阶逻辑交互式定理证明器。它内部基于推理内核构建,保证了正确性。它拥有丰富的已形式化理论,证明风格接近数学教科书,用户可以结构证明,系统会通过自动证明方法填补空白。
2. 验证工作流程
验证检查器的工作流程如下:
graph LR
A[检查器代码(C 语言)] --> B[使用 VCC 注释函数和数据结构]
B --> C[抽象正确性:抽象数据结构和属性]
C --> D[导出到 Isabelle/HOL:制定整体正确性定理]
超级会员免费看
订阅专栏 解锁全文
1430

被折叠的 条评论
为什么被折叠?



