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