role(red)
role(black)
base(cell(X,Y,P)) :- x(X) & y(Y) & role(P)
base(control(red))
base(control(black))
input(P,drop(X)) :- role(P) & x(X)
input(P,noop) :- role(P)
init(control(red))
legal(red,noop) :- true(control(black))
legal(red,drop(X)) :- true(control(red)) & columnopen(X)
legal(black,noop) :- true(control(red))
legal(black,drop(X)) :- true(control(black)) & columnopen(X)
next(cell(X,1,Player)) :- does(Player,drop(X)) & columnempty(X)
next(cell(X,Y2,Player)) :- does(Player,drop(X)) & cellopen(X,Y2) & succ(Y1,Y2) & ~cellopen(X,Y1)
next(cell(X,Y,Player)) :- true(cell(X,Y,Player))
next(control(red)) :- true(control(black))
next(control(black)) :- true(control(red))
goal(red,100) :- line(red)
goal(red,50) :- ~line(red) & ~line(black) & ~boardopen
goal(red,0) :- line(black)
goal(red,0) :- ~line(red) & ~line(black) & boardopen
goal(black,100) :- line(black)
goal(black,50) :- ~line(red) & ~line(black) & ~boardopen
goal(black,0) :- line(red)
goal(black,0) :- ~line(red) & ~line(black) & boardopen
terminal :- line(red)
terminal :- line(black)
terminal :- ~boardopen
cellopen(X,Y) :- x(X) & y(Y) & ~true(cell(X,Y,red)) & ~true(cell(X,Y,black))
columnopen(X) :- cellopen(X,6)
columnempty(X) :- cellopen(X,1)
boardopen :- x(X) & columnopen(X)
line(Player) :- true(cell(X1,Y,Player)) & succ(X1,X2) & succ(X2,X3) & succ(X3,X4) & true(cell(X2,Y,Player)) & true(cell(X3,Y,Player)) & true(cell(X4,Y,Player))
line(Player) :- true(cell(X,Y1,Player)) & succ(Y1,Y2) & succ(Y2,Y3) & succ(Y3,Y4) & true(cell(X,Y2,Player)) & true(cell(X,Y3,Player)) & true(cell(X,Y4,Player))
line(Player) :- true(cell(X1,Y1,Player)) & succ(X1,X2) & succ(X2,X3) & succ(X3,X4) & succ(Y1,Y2) & succ(Y2,Y3) & succ(Y3,Y4) & true(cell(X2,Y2,Player)) & true(cell(X3,Y3,Player)) & true(cell(X4,Y4,Player))
line(Player) :- true(cell(X1,Y4,Player)) & succ(X1,X2) & succ(X2,X3) & succ(X3,X4) & succ(Y3,Y4) & succ(Y2,Y3) & succ(Y1,Y2) & true(cell(X2,Y3,Player)) & true(cell(X3,Y2,Player)) & true(cell(X4,Y1,Player))
succ(1,2)
succ(2,3)
succ(3,4)
succ(4,5)
succ(5,6)
succ(6,7)
succ(7,8)
x(1)
x(2)
x(3)
x(4)
x(5)
x(6)
x(7)
x(8)
y(1)
y(2)
y(3)
y(4)
y(5)
y(6)
