module Declarative.Examples.StdLib.Nat where
open import Utils using (Kind;*) open import Type using (Ctx⋆;_⊢⋆_;Z;S) open Ctx⋆ open _⊢⋆_ open import Type.Equality using (_≡β_) open _≡β_ import Type.RenamingSubstitution as ⋆ open import Declarative using (Ctx;_⊢_;_∋_) open _⊢_ open _∋_ open import Declarative.Examples.StdLib.Function
G : ∀{Φ} → Φ ,⋆ * ⊢⋆ *
G = Π (` Z ⇒ (` (S Z) ⇒ ` Z) ⇒ ` Z)
M : ∀{Φ} → Φ ⊢⋆ *
M = μ0 · ƛ G
N : ∀{Φ} → Φ ⊢⋆ *
N = G ⋆.[ M ]
Zero : ∀{Φ}{Γ : Ctx Φ} → Γ ⊢ N
Zero = Λ (ƛ (ƛ (` (S (Z )))))
-- succ = λ n : N . Λ R . λ x : R . λ y : M → R . y (in n)
-- : N → N
Succ : ∀{Φ}{Γ : Ctx Φ} → Γ ⊢ N ⇒ N
Succ = ƛ (Λ (ƛ (ƛ
(` Z · (wrap0 (ƛ G) (conv (sym≡β (β≡β _ _)) (` (S (S (T Z))))))))))
--FoldNat : ∀{Φ}{Γ : Ctx Φ} → {!!}
--FoldNat = {!!}