1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | language Essence 1.3 $ prob003: quasigroup existence QG3 given n : int (1..100) letting g be domain int (0..n-1) find quasigroup : function ( total ) tuple (g,g) --> g such that $ Latin square-ness forAll v : g . injective (restrict(quasigroup,` tuple ( int (v),g)`)), forAll v : g . injective (restrict(quasigroup,` tuple (g, int (v))`)), $ qg3 ((a*b)*(b*a))=a forAll a,b : g . quasigroup((quasigroup((a,b)),quasigroup((b,a)))) = a |