;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Super Tic Tac Toe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Components;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (role xPlayer)  (role oPlayer)  (<= (base (mark ?i ?j ?k ?l x))      (index ?i)      (index ?j)      (index ?k)      (index ?l))  (<= (base (mark ?i ?j ?k ?l o))      (index ?i)      (index ?j)      (index ?k)      (index ?l))  (<= (base (currentBoard ?i ?j))      (index ?i)      (index ?j))  (<= (base (control ?r))      (role ?r))  (<= (input ?r (play ?i ?j ?k ?l x))      (role ?r)      (index ?i)      (index ?j)      (index ?k)      (index ?l))  (<= (input ?r (play ?i ?j ?k ?l o))      (role ?r)      (index ?i)      (index ?j)      (index ?k)      (index ?l))  (<= (input ?r noop)      (role ?r));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; init;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (init (control xPlayer));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; legal;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (<= (legal xPlayer noop)      (true (control oPlayer)))   (<= (legal xPlayer (play ?i ?j ?k ?l x))      (true (control xPlayer))      firstMove      (emptyCell ?i ?j ?k ?l))  (<= (legal xPlayer (play ?i ?j ?k ?l x))      (true (control xPlayer))      (true (currentBoard ?i ?j))      (emptyCell ?i ?j ?k ?l))  (<= (legal xPlayer (play ?i ?j ?k ?l x))              (true (control xPlayer))      currentBoardClosed      (emptyCell ?i ?j ?k ?l))     (<= (legal oPlayer noop)      (true (control xPlayer)))  (<= (legal oPlayer (play ?i ?j ?k ?l o))      (true (control oPlayer))      firstMove      (emptyCell ?i ?j ?k ?l))  (<= (legal oPlayer (play ?i ?j ?k ?l o))      (true (control oPlayer))      (true (currentBoard ?i ?j))      (emptyCell ?i ?j ?k ?l))  (<= (legal oPlayer (play ?i ?j ?k ?l o))      (true (control oPlayer))      currentBoardClosed      (emptyCell ?i ?j ?k ?l));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; next;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (<= (next (mark ?i ?j ?k ?l ?mark))      (does ?player (play ?i ?j ?k ?l ?mark)))  (<= (next (mark ?i ?j ?k ?l ?mark))      (true (mark ?i ?j ?k ?l ?mark)))  (<= (next (currentBoard ?k ?l))      (does ?player (play ?i ?j ?k ?l ?mark)))  (<= (next (control xPlayer))      (true (control oPlayer)))  (<= (next (control oPlayer))      (true (control xPlayer)));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; goal;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (<= (goal xPlayer 0)      (not (line x))      (not (line o))      open)  (<= (goal xPlayer 100)      (line x))  (<= (goal xPlayer 50)      (not (line x))      (not (line o))      (not open))  (<= (goal xPlayer 0)      (line o))  (<= (goal oPlayer 0)      (not (line x))      (not (line o))      open)  (<= (goal oPlayer 100)      (line o))  (<= (goal oPlayer 50)      (not (line x))      (not (line o))      (not open))  (<= (goal oPlayer 0)      (line x));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; terminal;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (<= terminal (line x))  (<= terminal (line o))  (<= terminal (not open));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Views;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (<= (row ?i ?j ?k ?mark)      (true (mark ?i ?j ?k 1 ?mark))      (true (mark ?i ?j ?k 2 ?mark))      (true (mark ?i ?j ?k 3 ?mark)))  (<= (col ?i ?j ?k ?mark)      (true (mark ?i ?j 1 ?k ?mark))      (true (mark ?i ?j 2 ?k ?mark))      (true (mark ?i ?j 3 ?k ?mark)))  (<= (diag ?i ?j ?mark)      (true (mark ?i ?j 1 1 ?mark))      (true (mark ?i ?j 2 2 ?mark))      (true (mark ?i ?j 3 3 ?mark)))  (<= (diag ?i ?j ?mark)      (true (mark ?i ?j 1 3 ?mark))      (true (mark ?i ?j 2 2 ?mark))      (true (mark ?i ?j 3 1 ?mark)))  (<= (win ?i ?j ?mark)      (index ?i)      (index ?j)      (index ?k)      (row ?i ?j ?k ?mark))  (<= (win ?i ?j ?mark)      (index ?i)      (index ?j)      (index ?k)      (col ?i ?j ?k ?mark))  (<= (win ?i ?j ?mark)      (index ?i)      (index ?j)      (diag ?i ?j ?mark))        (<= (brow ?m ?x)      (win ?m 1 ?x)      (win ?m 2 ?x)      (win ?m 3 ?x))    (<= (bcol ?n ?x)      (win 1 ?n ?x)      (win 2 ?n ?x)      (win 3 ?n ?x))    (<= (bdiag ?x)      (win 1 1 ?x)      (win 2 2 ?x)      (win 3 3 ?x))    (<= (bdiag ?x)      (win 1 3 ?x)      (win 2 2 ?x)      (win 3 1 ?x))            (<= (line ?x) (brow ?m ?x))    (<= (line ?x) (bcol ?m ?x))    (<= (line ?x) (bdiag ?x))      (<= (boardclosed ?i ?j) (win ?i ?j ?x))  (<= (emptyCell ?i ?j ?k ?l)      (index ?i)      (index ?j)      (index ?k)      (index ?l)      (not (boardclosed ?i ?j))      (not (true (mark ?i ?j ?k ?l x)))      (not (true (mark ?i ?j ?k ?l o))))   (<= open (emptyCell ?i ?j ?k ?l))  (<= currentBoardClosed       (true (currentBoard ?i ?j))      (win ?i ?j ?x))        (<= currentBoardClosed      (true (currentBoard ?i ?j))      (not (emptyCell ?i ?j 1 1))      (not (emptyCell ?i ?j 1 2))      (not (emptyCell ?i ?j 1 3))      (not (emptyCell ?i ?j 2 1))      (not (emptyCell ?i ?j 2 2))      (not (emptyCell ?i ?j 2 3))      (not (emptyCell ?i ?j 3 1))      (not (emptyCell ?i ?j 3 2))      (not (emptyCell ?i ?j 3 3)))  (<= firstMove      (not (true (currentBoard 1 1)))      (not (true (currentBoard 1 2)))      (not (true (currentBoard 1 3)))      (not (true (currentBoard 2 1)))      (not (true (currentBoard 2 2)))      (not (true (currentBoard 2 3)))      (not (true (currentBoard 3 1)))      (not (true (currentBoard 3 2)))      (not (true (currentBoard 3 3)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Data;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  (index 1) (index 2) (index 3);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;