Prolog 正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

我想压缩正的命题公式 析取范式(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) & 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。这个问题被称为。这是因式分解的一种形式。