布尔否定

Boolean negation

我的一个考题是:

! ( ! ( a != b)  &&  ( b > 7 ) )

选项:

a) (a != b) || (b < 7)
b) (a != b) || (b <= 7)
c) (a == b) || (b <= 7)
d) (a != b) && (b <= 7)
e) (a == b) && (b > 7)

一开始我以为是D。这是不正确的,我知道为什么了。我不明白逻辑否定运算符如何反转 && 和大于 than/less。我相信我已经将范围缩小到前两个。是否有任何实例 > 会更改为 <= ?

答案应该是B。这是因为先求(a != b)旁边的否定,然后你把外面的否定分配给整个命题。

根据德摩根定律,&& 将切换为 ||。同样,!= 变为 ==,> 变为 <=.

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

Is there any instance > would change to <= ?

答:每次都否定。

考虑 x > 1。对此的否定显然是x <= 1。如果您只是将其否定为 x < 1 那么这两种情况都不会涵盖 x == 1 情况。


也就是说,给定的布尔值 ! ( ! ( a != b) && ( b > 7 ) ) 可以分解如下:

  1. 给定:

    ! ( !(a != b) && (b > 7))

  2. 否定a != b:

    ! ((a == b) && (b > 7))

  3. 分发 !:

    !(a == b) || !(b > 7)

  4. 否定a==b:

    (a != b) || !(b > 7)

  5. 否定b>7:

    (a != b) || (b <= 7)

因此,答案是 B。

! ( ! ( a != b)  &&  ( b > 7 ) )

= ! ( (a = b) && (b > 7))

= (a != b) || (b <= 7)

答案是 B。 理解这一点: ! ( !( a != b) && ( b > 7 ) )

让我们把它分成几部分。 部分虚拟:(a!=b) 第 X 部分:!dummy Y 部分:(b>7)

现在 !X = dummy 的双重否定 => dummy => (a!=b)

!Y = !(b>7) => b 不应大于 7 => b 应小于或等于 7 => (b<=7)

现在剩下的问题是 && 如何变成 ||

所以原来的问题是:!( X && Y ) => 不应该是 (X and Y) => 它应该是 X 的负数或者它应该是 Y 的负数,因为如果不是 X 它是~X,条件(X 和 Y)变为假,因此 !(X 和 Y)变为真,因此达到原始条件。同样对于 Y.

先应用内括号Logical NOT (!):

!(!(a != b) && (b > 7)) becomes !((a == b) && (b > 7))

使用 De Morgan's Law 我们将 operators 反转为对应的

我们将 > 更改为 <= 因为 > operator 不包括 7 本身或任何更少的东西,因此 <= 是唯一的满足那个条件。

现在外!:

当查看 truth tables(上图)时,您会注意到 Logical AND (&&)Logical OR (||) 在比较 2 个不同的 boolean expressions 时有相反的结果(即 true false , false true), 因此当我们应用 ! 时,我们用 || 反转 &&。最后,我们需要再次将 == 切换为 !=

全部起来,这就产生了

((a != b) || (b <= 7))