View source with raw comments or as raw
    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#