role(red)
role(green)
base(cell(I,J,N,R)) :- index(I) & index(J) & number(N) & role(R)
base(capture(R,0)) :- role(R)
base(capture(R,N)) :- role(R) & captureadd(M,N)
base(step(1))
base(step(N)) :- stepcount(M,N)
base(control(R)) :- role(R)
input(R,move(X1,Y1,X2,Y2)) :- role(R) & orthogonal(X1,Y1,X2,Y2)
input(R,move(X1,Y1,X2,Y2)) :- role(R) & diagonal(X1,Y1,X2,Y2)
input(R,noop) :- role(R)
init(cell(1,1,1,red))
init(cell(2,1,3,red))
init(cell(3,1,5,red))
init(cell(4,1,4,red))
init(cell(5,1,2,red))
init(cell(1,5,2,green))
init(cell(2,5,4,green))
init(cell(3,5,5,green))
init(cell(4,5,3,green))
init(cell(5,5,1,green))
init(control(red))
init(capture(red,0))
init(capture(green,0))
init(step(1))
legal(Player,Move) :- legal2(Player,Move)
legal(Player,noop) :- role(Player) & ~true(control(Player))
legal(Player,noop) :- true(control(Player)) & ~hasLegalMove(Player)
hasLegalMove(Player) :- legal2(Player,Move)
legal2(Player,move(X1,Y1,X2,Y2)) :- true(control(Player)) & true(cell(X1,Y1,N,Player)) & orthogonal(X1,Y1,X2,Y2) & forward(X1,Y1,X2,Y2,Player) & opencell(X2,Y2)
legal2(Player,move(X1,Y1,X2,Y2)) :- true(control(Player)) & true(cell(X1,Y1,N,Player)) & diagonal(X1,Y1,X2,Y2) & forward(X1,Y1,X2,Y2,Player) & opencell(X2,Y2)
legal2(Player1,move(X1,Y1,X2,Y2)) :- true(control(Player1)) & true(cell(X1,Y1,N1,Player1)) & diagonal(X1,Y1,X2,Y2) & true(cell(X2,Y2,N2,Player2)) & distinct(Player1,Player2) & eatable(N1,N2)
next(cell(X2,Y2,N,Player)) :- true(cell(X1,Y1,N,Player)) & does(Player,move(X1,Y1,X2,Y2))
next(cell(X,Y,N,Player)) :- true(cell(X,Y,N,Player)) & ~camefrom(X,Y) & ~wentto(X,Y)
next(capture(Player,Count)) :- true(capture(Player,Count)) & ~captured(Player)
next(capture(Player,Count2)) :- true(capture(Player,Count1)) & captured(Player) & captureadd(Count1,Count2)
next(control(red)) :- true(control(green))
next(control(green)) :- true(control(red))
next(step(T2)) :- true(step(T1)) & stepcount(T1,T2)
goal(Player1,100) :- true(capture(Player1,Count1)) & true(capture(Player2,Count2)) & distinct(Player1,Player2) & greater(Count1,Count2)
goal(Player2,0) :- true(capture(Player1,Count1)) & true(capture(Player2,Count2)) & distinct(Player1,Player2) & greater(Count1,Count2)
goal(Player1,50) :- true(capture(Player1,Count1)) & true(capture(Player2,Count2)) & distinct(Player1,Player2) & ~distinct(Count1,Count2)
terminal :- true(step(41))
terminal :- true(capture(R,5))
terminal :- ~hasLegalMove(green) & ~hasLegalMove(red)
camefrom(X1,Y1) :- does(Player,move(X1,Y1,X2,Y2))
wentto(X2,Y2) :- does(Player,move(X1,Y1,X2,Y2))
captured(Player) :- true(control(Player)) & wentto(X,Y) & true(cell(X,Y,N,Player2))
forward(X1,Y1,X2,Y2,green) :- succ(Y2,Y1) & index(X1) & index(X2)
forward(X1,Y1,X2,Y2,red) :- succ(Y1,Y2) & index(X1) & index(X2)
orthogonal(X1,Y,X2,Y) :- succ(X1,X2) & index(Y)
orthogonal(X1,Y,X2,Y) :- succ(X2,X1) & index(Y)
orthogonal(X,Y1,X,Y2) :- succ(Y1,Y2) & index(X)
orthogonal(X,Y1,X,Y2) :- succ(Y2,Y1) & index(X)
diagonal(X1,Y1,X2,Y2) :- succ(X1,X2) & succ(Y1,Y2)
diagonal(X1,Y1,X2,Y2) :- succ(X1,X2) & succ(Y2,Y1)
diagonal(X1,Y1,X2,Y2) :- succ(X2,X1) & succ(Y1,Y2)
diagonal(X1,Y1,X2,Y2) :- succ(X2,X1) & succ(Y2,Y1)
onboard(X,Y) :- index(X) & index(Y)
opencell(X,Y) :- onboard(X,Y) & ~occupiedcell(X,Y)
occupiedcell(X,Y) :- onboard(X,Y) & number(N) & role(Player) & true(cell(X,Y,N,Player))
index(1)
index(2)
index(3)
index(4)
index(5)
number(1)
number(2)
number(3)
number(4)
number(5)
succ(1,2)
succ(2,3)
succ(3,4)
succ(4,5)
eatable(5,5)
eatable(5,4)
eatable(5,3)
eatable(5,2)
eatable(4,4)
eatable(4,3)
eatable(4,2)
eatable(4,1)
eatable(3,3)
eatable(3,2)
eatable(3,1)
eatable(2,2)
eatable(2,1)
eatable(1,1)
eatable(1,5)
captureadd(0,1)
captureadd(1,2)
captureadd(2,3)
captureadd(3,4)
captureadd(4,5)
stepcount(1,2)
stepcount(2,3)
stepcount(3,4)
stepcount(4,5)
stepcount(5,6)
stepcount(6,7)
stepcount(7,8)
stepcount(8,9)
stepcount(9,10)
stepcount(10,11)
stepcount(11,12)
stepcount(12,13)
stepcount(13,14)
stepcount(14,15)
stepcount(15,16)
stepcount(16,17)
stepcount(17,18)
stepcount(18,19)
stepcount(19,20)
stepcount(20,21)
stepcount(21,22)
stepcount(22,23)
stepcount(23,24)
stepcount(24,25)
stepcount(25,26)
stepcount(26,27)
stepcount(27,28)
stepcount(28,29)
stepcount(29,30)
stepcount(30,31)
stepcount(31,32)
stepcount(32,33)
stepcount(33,34)
stepcount(34,35)
stepcount(35,36)
stepcount(36,37)
stepcount(37,38)
stepcount(38,39)
stepcount(39,40)
stepcount(40,41)
greater(5,4)
greater(5,3)
greater(5,2)
greater(5,1)
greater(5,0)
greater(4,3)
greater(4,2)
greater(4,1)
greater(4,0)
greater(3,2)
greater(3,1)
greater(3,0)
greater(2,1)
greater(2,0)
greater(1,0)
