{-# OPTIONS --safe --without-K #-}

open import Term

module Renaming.Base where

infixr 5 _∷_
infixl 10 _◇_
infixl 9 _⟨_⟩
infixl 9 _⟪_⟫

data Renaming : Ctx  Ctx  Set where
     : Renaming  Δ
  _∷_ : Δ  τ  Renaming Γ Δ  Renaming (Γ , τ) Δ

private variable ρ ρ₁ ρ₂ : Renaming Γ Δ

suc-renaming : Renaming Γ Δ  Renaming Γ (Δ , τ)
suc-renaming  = 
suc-renaming (x  ρ) = S x  suc-renaming ρ

ext : Renaming Γ Δ  Renaming (Γ , τ) (Δ , τ)
ext ρ = Z  suc-renaming ρ

_⟨_⟩ : Renaming Γ Δ  Γ  τ  Δ  τ
(x  _)  Z  = x
(_  ρ)  S x  = ρ  x 
   
_⟪_⟫ : Renaming Γ Δ  Γ  τ  Δ  τ
ρ  var x  = var (ρ  x )
ρ  s  t  = ρ  s   ρ  t 
ρ  abs t  = abs (ext ρ  t )

_◇_ : Renaming Γ Δ  Renaming Ω Γ  Renaming Ω Δ
ρ₁   = 
ρ₁  (x  ρ₂) = ρ₁  x   ρ₁  ρ₂

idᴿ : (Γ : Ctx)  Renaming Γ Γ
idᴿ        = 
idᴿ (Γ , x) = ext (idᴿ Γ)