【发布时间】:2011-01-11 05:38:03
【问题描述】:
能否请您尽可能简单地解释一下De Morgan's rules(例如对只有中学数学背景的人)?
【问题讨论】:
标签: language-agnostic boolean-operations demorgans-law
能否请您尽可能简单地解释一下De Morgan's rules(例如对只有中学数学背景的人)?
【问题讨论】:
标签: language-agnostic boolean-operations demorgans-law
我们有两个值:T 和 F。
我们可以通过三种方式组合这些值:NOT、AND 和 OR。
NOT是最简单的:
NOT T = FNOT F = T我们可以把它写成一个真值表:
when given.. | results in...
============================
T | F
F | T
为了简洁
x | NOT x
=========
T | F
F | T
将NOT 视为补码,即将一个值转换为另一个值。
AND 作用于两个值:
x y | x AND y
=============
T T | T
T F | F
F T | F
F F | F
AND 是 T 仅当它的 参数 (真值表中的 x 和 y 的值)是 T - 和 F 否则。
当OR 的至少一个参数是T 时,T 是T:
x y | x OR y
=============
T T | T
T F | T
F T | T
F F | F
我们可以定义更复杂的组合。比如我们可以为x AND (y OR z)写一个真值表,第一行在下面。
x y z | x AND (y OR z)
======================
T T T | ?
一旦我们知道如何评估x AND (y OR z),我们就可以填写表格的其余部分。
要评估组合,评估各个部分并从那里开始工作。括号显示首先评估哪些部分。你从普通算术中所知道的将帮助你解决它。假设你有10 - (3 + 5)。首先你评估括号中的部分以获得
10 - 8
并像往常一样评估它以获得答案,2。
评估这些表达式的工作方式类似。从上面我们知道OR 是如何工作的,所以我们可以稍微扩展我们的表格:
x y z | y OR z | x AND (y OR z)
===============================
T T T | T | ?
现在几乎就像我们回到了x AND y 表。我们只需替换y OR z 的值并进行评估。在第一行,我们有
T AND (T OR T)
与
相同T AND T
就是T。
我们对x、y和z的所有8个可能值重复相同的过程(x的2个可能值乘以y的2个可能值乘以z的2个可能值) 得到
x y z | y OR z | x AND (y OR z)
===============================
T T T | T | T
T T F | T | T
T F T | T | T
T F F | F | F
F T T | T | F
F T F | T | F
F F T | T | F
F F F | F | F
有些表达式可能比它们需要的更复杂。例如,
x | NOT (NOT x)
===============
T | T
F | F
换句话说,NOT (NOT x)等价于到x。
DeMorgan 规则是一种方便的技巧,可让我们在符合特定模式的等价表达式之间进行转换:
NOT (x AND y) = (NOT x) OR (NOT y)NOT (x OR y) = (NOT x) AND (NOT y)(您可能会认为这是NOT 通过简单的AND 和OR 表达式进行分发的方式。)
您的常识可能已经了解这些规则!例如,想想民间智慧“你不能同时在两个地方”。我们可以让它符合第一条规则的第一部分:
NOT (here AND there)
应用规则,这是“你不在这里或你不在那里”的另一种说法。
练习:你如何用简单的英语表达第二条规则?
对于第一个规则,让我们看一下等号左侧表达式的真值表。
x y | x AND y | NOT (x AND y)
=============================
T T | T | F
T F | F | T
F T | F | T
F F | F | T
现在是右手边:
x y | NOT X | NOT Y | (NOT x) or (NOT y)
========================================
T T | F | F | F
T F | F | T | T
F T | T | F | T
F F | T | T | T
两个表中的最终值相同。这证明了表达式是等价的。
练习:证明NOT (x OR y)和(NOT x) AND (NOT y)是等价的。
【讨论】:
看了一些答案,我想我可以通过使用实际上彼此相关的条件来更好地解释它。
德摩根定律指的是,有两种相同的方式来编写两个条件的任意组合 - 具体来说,AND 组合(两个条件都必须为真)和OR 组合(任何一个都可以为真) )。例如:
声明:爱丽丝有一个兄弟姐妹。
条件:爱丽丝有一个兄弟OR爱丽丝有一个妹妹。
相反: Alice 是独生子(NOT 有兄弟姐妹)。
条件: Alice NOT 有一个兄弟,AND 她有 NOT 有一个妹妹.
换句话说: NOT [A OR B] = [NOT A] AND [NOT B]
声明:Bob 是一名汽车司机。
条件:Bob 有车ANDBob 有驾照。
对面: Bob 是 NOT 一名汽车司机。
条件: Bob NOT 有车,OR Bob 确实 NOT 有驾照。
换句话说: NOT [A AND B] = [NOT A] OR [NOT B]。
我认为这对 12 岁的孩子来说不会那么混乱。它肯定比所有这些关于真值表的废话更令人困惑(即使我看着所有这些都感到困惑)。
【讨论】:
这只是一种重述真值陈述的方式,它可以提供更简单的方法来编写条件来做同样的事情。
简单的英语:
当某物不是这个或那个时,它也不是这个也不是那个。
当某事不是这个和那个时,它也不是这个或那个。
注意:鉴于英语对“或”一词的不精确性,我在前面的示例中使用它来表示非排他性或。
例如下面的伪代码是等价的:
如果不是(A 或 B)...
如果(非 A)和(非 B)....
如果不是(A 和 B)...
如果不是(A)或不是(B)...
【讨论】:
如果您是一名警官,正在寻找未成年饮酒者,您可以执行以下操作之一,而 De Morgan 的法律规定它们等同于同一件事:
公式 1(A 和 B)
如果他们在年龄 限制和饮酒酒精 饮料,逮捕他们。
公式 2(非(非 A 或非 B))
如果他们结束 年龄限制或饮酒 不含酒精的饮料,放过他们吧。
顺便说一句,这不是我的例子。据我所知,这是一项科学实验的一部分,其中相同的规则以不同的方式表达,以了解它对人们理解它们的能力有多大影响。
【讨论】:
“他既没有汽车也没有公共汽车。”与“他没有汽车,也没有公共汽车”的意思相同。
“他没有汽车和公共汽车。”与“他要么没有车,要么没有公共汽车,我不确定是哪一个,也许他都没有”的意思相同。
当然,用简单的英语“他没有汽车和公共汽车”。强烈暗示他至少拥有这两件事中的一件。但是,严格来说,从逻辑的角度来看,如果他没有任何一个,这个陈述也是正确的。
正式地:
在英语中,“或”往往意味着一个选择,你没有两样东西。在逻辑上,“或”总是与英语中的“和/或”含义相同。
这是一个显示其工作原理的真值表:
第一种情况:not (cor or bus) = (not car) and (not bus)
c | b || c or b | not (c or b) || (not c) | (not b) | (not c) and (not b)
---+---++--------+--------------++---------+---------+--------------------
T | T || T | F || F | F | F
---+---++--------+--------------++---------+---------+--------------------
T | F || T | F || F | T | F
---+---++--------+--------------++---------+---------+--------------------
F | T || T | F || T | F | F
---+---++--------+--------------++---------+---------+--------------------
F | F || F | T || T | T | T
---+---++--------+--------------++---------+---------+--------------------
第二种情况:not (car and bus) = (not car) or (not bus)
c | b || c and b | not (c and b) || (not c) | (not b) | (not c) or (not b)
---+---++---------+---------------++---------+---------+--------------------
T | T || T | F || F | F | F
---+---++---------+---------------++---------+---------+--------------------
T | F || F | T || F | T | T
---+---++---------+---------------++---------+---------+--------------------
F | T || F | T || T | F | T
---+---++---------+---------------++---------+---------+--------------------
F | F || F | T || T | T | T
---+---++---------+---------------++---------+---------+--------------------
【讨论】:
画一个简单的维恩图,两个相交的圆。把A放在左边,B放在右边。现在(A 和 B)显然是相交的位。所以 NOT(A and B) 是不在相交位中的所有内容,两个圆圈的其余部分。给它上色。
像以前一样画另外两个圆,A 和 B,相交。现在 NOT(A) 是右圆 (B) 中的所有内容,但不是交点,因为这显然是 A 和 B。将其着色。类似地,NOT(B) 是左圆圈中的所有内容,但不是交点,因为那是 B 和 A。把它涂上颜色。
两张图看起来一样。您已经证明了 NOT(A and B) = NOT(A) 或 NOT(B)。其他情况留给学生练习。
【讨论】:
德摩根定律允许您以不同的方式陈述一串逻辑运算。它适用于逻辑和集合论,在集合论中,您对非使用补码,对与使用交集,对或使用并集。
德摩根定律允许您简化逻辑表达式,执行与乘法的分配属性非常相似的运算。
所以,如果你有以下类似 C 的语言
if !(x || y || z) { /* do something */ }
逻辑上等价于:
if (!x && !y && !z)
它也可以这样工作:
if !(x && !y && z)
变成
if (!x || y || !z)
当然,你也可以反过来。
使用称为真值表的东西很容易看出这些陈述的等价性。在真值表中,您只需列出变量(x、y、z)并列出这些变量的所有输入组合。然后,您拥有每个谓词或逻辑表达式的列,并为给定的输入确定表达式的值。任何有关计算机科学、计算机工程或电气工程的大学课程都可能会让您对必须构建的真值表的数量和大小感到抓狂。
那么为什么要学习它们呢?我认为计算中最大的原因是它可以提高更大逻辑表达式的可读性。有些人不喜欢在表达式前使用逻辑而不是!,因为他们认为如果错过它会混淆某人。然而,使用德摩根定律对芯片门级的影响是有用的,因为某些门类型更快、更便宜,或者您已经为它们使用了整个集成电路,因此您可以减少所需的芯片封装数量。结果。
【讨论】:
不知道为什么这些年来我一直保留它,但它在很多场合都被证明是有用的。感谢我 10 年级的数学老师 Bailey 先生。他称之为德摩根定理。
!(A || B) <==> (!A && !B)
!(A && B) <==> (!A || !B)
当您将否定句移入或移出括号时,逻辑运算符(AND、OR)会发生变化。
【讨论】: