%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Here is the smodels program time(0..41). disk(1..9). % 41 away on0(7,8). on0(4,7). on0(1,4). on0(2,5). on0(6,9). on0(3,6). % k disks 1,2,...,k. Disks 1, 2, 3 are pegs. Disks 4, 5, ... are "movable" % The larger the number of the disk, the "smaller" it is. % Read in data on(T,N,N1) means at time T, disk N1 is on disk N on(0,N,N1) :- disk(N;N1), on0(N,N1). % :- disk(N;N1), on(0,N,N1), not on0(N,N1). % Specify valid arrangements of disks % Each regular disk is on something % 1{on(T,N1,N):disk(N1)}1 :- time(T), disk(N), N>=4. % :- not on(T,N1,N), time(T), disk(N), N>=4. % :- 2{on(T,N1,N):disk(N1)}, time(T), disk(N), N>=4. % Basic condition. Smaller disks are on larger ones :- time(T), disk(N1;N), on(T,N1,N), N1>=N. % disks 1,2,3 are pegs and are not on anything % :- time(T), disk(N1;N), on(T,N,N1), N1<=3. % Specify a valid move (only for T0, T on(T+1,N1,N). on(T+1,N1,N) :- time(T), disk(N;N1), T