3 node XOR(a,b:bool) returns (Xor:bool);
5 Xor = if a then not b else b;
8 node P(const n: int; B: bool^n) returns (p:bool);
10 p = with n=1 then B[0]
11 else XOR(B[n-1] , P(n-1,B[0..n-2]));
14 node parity (input: bool^size)
15 returns (parity,done: bool);
16 var b, todo: bool^size;
18 b[0..(size-2)] = input[0..(size-2)] ->
20 b[size-1] = input[size-1] -> false;
21 todo[0..(size-2)] = false^(size-1) ->
22 pre(todo[1..(size-1)]);
23 todo[size-1] = true -> false;
25 parity = b[0] -> XOR(pre(parity) , b[0]);
28 node verif_parity (input: bool^size)
30 var comb, seq, done: bool;
32 ok = not done or (comb = seq);
33 comb = P(size,input) -> pre(comb);
34 (seq,done) = parity(input);