module Vars {χ : Set} where
open import Data.Function
using ( _∘_ )
open import Relation.Binary.PropositionalEquality
using ( _≡_
; refl )
open import Ctx
open import Modalities
open import Predicates
Var : Ctx χ → Pred χ
Var Γ α = Dia (_≡_ α) Γ
vz : ∀ {Γ α} → Var (Γ ▸ α) α
vz = here refl
vs : ∀ {Γ α} → Var Γ ⊆ Var (Γ ▸ α)
vs = there
lookup : ∀ {ϕ Γ} → Box ϕ Γ → Var Γ ⊆ ϕ
lookup {Γ = ε} _ ()
lookup (_ ▸ ϕ-α) (here refl) = ϕ-α
lookup (Γ□ ▸ _ ) (there p) = lookup Γ□ p
tabulate : ∀ {ϕ Γ} → Var Γ ⊆ ϕ → Box ϕ Γ
tabulate {Γ = ε} f = ε
tabulate {Γ = Γ ▸ a} f = tabulate (f ∘ vs) ▸ f vz