1#include <incmode>. 2 3#program base. 4peg(a;b;c). 5disk(1..9). 6init_on(1..9,a). 7goal_on(1..9,b). 8 9on(D,P,0) :- init_on(D,P). 10 11#program step(t). 121 { move(D,P,t) : disk(D), peg(P) } 1. 13 14move(D,t) :- move(D,P,t). 15on(D,P,t) :- move(D,P,t). 16on(D,P,t) :- on(D,P,t-1), not move(D,t). 17blocked(D-1,P,t) :- on(D,P,t-1). 18blocked(D-1,P,t) :- blocked(D,P,t), disk(D). 19 20:- move(D,P,t), blocked(D-1,P,t). 21:- move(D,t), on(D,P,t-1), blocked(D,P,t). 22:- not 1 { on(D,P,t) } 1, disk(D). 23 24#program check(t). 25:- query(t), goal_on(D,P), not on(D,P,t). 26 27#