| 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). |