基于单子解释验证二元决策图(BDD)算法
1. 程序概述
在逻辑计算领域,有三个关键程序:Apply、Build 和 TautChecker。Apply 程序被 Build 程序调用,用于根据给定的布尔表达式生成表示布尔函数的节点。Build 程序通过对布尔表达式的结构进行原始递归定义。而 TautChecker 程序则负责初始化状态,使用输入的布尔表达式调用 Build 程序,并返回一个布尔值。当且仅当 Build 程序返回的节点是 TrueNode 时,TautChecker 返回 True。
下面是这三个程序的工作流程:
graph LR
A[布尔表达式] --> B[Build程序]
B --> C{Build返回节点}
C -->|节点是TrueNode| D(True)
C -->|节点不是TrueNode| E(False)
B -->|调用| F[Apply程序]
F -->|生成节点| B
2. 单子解释
Floyd - Hoare 逻辑的变体和扩展是验证命令式程序最常用的框架。但由于程序的复杂性,我们采用了一种更灵活的方法,即按照单子解释器的风格,将 BDD 程序建模为高阶逻辑中的函数。
一般来说,单子解释器将输入类型为 A、输出类型为 B 的源程序转换为目标函数式语言中类型为 A ⇒M B 的函数,其中类型构造器 M 是一个合适的单子,它封装了源语言使用的计算概念。不同的源语言通过不同的单子进行解释。我们的目标语言是 Isabell
超级会员免费看
订阅专栏 解锁全文

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



