是|| 和!运算符足以做出所有可能的逻辑表达式?


294

逻辑表达式( a && b ) (包括ab具有布尔值)可以写成像!(!a || !b),例如。这不是说&&是“不必要的”吗?这是否意味着所有逻辑表达式只能使用||和进行!


83
这比Java问题更像是基本的符号逻辑问题,但可以。OR和NOT的组合可以用于构造其他所有内容。与AND和NOT相同。例如,当我在学校时,我们被教导仅使用与非门来构建所有组件,因为它们需要的晶体管更少。
azurefrog

79
不要将以这种方式编写语句的能力与这样做的期望相混淆。语法糖是个东西。
azurefrog

20
许多逻辑门芯片仅提供NAND或NOR门,因为可以使用它们进行所有操作,并且生产-便宜A and B == !A nor !B == !(!A or !B)。同样A or B == !A nand !B == !(!A and !B)。显然,将相同的值传递给NAND或NOR的两个输入将获得与简单的NOT相同的结果。XOR和XNOR也可以,但更复杂。参见De Morgan的定理
基本的

16
这不是计算机科学的问题吗?我在这里看不到任何代码。特别是,实际上这是否正确将因实现方式而异,例如,在带有操作重载的C ++ 中,通常情况并非如此
Lightness Races in Orbit

6
@SnakeDoc我认为这里没有人提倡这样做。我相信这个问题实际上不是编程逻辑问题,而是理论逻辑问题。
ryuu9187 2015年

Answers:


425

是的,正如其他答案所指出的那样,由||和组成的一组运算符!功能上是完整的。这是一个有建设性的证明,展示了如何使用它们来表示布尔变量A和之间的所有十六种可能的逻辑连接词B

请注意,NAND和NOR本身在功能上都是完整的(可以使用上面相同的方法证明),因此,如果您要验证一组运算符在功能上是完整的,则足以表明您可以表示NAND或NOR用它。

这是一个图表,显示了上面列出的每个连接词的维恩图

在此处输入图片说明

[ 来源 ]


20
很难说出这个问题是否有此意图,但是这个答案并没有解决短路行为(相关的,因为该问题询问的||不是|)还是副作用(相关的,因为对true,false,XOR和XNOR进行了扩展计算他们的参数要比原始常量或运算符多得多)。
David Richerby

5
包含圆和过渡的圆构成一个Hasse图(en.wikipedia.org/wiki/Hasse_diagram)。(是的,我今天学到了新东西!)
Kasper van den Berg

5
@DavidRicherby是的。据我所知,除XOR,XNOR,true和false外,副作用和评估次数应与内置等效项相同(例如!(!A || !B),短路和评估次数与相同A && B)。我认为没有附加结构(例如a ? !b : b)就可以对XOR和XNOR进行此操作,并且如果可以保存值,则true或false都不是问题,因为可以通过定义truefalse使用一些虚拟布尔变量来启动程序。
彼得·奥尔森

有趣的是,上面的列表包含16个操作。这与以下事实一致:对于有2个输入和1个输出的情况,有16个可能的真值表。
Paul R

1
只是想添加另一个可视化作为表格供人们参考。与上述相同的来源。
2015年8

125

您所描述的是功能完整性

这描述了一组逻辑运算符,足以“表达所有可能的真值表”。您的Java运算符集{ ||! }就足够了;它对应于{∨,¬}集,该集列在“最小功能完备的算子集”部分。

所有真值表的集合意味着所有可能的4个布尔值的集合,它们可以是2个布尔值之间的运算结果。因为布尔值有2个可能的值,所以有2 4或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中没有相应的单个运算符。


4
+1以进行编辑。尽管计票方式有所不同,但我认为您的回答实际上比我现在更详细。
彼得·奥尔森

真相表我以为我在大学一年级后就把他们抛在了后面
Barkermn01

80

是。

所有逻辑门可以由“或非”门制成。

由于“或非”门可以由“非”和“或”构成,因此得出结果。


64
@PaulDraper 或“与非”门
slebetman 2015年

25
花了4100个NOR门将两个人降落在月球上。
汉斯·帕桑

4
@HansPassant和一些字符串。很多字符串。(核心绳索记忆,而不是锡罐品种。)
CVn

3
@HansPassant有时我希望Stack Exchange是Wikipedia,然后在那插入一个[citation-needed]标记。
西蒙·佛斯伯格

11
是的,对不起,阿波罗制导计算机
汉斯·帕桑

64

如果可以话,请花些时间阅读DeMorgan的法律

您可以在该书的阅读物中找到答案,以及对逻辑证明的参考。

但从本质上讲,答案是肯定的。

编辑:为明确起见,我的观点是可以从AND表达式中逻辑推断出OR表达式,反之亦然。关于逻辑对等和推论,还有更多的定律,但我认为这是最恰当的。


编辑2:这是一个通过真值表的证明,显示了以下表达式的逻辑等价关系。

德摩根定律: !(!A || !B) -> A && B

 _____________________________________________________
| A | B | !A | !B | !A || !B | !(!A ||!B)| A && B |
-------------------------------------------------- -----
| 0 | 0 | 1 | 1 | 1 | 0 | 0 |
-------------------------------------------------- -----
| 0 | 1 | 1 | 0 | 1 | 0 | 0 |
-------------------------------------------------- -----
| 1 | 0 | 0 | 1 | 1 | 0 | 0 |
-------------------------------------------------- -----
| 1 | 1 | 0 | 0 | 0 | 1 | 1 |
_______________________________________________________

19
有些人必须拒绝投票,这是他们“功能完整”的一部分
Jesse 2015年

3
在+ 27 / -2,我不会为流浪票感到担心。
CVn 2015年

2
@MichaelKjörling我只是很好奇为什么有些人认为我的回答没有帮助/有害。
ryuu9187

3
通常,不太喜欢依赖链接的答案(因为链接消失),但是在这种情况下,对德摩根定律的解释很多,以至于我看不到问题-仍然,这是我的猜测DV
user2813274 2015年

@ user2813274感谢您的解释。希望我的编辑将有助于弥合个人研究与得到答案之间的鸿沟。
ryuu9187

11

NANDNOR是通用的,可用于在任何地方建立所需的任何逻辑运算。其他运算符可通过编程语言获得,以使其易于编写和编写可读代码。

同样,所有需要硬连线到电路中的逻辑运算也都使用NAND或NOR集成电路开发。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.