Logic Paradigm#
Initial Set-Up#
from pyDatalog import pyDatalog
Predecessor and Successor#
pyDatalog.create_terms("predecessor, N")
predecessor[1] = 0
predecessor[N] = 1 + predecessor[N - 1]
N == predecessor[1]
assert N == 0
N == predecessor[10]
assert N == 9
pyDatalog.create_terms("successor, N")
successor[0] = 1
successor[N] = 1 + successor[N - 1]
N == successor[0]
assert N == 1
N == successor[10]
assert N == 11
Addition#
pyDatalog.create_terms("addition, X, Y")
addition[X, Y] = addition[successor[X], predecessor[Y]]
addition[X, 0] = X
N == addition[0, 0]
assert N == 0
N == addition[1, 0]
assert N == 1
N == addition[0, 1]
assert N == 1
N == addition[10, 10]
assert N == 20
Multiplication#
pyDatalog.create_terms("multiplication, X, Y")
multiplication[X, Y] = addition[X, multiplication[X, predecessor[Y]]]
multiplication[X, 0] = 0
multiplication[X, 1] = X
N == multiplication[0, 0]
assert N == 0
N == multiplication[2, 0]
assert N == 0
N == multiplication[0, 2]
assert N == 0
N == multiplication[10, 10]
assert N == 100
Exponentiation#
pyDatalog.create_terms("exponentiation, X, Y")
exponentiation[X, Y] = multiplication[X, exponentiation[X, predecessor[Y]]]
exponentiation[0, X] = 0
exponentiation[X, 0] = 1
N == exponentiation[1, 0]
assert N == 1
N == exponentiation[0, 1]
assert N == 0
N == exponentiation[3, 3]
assert N == 27