A. Structure of Python Logic Programming
A. Structure of Python Logic Programming
Logic Programming
Previously with AI, we have learned about Computer Vision, Today, we will see AI
with Python Logic Programming. We will learn how to match mathematical
expressions and how to check for and generate prime numbers. Also, we will see the
example of Python Logic Programming.
1. facts
2. Rules
Representing Knowledge
kanren stores data as facts that state relationships between terms.
The following code creates a parent relationship and uses it to state facts about who is a
parent of whom within the Simpsons family.
>>> y =var()
>>>run(1, x, parent(x, y),
parent(y, 'Bart'))
('Abe',)
We can express the grandfather relationship separately. In this example we use conde, a
goal constructor for logical and and or.
>>>defgrandparent(x, z):
... y =var()
...returnconde((parent(x, y), parent(y, z)))
With logic programming, we can compare expressions and find out unknown values.
Consider the following piece of code:
1. >>> from kanren import run,var,fact
2. >>> from kanren.assoccomm import eq_assoccomm as eq
3. >>> from kanren.assoccomm import commutative,associative
4. >>> add='add'#Defining operations
5. >>>mul='mul'
6. >>>fact(commutative,mul)#Addition and multiplication are commutative and associative
7. >>>fact(commutative,add)
8. >>>fact(associative,mul)
9. >>>fact(associative,add)
10. >>>a,b,c=var('a'),var('b'),var('c')#Defining variables
11. >>>#2ab+b+3c is the expression we have'
12. >>> expression=(add, (mul, 2, a, b), b, (mul, 3, c))
13. >>> expression=(add,(mul,3,-2),(mul,(add,1,(mul,2,3)),-1))#Expression
14. >>> expr1=(add,(mul,(add,1,(mul,2,a)),b),(mul,3,c))#Expressions to match
15. >>> expr2=(add,(mul,c,3),(mul,b,(add,(mul,2,a),1)))
16. >>> expr3=(add,(add,(mul,(mul,2,a),b),b),(mul,3,c))
17. >>>run(0,(a,b,c),eq(expr1,expression))#Calls to run()
((3, -1, -2),)
1. >>>run(0,(a,b,c),eq(expr2,expression))
((3, -1, -2),)
Do you know about Python Web Framework
1. >>>run(0,(a,b,c),eq(expr3,expression))
()
You’ll see that the third expression gives us nothing. It is mathematically the same,
but structurally different.
5. Checking for Prime Numbers in
Python Logic Programming
If we have a list of numbers, we can find out which ones are prime and also generate
such numbers. Let’s see how.
1. >>> from kanren import isvar,run,membero
2. >>> from kanren.core import success,fail,goaleval,condeseq,eq,var
3. >>> from sympy.ntheory.generate import prime,isprime
4. >>> import itertools as it
5. >>>defprime_test(n): #Function to test for prime
6. if isvar(n):
7. return condeseq([(eq,n,p)] for p in map(prime,it.count(1)))
8. else:
9. return success if isprime(n) else fail
10. >>> n=var()#Variable to use
11. >>>
{41, 19, 29, 23}
1. >>>run(7,n,prime_set(run(0,n,(membero,n,(12,14,15,19,21,20,22,29,23,30,41,44,62,52,65,85)),
(prime_test,n)))test(n))
(2, 3, 5, 7, 11, 13, 17)
Network Programming Paradigm:
Socket programming :
Echo Server
#!/usr/bin/env python3
importsocket
withsocket.socket(socket.AF_INET,socket.SOCK_STREAM)ass:
s.bind((HOST,PORT))
s.listen()
conn,addr=s.accept()
withconn:
print('Connected by',addr)
whileTrue:
data=conn.recv(1024)
ifnotdata:
break
conn.sendall(data)
Echo Client
#!/usr/bin/env python3
importsocket
withsocket.socket(socket.AF_INET,socket.SOCK_STREAM)ass:
s.connect((HOST,PORT))
s.sendall(b'Hello, world')
data=s.recv(1024)
print('Received',repr(data))