quox/quox-nat.agda

45 lines
1 KiB
Agda
Raw Normal View History

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