【问题标题】:How to convert a propositional formula to conjunctive normal form (CNF)?如何将命题公式转换为合取范式(CNF)?
【发布时间】:2009-03-17 17:31:02
【问题描述】:

如何将此方程转换为 CNF?

¬((p ∨ ¬Q) ⊃ R) ⊃ (P ∧ R))

【问题讨论】:

  • 其中一些符号是非标准的。 ⊃ 在布尔逻辑中应该是什么?
  • 我想问同样的问题
  • 我猜是'->'符号
  • 是的,我刚刚读到你说得对,乔丹

标签: math artificial-intelligence boolean-logic


【解决方案1】:

要将propositional formula 转换为conjunctive normal form,请执行以下两个步骤:

  1. 将否定推入公式,重复应用De Morgan's Law,直到所有否定仅适用于原子。您在negation normal form 中获得了一个公式。

    • ¬(p ∨ q)(¬p) ∧ (¬q)

    • ¬(p ∧ q)(¬p) ∨ (¬q)

  2. 重复应用distributive law,其中一个析取发生在一个连词上。一旦这不再可能,公式就在 CNF 中。

    • p ∨ (q ∧ r)(p ∨ q) ∧ (p ∨ r)

要获得析取范式的公式,只需在步骤 2 中应用 的分布即可。

注意

问题中使用的子集符号 () 只是逻辑蕴含/蕴含的另一种表示法,通常写为箭头 ()。

【讨论】:

    【解决方案2】:

    http://en.wikipedia.org/wiki/Conjunctive_normal_form

    将一阶逻辑转换为 CNF:

    1. 转换为否定范式。
      1. 消除影响:将 x → y 转换为 ¬ x ∨ y
      2. 向内移动 NOT。
    2. 标准化变量
    3. 对声明进行梳理
    4. 删除通用量词
    5. 在 OR 上分配 AND。

    (人工智能:现代 方法 [1995...] Russel 和 Norvig)

    【讨论】:

    • 给定的算法是针对谓词逻辑的,不是针对命题逻辑的。
    【解决方案3】:

    我可以建议这个吗?页面上有转化算法。

    Conjunctive Normal Form

    【讨论】:

    • 我会说它被称为算法有点高级。 “在 OR 上分配 AND”不足以描述该算法。
    • @jamie 这意味着应用分配律。这是一个非常准确的描述。
    • @ziggystar 那你是怎么做到的呢?很明显,您和其他任何对逻辑有任何理解的人都会发现这一步非常简单和明显,因为它需要 的搜索才能找到描述。顺便说一句,我找到的最终答案是谷歌上的付费答案。
    • @jamie 分配法是在德国数学五年级教授的(我刚刚查过)。我不认为有人在 SO 上问事情不知道。也许你没有理解答案中的短语。但是,如果您不理解我的重新表述(“应用分配律”) - 抱歉。
    【解决方案4】:

    我在 Java 中实现了一个小工具,可以将布尔表达式基本转换为 (C|D)NF。如果你有兴趣,你可能想看看https://github.com/julianthome/ctrans。该实现基于these lecture notes。更详细的描述可以在here 找到。任何反馈将不胜感激;-)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      相关资源
      最近更新 更多