quox/quox-nat.agda

44 lines
1 KiB
Agda
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

open import Axiom.Extensionality.Propositional
module _ (ext : {a b} Extensionality a b) where
open import Prelude hiding (zero; suc)
open import Data.W
open import Data.Container
open import Data.Container.Relation.Unary.All ; open
variable : Level
data Tag : Set where `zero `suc : Tag
Body : Tag Set
Body t = case t of λ {`zero ; `suc }
Repr : Container lzero lzero
Repr = Tag Body
Nat : Set
Nat = W Repr
Nat : Set
Nat = Repr Nat
zero : Nat
zero = sup (`zero , λ ())
suc : Nat Nat
suc n = sup (`suc , const n)
elim : (P : Nat Set )
(Z : P zero)
(S : n P n P (suc n))
(n : Nat) P n
elim P Z S = induction P λ {(tag , body)}
(case tag
return (λ t (n : Body t Nat)
Repr P (t , n)
P (sup (t , n)))
of λ where
`zero λ n _ ≡.subst (λ n P (sup (`zero , n))) (ext λ ()) Z
`suc λ n IH S (n tt) (IH .proof tt)) body