open import SOAS.Common
open import SOAS.Families.Core
import SOAS.Metatheory.MetaAlgebra
module SOAS.Syntax.Shorthands {T : Set}
{β
F : Functor π½amiliesβ π½amiliesβ}
(open SOAS.Metatheory.MetaAlgebra β
F)
{π : Familyβ β Familyβ}(πα΅ : (π : Familyβ) β MetaAlg π (π π))
where
open import SOAS.Context
open import SOAS.Families.Build
open import SOAS.ContextMaps.Inductive
open import SOAS.Variable
open import Data.Nat
open import Data.Empty
private
variable
Ξ± Ξ² Ξ³ Ξ΄ Ο
: T
Ξ Ξ : Ctx
module _ {π : Familyβ} where
open MetaAlg π (πα΅ π)
ix : Ctx β β β T
ix β
n = β₯-elim impossible where postulate impossible : β₯
ix (Ξ± β Ξ) 0 = Ξ±
ix (Ξ± β Ξ) (suc n) = ix Ξ n
deBruijn : (n : β) β β (ix Ξ n) Ξ
deBruijn {Ξ± β Ξ} 0 = new
deBruijn {Ξ± β Ξ} (suc n) = old (deBruijn n)
deBruijn {β
} _ = β₯-elim impossible where postulate impossible : β₯
β² : {Ξ : Ctx}(n : β) β π π (ix Ξ n) Ξ
β² n = π£ππ (deBruijn n)
xβ : π π Ξ± (Ξ± β Ξ)
xβ = π£ππ new
xβ : π π Ξ² (Ξ± β Ξ² β Ξ)
xβ = π£ππ (old new)
xβ : π π Ξ³ (Ξ± β Ξ² β Ξ³ β Ξ)
xβ = π£ππ (old (old new))
xβ : π π Ξ΄ (Ξ± β Ξ² β Ξ³ β Ξ΄ β Ξ)
xβ = π£ππ (old (old (old new)))
xβ : π π Ο
(Ξ± β Ξ² β Ξ³ β Ξ΄ β Ο
β Ξ)
xβ = π£ππ (old (old (old (old new))))