open import Definition.Typed.EqualityRelation
open import Definition.Typed.Restrictions
open import Graded.Modality
module Definition.LogicalRelation.Properties.Kit
{a} {Mod : Set a}
{𝕄 : Modality Mod}
(R : Type-restrictions 𝕄)
{{eqrel : EqRelSet R}}
where
open EqRelSet {{...}}
open Type-restrictions R
open import Definition.Untyped Mod as U hiding (K)
open import Definition.Untyped.Properties Mod
open import Definition.LogicalRelation R
open import Tools.Function
open import Tools.Nat
open import Tools.Product
import Tools.PropositionalEquality as PE
private variable
l l₁ l₂ n : Nat
Γ : Con Term _
A B : Term _
infix 4 _⊩<⟨_⟩_
_⊩<⟨_⟩_ : Con Term n → l₁ <ᵘ l₂ → Term n → Set a
Γ ⊩<⟨ p ⟩ A = LogRelKit._⊩_ (kit′ p) Γ A
infix 4 _⊩<⟨_⟩_≡_/_
_⊩<⟨_⟩_≡_/_ :
(Γ : Con Term n) (p : l₁ <ᵘ l₂) (A _ : Term n) → Γ ⊩<⟨ p ⟩ A → Set a
Γ ⊩<⟨ p ⟩ A ≡ B / ⊩A = LogRelKit._⊩_≡_/_ (kit′ p) Γ A B ⊩A
⊩<⇔⊩ : (p : l₁ <ᵘ l₂) → Γ ⊩<⟨ p ⟩ A ⇔ Γ ⊩⟨ l₁ ⟩ A
⊩<⇔⊩ ≤ᵘ-refl = id⇔
⊩<⇔⊩ (≤ᵘ-step p) = ⊩<⇔⊩ p
⊩<≡⇔⊩≡ :
(p : l₁ <ᵘ l₂) {⊩A : Γ ⊩<⟨ p ⟩ A} →
Γ ⊩<⟨ p ⟩ A ≡ B / ⊩A ⇔ Γ ⊩⟨ l₁ ⟩ A ≡ B / ⊩<⇔⊩ p .proj₁ ⊩A
⊩<≡⇔⊩≡ ≤ᵘ-refl = id⇔
⊩<≡⇔⊩≡ (≤ᵘ-step p) = ⊩<≡⇔⊩≡ p
⊩<≡⇔⊩≡′ :
(p : l₁ <ᵘ l₂) {⊩A : Γ ⊩⟨ l₁ ⟩ A} →
Γ ⊩<⟨ p ⟩ A ≡ B / ⊩<⇔⊩ p .proj₂ ⊩A ⇔ Γ ⊩⟨ l₁ ⟩ A ≡ B / ⊩A
⊩<≡⇔⊩≡′ ≤ᵘ-refl = id⇔
⊩<≡⇔⊩≡′ (≤ᵘ-step p) = ⊩<≡⇔⊩≡′ p
opaque
kit≡kit′ : (p : l₁ <ᵘ l₂) → kit l₁ PE.≡ kit′ p
kit≡kit′ ≤ᵘ-refl = PE.refl
kit≡kit′ (≤ᵘ-step p) = kit≡kit′ p
opaque
irrelevance-⊩< :
(p : l <ᵘ l₁) (q : l <ᵘ l₂) → Γ ⊩<⟨ p ⟩ A → Γ ⊩<⟨ q ⟩ A
irrelevance-⊩< ≤ᵘ-refl ≤ᵘ-refl = idᶠ
irrelevance-⊩< p (≤ᵘ-step q) = irrelevance-⊩< p q
irrelevance-⊩< (≤ᵘ-step p) q = irrelevance-⊩< p q
opaque
unfolding irrelevance-⊩<
irrelevance-⊩<≡ :
(p : l <ᵘ l₁) (q : l <ᵘ l₂) {⊩A : Γ ⊩<⟨ p ⟩ A} →
Γ ⊩<⟨ p ⟩ A ≡ B / ⊩A →
Γ ⊩<⟨ q ⟩ A ≡ B / irrelevance-⊩< p q ⊩A
irrelevance-⊩<≡ ≤ᵘ-refl ≤ᵘ-refl = idᶠ
irrelevance-⊩<≡ (≤ᵘ-step p) ≤ᵘ-refl = irrelevance-⊩<≡ p ≤ᵘ-refl
irrelevance-⊩<≡ ≤ᵘ-refl (≤ᵘ-step q) = irrelevance-⊩<≡ ≤ᵘ-refl q
irrelevance-⊩<≡ (≤ᵘ-step p) (≤ᵘ-step q) =
irrelevance-⊩<≡ (≤ᵘ-step p) q