布尔逻辑简化
Boolean logic simplification
我正在尝试解决这个问题,但遇到了困难:
' 表示补码
Y = A'B' + A'BC' + (A + C')'
我的尝试:
A'B' + A'BC' + A'C
A'(B' + BC' + C)
现在这就是我迷路的地方。括号内的表达式以某种方式计算为 1,但我不确定如何计算。
编辑:现已解决。
我总是喜欢为这种东西写一个程序,看看逻辑推理是否成立:
#include<stdio.h>
int main (void) {
puts ("A B C");
for (int a = 0; a < 2; a++) {
for (int b = 0; b < 2; b++) {
for (int c = 0; c < 2; c++) {
int x = !a && !b;
int y = !a && b && !c;
int z = !(a || !c);
printf ("%d %d %d -> %d %d %d -> %d\n",
a, b, c, x, y, z, x || y || z);
}
}
}
return 0;
}
其输出为:
A B C
0 0 0 -> 1 0 0 -> 1
0 0 1 -> 1 0 1 -> 1
0 1 0 -> 0 1 0 -> 1
0 1 1 -> 0 0 1 -> 1
1 0 0 -> 0 0 0 -> 0
1 0 1 -> 0 0 0 -> 0
1 1 0 -> 0 0 0 -> 0
1 1 1 -> 0 0 0 -> 0
你可以看出简化的表达式就是 A'
。您还可以看到原因,因为中间部分显示了三个单独的术语,它们被 OR
-ed 在一起以获得最终结果。
当 A
为真时(最后四行),所有三个项都为假,因此 OR
-ing 也给出假。前两项 A'B'
和 A'BC'
是假的,因为它们都 AND
和假的 A'
。最后一项 A+C'
始终为真(因为真 OR
任何事物都是真的),这意味着其否定始终为假。
转向前四行,当A
和B
都为假时,第一项A'B'
为真,所以其他两项不没关系(真的OR
任何东西OR
任何东西都是真的)。
那就只剩下第三行和第四行了。第三,A
和C
都为假,C
为真,意思是中项A'BC'
为真。
第四行有 A
false 和 C
true 所以 A+C'
给出 false 或 false -> false 所以第三项 (A+C')'
是真(B
无关紧要)。
按照 CompSci 的方式进行操作,您只需逐步执行它,应用规则:
A'B' + A'BC' + (A+C')'
= A'B' + A'BC' + A'C # "De Morgan" final term [note 1]
= A'(B' + BC' + C) # extract common A' [note 2]
= A'(B' + B + C) # (B and not C) or C -> B or C [note 3]
= A'( T + C) # (not B or B) -> true [note 4]
= A'( T ) # true or anything -> true [note 4]
= A' # X and true -> X [note 4]
备注:
1/ De Morgans 定律简单地指出 a'b' -> (a+b)'
和 a'+b' -> (ab)'
.
2/分配律ax+ay -> a(x+y)
.
3/ 不确定这条定律是否有名称,但是如果 c
为真,则整个表达式为真。如果 c
为假,则归结为 b and true
或只是 b
。这实际上是 b+c
。
4/ 这些不言而喻,正如任何优秀的数学家应该告诉你的那样,在正式证明中很少 应该 不言而喻 :-)
我正在尝试解决这个问题,但遇到了困难: ' 表示补码 Y = A'B' + A'BC' + (A + C')' 我的尝试: A'B' + A'BC' + A'C A'(B' + BC' + C) 现在这就是我迷路的地方。括号内的表达式以某种方式计算为 1,但我不确定如何计算。 编辑:现已解决。
我总是喜欢为这种东西写一个程序,看看逻辑推理是否成立:
#include<stdio.h>
int main (void) {
puts ("A B C");
for (int a = 0; a < 2; a++) {
for (int b = 0; b < 2; b++) {
for (int c = 0; c < 2; c++) {
int x = !a && !b;
int y = !a && b && !c;
int z = !(a || !c);
printf ("%d %d %d -> %d %d %d -> %d\n",
a, b, c, x, y, z, x || y || z);
}
}
}
return 0;
}
其输出为:
A B C
0 0 0 -> 1 0 0 -> 1
0 0 1 -> 1 0 1 -> 1
0 1 0 -> 0 1 0 -> 1
0 1 1 -> 0 0 1 -> 1
1 0 0 -> 0 0 0 -> 0
1 0 1 -> 0 0 0 -> 0
1 1 0 -> 0 0 0 -> 0
1 1 1 -> 0 0 0 -> 0
你可以看出简化的表达式就是 A'
。您还可以看到原因,因为中间部分显示了三个单独的术语,它们被 OR
-ed 在一起以获得最终结果。
当
A
为真时(最后四行),所有三个项都为假,因此OR
-ing 也给出假。前两项A'B'
和A'BC'
是假的,因为它们都AND
和假的A'
。最后一项A+C'
始终为真(因为真OR
任何事物都是真的),这意味着其否定始终为假。转向前四行,当
A
和B
都为假时,第一项A'B'
为真,所以其他两项不没关系(真的OR
任何东西OR
任何东西都是真的)。那就只剩下第三行和第四行了。第三,
A
和C
都为假,C
为真,意思是中项A'BC'
为真。第四行有
A
false 和C
true 所以A+C'
给出 false 或 false -> false 所以第三项(A+C')'
是真(B
无关紧要)。
按照 CompSci 的方式进行操作,您只需逐步执行它,应用规则:
A'B' + A'BC' + (A+C')'
= A'B' + A'BC' + A'C # "De Morgan" final term [note 1]
= A'(B' + BC' + C) # extract common A' [note 2]
= A'(B' + B + C) # (B and not C) or C -> B or C [note 3]
= A'( T + C) # (not B or B) -> true [note 4]
= A'( T ) # true or anything -> true [note 4]
= A' # X and true -> X [note 4]
备注:
1/ De Morgans 定律简单地指出 a'b' -> (a+b)'
和 a'+b' -> (ab)'
.
2/分配律ax+ay -> a(x+y)
.
3/ 不确定这条定律是否有名称,但是如果 c
为真,则整个表达式为真。如果 c
为假,则归结为 b and true
或只是 b
。这实际上是 b+c
。
4/ 这些不言而喻,正如任何优秀的数学家应该告诉你的那样,在正式证明中很少 应该 不言而喻 :-)