12
{-# BUILTIN NATURAL Nat #-}
13
{-# BUILTIN ZERO zero #-}
14
{-# BUILTIN SUC suc #-}
19
_+_ : Nat -> Nat -> Nat
21
suc n + m = suc (n + m)
23
lem-plus-zero : (n : Nat) -> n + 0 ≡ n
24
lem-plus-zero zero = refl
25
lem-plus-zero (suc n) = cong suc (lem-plus-zero n)
27
lem-plus-suc : (n m : Nat) -> n + suc m ≡ suc (n + m)
28
lem-plus-suc zero m = refl
29
lem-plus-suc (suc n) m = cong suc (lem-plus-suc n m)
31
lem-plus-commute : (n m : Nat) -> n + m ≡ m + n
32
lem-plus-commute n zero = lem-plus-zero _
33
lem-plus-commute n (suc m) with n + suc m | lem-plus-suc n m
34
... | .(suc (n + m)) | refl = cong suc (lem-plus-commute n m)
36
_*_ : Nat -> Nat -> Nat
40
{-# BUILTIN NATPLUS _+_ #-}
41
{-# BUILTIN NATTIMES _*_ #-}
43
_==_ : Nat -> Nat -> Bool
47
suc n == suc m = n == m
49
{-# BUILTIN NATEQUALS _==_ #-}
53
NonZero (suc _) = True