數電與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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章