hwk1.agda
module hwk1 where
open import Data.Nat
open import Relation.Binary.PropositionalEquality as Eq
open Eq.≡-Reasoning
natrec : {C : Set} → (a : ℕ) → (d : C) → (e : ℕ → C → C) → C
natrec zero d e = d
natrec (suc b) d e = e b (natrec b d e)
⊕ : ℕ → ℕ → ℕ
⊕ x y = natrec x y (λ u v → suc v)
problem2-lemma : (x : ℕ) → natrec x 0 (λ u v → suc v) ≡ x
problem2-lemma zero = refl
problem2-lemma (suc x) = cong suc (problem2-lemma x)
-- (λ u v → suc v) x (natrec x 0 (λ u v → suc v))
-- suc (natrec x 0 (λ u v → suc v))
problem2 : (x : ℕ) → ⊕ x 0 ≡ x
problem2 x = problem2-lemma x
-- begin
-- ⊕ x 0
-- ≡⟨⟩
-- natrec x 0 (λ u v → suc v)
-- ≡⟨ {! !} ⟩
-- x
-- ∎