{-# OPTIONS --safe --sized-types #-}
open import Generic.Syntax using (Desc)
module Generic.Semantics.Syntactic {I} {d : Desc I} where
open import Size
open import Data.List hiding ([_] ; lookup)
open import Function
open import Relation.Binary.PropositionalEquality hiding ([_])
open ≡-Reasoning
open import Relation.Unary
open import Data.Var
open import Data.Var.Varlike
open import Data.Environment
open import Data.Relation
open import Generic.Syntax
open import Generic.Semantics
open Semantics
private
variable
σ τ : I
Γ Δ : List I
Ren : Semantics d Var (Tm d ∞)
Ren .th^𝓥 = th^Var
Ren .var = `var
Ren .alg = `con ∘ fmap d (reify vl^Var)
th^Tm : Thinnable (Tm d ∞ σ)
th^Tm t ρ = Semantics.semantics Ren ρ t
vl^Tm : VarLike (Tm d ∞)
new vl^Tm = `var z
th^𝓥 vl^Tm = th^Tm
Sub : Semantics d (Tm d ∞) (Tm d ∞)
Sub .th^𝓥 = th^Tm
Sub .var = id
Sub .alg = `con ∘ fmap d (reify vl^Tm)
module PAPERONLY where
ren : (Γ ─Env) Var Δ →
Tm d ∞ σ Γ → Tm d ∞ σ Δ
ren ρ t = Semantics.semantics Ren ρ t
sub : (Γ ─Env) (Tm d ∞) Δ →
Tm d ∞ σ Γ → Tm d ∞ σ Δ
sub ρ t = Semantics.semantics Sub ρ t
ren : Thinning Γ Δ → (Γ ─Comp) (Tm d ∞) Δ
ren = Semantics.semantics Ren
sub : ∀ {s} → (Γ ─Env) (Tm d ∞) Δ → Tm d s σ Γ → Tm d ∞ σ Δ
sub ρ t = Semantics.semantics Sub ρ t
vl^VarTm : VarLikeᴿ VarTmᴿ vl^Var vl^Tm
VarLikeᴿ.newᴿ vl^VarTm = refl
VarLikeᴿ.thᴿ vl^VarTm = λ σ → cong (ren σ)
reify^Tm : ∀ Δ → ∀[ Kripke (Tm d ∞) (Tm d ∞) Δ σ ⇒ (Δ ++_) ⊢ Tm d ∞ σ ]
reify^Tm Δ = reify vl^Tm Δ _
id^Tm : (Γ ─Env) (Tm d ∞) Γ
lookup id^Tm = `var
lookup-base^Tm : (k : Var σ Γ) → lookup (base vl^Tm) k ≡ `var k
lookup-base^Tm z = refl
lookup-base^Tm (s k) rewrite lookup-base^Tm k = refl
base^VarTmᴿ : ∀ {Γ} → All VarTmᴿ Γ (base vl^Var) (base vl^Tm)
lookupᴿ base^VarTmᴿ k = begin
`var (lookup (base vl^Var) k) ≡⟨ cong `var (lookup-base^Var k) ⟩
`var k ≡⟨ sym (lookup-base^Tm k) ⟩
lookup (base vl^Tm) k ∎
infix 5 _[_
infix 6 _/0]
_/0] : Tm d ∞ σ Γ → (σ ∷ Γ ─Env) (Tm d ∞) Γ
_/0] = singleton vl^Tm
_[_ : Tm d ∞ τ (σ ∷ Γ) → (σ ∷ Γ ─Env) (Tm d ∞) Γ → Tm d ∞ τ Γ
t [ ρ = sub ρ t