num(z). num(s(A)) :- num(A). decode(z, 0). decode(s(A), B) :- decode(A, C), B is C + 1. encode(A, B) :- decode(B, A), !. add(z, A, A). add(s(A), B, s(C)) :- add(A, B, C). sub(A, B, C) :- add(B, C, A). mul(z, A, z). mul(s(A), B, C) :- mul(A, B, D), add(D, B, C). div(A, B, C) :- mul(B, C, A).