【问题标题】:Equality of two boolean expressions两个布尔表达式的相等性
【发布时间】:2015-03-18 04:33:30
【问题描述】:

我有两个布尔表达式:

¬aΛ¬b V ¬aΛ¬c V aΛ¬bΛ¬c #1

¬aΛ¬b V ¬aΛ¬c V ¬bΛ¬c #2

我知道它们是相同的,因为它们的真值表是相同的。我的问题是,我怎样才能使它们在表达上相等。

您可能会注意到它们之间的唯一区别是 #1 在它的最后一个 OR 术语中有一个额外的“a”。各种试图去除多余“a”的因式分解方法均未成功。

【问题讨论】:

  • 为了比较它们,您首先需要通过消除其中的常用术语来简化它们。例如,您可以消除 ¬aΛ¬b V ¬aΛ¬c 并且只需要 aΛ¬bΛ¬c 和 ¬bΛ¬c 进行比较。它减少了很多时间。
  • 我对我之前提出的论点添加了更正式的解释,看看你的想法。

标签: logic boolean-logic boolean-expression boolean-operations boolean-algebra


【解决方案1】:

我不知道你所说的“表达方式”到底是什么意思,但是如果你根据 a 是真还是假来分解它们,就会很容易看出。

如果 a 为真(前两项在 Eq1 和 Eq2 中均为假):
Eq1 => ~b & ~c
Eq2 => ~b & ~c

如果 a 为假:
Eq1 => ~b | ~c
Eq2 => ~b | ~c | (~b & ~c) == Eq1

编辑: 您可以使用布尔标识更正式地提出同样的论点:

(~a & ~b | ~a & ~c | ~b & ~c) == ((~a & ~b) | (~a & ~c) | (~b & ~c)) & (a | ~a)

因为(a | ~a) == 1x & 1 = x

然后使用&| 上的分布:

== (((~a & ~b) | (~a & ~c) | (~b & ~c)) & a) | (((~a & ~b) | (~a & ~c) | (~b & ~c)) & ~a)

现在您在主要的 | 两侧都有每个“案例”作为附加事实。再次应用分发会将这个事实推到内部案例中,并最终做出与我在上面所做的相同的取消。只看左侧的第一个分布:

((~a & ~b) | x) & a) == (a & ~a & b) | (a & x) == 0 | (a & x) == a & x

其中 x 是另外两个 or 表达式。遵循此策略将为您提供与上述相同的答案。如果你卡住了,我可以带你走得更远,但你应该可以从这里走。

【讨论】:

  • 您可以将其视为以 a 为条件是正确的,但我所说的“表达方式”的意思是我正在寻求应用一系列身份/转换(例如 DeMorgans ,分配,交际等)将#1变成#2
【解决方案2】:

一般来说,您需要将表达式转换为disjunctive normal form。为此,您对基本连词进行析取:为真值表中的每个 1 写出所有变量或其反转的对应连词,然后对所有这些连词进行析取。合取范式也存在,但使用较少。

对于许多变量的表达式,析取范式变得非常大。在这种情况下,您可能想要使用最小化算法(例如Quine-McCluskey algorithm),但这非常复杂且计算量很大(最小化问题是NP-hard,并且这些算法的运行时间通常比仅计算真值表更糟糕)。

如果您只需要一个通用表示来比较相同变量的任何布尔表达式,您也可以比较这些表达式的真值表:

  • 按字典顺序表示每个可能的变量组合的表达式值字符串(零或一),
  • 或作为表达式为真的真值表行数的排序列表。行按变量的字典顺序编号。

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2021-05-14
    • 2014-07-06
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多