module SOAS.Metatheory.Syntax {T : Set} where
open import SOAS.Families.Core {T}
open import SOAS.Families.Build
open import SOAS.Common
open import SOAS.Context
open import Categories.Object.Initial
open import SOAS.Construction.Structure
open import SOAS.ContextMaps.Inductive
open import SOAS.Coalgebraic.Strength
open import SOAS.Abstract.ExpStrength
open import SOAS.Metatheory.MetaAlgebra
record Syntax : Setβ where
field
β
F : Functor π½amiliesβ π½amiliesβ
β
:CS : CompatStrengths β
F
π:Init : (π : Familyβ) β Initial (πetaAlgebras β
F π)
mvarα΅’ : {π : Familyβ}{Ο : T}{Ξ Ξ : Ctx} (open Initial (π:Init π))
β π Ο Ξ β Sub (πΆ β₯) Ξ Ξ β πΆ β₯ Ο Ξ
module _ {π : Familyβ} where
open Initial (π:Init π)
private
variable
Ξ± Ξ±β Ξ±β Ξ±β Ξ±β : T
Ξ Ξ Ξ β Ξ β Ξ β Ξ β : Ctx
π : MCtx
Tm : MCtx β Familyβ
Tm π = πΆ (Initial.β₯ (π:Init β₯ π β₯))
infix 100 πβ¨_ πβ¨_ π β¨_ π‘β¨_ π’β¨_
infix 100 βα΅β¨_ βα΅β¨_ βαΆβ¨_ βα΅β¨_ βα΅β¨_
πβ¨_ : Sub (Tm (β
Ξ β©β Ξ± β π)) Ξ Ξ β Tm (β
Ξ β©β Ξ± β π) Ξ± Ξ
πβ¨ Ξ΅ = mvarα΅’ β Ξ΅
πβ¨_ : Sub (Tm (β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π)) Ξ Ξ
β Tm (β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π) Ξ± Ξ
πβ¨ Ξ΅ = mvarα΅’ (β β) Ξ΅
π β¨_ : Sub (Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π)) Ξ Ξ
β Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π) Ξ± Ξ
π β¨ Ξ΅ = mvarα΅’ (β β β) Ξ΅
π‘β¨_ : Sub (Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π)) Ξ Ξ
β Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π) Ξ± Ξ
π‘β¨ Ξ΅ = mvarα΅’ (β β β β) Ξ΅
π’β¨_ : Sub (Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π)) Ξ Ξ
β Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β©β Ξ± β π) Ξ± Ξ
π’β¨ Ξ΅ = mvarα΅’ (β β β β β) Ξ΅
π : Tm (β
Ξ± β π) Ξ± Ξ
π = πβ¨ β’
π : Tm (β
Ξ β β©β Ξ±β β β
Ξ± β π) Ξ± Ξ
π = πβ¨ β’
π : Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ± β π) Ξ± Ξ
π = π β¨ β’
π‘ : Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ± β π) Ξ± Ξ
π‘ = π‘β¨ β’
π’ : Tm (β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ β β©β Ξ±β β β
Ξ± β π) Ξ± Ξ
π’ = π’β¨ β’
βα΅ = π ; βα΅ = π ; βαΆ = π ; βα΅ = π‘ ; βα΅ = π’
βα΅β¨_ = πβ¨_ ; βα΅β¨_ = πβ¨_ ; βαΆβ¨_ = π β¨_ ; βα΅β¨_ = π‘β¨_ ; βα΅β¨_ = π’β¨_