Post by Lars Ericson on Aug 1, 2015 17:53:58 GMT -8
LP:
role(robot).
base(p(X)) :- index(X).
base(q(X)) :- index(X).
base(r(X)) :- index(X).
base(step(1)).
base(step(2)).
base(step(3)).
base(step(4)).
base(step(5)).
base(step(6)).
base(step(7)).
input(robot,a(X)) :- index(X).
input(robot,b(X)) :- index(X).
input(robot,c(X)) :- index(X).
index(1).
index(2).
index(3).
index(4).
index(5).
index(6).
index(7).
index(8).
index(9).
true(step(1),1).
legal(robot,a(X),T) :- time(T), index(X).
legal(robot,b(X),T) :- time(T), index(X).
legal(robot,c(X),T) :- time(T), index(X).
true(p(X),T+1) :- time(T), does(robot,a(X),T), not true(p(X),T).
true(p(X),T+1) :- time(T), does(robot,b(X),T), true(q(X),T).
true(p(X),T+1) :- time(T), true(p(X),T), not does(robot,a(X),T), not does(robot,b(X),T).
true(q(X),T+1) :- time(T), does(robot,b(X),T), true(p(X),T).
true(q(X),T+1) :- time(T), does(robot,c(X),T), true(r(X),T).
true(q(X),T+1) :- time(T), true(q(X),T), not does(robot,b(X),T), not does(robot,c(X),T).
true(r(X),T+1) :- time(T), does(robot,c(X),T), true(q(X),T).
true(r(X),T+1) :- time(T), true(r(X),T), not does(robot,c(X),T).
true(step(Y),T+1) :- time(T), true(step(X),T), successor(X,Y).
goal(robot,100,T) :- time(T), row(X,T).
goal(robot,0,T) :- time(T), not row(1,T), not row(2,T), not row(3,T), not row(4,T), not row(5,T), not row(6,T), not row(7,T), not row(8,T), not row(9,T).
terminal(T) :- time(T), row(X,T).
terminal(T) :- time(T), true(step(7),T).
row(X,T) :- time(T), true(p(X),T), true(q(X),T), true(r(X),T).
successor(1,2).
successor(2,3).
successor(3,4).
successor(4,5).
successor(5,6).
successor(6,7).
:- does(R,M,T), not legal(R,M,T).
:- 0{ terminal(T) : time(T) }0.
:- terminal(T), role(robot), not goal(robot,100,T).
time(1..7).
1{ does(R,M,T) : input(R,M) }1 :- role(R), time(T), 1 <= T, T <= 6.
SOLUTION:
does(robot,a(8),1)
does(robot,b(8),2)
does(robot,a(8),3)
does(robot,c(8),4)
does(robot,b(8),5)
does(robot,a(8),6)
role(robot).
base(p(X)) :- index(X).
base(q(X)) :- index(X).
base(r(X)) :- index(X).
base(step(1)).
base(step(2)).
base(step(3)).
base(step(4)).
base(step(5)).
base(step(6)).
base(step(7)).
input(robot,a(X)) :- index(X).
input(robot,b(X)) :- index(X).
input(robot,c(X)) :- index(X).
index(1).
index(2).
index(3).
index(4).
index(5).
index(6).
index(7).
index(8).
index(9).
true(step(1),1).
legal(robot,a(X),T) :- time(T), index(X).
legal(robot,b(X),T) :- time(T), index(X).
legal(robot,c(X),T) :- time(T), index(X).
true(p(X),T+1) :- time(T), does(robot,a(X),T), not true(p(X),T).
true(p(X),T+1) :- time(T), does(robot,b(X),T), true(q(X),T).
true(p(X),T+1) :- time(T), true(p(X),T), not does(robot,a(X),T), not does(robot,b(X),T).
true(q(X),T+1) :- time(T), does(robot,b(X),T), true(p(X),T).
true(q(X),T+1) :- time(T), does(robot,c(X),T), true(r(X),T).
true(q(X),T+1) :- time(T), true(q(X),T), not does(robot,b(X),T), not does(robot,c(X),T).
true(r(X),T+1) :- time(T), does(robot,c(X),T), true(q(X),T).
true(r(X),T+1) :- time(T), true(r(X),T), not does(robot,c(X),T).
true(step(Y),T+1) :- time(T), true(step(X),T), successor(X,Y).
goal(robot,100,T) :- time(T), row(X,T).
goal(robot,0,T) :- time(T), not row(1,T), not row(2,T), not row(3,T), not row(4,T), not row(5,T), not row(6,T), not row(7,T), not row(8,T), not row(9,T).
terminal(T) :- time(T), row(X,T).
terminal(T) :- time(T), true(step(7),T).
row(X,T) :- time(T), true(p(X),T), true(q(X),T), true(r(X),T).
successor(1,2).
successor(2,3).
successor(3,4).
successor(4,5).
successor(5,6).
successor(6,7).
:- does(R,M,T), not legal(R,M,T).
:- 0{ terminal(T) : time(T) }0.
:- terminal(T), role(robot), not goal(robot,100,T).
time(1..7).
1{ does(R,M,T) : input(R,M) }1 :- role(R), time(T), 1 <= T, T <= 6.
SOLUTION:
does(robot,a(8),1)
does(robot,b(8),2)
does(robot,a(8),3)
does(robot,c(8),4)
does(robot,b(8),5)
does(robot,a(8),6)