% THE N-QUEENS PROBLEM

:- sorts 
        row; column.

:- variables
        R,R1 :: row;
        C,C1 :: column.

:- constants
        1..n :: row;
        1..n :: column;
        occupied(row,column) :: cwAtomicFormula.

occupied(R,C) :- not (not occupied(R,C)).

:- R < R1,occupied(R,C),occupied(R1,C).

:- (/\R: -occupied(R,C)).

:- occupied(R,C), occupied(R,C1), (C < C1).

:- occupied(R,C), occupied(R1,C1), (C < C1), abs(R-R1) =:= abs(C-C1).

