language agnostic - a &&(a || b)简化成什么?




language-agnostic boolean-logic (6)

重言式表

 | 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. 根据分配原则 !a && (a || b)等价于(!a && a) || (!a && b) (!a && a) || (!a && b)
  2. 按照非矛盾律 (!a && a)相当于false
  3. 把它放在一起:

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

我有点困惑!a&&(a||b) 。 如果我直接看它,并简单地解释它,看起来好像它是一样的

!a&&a or !a&&b

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

!a || a&&b

我真的不知道我是怎么想出来的,但是看起来更合乎逻辑,因为没有矛盾。 任何人都可以帮助我吗?


!a && (a || b)可以用一个二元真值表来考虑,

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

所以通过的唯一情况是

 (!a && b)

我们可以将德摩根的法律适用于此

 !(a || !b)

你可以像这样简化它(!a && b)因为在表达式中(!a && a || !a && b)条件!a && a总是假的


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


我建议你使用Wolfram alpha进行简化,有时可能会对表达式有所帮助。 这个特殊的表达式简化为!a && b

链接到WA: http ://www.wolframalpha.com/input/?i =% 21a%26%26%28a%7C%7Cb% 29


看起来它会简化到只是

!a && b

如果你打开括号,你会有

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

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





boolean-logic