module pred where open import indexed open import var hiding (_<$>_) open import environment open import Agda.Builtin.List record Pred {I : Set} (T : I ─Scoped) : Set₁ where constructor mkPred field pred : {i : I} → [ T i ⟶ κ Set ] open Pred public module _ {I : Set} {T : I ─Scoped} where record ∀[_] (𝓟 : Pred T) {Γ Δ : List I} (ρ : (Γ ─Env) T Δ) : Set where constructor pack^P field lookup^P : ∀ {i} k → pred 𝓟 {i} (lookup ρ k) open ∀[_] public module _ {I : Set} {T : I ─Scoped} {𝓟 : Pred T} where _<$>^P_ : {Γ Δ Θ : List I} {f : {i : I} → T i Δ → T i Θ} → ({i : I} {t : T i Δ} → pred 𝓟 t → pred 𝓟 (f t)) → {ρ : (Γ ─Env) T Δ} → ∀[ 𝓟 ] ρ → ∀[ 𝓟 ] (f <$> ρ) lookup^P (F <$>^P ρ) k = F (lookup^P ρ k) module _ {I : Set} {T : I ─Scoped} {𝓟 : Pred T} {Δ : List I} where ε^P : ∀[ 𝓟 ] (ε {n = Δ}) lookup^P ε^P () module _ {I : Set} {T : I ─Scoped} {𝓟 : Pred T} {Γ Δ : List I} where _∙^P_ : {ρ : (Γ ─Env) T Δ} → ∀[ 𝓟 ] ρ → {i : I} {v : T i Δ} → pred 𝓟 v → ∀[ 𝓟 ] (ρ ∙ v) lookup^P (ρ ∙^P v) z = v lookup^P (ρ ∙^P v) (s k) = lookup^P ρ k