본문으로 건너뛰기Skip to content 1:1 문의 — [email protected]로 이메일 작성 Contact us — email [email protected]

计算布尔代数:香农展开与 SAT

香农展开如何把布尔函数分解为 2:1 MUX?本文从余因子(cofactor)、布尔差分和变量量化出发,解释 SAT 搜索与 EDA 优化中的分支、剪枝和变量消去。

计算布尔代数:香农展开与 SAT
Photo by Markus Spiske / Unsplash

TL;DR

  • Shannon expansion是将Boolean function分解为一个MUX的公式。
  • cofactor是“将一个变量固定为0/1后的新function”,因此该变量会在cofactor中消失。
  • Boolean difference是用于计算“翻转输入x时输出是否改变?”的sensitivity function。
  • ∃(existential) quantification是将“只要存在任意一个解即可”写成公式的运算,这正是SAT的核心。
  • Optimization通常更难:SAT找到一个满足解即可结束,而Optimization还需要比较候选解,并证明不存在更优解;边界估计与剪枝可以减少搜索。
将 3-SAT 归约为团问题的示意图:三个红色区域分别表示子句,黑线连接不同子句中不冲突的文字,绿色节点组成 3-团,对应 x=false、y=true 的满足赋值。

1. 问题意识:Karnaugh map失效的时刻

1.1 如果是40 variables,Karnaugh map就不够用了

  • 2^40规模 → “即使能画出来,也无法使用”
  • 结论:必须不再手工处理,而是通过data structure + operator处理Boolean function。

1.2 本文的3个目标

  • decomposition(拆分)
  • computation(程序可处理的表示)
  • application(在EDA中直接使用的运算)

2. Shannon cofactor:“变量固定”所产生的新function

2.1 定义:cofactor是substitution

  • 对于f的输入变量x
    • positive cofactor: ( f_{x} = f(x=1) )
    • negative cofactor: ( f_{~{x}} = f(x=0) )

2.2 核心要点:“它是新function,且x会消失”

  • 既然将x固定为0/1,结果中就不可能再出现x。
  • 若忽略这一点,后续的Boolean difference / quantification都会失去基础。

2.3 (简短示例)

  • 例:( f(x,y,z) = xy+x~z+~xyz )
    • ( f(x=1) = y + \bar{z} )(可简化)
    • ( f(x=0) = yz )

3. Shannon expansion:将“Boolean function = MUX”看清后,问题就解决了

3.1 定理(Shannon expansion theorem)

对于任意f和任意变量x:
f=x⋅f(x=1)+~x⋅f(x=0)

3.2 硬件视角:Shannon expansion = 2:1 MUX

  • select = x
  • data1 = f(x=1)
  • data0 = f(x=0)
  • output就是f

📌 这里形成“分支(branch)”的直觉:

  • 沿x=0分支向下时,只需看f(x=0)
  • 沿x=1分支向下时,只需看f(x=1)

3.3 MUX tree = recursive decomposition

  • 一个变量 → 2个分支
  • 两个变量 → 4个分支
  • k个变量 → 2^k个分支
  • 这看起来像“枚举”,但EDA会在这里进行pruning。(后文说明)
[Figure 1] 将Shannon expansion绘制为2:1 MUX的图
[Figure 2] 展示2-variable expansion生成4个leaf的MUX tree图

4. cofactor中“运算可交换”:计算变简单的原因

4.1 非常重要的性质

  • complement:
    • (~f)x=~(𝑓𝑥)
  • AND/OR/XOR同样可以“先cofactor → 后运算”
    • (𝑓∧𝑔)𝑥=𝑓𝑥∧𝑔𝑥

也就是说,不是先构造大表达式再进行cofactor,
而是先进行cofactor缩小表达式,然后再计算。


5. Boolean difference:将“敏感度(sensitivity)”写成公式

5.1 定义

∂f/∂x​=f(x=1)⊕f(x=0)

5.2 含义:“翻转x时输出改变的条件”

  • XOR表示“不同则为1”
  • 因此,在Boolean difference为1的输入模式下:
    • 将x从0→1或1→0时,f必然改变

5.3 通过示例建立直觉

  • inverter: f=~x
    • 𝑓(1)=0,𝑓(0)=1⇒∂𝑓/∂𝑥=1
    • 始终敏感
  • AND: ( f=xy )
    • 𝑓(1)=𝑦,𝑓(0)=0⇒∂𝑓/∂𝑥=𝑦
    • 仅当y=1时,x的变化才影响输出
  • OR: ( f=x+y )
    • 𝑓(1)=1, 𝑓(0)=𝑦 ⇒ ∂𝑓/∂𝑥=~𝑦
    • 仅当y=0时才有影响

5.4 “x对F没有逻辑影响?”的准确解释

  • 这并非指“始终没有影响”。
  • 而是指在特定输入条件下可能没有影响。
  • Boolean difference恰好能提取出该条件。
[Figure 3] 展示AND/OR中Boolean difference为何分别为y / ȳ的门电路图

6. Quantification:以“消去变量”为目的的运算

6.1 existential quantification (∃):“只要有任意一个解即可”

∃xf=f(x=0)∨f(x=1)
  • 含义:当其他输入固定时,能否恰当选择x使f=1?

6.2 universal quantification (∀):“必须在所有情况下成立”

∀xf=f(x=0)∧f(x=1)
  • 含义:无论x为何值,f是否始终为1?

6.3 你所说的句子与1:1对应

“无需全部枚举,只要找到任意一个解即可”

这正是:

∃ quantification
  • 以及SAT的核心形式:∃X:F(X)=1

7. SAT vs Optimization:为什么“优化”更困难

SAT 求解示意图:公式 (x∨y)∧(x∨¬y)∧(y∨z)∧¬x 输入求解器,搜索树遍历 x、y、z 分支后返回 UNSAT 及不可满足性证明。
Amazon

7.1 SAT:“找到一个即可结束”

  • 只要存在满足条件的解即可结束
  • 分支搜索中只要有一个满足条件,即可终止(pruning)

7.2 Optimization:“比较才是本质”

  • 若要确认当前解是否最优,通常还需要搜索其他候选分支
    • 边界估计与剪枝可以提前排除部分分支
  • 因此,EDA优化在结构上更困难(可引出NP-hard的讨论)
[Figure 4] 展示SAT在第一个满足条件时stop、Optimization则继续搜索的树图

自然衔接至下一讲:Tautology与URP

8.1 tautology:“是否始终为1?”

  • ​f≡1?
  • 核心思想:f是tautology ⇔ f(x=0)和f(x=1)也都是tautology

8.2 URP的直觉

  • 通过Shannon cofactor进行分解(分支)
  • 若满足unate等条件,则可在中途立即终止(强pruning)
  • 最终它不是“枚举”,而是“快速丢弃应丢弃项的算法”

本文必须掌握的5项

  1. cofactor是substitution,且相应变量会在结果function中消失
  2. Shannon expansion既是公式,同时也是2:1 MUX模型
  3. Boolean difference是给出“x变化影响输出的条件”的function
  4. ∃ quantification通过OR实现“只要有一个即可”
  5. SAT有一个即可结束,Optimization因比较而耗时更长

Discussion

VLSI KOREA BRIEFING

반도체를 읽는 안목, 메일함으로.

엔지니어의 시각과 산업의 흐름을 함께. 무료로 구독하세요.

이미 구독 중인가요? 로그인