12.2 布尔函数的表示
极小项
这个不用管那么多,其实就是所有变元做布尔积。比如3个布尔元x,y,z:
x | y | z | xyz |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
可以看到这种情况下,只有所有变元都是1,最终结果才为1,其他情况下都是0。
构建布尔函数
在之前都是如果知道布尔函数,可以通过定理来化简布尔函数,但是如果只知道真值表,如何构建布尔函数呢?
比如下面的真值表:
x | y | z | F |
---|---|---|---|
1 | 1 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 |
如何构建这个真值表的布尔函数呢?
这里就可以用上面的极小项来实现了,因为我们看到结果中只有一个值为1,其他情况下都是0。所以我们可以得出式子为:
F
(
x
,
y
,
z
)
=
x
y
‾
z
,
这
里
为
什
么
是
y
‾
呢
?
因
为
当
时
其
值
为
0
,
所
以
需
要
处
理
一
下
。
F(x,y,z)=x \overline{y} z,这里为什么是 \overline{y} 呢?因为当时其值为0,所以需要处理一下。
F(x,y,z)=xyz,这里为什么是y呢?因为当时其值为0,所以需要处理一下。
上面是有1个1,其他都是0,如果有2个1时:
x | y | z | G |
---|---|---|---|
1 | 1 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 |
我们就可以表示成2个极小项的和:
G
(
x
,
y
,
z
)
=
x
y
‾
z
+
x
‾
y
z
‾
G(x,y,z)=x \overline{y}z+ \overline{x}y \overline{z}
G(x,y,z)=xyz+xyz
这样我们就可以根据真值表来构建布尔函数了。
这样除了可以用来构建布尔函数,也可以用来化简布尔函数:
F
(
x
,
y
,
z
)
=
(
x
+
y
)
z
‾
F(x,y,z)=(x+y) \overline{z}
F(x,y,z)=(x+y)z
如果是之前,就需要按照公式一步步拆下去,现在可以首先计算出真值表为:
x | y | z | F |
---|---|---|---|
1 | 1 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 |
0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 |
套用上面的公式,我们可以直接得出:
F
(
x
,
y
,
z
)
=
x
y
z
‾
+
x
y
‾
z
‾
+
x
‾
y
z
‾
F(x,y,z)=xy \overline{z}+ x\overline{y} \overline{z}+\overline{x}y\overline{z}
F(x,y,z)=xyz+xyz+xyz
跟直接套公式得出的结论是一致的。
函数的完备性
上面我们得出,只需要使用+,.,-
就可以构建出所有的布尔函数,但是根据下面的公式(德.摩根率):
{
x
+
y
=
x
‾
y
‾
‾
x
y
=
x
‾
+
y
‾
‾
\begin{cases} x+y &=\overline{ \overline{x}\overline{y} } \\ xy &=\overline{ \overline{x}+\overline{y} } \end{cases}
{x+yxy=xy=x+y
所以我们只需要+,-
或者.,-
就可以构建所有的布尔函数了,这就是函数的完备性。
那么可以更小一点吗?也可以,我们定义一个运算符号:|
,其真值表如下:
x | y | | |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
这 样 的 情 况 下 : { x ‾ = x ∣ x x y = ( x ∣ y ) ∣ ( x ∣ y ) 这样的情况下:\\ \begin{cases} \overline{x} &=x|x \\ xy &= (x|y)|(x|y) \end{cases} 这样的情况下:{xxy=x∣x=(x∣y)∣(x∣y)
第二个式子可以用真值表来验证:
x | y | xy | (x|y)|(x|y) |
---|---|---|---|
0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
|
也可以表示为NAND
,就是not and,就是在布尔积的基础上取其补值。
类似的还有一个NOR
,就是not or
,就是在布尔和的基础上取其补值。
表
示
为
↓
表示为 \downarrow
表示为↓
真值表为:
x | y | NOR |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
同时因为:
{
x
‾
=
x
↓
x
x
+
y
=
(
x
↓
y
)
↓
(
x
↓
y
)
\begin{cases} \overline{x} &=x \downarrow x \\ x+y &= (x \downarrow y) \downarrow (x \downarrow y) \end{cases}
{xx+y=x↓x=(x↓y)↓(x↓y)
所以可以说NAND和NOR也具有函数完备性。