Propositional logic with itertools | Python

austinleath

February 3rd, 2021 02:37:23 AM

```					from itertools import product
V='∀'
E='∃'

def tt(f,n) :
xss=product((0,1),repeat=n)
print('function:',f.__name__)
for xs in xss : print(*xs,':',int(f(*xs)))
print('')

# p \/ (q /\ r) = (p \/ q) /\ (p \/ r)

def prob1(p,q,r) :
x=p or (q and r)
y= (p or q) and (p or r)
return x==y

tt(prob1,3)

# p/\(q\/r)=(p/\q)\/(p/\r)

def prob2(p,q,r) :
x=p and ( q or r )
y=(p and q) or (p and r)
return x==y

tt(prob2,3)

#~(p/\q)=(~p\/~q)

def prob3(p,q) :
x=not (p and q)
y=(not p) or (not q)
return x==y
tt(prob3,2)

#(~(p\/q))=((~p)/\~q)

def prob4(p, q):
x = not(p or q)
y = not p and not q
return x == y

tt(prob4, 2)

#(p/\(p=>q)=>q)

def prob5(p,q):
x= p and ( not p or q)
return not x or q

tt(prob5,2)

# (p=>q)=((p\/q)=q)

def prob6(p,q) :
x = (not p or q)
y=((p or q) == q)
return x==y

tt(prob6,2)

#((p=>q)=(p\/q))=q
def prob7(p,q):
if ((not p or q)==(p or q))==q:
return 1

tt(prob7,2)

#(p=>q)=((p/\q)=p)
def prob8(p,q):
if (not p or q)==((p and q)==p):
return 1

tt(prob8,2)

#((p=>q)=(p/\q))=p

def prob9(p,q):
if ((not p or q)==(p and q))==p:
return '1'

tt(prob9,2)

#(p=>q)/\(q=>r)=>(p=>r)
def prob10(p,q,r) :
x = not ((not p or q) and (not q or r)) or (not p or r)
return x

tt(prob10, 3)

# (p = q) /\ (q => r)  => (p => r)
#answer 1
def prob11(p,q,r) :
x = not((p is q) and (not q or r)) or (not p or r)
return x

tt(prob11, 3)

#(p=q)/\(q=>r)=>(p=>r)
#answer 2
def prob11(p,q,r):
x=(p==q) and (not q or r)
y=not p or r
return not x or y

tt(prob11,3)

#((p=>q)/\(q=r))=>(p=>r)

def prob12(p,q,r):
x=(not p or q) and ( q==r )
y=not p or r
return not x or y

tt(prob12,3)

#(p=>q)=>((p/\r)=>(q/\r))

def prob13(p,q,r):
x=not p or q
y=(not(p and r) or ( q and r))
return not x or y

tt(prob13,3)

#Question#2----------------------------------------

#(p=>q)=>r=p=>(q=>r)

def prob14(p,q,r):
x=(not(not p or q) or r)
y=(not p or (not q or r))
return x==y

tt(prob14,3)

def prob15(p, q):
x = not(p and q)
y = not p and not q
return x == y

tt(prob15, 2)

def prob16(p, q):
x = not(p or q)
y = not p or not q
return x == y

tt(prob16, 2)

def prob17(p):
x = p
y = not p
return x == y

tt(prob17, 1)
```