在布尔逻辑中,析取范式(DNF)是逻辑公式的标准化(或规范化),它是合取子句的析取。作为规范形式,它在自动定理证明中有用。一个逻辑公式被认为是 DNF 的,当且仅当它是一个或多个文字的一个或多个合取的析取。同合取范式(CNF)一样,在 DNF 中的命题算子是与、或和非。非算子只能用做文字的一部分,这意味着它只能领先于命题变量。例如,下列公式都是 DNF:
:A \lor B
:A\!
:(A \land B) \lor C
:(A \land \neg B \land \neg C) \lor (\neg D \land E \land F)
但如下公式不是 DNF:
:\neg(A \lor B) NOT 是最外层的算子
:A \lor (B \land (C \lor D)) 一个 OR 嵌套在一个 AND 中
把公式转换成 DNF 要使用逻辑等价,比如双重否定除去、德·摩根定律和分配律。注意所有逻辑公式都可以转换成析取范式。但是,在某些情况下转换成 DNF 可能导致公式的指数性爆涨。例如,在 DNF 形式下,如下逻辑公式有 2n 个项:
:(X_1 \lor Y_1) \land (X_2 \lor Y_2) \land \dots \land (X_n \lor Y_n)
参见
- 合取范式
- 代数范式
- 霍恩子句
- 奎因-麦克拉斯基算法
评论 (0)