1 ?start(pegs(P1,[],[])) :- list(1,8,P1). % Hanoi with 3 pegs and 8 Discs
2 trans(move12,pegs([H|A],B,C),pegs(A,[H|B],C)) :- ok(B,H).
3 trans(move13,pegs([H|A],B,C),pegs(A,B,[H|C])) :- ok(C,H).
4 trans(move21,pegs(A,[H|B],C),pegs([H|A],B,C)) :- ok(A,H).
5 trans(move23,pegs(A,[H|B],C),pegs(A,B,[H|C])) :- ok(C,H).
6 trans(move31,pegs(A,B,[H|C]),pegs([H|A],B,C)) :- ok(A,H).
7 trans(move32,pegs(A,B,[H|C]),pegs(A,[H|B],C)) :- ok(B,H).
8
9 ok([],_). % we can move any disc on an empty peg
10 ok([H|_],Disc) :- Disc < H.
11
12 list(N,N,[N]).
13 ?list(N,M,[N|T]) :- N<M, N1 is N+1, list(N1,M,T).
14
15 prop(X,X).
16 prop(pegs([],[],_),unsafe). % use model checker to find solution
17 prop(pegs([],_,[]),unsafe).