Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. module nat where
  2. open import Data.Nat
  3. open import Data.Product
  4. open import Relation.Binary.PropositionalEquality using (_≡_; refl)
  5.  
  6. indℕ : ∀ {ℓ} → (C : ℕ → Set ℓ) → C 0 → ((n : ℕ) → C n → C (suc n)) → (n : ℕ) → C n
  7. indℕ C z f 0 = z
  8. indℕ C z f (suc n) = f n (indℕ C z f n)
  9.  
  10. iter : ∀ {ℓ} (C : Set ℓ) → C → (C → C) → ℕ → C
  11. iter C c₀ cs zero = c₀
  12. iter C c₀ cs (suc n) = cs (iter C c₀ cs n)
  13.  
  14. recℕ₁ : ∀ {ℓ} (C : Set ℓ) → C → (ℕ → C → C) → ℕ → C
  15. recℕ₁ C c₀ cs zero = c₀
  16. recℕ₁ C c₀ cs (suc n) = cs n (recℕ₁ C c₀ cs n)
  17.  
  18. recℕ₂ : ∀ {ℓ} (C : Set ℓ) → C → (ℕ → C → C) → ℕ → C
  19. recℕ₂ C c₀ cs n = proj₁ (iter (C × ℕ) (c₀ , 0) (λ p → cs (proj₂ p) (proj₁ p) , suc (proj₂ p)) n)
  20.  
  21. recℕ₁≡recℕ₂ : ∀ {ℓ} (C : Set ℓ) → (c : C) → (cs : (ℕ → C → C)) → (n : ℕ) → recℕ₁ C c cs n ≡ recℕ₂ C c cs n
  22. recℕ₁≡recℕ₂ C c cs = indℕ (λ n → recℕ₁ C c cs n ≡ recℕ₂ C c cs n) refl (λ n → {!!})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement