Prolog 正DNF的压缩
我想压缩正的命题公式 析取范式(DNF) 我现在只假设简单的DNF,没有否定 文字。相反的过程,解压可以很容易 定义对于仅由合取和析取构建的公式, 以下重写规则将生成DNF:Prolog 正DNF的压缩,prolog,boolean-logic,conjunctive-normal-form,Prolog,Boolean Logic,Conjunctive Normal Form,我想压缩正的命题公式 析取范式(DNF) 我现在只假设简单的DNF,没有否定 文字。相反的过程,解压可以很容易 定义对于仅由合取和析取构建的公式, 以下重写规则将生成DNF: A & (B v C) --> (A & B) v (A & C) (A v B) & C --> (A & C) v (B & C) 下面是一个解压缩示例: Example: Decompression Input: (p & (q v r) &a
A & (B v C) --> (A & B) v (A & C)
(A v B) & C --> (A & C) v (B & C)
下面是一个解压缩示例:
Example: Decompression
Input:
(p & (q v r) & s & (t v u)) v
w.
Output:
(p & q & s & t) v
(p & r & s & t) v
(p & q & s & u) v
(p & r & s & u) v
w.
Example: Compression (Good)
Input:
(p & q & s & t) v
(p & r & s & t) v
(p & q & s & u) v
(p & r & s & u) v
w.
Output:
(p & (q v r) & s & (t v u)) v
w.
现在我想知道是否有一些算法
它可以从DNF生成一个公式。
我已经研究过二进制决策图。这个
我的问题是它们不能结合
所有的分离都在路上
例如,二进制决策图的算法
使用共享时,仍会显示类似的分支
打印和/或引入新的介词变量,
这两件事都不可取:
Example: Compression (Bad)
Input:
(p & q & s & t) v
(p & r & s & t) v
(p & q & s & u) v
(p & r & s & u) v
w.
Output:
(p & ((q & s & (t v u)) v (r & s & (t v u)))) v
w.
- or -
Output:
(p & ((q & h) v (r & h))) & (h <-> s & (t v u))) v
w.
你会怎么想?首选Prolog实现
再见我想你需要的是一个系统的算法来计算两层布尔表达式的最小值(要么是输入变量的析取,要么是输入变量的析取) 常用的算法是和算法
这些算法确实适用于否定变量。在任何情况下,至少如果您的输入是析取范式(DNF),并且没有出现求反变量,那么表示为输入变量的析取的输出也不会有求反变量)。听起来很有趣。你说的两个层次是什么意思?我并没有将结果限制为&和v的简单交替,它还可以更深入。也不确定Quine–McCluskey是否解决了我的问题,因为它使用了表示否定文字的符号A'。但是我不会有任何负面的文字,所以主要的问题不是应用v A'=1,或者这个方向的东西。对于这个问题,你可以假设一个模拟的DNF作为输入!然后寻找既不是DNF也不是CNF,而是更小的东西作为输出。这就是提出的问题。是的,卡诺或奎因·麦克罗斯基会给出这样的答案。如果您的输入没有否定逻辑,那么输出也不会。但是我需要一个算法来进一步按摩DNF。问题不是最小化DNF。但是把它变成一个更小的非DNF。这个问题被称为。这是因式分解的一种形式。