简化布尔公式而没有否定,只是和/或

时间:2010-11-09 23:22:47

标签: math logic boolean

我想预处理布尔公式   a和(a或b)和c

变得公正   a和c

从来没有任何否定,所以它应该是一个简单的问题,但是没有什么是真正明显的(除了折叠和 - 或 - 或 - 或 - 重复,排序)。我错过了一些完全明显的东西吗?

5 个答案:

答案 0 :(得分:1)

从你的例子来看,你一般都不清楚你想要什么。

您似乎希望尽可能使用absorption laws来简化公式:

A ∨ (A ∧ B) = A 

A ∧ (A ∨ B) = A 

在您的示例中,您只需要应用第二次吸收法。

答案 1 :(得分:1)

我在CSTheory.stackexchange上有一个相关的问题,负面回答here

您所描述的问题是难以驾驭的。因此,除非P = NP,否则您将找不到有效的算法。

转换为CNF或DNF将导致某些公式的指数性爆炸。

答案 2 :(得分:0)

A(A + B)C

AAC + ABC

AC + ABC

A1C + ABC

A(1个+ B)C

A(1)C

AC

那是你在找什么?

答案 3 :(得分:0)

使用K-map

基本上,您将创建公式的可能结果的内存图。解析它,并以给定所有变量的任意输入的方式存储它,您可以得到结果。然后创建一个N维数组(其中N是变量数)并尝试每个组合,将结果存储在数组中。

完成此操作后,请按照上文中的步骤提出简化表达式。

请注意,这适用于包含所有类型布尔运算符的表达式,包括不包含。

答案 4 :(得分:0)

考虑转换为CNFDNF

简化“底层”很简单 - 只需删除重复项即可。简化下一级别几乎同样容易 - 删除子集或超集。