基于约束 Horn 子句的程序验证
1. 基于 CHC 方法的程序验证工具
基于约束 Horn 子句(CHC)方法,存在多个有效的程序验证工具,具体如下:
| 工具名称 | 适用语言 |
| ---- | ---- |
| SeaHorn | C/C++ |
| JayHorn | Java |
| HornDroid | Android 信息流验证 |
| RustHorn | Rust |
| SmartACE、Solidity Compiler Model Checker | Solidity |
将程序验证(和模型检查)简化为一阶逻辑(FOL)可满足性的思想已得到深入研究。例如,在程序验证中使用约束逻辑编程(CLP),或在指针分析中使用 Datalog。独特之处在于将 SMT 求解器应用于决策过程,并将模型检查和程序验证社区开发的技术提升到 CHC 公式可满足性的统一环境中。
2. 约束 Horn 子句逻辑
2.1 CHC 定义
约束 Horn 子句(CHC)逻辑是 FOL 的一个片段。假设 Σ 是某个固定的 FOL 签名,A 是基于 Σ 的 FOL 理论。一个约束 Horn 子句是如下形式的 FOL 句子:
[
\forall V \cdot (\phi \land p_1(X_1) \land \cdots \land p_k(X_k) \Rightarrow h(X))
]
其中,V 是句子主体中所有自由变量的集合,({p_i} {i = 1}^k) 和 h 是未解释的谓词符号,({X_i}
超级会员免费看
订阅专栏 解锁全文
28

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



