数电与python——简单布尔恒等式证明

在这里,我将用python中的简单逻辑运算,证明数电里的布尔恒等式

由于逻辑代数中,
以点乘代表"and",
以加法代表"or",
以共轭`号代表"not"

首先,尝试随机生成布尔值:

import random
A=random.randrange(0,2)
B=random.randrange(0,2)
C=random.randrange(0,2)
print('A=',A)
print('B=',B)
print('C=',C)
A= 0
B= 1
C= 0

至此,三个随机逻辑数产生并显示完毕,该模块成功完成任务

import random
A=random.randrange(0,2)
B=random.randrange(0,2)
C=random.randrange(0,2)
print('A=',A)
print('B=',B)
print('C=',C)
X=not A
Y=A and B
Z=A or B
print('A`=',X)
print('A·B=',Y)
print('A+B=',Z)
A= 1
B= 0
C= 0
A`= False
A·B= 0
A+B= 1

意外地,非运算产生了一个逻辑值False而不是0,不过与或非运算基本成功完成

def rand():
    import random
    A=random.randrange(0,2)
    B=random.randrange(0,2)
    C=random.randrange(0,2)
    print('A=',A)
    print('B=',B)
    print('C=',C)

封装函数,下面进行证明

首先:A·B=B·A

rand()
X=not A
Y=A and B
Z=A or B
print("A\'=",X)
print('A·B=',Y)
print('A+B=',Z)
print('"A·B=B·A" IS', A and B==B and A)
A= 0
B= 1
C= 1
A'= False
A·B= 0
A+B= 0
"A·B=B·A" IS 0

在此出了一个错误,由于对运算符优先级的疏漏,忘却了恒等号==的优先级高于逻辑运算符,经思考后联系python tutorial得:

x or y:
if x is false, then y, else x

x and y:
if x is false, then x, else y

not x:
if x is false, then True, else False

在python中,A and B是不对称的,相对于数电中的“与”关系,更像是一种流程操作符,而不是一种运算符。and、or可以输出自然数、甚至函数返回值(x、y为函数时)

同时,注意到:

rand()
X=not A
print('A`=',X)
A= 0
B= 1
C= 0
A`= False

此时,非A的运算同时也会涉及到python对False的判定:
"python对一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 bool() 方法且返回 False 或是定义了 len() 方法且返回零。 1 下面基本完整地列出了会被视为假值的内置对象:

被定义为假值的常量: None 和 False。
任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
空的序列和多项集: ‘’, (), [], {}, set(), range(0)"

还是老老实实用True和False进行吧,别想象C语言一样用01糊弄python了

def logic():
    import random
    A=random.randrange(0,2)
    B=random.randrange(0,2)
    C=random.randrange(0,2)
    if A==1:
        A=True
    else:
        A=False
    if B==1:
        B=True
    else:
        B=False
    if C==1:
        C=True
    else:
        C=False
    print('A=',A)
    print('B=',B)
    print('C=',C)

同时也发现了在jupyter lab中,在一个函数中调用另一个函数属实有些麻烦。。。

那么,正式开始工作!
我们可以得到以下恒等式的python实现:

A·B=B·A:

logic()
print('"A·B=B·A" IS',(A and B)==(B and A))
A= False
B= True
C= True
"A·B=B·A" IS True

A·(B·C)=(A·B)·C:

logic()
print('"A·(B·C)=(A·B)·C" IS',(A and (B and C))==((A and B) and C))
A= False
B= True
C= False
"A·(B·C)=(A·B)·C" IS True

(A+B)’= A’·B’:

logic()
print('"(A+B)`=A`·B`" IS',(not(A or B))==(not A and not B))
A= False
B= False
C= True
"(A+B)`=A`·B`" IS True

(A·B)’=A’+B’:

logic()
print('"(A·B)`=A`+B`" IS',(not(A and B))==(not A or not B))
A= False
B= True
C= False
"(A·B)`=A`+B`" IS True

A+B·C=(A+B)·(A+C):

logic()
print('"A+B·C=(A+B)·(A+C)" IS',(A or B and C)==((A or B) and (A or C)))
A= True
B= True
C= False
"A+B·C=(A+B)·(A+C)" IS True

A·(B+C)=A·B+A·C:

logic()
print('"A·(B+C)=A·B+A·C" IS',(A and (B or C))==(A and B or A and C))
A= False
B= True
C= True
"A·(B+C)=A·B+A·C" IS True

至此,基本恒等式证毕。

常用拓展恒等式如下:

A+(A·B)=A:

logic()
print('"A+(A·B)=A" IS',(A or (A and B))==A )
A= True
B= True
C= False
"A+(A·B)=A" IS True

A+A’·B=A+B:

logic()
print("\"A+A\'·B=A+B:\"IS",(A or not A and B)==(A or B))
A= False
B= True
C= False
"A+A'·B=A+B:"IS True
发布了6 篇原创文章 · 获赞 5 · 访问量 4174
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章