和! 运营商足以让每一个可能的逻辑表达?
例如,逻辑表达式( a && b )
( a
和b
都具有布尔值)可以像!(!a || !b)
一样书写。 这是不是意味着&&
是“无用的”? 这是否意味着所有的逻辑表达式只能使用||
和!
?
是的,正如其他答案指出的那样,这组操作符由||
和!
功能完整。 这是一个建设性的证明,展示了如何使用它们来表示布尔变量A
和B
之间的所有十六种可能的逻辑连接词:
A || !A
A || !A
!A || !B
!A || !B
!B || A
!B || A
!A || B
!A || B
A || B
A || B
!B
!A
!(!A || B) || !(A || !B)
!(!A || B) || !(A || !B)
!(!A || !B) || !(A || B)
!(!A || !B) || !(A || B)
A
B
!(A || B)
!(!A || B)
!(!B || A)
!(!A || !B)
!(A || !A)
请注意,NAND和NOR本身在功能上都是完整的(可以用上面的相同方法证明),所以如果您想验证一组操作符在功能上是否完整,就足以证明您可以表达NAND或NOR用它。
下面是一张图,显示了上面列出的每个连接词的维恩图:
[资源]
你所描述的是功能完整性。
这描述了一组足以“表达所有可能的真值表”的逻辑运算符。 您的Java操作集,{ ||
, !
}, 足够了; 它对应于在“最小功能完整运算符集”一节中列出的集合{∨,¬}。
所有真值表的集合表示所有可能的4个布尔值集合,它们可以是2个布尔值之间的操作结果。 因为布尔值有两个可能的值,所以有24或16个可能的真值表。
A B | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
----+------------------------------------------------
T T | T T T T T T T T F F F F F F F F
T F | T T T T F F F F T T T T F F F F
F T | T T F F T T F F T T F F T T F F
F F | T F T F T F T F T F T F T F T F
这里是真值表数字(0-15)的表格, ||
和!
产生它的组合和说明。
Table | Operation(s) | Description
-------+----------------------------------+-------------
0 | A || !A | TRUE
1 | A || B | OR
2 | A || !B | B IMPLIES A
3 | A | A
4 | !A || B | A IMPLIES B
5 | B | B
6 | !(!A || !B) || !(A || B) | XNOR (equals)
7 | !(!A || !B) | AND
8 | !A || !B | NAND
9 | !(A || !B) || !(!A || B) | XOR
10 | !B | NOT B
11 | !(!A || B) | NOT A IMPLIES B
12 | !A | NOT A
13 | !(A || !B) | NOT B IMPLIES A
14 | !(A || B) | NOR
15 | !(A || !A) | FALSE
还有很多其他这样的功能完备集,包括一个元素集{NAND}和{NOR},它们在Java中没有相应的单一运算符。
是。
所有的逻辑门都可以由NOR门构成。
由于NOR门可以由NOT和OR组成,因此结果如下。
链接地址: http://www.djcxy.com/p/58901.html上一篇: and ! operators sufficient to make every possible logical expression?