如何将配方转换为CNF?

时间:2015-07-21 02:05:49

标签: formula boolean-logic conjunctive-normal-form

我知道将公式转换为CNF的4条规则,但我不太清楚如何将它们应用于此公式 ((x v y)^¬z) - > w

有人能帮我一把,还有一点解释?谢谢!

1 个答案:

答案 0 :(得分:3)

将表达式转换为CNF 的配方 将公式转换为 CNF 的一种方法是:

  1. 写一个truth table(只有条款与公式评估为假的相关)
  2. truth table的每个术语中反转所有文字
  3. 将结果条款作为CNF条款
  4. 这个食谱可以说如下:
    除非整体表达为假,否则所有条款都不得为假。因此,每个子句代表反转表达式的最小项。为了确保这个术语是错误的,没有一个倒置的文字是真的。

    对于n个输入变量,真值表有2 ^ n个项。因此,这种方法仅适用于小表达式。

    演示样本公式的步骤

      

    ((x或y)而不是z)暗示w

    真值表(F =表达式值):

    wxyz|F
    ----+-
    0000|1
    1000|1
    0100|0
    1100|1
    0010|0
    1010|1
    0110|0
    1110|1
    0001|1
    1001|1
    0101|1
    1101|1
    0011|1
    1011|1
    0111|1
    1111|1
    ----+-
    

    虚假条款(F = 0):

    wxyz|F
    ----+-
    0100|0
    0010|0
    0110|0
    ----+-
    

    文字倒置和输出栏省略:

    wxyz
    ----
    1011
    1101
    1001
    ----
    

    产生的CNF条款:

      

    (w或!x或y或z)和(w或x或!y或z)和(w或!x或!y或z)

    通过合并子句最小化生成的CNF子句:

      

    (w或!x或z)和(w或!y或z)

    如果有疑问,可以提问Wolfram|Alpha

    Karnaugh map开始,很清楚三个错误术语如何合并为两个子句:

                 wx
           00  01  11  10
          +---+---+---+---+
       00 | 1 | 0 | 1 | 1 |
          +---+---+---+---+
       01 | 1 | 1 | 1 | 1 |
    yz    +---+---+---+---+
       11 | 1 | 1 | 1 | 1 |
          +---+---+---+---+
       10 | 0 | 0 | 1 | 1 |
          +---+---+---+---+