module A201605.AbelChapmanExtended.Renaming.Syntax where open import A201605.AbelChapmanExtended.Syntax open import A201605.AbelChapmanExtended.OPE Ren : ∀ {X : Set} → (Cx → X → Set) → Cx → Cx → Set Ren Ξ Γ Γ′ = ∀ {x} → Ξ Γ x → Ξ Γ′ x mutual ren-var : ∀ {Γ Γ′} → Γ′ ⊇ Γ → Ren Var Γ Γ′ ren-var id x = x ren-var (weak η) x = pop (ren-var η x) ren-var (lift η) top = top ren-var (lift η) (pop x) = pop (ren-var η x) ren-nen : ∀ {Δ Δ′} → Δ′ ⊇ Δ → Ren (Ne Nf) Δ Δ′ ren-nen η (loop n) = loop (ren-nen η n) ren-nen η (var x) = var (ren-var η x) ren-nen η (app n m) = app (ren-nen η n) (ren-nf η m) ren-nen η (fst n) = fst (ren-nen η n) ren-nen η (snd n) = snd (ren-nen η n) ren-nev : ∀ {Δ Δ′} → Δ′ ⊇ Δ → Ren (Ne Val) Δ Δ′ ren-nev η (loop v) = loop (ren-nev η v) ren-nev η (var x) = var (ren-var η x) ren-nev η (app v w) = app (ren-nev η v) (ren-val η w) ren-nev η (fst v) = fst (ren-nev η v) ren-nev η (snd v) = snd (ren-nev η v) ren-nf : ∀ {Δ Δ′} → Δ′ ⊇ Δ → Ren Nf Δ Δ′ ren-nf η (ne n) = ne (ren-nen η n) ren-nf η (lam n) = lam (ren-nf (lift η) n) ren-nf η (pair n m) = pair (ren-nf η n) (ren-nf η m) ren-nf η unit = unit ren-val : ∀ {Δ Δ′} → Δ′ ⊇ Δ → Ren Val Δ Δ′ ren-val η (ne n) = ne (ren-nev η n) ren-val η (lam t ρ) = lam t (ren-env η ρ) ren-val η (pair v w) = pair (ren-val η v) (ren-val η w) ren-val η unit = unit ren-env : ∀ {Δ Δ′} → Δ′ ⊇ Δ → Ren Env Δ Δ′ ren-env η ∅ = ∅ ren-env η (ρ , v) = ren-env η ρ , ren-val η v wk : ∀ {Γ a} → (Γ , a) ⊇ Γ wk = weak id wk-val : ∀ {Δ a c} → Val Δ c → Val (Δ , a) c wk-val = ren-val wk