domain NQueens { primitive Size ::= (m: Natural). primitive Queen ::= (x: Natural, y: Natural). WrongNumberOfQueens := Size(m), count(Queen(_,_)) != m. NumberTooBig := Queen(x,_), Size(m), x >= m . NumberTooBig := c is Queen, s is Size, c.y >= s.m . SameRow := a is Queen, b is Queen, a.y = b.y, a != b. SameColumn := a is Queen, b is Queen, a.x = b.x, a != b. SameDiagonal := a is Queen, b is Queen, a != b, a.x - a.y = b.x - b.y. SameDiagonal := a is Queen, b is Queen, a != b, a.x + a.y = b.x + b.y. conforms := !WrongNumberOfQueens & !NumberTooBig & !SameRow & !SameColumn & !SameDiagonal. } partial model Queens16 of NQueens { Size(16) Queen( 0,_) Queen( 1,_) Queen( 2,_) Queen( 3,_) Queen( 4,_) Queen( 5,_) Queen( 6,_) Queen( 7,_) Queen( 8,_) Queen( 9,_) Queen(10,_) Queen(11,_) Queen(12,_) Queen(13,_) Queen(14,_) Queen(15,_) }