在形式化验证、数字系统的设计和验证中,许多任务都涉及大型命题逻辑公式的运算。二元决策图(BDD)已经成为许多应用的首选表示方法。1986年,Bryant发表论文指出归约有序的二元决策图是布尔函数的规范表示。
几个基本概念:
布尔函数(Boolean function)描述如何基于对布尔输入的某种逻辑计算确定布尔值输出,它们在复杂性理论的问题和数字计算机的芯片设计中扮演基础角色。比如下面的逻辑电路:
可以使用布尔函数:来表示。
有 n 个变量的布尔函数 F 为:
函数有个不同的可能输入,输出为一个True或False的布尔值,我们使用1或0来表示。
我们定义新的具有 n-1 个变量的布尔函数:
和
'称为 F 的余因子(cofactor)。
为正因子,
为否定因子。
香农展开(Shannon's expansion),或称香农分解(Shannon decomposition)是对布尔函数的一种变换方式。它可以将任意布尔函数表达为其中任何一个变量乘以一个子函数,加上这个变量的反变量乘以另一个子函数,即:
INF范式(If-then-else Normal Form – INF)
If-then-else运算符表示为,则INF运算符定义为:
即,如果x值为1,则结果为y0,否则结果为y1。
所有逻辑运算符都可以仅使用 if-then-else 运算符和常量0和1表达。此外,if-then-else运算可以这样实现,即所有的测试都只在(未取反的)变量上进行,变量不会出现在其他地方。比如,¬x就是x→0,1。这样,if-then-else算子产生了一种新的范式 – INF范式(If-then-else Normal Form – INF)。
INF范式是完全由 if-then-else 运算符和常量构建的布尔表达式,因此仅需要对变量执行测试。
用t[0/x]表示将 t 中的变量 x 赋值为 0 得到的布尔表达式,得到以下等式:
这个就是表达式 t 对变量 x 的香农展开。这个简单的方程有很多有用的应用。第一个是可以从任何表达式 t 生成一个 INF。 如果 t