1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | language Essence 1.3 given nbDom : int (1..) letting dom be domain int (1..nbDom) given bound : int (1..100) letting Postion be domain ( int (1..bound), int (1..bound)) given numClues : int (1..bound**2) letting Clue be domain int (1..numClues) letting Arg be domain int (1..numClues) letting Type be new type enum {Add, Modulo} $ locations given l : function ( total , injective ) Clue --> ( Type , Arg, Arg, Postion ) find grid : matrix indexed by [ int (1..bound), int (1..bound)] of dom such that forAll i : Clue . ( l(i)[1] = Add -> grid[ l(i)[4,1], l(i)[4,2] ] = grid[ l( l(i)[2] )[4,1] , l( l(i)[2] )[4,2] ] + grid[ l( l(i)[3] )[4,1] , l( l(i)[3] )[4,2] ] ) /\ ( l(i)[1] = Modulo -> grid[ l(i)[4,1], l(i)[4,2] ] = grid[ l( l(i)[2] )[4,1] , l( l(i)[2] )[4,2] ] % grid[ l( l(i)[3] )[4,1] , l( l(i)[3] )[4,2] ] ) |