/* integer Peter Schorn 16-Jul-84 */

int(null).
int(suc(X)):-int(X).

add(X,null,X).
add(X,suc(Y),Z):-add(suc(X),Y,Z).

sub(X,null,X).
sub(suc(X),suc(Y),Z):-sub(X,Y,Z).

times(X,null,null).
times(X,suc(Y),Z):-times(X,Y,H), add(H,X,Z).

less(null,suc(X)).
less(suc(X),suc(Y)):-less(X,Y).

modulo(X,X,null).
modulo(X,Y,X):-less(X,Y).
modulo(X,Y,Z):-add(H,Y,X), modulo(H,Y,Z).

pot(X,null,suc(null)).
pot(X,suc(Y),Z):-pot(X,Y,H), times(H,X,Z).

fac(suc(null),suc(null)).
fac(suc(X),Y):-fac(X,H), times(H,suc(X),Y).

equal(X,X).

gen(suc(suc(null))).
gen(suc(X)):-gen(X).

prime(X):-gen(T), modulo(X,T,null), !, equal(X,T).

g(2).
g(X):-g(Y),X is Y+1.
p(X):-g(T),0 is X mod T,!,T is X.
