12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- module Problem1 where
- -- 1.1
- data Nat : Set where
- zero : Nat
- suc : Nat -> Nat
- -- 1.2
- infixl 60 _+_
- _+_ : Nat -> Nat -> Nat
- zero + m = m
- suc n + m = suc (n + m)
- -- 1.3
- infixl 70 _*_
- _*_ : Nat -> Nat -> Nat
- zero * m = zero
- suc n * m = m + n * m
- -- 1.4
- infix 30 _==_
- data _==_ {A : Set}(x : A) : A -> Set where
- refl : x == x
- cong : {A B : Set}(f : A -> B){x y : A} -> x == y -> f x == f y
- cong f refl = refl
- assoc : (x y z : Nat) -> x + (y + z) == (x + y) + z
- assoc zero y z = refl
- assoc (suc x) y z = cong suc (assoc x y z)
- -- Alternative solution using 'with'. Note that in order
- -- to be able to pattern match on the induction hypothesis
- -- we have to abstract (using with) over the left hand side
- -- of the equation.
- assoc' : (x y z : Nat) -> x + (y + z) == (x + y) + z
- assoc' zero y z = refl
- assoc' (suc x) y z with x + (y + z) | assoc x y z
- ... | .((x + y) + z) | refl = refl
|