@@ -0,0 +1,42 @@
3+data Parity : Nat -> Set where
5+ | odd : Parity (S (n + n));
7+parity : (n:Nat) -> Parity n;
9+parity (S O) = odd {n=O};
10+parity (S (S k)) with parity k {
11+ parity (S (S (j + j))) | even ?= even {n=S j};
12+ parity (S (S (S (j + j)))) | odd ?= odd {n=S j};
16+natToBin : Nat -> List Bool;
18+natToBin k with parity k {
19+ natToBin (j + j) | even = False :: natToBin j;
20+ natToBin (S (j + j)) | odd = True :: natToBin j;
24+main = print (natToBin 42);
26+---------- Proofs ----------
28+main.parity_lemma_2 = proof {
31+ rewrite plusn_Sm j j;
35+main.parity_lemma_1 = proof {
38+ rewrite plusn_Sm j j;