fun EvenNat(n:Nat) {
some m:Nat. n = suc(suc(zero)) * m
}
Even_not_Odd: (all n:Nat. (EvenNat(n) ⇔ not OddNat(n)))
Even_or_Odd: (all n:Nat. (EvenNat(n) or OddNat(n)))
fun OddNat(n:Nat) {
some m:Nat. n = suc(suc(suc(zero)) * m)
}
addition_of_evens: (all x:Nat, y:Nat. (if (EvenNat(x) and EvenNat(y)) then EvenNat(x + y)))
even_or_odd: (all n:Nat. (is_even(n) or is_odd(n)))
fun is_even(n:Nat) {
parity(n, true)
}
is_even_odd: (all n:Nat. ((if is_even(n) then EvenNat(n)) and (if is_odd(n) then OddNat(n))))
fun is_odd(n:Nat) {
parity(n, false)
}
recursive parity(Nat,bool) -> bool{
parity(zero, b) = b
parity(suc(n'), b) = parity(n', not b)
}