PROBLEM EvenParity CODE << const int N = 5; >> NONTERMINALS Expr<>. AND<>. OR<>. NAND<>. NOR<>. TERMINALS D<> CONSTRAINTS val IN SET <> . RULES Expr<> = LOCAL<< int val = 0; >> AND<> | OR<> | NAND<> | NOR<> | D<> SEM<< p = d[val]; >> . AND<> = LOCAL << bool p1, p2; >> Expr<> Expr<> SEM << p = p1 & p2; >> . OR<> = LOCAL << bool p1, p2; >> Expr<> Expr<> SEM << p = p1 | p2; >> . NAND<> = LOCAL << bool p1, p2; >> Expr<> Expr<> SEM << p = !(p1 & p2); >> . NOR<> = LOCAL << bool p1, p2; >> Expr<> Expr<> SEM << p = !(p1 | p2); >> . MINIMIZE << bool[] d = new bool[N]; int mistakes = 0; for(int i = 0; i < Math.Pow(2, N); i++) { // generate bit-vector and count number of 1-bits int x = i; int nBitsOne = 0; for(int j = 0; j < N; j++) { if((x % 2) == 1) { d[N - j - 1] = true; nBitsOne++; } else { d[N - j - 1] = false; } x = (x / 2); } bool target = (nBitsOne % 2) == 0; // apply model bool p; Expr(d, out p); if(p != target) mistakes++; } return mistakes; >> END EvenParity.