language Essence 1.3
$ prob50.essence: N-Queens Problem

$ n: the side length of the board
given n : int(1..)

$ Index: square indicies can be between 1 and n on both axes
letting Index be domain int(1..n)

$ arrangement: one queen is placed on each row, at the column index specified by
$              this function. the bijection ensures each column contains exactly
$              one queen
find arrangement : function (total, bijective) Index --> Index 

$ no queens share diagonals
such that
    forAll q1, q2 : Index , q1 < q2 .
        |arrangement(q1) - arrangement(q2)| != |q1 - q2|