Traffic lights problem in Essence'
 CSPLib problem 16
$http://www.csplib.org/Problems/prob016$ """
$Specification:$ Consider a four way traffic junction with eight traffic lights. Four of
$the traffic lights are for the vehicles and can be represented by the$ variables V1 to V4 with domains
${r,ry,g,y} (for red, red-yellow, green and yellow).$  The other four traffic lights are for the pedestrians and can be
$represented by the variables P1 to P4 with domains {r,g}.$
$The constraints on these variables can be modelled by quaternary$ constraints on
$(Vi, Pi, Vj, Pj ) for 1<=i<=4, j=(1+i)mod 4 which allow just the tuples$ {(r,r,g,g), (ry,r,y,r), (g,g,r,r), (y,r,ry,r)}.
 It would be interesting to consider other types of junction (e.g. five roads
$intersecting) as well as modelling the evolution over time of the$ traffic light sequence.
$...$
$Results$ Only 2^2 out of the 2^12 possible assignments are solutions.
 (V1,P1,V2,P2,V3,P3,V4,P4) =
${(r,r,g,g,r,r,g,g), (ry,r,y,r,ry,r,y,r), (g,g,r,r,g,g,r,r), (y,r,ry,r,y,r,ry,r)}$    [(1,1,3,3,1,1,3,3), ( 2,1,4,1, 2,1,4,1), (3,3,1,1,3,3,1,1), (4,1, 2,1,4,1, 2,1)}

$The problem has relative few constraints, but each is very tight.$ Local propagation appears to be rather ineffective on this problem.
$"""$
$This Essence' model was created by Hakan Kjellerstrand, hakank@gmail.com$ See also my Essence' page: http://www.hakank.org/savile_row/
 Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/

language ESSENCE' 1.0

letting n  be 4
letting range be domain int(1..n)

letting r  be 1 $red letting ry be 2$ red-yellow
letting g  be 3 $green letting y be 4$ yellow

letting allowed =
[
[r,r,g,g],
[ry,r,y,r],
[g,g,r,r],
[y,r,ry,r]
]

letting Cars be domain int(r,ry,g,y)
letting Pedestrians be domain int(r,g)

\$ decision variables
find V: matrix indexed by [range] of Cars
find P: matrix indexed by [range] of Pedestrians

such that
forall i, j: range .
(j = (1+i) % 4) => table([V[i], P[i], V[j], P[j]], allowed)