fun Even(n:UInt) {
some m:UInt. n = 2 * m
}
fun Odd(n:UInt) {
some m:UInt. n = 1 + 2 * m
}
union UInt
fun div2(b:UInt)
fun fromNat(Nat) -> UInt
fun log(b:UInt) {
cnt_dubs(pred(b))
}
fun max(x:UInt, y:UInt) {
if x < y then
y
else
x
}
fun min(x:UInt, y:UInt) {
if x < y then
x
else
y
}
fun operator *(UInt,UInt) -> UInt
fun operator +(UInt,UInt) -> UInt
fun operator <(UInt,UInt) -> bool
fun operator >(x:UInt, y:UInt) {
y < x
}
fun operator ^(a:UInt, b:UInt)
fun operator ∸(UInt,UInt) -> UInt
fun operator ≤(x:UInt, y:UInt) {
(x < y or x = y)
}
fun operator ≥(x:UInt, y:UInt) {
y ≤ x
}
fun sqr(a:UInt) {
a * a
}
fun toNat(UInt) -> Nat
uint_Even_not_Odd: (all n:UInt. (Even(n) ⇔ not Odd(n)))
uint_Even_or_Odd: (all n:UInt. (Even(n) or Odd(n)))
uint_even_one_odd: (all n:UInt. (if Even(1 + n) then Odd(n)))
uint_odd_one_even: (all n:UInt. (if Odd(1 + n) then Even(n)))