什么!a&&(a || b)简化为?

时间:2014-12-20 00:17:17

标签: language-agnostic boolean-logic

我对!a&&(a||b)感到有些困惑。如果我直接看它并简单地解释它,它看起来好像和

一样
!a&&a or !a&&b

但这似乎有点奇怪,因为a不可能是真的和假的,只有后者是真的才会成真。我也像这样解释它

!a || a&&b

我真的不知道我是如何想出这个的,但它看起来更合乎逻辑,因为没有矛盾。有人可以帮我吗?

9 个答案:

答案 0 :(得分:43)

重言式表

 | a | b | !a | a || b |  !a && (a || b)  | !a && b | [ !a && (a || b) ] <=> [!a && b]    |
 |---|---|----|--------|------------------|---------|-------------------------------------|
 | 0 | 0 |  1 |   0    |      0           |    0    |                   1                 |
 | 0 | 1 |  1 |   1    |      1           |    1    |                   1                 |
 | 1 | 0 |  0 |   1    |      0           |    0    |                   1                 |
 | 1 | 1 |  0 |   1    |      0           |    0    |                   1                 |

“校样”

  1. 根据Principle of Distributivity声明!a && (a || b)相当于(!a && a) || (!a && b)
  2. 根据Law of Non-Contradiction (!a && a)相当于false
  3. 全部放在一起:

    !a && (a || b) <=> (!a && a) || (!a && b) <=> false || (!a && b) <=> !a && b

答案 1 :(得分:12)

您可以像(!a && b)这样简化它,因为在表达式(!a && a || !a && b)中,条件!a && a始终为false

答案 2 :(得分:11)

In Java与大多数 1 语言一样,一元!的优先级高于&&

所以!a&&(a||b) (!a)&&(a||b)

您可以使用Karnaugh map

表示该表达式的真值表
      | a = 0 | a = 1 |
------+-------+-------+
b = 0 |   0   |   0   |
------+-------+-------+
b = 1 |   1   |   0   |
------+-------+-------+

现在,很容易看到唯一真实的情况是(!a) && b

所以!a&&(a||b) !a && b


1 见下面的评论。

答案 3 :(得分:6)

它只是意味着!a && b,必须是假的,b必须是真的,因为它是真的

答案 4 :(得分:3)

(!a && a) || (!a && b)是对此的正确扩展(使用分配法)。

这可以简化为!a && b

布尔代数的分布律是:

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

答案 5 :(得分:3)

!a && (a || b)可以考虑二进制真值表,

a       b       out
true    true    false
false   true    true
false   false   false
true    false   false

所以通过的唯一情况是

 (!a && b)

我们可以将DeMorgan的法律适用于此并获得

 !(a || !b)

答案 6 :(得分:3)

我建议您使用Wolfram alpha进行简化,有时候它可以对您的表达式做些什么。此特定表达式简化为!a && b

指向西澳大利亚州的链接:http://www.wolframalpha.com/input/?i=%21a%26%26%28a%7C%7Cb%29

答案 7 :(得分:2)

看起来它只会简化为

!a && b

如果你打开括号

(!a && a) || (!a && b)

第一部分(!a&amp;&amp; a)总是假的,所以你可以省略它。

答案 8 :(得分:2)

我假设&#34;或&#34;具有较低的优先级(通常布尔逻辑&amp;&amp;或||是相等的,因此这将是不明确的

  !a&&a or !a&&b
= (!a&&a) || (!a && b)
= false || (!a && b) 
      // because X and not X will never be true for any combination of X
= (!a && b)
      // because false || X == X for any value of X
= !a && b
      // removed parens