language Essence 1.3
$prob032.essence: Maximum Density Still Life$ Problem details available at http://www.csplib.org/Problems/prob032/

$n: the side length of the board given n : int(1..)$ Index: cell indicies can be between 1 and n on both axes
$Cell: a cell is a tuple made up of two elements, an x-index and a y-index letting Index be domain int(1..n+2) letting Cell be domain tuple (Index,Index)$ alive: the set of cells that are alive
find alive : set of Cell

$maximise the number of cells that are alive maximising |alive| such that$ all border cells are dead
forAll (a,b) : Cell
, |{a,b} intersect {1,n+2}| = 0
. !((a,b) in alive),

$alive cells have between 2 and 3 alive neighbours (between 3 and 4, when$ including the cell itself)
forAll (a,b) in alive .
3 <= ( sum i,j : int(-1..1) . toInt((a+i,b+j) in alive) ) /\
(sum i,j : int(-1..1) . toInt((a+i,b+j) in alive)) <= 4,

\$ dead cells must not have 3 alive neighbours
forAll (a,b) : Cell
, !((a,b) in alive)
. (sum i,j : int(-1..1) . toInt((a+i,b+j) in alive)) != 3