{-# OPTIONS --backtracking-instance-search #-}
open import Definition.Typed.Restrictions
open import Graded.Modality
module Definition.Typed.Stability.Primitive
{a} {M : Set a}
{𝕄 : Modality M}
(R : Type-restrictions 𝕄)
where
open import Definition.Typed R
open import Definition.Typed.Inversion.Primitive R
open import Definition.Typed.Properties.Admissible.Level.Primitive R
open import Definition.Typed.Properties.Admissible.Var R
open import Definition.Typed.Properties.Definition.Primitive R
open import Definition.Typed.Properties.Well-formed R
open import Definition.Typed.Size R
open import Definition.Typed.Weakening R
open import Definition.Untyped M hiding (wk)
open import Definition.Untyped.Quotient 𝕄
open import Tools.Fin
open import Tools.Function
open import Tools.Nat
open import Tools.Product as Σ
import Tools.PropositionalEquality as PE
open import Tools.Size
open import Tools.Size.Instances
private variable
m n : Nat
∇ : DCon (Term 0) _
x : Fin _
Γ Δ Η : Con Term _
𝓙 : Judgement _
A B C t u : Term _
l l₁ l₂ : Lvl _
σ σ₁ σ₂ : Subst _ _
s s₂ : Size
infix 24 _∙⟨_∣_⟩
data _»⊢_≡_ : (∇ : DCon (Term 0) m) (_ _ : Con Term n) → Set a where
ε : » ∇ → ∇ »⊢ ε ≡ ε
_∙⟨_∣_⟩ : ∇ »⊢ Γ ≡ Δ → ∇ » Δ ⊢ B → ∇ » Δ ⊢ A ≡ B → ∇ »⊢ Γ ∙ A ≡ Δ ∙ B
opaque
infix 24 _∙⟨_⟩
_∙⟨_⟩ : ∇ »⊢ Γ ≡ Δ → ∇ » Δ ⊢ A → ∇ »⊢ Γ ∙ A ≡ Δ ∙ A
Γ≡Δ ∙⟨ ⊢A ⟩ = Γ≡Δ ∙⟨ ⊢A ∣ refl ⊢A ⟩
opaque
wf-⊢≡ʳ : ∇ »⊢ Γ ≡ Δ → ∇ »⊢ Δ
wf-⊢≡ʳ (ε »∇) = ε »∇
wf-⊢≡ʳ (_ ∙⟨ ⊢B ∣ _ ⟩) = ∙ ⊢B
opaque
reflConEq : ∇ »⊢ Γ → ∇ »⊢ Γ ≡ Γ
reflConEq (ε »∇) = ε »∇
reflConEq (∙ ⊢A) = reflConEq (wf ⊢A) ∙⟨ ⊢A ⟩
opaque
refl-∙⟨_∣_⟩ : ∇ » Γ ⊢ B → ∇ » Γ ⊢ A ≡ B → ∇ »⊢ Γ ∙ A ≡ Γ ∙ B
refl-∙⟨ ⊢B ∣ A≡B ⟩ = reflConEq (wf ⊢B) ∙⟨ ⊢B ∣ A≡B ⟩
opaque
⊢∙≡∙→⊢≡ : ∇ »⊢ Γ ∙ A ≡ Δ ∙ B → ∇ »⊢ Γ ≡ Δ
⊢∙≡∙→⊢≡ (Γ≡Δ ∙⟨ _ ∣ _ ⟩) = Γ≡Δ
opaque
glassify-»⊢≡ : ∇ »⊢ Γ ≡ Δ → glassify ∇ »⊢ Γ ≡ Δ
glassify-»⊢≡ (ε »∇) =
ε (glassify-» »∇)
glassify-»⊢≡ (Γ≡Δ ∙⟨ ⊢B ∣ A≡B ⟩) =
glassify-»⊢≡ Γ≡Δ ∙⟨ glassify-⊢ ⊢B ∣ glassify-⊢ A≡B ⟩
opaque
stability-⊢∈ :
∇ »⊢ Γ ≡ Δ → x ∷ A ∈ Γ →
∃ λ B → ∇ » Δ ⊢ A ≡ B × x ∷ B ∈ Δ
stability-⊢∈ (ε ⊢ε) ()
stability-⊢∈ (Γ≡Δ ∙⟨ ⊢B ∣ A≡B ⟩) here =
_ , wk₁ ⊢B A≡B , here
stability-⊢∈ (Γ≡Δ ∙⟨ ⊢B ∣ _ ⟩) (there x∈) =
Σ.map wk1 (Σ.map (wk₁ ⊢B) there) $
stability-⊢∈ Γ≡Δ x∈
private
record P (s : Size) : Set a where
no-eta-equality
field
stability-⊢ :
∇ »⊢ Γ ≡ Δ →
(⊢A : ∇ » Γ ⊢ A) →
size ⊢A PE.≡ s →
∇ » Δ ⊢ A
stability-⊢≡ :
∇ »⊢ Γ ≡ Δ →
(A≡B : ∇ » Γ ⊢ A ≡ B) →
size A≡B PE.≡ s →
∇ » Δ ⊢ A ≡ B
stability-⊢∷ :
∇ »⊢ Γ ≡ Δ →
(⊢t : ∇ » Γ ⊢ t ∷ A) →
size ⊢t PE.≡ s →
∇ » Δ ⊢ t ∷ A
stability-⊢∷L :
∇ »⊢ Γ ≡ Δ →
(⊢l : ∇ » Γ ⊢ l ∷Level) →
size ⊢l PE.≡ s →
∇ » Δ ⊢ l ∷Level
stability-⊢≡∷ :
∇ »⊢ Γ ≡ Δ →
(t≡u : ∇ » Γ ⊢ t ≡ u ∷ A) →
size t≡u PE.≡ s →
∇ » Δ ⊢ t ≡ u ∷ A
stability-⊢≡∷L :
∇ »⊢ Γ ≡ Δ →
(l₁≡l₂ : ∇ » Γ ⊢ l₁ ≡ l₂ ∷Level) →
size l₁≡l₂ PE.≡ s →
∇ » Δ ⊢ l₁ ≡ l₂ ∷Level
private module Variants (hyp : ∀ {s₁} → s₁ <ˢ s₂ → P s₁) where
opaque
stability-⊢ :
∇ »⊢ Γ ≡ Δ →
(⊢A : ∇ » Γ ⊢ A)
⦃ lt : size ⊢A <ˢ s₂ ⦄ →
∇ » Δ ⊢ A
stability-⊢ Γ≡Δ ⊢A ⦃ lt ⦄ = P.stability-⊢ (hyp lt) Γ≡Δ ⊢A PE.refl
stability-⊢≡ :
∇ »⊢ Γ ≡ Δ →
(A≡B : ∇ » Γ ⊢ A ≡ B)
⦃ lt : size A≡B <ˢ s₂ ⦄ →
∇ » Δ ⊢ A ≡ B
stability-⊢≡ Γ≡Δ A≡B ⦃ lt ⦄ =
P.stability-⊢≡ (hyp lt) Γ≡Δ A≡B PE.refl
stability-⊢∷ :
∇ »⊢ Γ ≡ Δ →
(⊢t : ∇ » Γ ⊢ t ∷ A)
⦃ lt : size ⊢t <ˢ s₂ ⦄ →
∇ » Δ ⊢ t ∷ A
stability-⊢∷ Γ≡Δ ⊢t ⦃ lt ⦄ = P.stability-⊢∷ (hyp lt) Γ≡Δ ⊢t PE.refl
stability-⊢∷L :
∇ »⊢ Γ ≡ Δ →
(⊢l : ∇ » Γ ⊢ l ∷Level)
⦃ lt : size ⊢l <ˢ s₂ ⦄ →
∇ » Δ ⊢ l ∷Level
stability-⊢∷L Γ≡Δ ⊢l ⦃ lt ⦄ =
P.stability-⊢∷L (hyp lt) Γ≡Δ ⊢l PE.refl
stability-⊢≡∷ :
∇ »⊢ Γ ≡ Δ →
(t≡u : ∇ » Γ ⊢ t ≡ u ∷ A)
⦃ lt : size t≡u <ˢ s₂ ⦄ →
∇ » Δ ⊢ t ≡ u ∷ A
stability-⊢≡∷ Γ≡Δ t≡u ⦃ lt ⦄ =
P.stability-⊢≡∷ (hyp lt) Γ≡Δ t≡u PE.refl
stability-⊢≡∷L :
∇ »⊢ Γ ≡ Δ →
(l₁≡l₂ : ∇ » Γ ⊢ l₁ ≡ l₂ ∷Level)
⦃ lt : size l₁≡l₂ <ˢ s₂ ⦄ →
∇ » Δ ⊢ l₁ ≡ l₂ ∷Level
stability-⊢≡∷L Γ≡Δ l₁≡l₂ ⦃ lt ⦄ =
P.stability-⊢≡∷L (hyp lt) Γ≡Δ l₁≡l₂ PE.refl
opaque
stability-⊢-<ˢ :
∇ »⊢ Γ ≡ Δ →
(∃ λ (⊢A : ∇ » Γ ⊢ A) → size ⊢A <ˢ s) →
⦃ lt : s <ˢ s₂ ⦄ →
∇ » Δ ⊢ A
stability-⊢-<ˢ Γ≡Δ (⊢A , A<) =
stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
stability-⊢∷-<ˢ :
∇ »⊢ Γ ≡ Δ →
(∃ λ (⊢t : ∇ » Γ ⊢ t ∷ A) → size ⊢t <ˢ s) →
⦃ lt : s <ˢ s₂ ⦄ →
∇ » Δ ⊢ t ∷ A
stability-⊢∷-<ˢ Γ≡Δ (⊢t , t<) =
stability-⊢∷ Γ≡Δ ⊢t ⦃ lt = <ˢ-trans t< ! ⦄
opaque
unfolding Quot-rel-Con Resp-Con
stability-Resp-Con :
∇ »⊢ Γ ≡ Δ →
(⊢R : ∇ »⊢ Resp-Con Γ A B)
⦃ lt : size ⊢R <ˢ s₂ ⦄ →
∇ »⊢ Resp-Con Γ A B ≡ Resp-Con Δ A B
stability-Resp-Con Γ≡Δ ⊢R =
let _ , ⊢A , ⊢wk1-A , ⊢B = ∙∙∙⊢→⊢-<ˢ ⊢R
Eq₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A ⟩
Eq₂ = Eq₁ ∙⟨ stability-⊢-<ˢ Eq₁ ⊢wk1-A ⟩
in
Eq₂ ∙⟨ stability-⊢-<ˢ Eq₂ ⊢B ⟩
opaque
unfolding Is-set-Con
stability-Is-set-Con :
∇ »⊢ Γ ≡ Δ →
(⊢S : ∇ »⊢ Is-set-Con Γ A B C)
⦃ lt : size ⊢S <ˢ s₂ ⦄ →
∇ »⊢ Is-set-Con Γ A B C ≡ Is-set-Con Δ A B C
stability-Is-set-Con Γ≡Δ ⊢S =
let _ , ⊢Q , ⊢C , ⊢wk1-C , ⊢Id-1-0 , ⊢Id-2-1 =
∙∙∙∙∙⊢→⊢-<ˢ ⊢S
Eq₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢Q ⟩
Eq₂ = Eq₁ ∙⟨ stability-⊢-<ˢ Eq₁ ⊢C ⟩
Eq₃ = Eq₂ ∙⟨ stability-⊢-<ˢ Eq₂ ⊢wk1-C ⟩
Eq₄ = Eq₃ ∙⟨ stability-⊢-<ˢ Eq₃ ⊢Id-1-0 ⟩
in
Eq₄ ∙⟨ stability-⊢-<ˢ Eq₄ ⊢Id-2-1 ⟩
private module Inhabited where
opaque
unfolding Quot-rel-Con size
stability-⊢′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(⊢A : ∇ » Γ ⊢ A) →
size ⊢A PE.≡ s₂ →
∇ » Δ ⊢ A
stability-⊢′ hyp Γ≡Δ = let open Variants hyp in λ where
(Levelⱼ ok _) _ →
Levelⱼ ok (wf-⊢≡ʳ Γ≡Δ)
(univ ⊢A) PE.refl →
univ (stability-⊢∷ Γ≡Δ ⊢A)
(Liftⱼ ⊢l ⊢A) PE.refl →
Liftⱼ (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢ Γ≡Δ ⊢A)
(ΠΣⱼ ⊢B ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
ΠΣⱼ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) ok
(Idⱼ ⊢A ⊢t ⊢u) PE.refl →
Idⱼ (stability-⊢ Γ≡Δ ⊢A) (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ Γ≡Δ ⊢u)
(Quot ok ⊢B) PE.refl →
let _ , ⊢A , ⊢wk1-A = ∙∙⊢→⊢-<ˢ ⊢B
ΓA≡ΔA = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A ⟩
in
Quot ok
(stability-⊢ (ΓA≡ΔA ∙⟨ stability-⊢-<ˢ ΓA≡ΔA ⊢wk1-A ⟩) ⊢B)
opaque
unfolding Quot-rel-Con size
stability-⊢≡′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(A≡B : ∇ » Γ ⊢ A ≡ B) →
size A≡B PE.≡ s₂ →
∇ » Δ ⊢ A ≡ B
stability-⊢≡′ hyp Γ≡Δ = let open Variants hyp in λ where
(refl ⊢A) PE.refl →
refl (stability-⊢ Γ≡Δ ⊢A)
(sym B≡A) PE.refl →
sym (stability-⊢≡ Γ≡Δ B≡A)
(trans A≡B B≡C) PE.refl →
trans (stability-⊢≡ Γ≡Δ A≡B) (stability-⊢≡ Γ≡Δ B≡C)
(univ A≡B) PE.refl →
univ (stability-⊢≡∷ Γ≡Δ A≡B)
(U-cong l₁≡l₂) PE.refl →
U-cong (stability-⊢≡∷ Γ≡Δ l₁≡l₂)
(Lift-cong l₁≡l₂ A≡B) PE.refl →
Lift-cong (stability-⊢≡∷L Γ≡Δ l₁≡l₂) (stability-⊢≡ Γ≡Δ A≡B)
(ΠΣ-cong A₁≡B₁ A₂≡B₂ ok) PE.refl →
let _ , (⊢A₁ , A₁<) = ∙⊢→⊢-<ˢ A₂≡B₂
⊢A₁′ = stability-⊢ Γ≡Δ ⊢A₁
⦃ lt = <ˢ-trans A₁< ! ⦄
in
ΠΣ-cong (stability-⊢≡ Γ≡Δ A₁≡B₁)
(stability-⊢≡ (Γ≡Δ ∙⟨ ⊢A₁′ ⟩) A₂≡B₂) ok
(Id-cong A≡B t₁≡u₁ t₂≡u₂) PE.refl →
Id-cong (stability-⊢≡ Γ≡Δ A≡B) (stability-⊢≡∷ Γ≡Δ t₁≡u₁)
(stability-⊢≡∷ Γ≡Δ t₂≡u₂)
(Quot-cong {A₁} ok A₁≡A₂ B₁≡B₂) PE.refl →
let _ , ⊢A₁ , ⊢wk1-A₁ = ∙∙⊢→⊢-<ˢ B₁≡B₂
ΓA₁≡ΔA₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A₁ ⟩
in
Quot-cong ok (stability-⊢≡ Γ≡Δ A₁≡A₂)
(stability-⊢≡
(ΓA₁≡ΔA₁ ∙⟨ stability-⊢-<ˢ ΓA₁≡ΔA₁ ⊢wk1-A₁ ⟩) B₁≡B₂)
opaque
unfolding Quot-rel-Con size
stability-⊢∷′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(⊢t : ∇ » Γ ⊢ t ∷ A) →
size ⊢t PE.≡ s₂ →
∇ » Δ ⊢ t ∷ A
stability-⊢∷′ hyp Γ≡Δ = let open Variants hyp in λ where
(conv ⊢t B≡A) PE.refl →
conv (stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢≡ Γ≡Δ B≡A)
(var _ x∈Γ) _ →
let _ , A≡B , x∈Δ = stability-⊢∈ Γ≡Δ x∈Γ in
conv (var (wf-⊢≡ʳ Γ≡Δ) x∈Δ) (sym A≡B)
(defn ⊢Γ α↦t A≡A′) PE.refl →
defn (wf-⊢≡ʳ Γ≡Δ) α↦t A≡A′
(Levelⱼ _ ok) _ →
Levelⱼ (wf-⊢≡ʳ Γ≡Δ) ok
(zeroᵘⱼ ok _) _ →
zeroᵘⱼ ok (wf-⊢≡ʳ Γ≡Δ)
(sucᵘⱼ ⊢t) PE.refl →
sucᵘⱼ (stability-⊢∷ Γ≡Δ ⊢t)
(supᵘⱼ ⊢t ⊢u) PE.refl →
supᵘⱼ (stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u)
(Uⱼ ⊢l) PE.refl →
Uⱼ (stability-⊢∷L Γ≡Δ ⊢l)
(Liftⱼ ⊢l₁ ⊢l₂ ⊢A) PE.refl →
Liftⱼ (stability-⊢∷L Γ≡Δ ⊢l₁) (stability-⊢∷L Γ≡Δ ⊢l₂)
(stability-⊢∷ Γ≡Δ ⊢A)
(liftⱼ ⊢l ⊢A ⊢t) PE.refl →
liftⱼ (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢ Γ≡Δ ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t)
(lowerⱼ x) PE.refl →
lowerⱼ (stability-⊢∷ Γ≡Δ x)
(ΠΣⱼ l ⊢A ⊢B ok) PE.refl →
let ⊢A′ = stability-⊢∷ Γ≡Δ ⊢A in
ΠΣⱼ (stability-⊢∷L Γ≡Δ l) ⊢A′
(stability-⊢∷ (Γ≡Δ ∙⟨ univ ⊢A′ ⟩) ⊢B) ok
(lamⱼ ⊢B ⊢t ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢t
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
Γ∙A≡Δ∙A = Γ≡Δ ∙⟨ ⊢A′ ⟩
in
lamⱼ (stability-⊢ Γ∙A≡Δ∙A ⊢B) (stability-⊢∷ Γ∙A≡Δ∙A ⊢t) ok
(⊢t ∘ⱼ ⊢u) PE.refl →
stability-⊢∷ Γ≡Δ ⊢t ∘ⱼ stability-⊢∷ Γ≡Δ ⊢u
(prodⱼ ⊢B ⊢t ⊢u ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
prodⱼ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ Γ≡Δ ⊢u) ok
(fstⱼ ⊢B ⊢t) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
fstⱼ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t)
(sndⱼ ⊢B ⊢t) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
sndⱼ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t)
(prodrecⱼ ⊢C ⊢t ⊢u) PE.refl →
let _ , _ , ok = inversion-ΠΣ (⊢∙→⊢ (wf ⊢C))
_ , (⊢A , A<) , (⊢B , B<) = ∙∙⊢→⊢-<ˢ ⊢u
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢B′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B
⦃ lt = <ˢ-trans B< ! ⦄
in
prodrecⱼ (stability-⊢ (Γ≡Δ ∙⟨ ΠΣⱼ ⊢B′ ok ⟩) ⊢C)
(stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢A′ ⟩ ∙⟨ ⊢B′ ⟩) ⊢u)
(Emptyⱼ _) _ →
Emptyⱼ (wf-⊢≡ʳ Γ≡Δ)
(emptyrecⱼ ⊢A ⊢t) PE.refl →
emptyrecⱼ (stability-⊢ Γ≡Δ ⊢A) (stability-⊢∷ Γ≡Δ ⊢t)
(Unitⱼ ⊢Γ ok) PE.refl →
Unitⱼ (wf-⊢≡ʳ Γ≡Δ) ok
(starⱼ ⊢Γ ok) PE.refl →
starⱼ (wf-⊢≡ʳ Γ≡Δ) ok
(unitrecⱼ ⊢A ⊢t ⊢u) PE.refl →
let ok = inversion-Unit (⊢∙→⊢ (wf ⊢A)) in
unitrecⱼ
(stability-⊢ (Γ≡Δ ∙⟨ univ (Unitⱼ (wf-⊢≡ʳ Γ≡Δ) ok) ⟩) ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u)
(ℕⱼ _) _ →
ℕⱼ (wf-⊢≡ʳ Γ≡Δ)
(zeroⱼ _) _ →
zeroⱼ (wf-⊢≡ʳ Γ≡Δ)
(sucⱼ ⊢t) PE.refl →
sucⱼ (stability-⊢∷ Γ≡Δ ⊢t)
(natrecⱼ ⊢t ⊢u ⊢v) PE.refl →
let ⊢ℕ = univ (ℕⱼ (wf-⊢≡ʳ Γ≡Δ))
_ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢u
⊢A′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢ℕ ⟩) ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
in
natrecⱼ (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢ℕ ⟩ ∙⟨ ⊢A′ ⟩) ⊢u) (stability-⊢∷ Γ≡Δ ⊢v)
(Idⱼ ⊢A ⊢t ⊢u) PE.refl →
Idⱼ (stability-⊢∷ Γ≡Δ ⊢A) (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ Γ≡Δ ⊢u)
(rflⱼ ⊢t) PE.refl →
rflⱼ (stability-⊢∷ Γ≡Δ ⊢t)
(Jⱼ ⊢t ⊢B ⊢u ⊢v ⊢w) PE.refl →
let _ , (⊢A , A<) , _ = ∙∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢t′ = stability-⊢∷ Γ≡Δ ⊢t
in
Jⱼ ⊢t′
(stability-⊢
(Γ≡Δ
∙⟨ ⊢A′ ⟩
∙⟨ Idⱼ (wk₁ ⊢A′ ⊢A′) (wk₁ ⊢A′ ⊢t′) (var₀ ⊢A′) ⟩)
⊢B)
(stability-⊢∷ Γ≡Δ ⊢u) (stability-⊢∷ Γ≡Δ ⊢v)
(stability-⊢∷ Γ≡Δ ⊢w)
(Kⱼ ⊢B ⊢u ⊢v ok) PE.refl →
let _ , ⊢Id = ∙⊢→⊢-<ˢ ⊢B
(⊢A , A<) , (⊢t , t<) , _ = inversion-Id-⊢-<ˢ ⊢Id
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢t′ = stability-⊢∷ Γ≡Δ ⊢t
⦃ lt = <ˢ-trans t< ! ⦄
in
Kⱼ (stability-⊢ (Γ≡Δ ∙⟨ Idⱼ ⊢A′ ⊢t′ ⊢t′ ⟩) ⊢B)
(stability-⊢∷ Γ≡Δ ⊢u) (stability-⊢∷ Γ≡Δ ⊢v) ok
([]-congⱼ ⊢l ⊢A ⊢t ⊢u ⊢v ok) PE.refl →
[]-congⱼ (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢ Γ≡Δ ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u)
(stability-⊢∷ Γ≡Δ ⊢v) ok
(Quot ok ⊢l ⊢A ⊢B) PE.refl →
let _ , ⊢wk1-A = ∙⊢→⊢-<ˢ ⊢B
ΓA≡ΔA = Γ≡Δ ∙⟨ univ (stability-⊢∷ Γ≡Δ ⊢A) ⟩
in
Quot ok (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢∷ Γ≡Δ ⊢A)
(stability-⊢∷ (ΓA≡ΔA ∙⟨ stability-⊢-<ˢ ΓA≡ΔA ⊢wk1-A ⟩) ⊢B)
(class ⊢Q ⊢t) PE.refl →
class (stability-⊢ Γ≡Δ ⊢Q) (stability-⊢∷ Γ≡Δ ⊢t)
(resp {B} ⊢Q ⊢t ⊢u ⊢v) PE.refl →
resp (stability-⊢ Γ≡Δ ⊢Q) (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ Γ≡Δ ⊢u) (stability-⊢∷ Γ≡Δ ⊢v)
(set ⊢Q ⊢t ⊢u ⊢v ⊢w) PE.refl →
set (stability-⊢ Γ≡Δ ⊢Q) (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ Γ≡Δ ⊢u) (stability-⊢∷ Γ≡Δ ⊢v)
(stability-⊢∷ Γ≡Δ ⊢w)
(qrec ⊢C ⊢t ⊢u ⊢v ⊢w) PE.refl →
let _ , ⊢A , _ , _ , ⊢Q = inversion-Is-set-Cons ⊢v
⊢R , R< = wf-<ˢ (λ ()) ⊢u
⊢S , S< = wf-<ˢ (λ ()) ⊢v
in
qrec (stability-⊢ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢Q ⟩) ⊢C)
(stability-⊢∷ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A ⟩) ⊢t)
(stability-⊢∷
(stability-Resp-Con Γ≡Δ ⊢R ⦃ lt = <ˢ-trans R< ! ⦄) ⊢u)
(stability-⊢∷
(stability-Is-set-Con Γ≡Δ ⊢S ⦃ lt = <ˢ-trans S< ! ⦄) ⊢v)
(stability-⊢∷ Γ≡Δ ⊢w)
opaque
unfolding size
stability-⊢∷L′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(⊢l : ∇ » Γ ⊢ l ∷Level) →
size ⊢l PE.≡ s₂ →
∇ » Δ ⊢ l ∷Level
stability-⊢∷L′ hyp Γ≡Δ = let open Variants hyp in λ where
(term ok ⊢l) PE.refl →
term ok (stability-⊢∷ Γ≡Δ ⊢l)
(literal ok _) _ →
literal ok (wf-⊢≡ʳ Γ≡Δ)
opaque
unfolding Quot-rel-Con Resp-Con size
stability-⊢≡∷′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(t≡u : ∇ » Γ ⊢ t ≡ u ∷ A) →
size t≡u PE.≡ s₂ →
∇ » Δ ⊢ t ≡ u ∷ A
stability-⊢≡∷′ hyp Γ≡Δ = let open Variants hyp in λ where
(refl ⊢t) PE.refl →
refl (stability-⊢∷ Γ≡Δ ⊢t)
(sym ⊢A t₂≡t₁) PE.refl →
sym (stability-⊢ Γ≡Δ ⊢A) (stability-⊢≡∷ Γ≡Δ t₂≡t₁)
(trans t₁≡t₂ t₂≡t₃) PE.refl →
trans (stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ t₂≡t₃)
(conv t₁≡t₂ B≡A) PE.refl →
conv (stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡ Γ≡Δ B≡A)
(δ-red ⊢Γ α↦t A≡A′ t≡t′) PE.refl →
δ-red (wf-⊢≡ʳ Γ≡Δ) α↦t A≡A′ t≡t′
(sucᵘ-cong t₁≡t₂) PE.refl →
sucᵘ-cong (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(supᵘ-cong t₁≡t₂ u₁≡u₂) PE.refl →
supᵘ-cong (stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂)
(supᵘ-zeroˡ l) PE.refl →
supᵘ-zeroˡ (stability-⊢∷ Γ≡Δ l)
(supᵘ-sucᵘ l₁ l₂) PE.refl →
supᵘ-sucᵘ (stability-⊢∷ Γ≡Δ l₁) (stability-⊢∷ Γ≡Δ l₂)
(supᵘ-assoc l₁ l₂ l₃) PE.refl →
supᵘ-assoc (stability-⊢∷ Γ≡Δ l₁) (stability-⊢∷ Γ≡Δ l₂) (stability-⊢∷ Γ≡Δ l₃)
(supᵘ-comm l₁ l₂) PE.refl →
supᵘ-comm (stability-⊢∷ Γ≡Δ l₁) (stability-⊢∷ Γ≡Δ l₂)
(supᵘ-idem ⊢l) PE.refl →
supᵘ-idem (stability-⊢∷ Γ≡Δ ⊢l)
(supᵘ-sub ⊢l) PE.refl →
supᵘ-sub (stability-⊢∷ Γ≡Δ ⊢l)
(U-cong l₁≡l₂) PE.refl →
U-cong (stability-⊢≡∷ Γ≡Δ l₁≡l₂)
(Lift-cong ⊢l₁ ⊢l₂ l₂≡l₃ A₁≡A₂) PE.refl →
Lift-cong (stability-⊢∷L Γ≡Δ ⊢l₁) (stability-⊢∷L Γ≡Δ ⊢l₂)
(stability-⊢≡∷L Γ≡Δ l₂≡l₃) (stability-⊢≡∷ Γ≡Δ A₁≡A₂)
(lower-cong x) PE.refl →
lower-cong (stability-⊢≡∷ Γ≡Δ x)
(Lift-β x₁ x₂) PE.refl →
Lift-β (stability-⊢ Γ≡Δ x₁) (stability-⊢∷ Γ≡Δ x₂)
(Lift-η ⊢l ⊢A ⊢t ⊢u lower-t≡lower-u) PE.refl →
Lift-η (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢ Γ≡Δ ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u)
(stability-⊢≡∷ Γ≡Δ lower-t≡lower-u)
(ΠΣ-cong ⊢l A₁≡A₂ B₁≡B₂ ok) PE.refl →
let _ , (⊢A₁ , A₁<) = ∙⊢→⊢-<ˢ B₁≡B₂
⊢A₁′ = stability-⊢ Γ≡Δ ⊢A₁
⦃ lt = <ˢ-trans A₁< ! ⦄
in
ΠΣ-cong (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢≡∷ Γ≡Δ A₁≡A₂)
(stability-⊢≡∷ (Γ≡Δ ∙⟨ ⊢A₁′ ⟩) B₁≡B₂) ok
(app-cong t₁≡t₂ u₁≡u₂) PE.refl →
app-cong (stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂)
(β-red ⊢B ⊢t ⊢u eq ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
β-red (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢t) (stability-⊢∷ Γ≡Δ ⊢u) eq ok
(η-eq ⊢B ⊢t₁ ⊢t₂ t₁0≡t₂0 ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ t₁0≡t₂0
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
Γ∙A≡Δ∙A = Γ≡Δ ∙⟨ ⊢A′ ⟩
in
η-eq (stability-⊢ Γ∙A≡Δ∙A ⊢B) (stability-⊢∷ Γ≡Δ ⊢t₁)
(stability-⊢∷ Γ≡Δ ⊢t₂) (stability-⊢≡∷ Γ∙A≡Δ∙A t₁0≡t₂0) ok
(fst-cong ⊢B t₁≡t₂) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
fst-cong (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(snd-cong ⊢B t₁≡t₂) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
snd-cong (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(Σ-β₁ ⊢B ⊢t₁ ⊢t₂ eq ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
Σ-β₁ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t₁)
(stability-⊢∷ Γ≡Δ ⊢t₂) eq ok
(Σ-β₂ ⊢B ⊢t₁ ⊢t₂ eq ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
Σ-β₂ (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t₁)
(stability-⊢∷ Γ≡Δ ⊢t₂) eq ok
(Σ-η ⊢B ⊢t₁ ⊢t₂ fst-t₁≡fst-t₂ snd-t₁≡snd-t₂ ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
Σ-η (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B) (stability-⊢∷ Γ≡Δ ⊢t₁)
(stability-⊢∷ Γ≡Δ ⊢t₂) (stability-⊢≡∷ Γ≡Δ fst-t₁≡fst-t₂)
(stability-⊢≡∷ Γ≡Δ snd-t₁≡snd-t₂) ok
(prod-cong ⊢B t₁≡t₂ u₁≡u₂ ok) PE.refl →
let _ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A ⦃ lt = <ˢ-trans A< ! ⦄
in
prod-cong (stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂) ok
(prodrec-cong C₁≡C₂ t₁≡t₂ u₁≡u₂) PE.refl →
let _ , _ , ok = inversion-ΠΣ (⊢∙→⊢ (wf C₁≡C₂))
_ , (⊢A , A<) , (⊢B , B<) = ∙∙⊢→⊢-<ˢ u₁≡u₂
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢B′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B
⦃ lt = <ˢ-trans B< ! ⦄
in
prodrec-cong (stability-⊢≡ (Γ≡Δ ∙⟨ ΠΣⱼ ⊢B′ ok ⟩) C₁≡C₂)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡∷ (Γ≡Δ ∙⟨ ⊢A′ ⟩ ∙⟨ ⊢B′ ⟩) u₁≡u₂)
(prodrec-β ⊢C ⊢t ⊢u ⊢v eq) PE.refl →
let _ , _ , ok = inversion-ΠΣ (⊢∙→⊢ (wf ⊢C))
_ , (⊢A , A<) , (⊢B , B<) = ∙∙⊢→⊢-<ˢ ⊢v
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢B′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢A′ ⟩) ⊢B
⦃ lt = <ˢ-trans B< ! ⦄
in
prodrec-β (stability-⊢ (Γ≡Δ ∙⟨ ΠΣⱼ ⊢B′ ok ⟩) ⊢C)
(stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢A′ ⟩ ∙⟨ ⊢B′ ⟩) ⊢v) eq
(emptyrec-cong A₁≡A₂ t₁≡t₂) PE.refl →
emptyrec-cong (stability-⊢≡ Γ≡Δ A₁≡A₂) (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(unitrec-cong A₁≡A₂ t₁≡t₂ u₁≡u₂ no-η) PE.refl →
let ok = inversion-Unit (⊢∙→⊢ (wf A₁≡A₂)) in
unitrec-cong
(stability-⊢≡ (Γ≡Δ ∙⟨ univ (Unitⱼ (wf-⊢≡ʳ Γ≡Δ) ok) ⟩) A₁≡A₂)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂) no-η
(unitrec-β ⊢A ⊢t no-η) PE.refl →
let ok = inversion-Unit (⊢∙→⊢ (wf ⊢A)) in
unitrec-β
(stability-⊢ (Γ≡Δ ∙⟨ univ (Unitⱼ (wf-⊢≡ʳ Γ≡Δ) ok) ⟩) ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t) no-η
(unitrec-β-η ⊢A ⊢t ⊢u no-η) PE.refl →
let ok = inversion-Unit (⊢∙→⊢ (wf ⊢A)) in
unitrec-β-η
(stability-⊢ (Γ≡Δ ∙⟨ univ (Unitⱼ (wf-⊢≡ʳ Γ≡Δ) ok) ⟩) ⊢A)
(stability-⊢∷ Γ≡Δ ⊢t) (stability-⊢∷ Γ≡Δ ⊢u) no-η
(η-unit ⊢t₁ ⊢t₂ η) PE.refl →
η-unit (stability-⊢∷ Γ≡Δ ⊢t₁) (stability-⊢∷ Γ≡Δ ⊢t₂) η
(suc-cong t₁≡t₂) PE.refl →
suc-cong (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(natrec-cong A₁≡A₂ t₁≡t₂ u₁≡u₂ v₁≡v₂) PE.refl →
let ⊢ℕ = univ (ℕⱼ (wf-⊢≡ʳ Γ≡Δ))
_ , (⊢A₁ , A₁<) = ∙⊢→⊢-<ˢ u₁≡u₂
⊢A₁′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢ℕ ⟩) ⊢A₁
⦃ lt = <ˢ-trans A₁< ! ⦄
in
natrec-cong (stability-⊢≡ (Γ≡Δ ∙⟨ ⊢ℕ ⟩) A₁≡A₂)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡∷ (Γ≡Δ ∙⟨ ⊢ℕ ⟩ ∙⟨ ⊢A₁′ ⟩) u₁≡u₂)
(stability-⊢≡∷ Γ≡Δ v₁≡v₂)
(natrec-zero ⊢t ⊢u) PE.refl →
let ⊢ℕ = univ (ℕⱼ (wf-⊢≡ʳ Γ≡Δ))
_ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢u
⊢A′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢ℕ ⟩) ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
in
natrec-zero (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢ℕ ⟩ ∙⟨ ⊢A′ ⟩) ⊢u)
(natrec-suc ⊢t ⊢u ⊢v) PE.refl →
let ⊢ℕ = univ (ℕⱼ (wf-⊢≡ʳ Γ≡Δ))
_ , (⊢A , A<) = ∙⊢→⊢-<ˢ ⊢u
⊢A′ = stability-⊢ (Γ≡Δ ∙⟨ ⊢ℕ ⟩) ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
in
natrec-suc (stability-⊢∷ Γ≡Δ ⊢t)
(stability-⊢∷ (Γ≡Δ ∙⟨ ⊢ℕ ⟩ ∙⟨ ⊢A′ ⟩) ⊢u) (stability-⊢∷ Γ≡Δ ⊢v)
(Id-cong A₁≡A₂ t₁≡t₂ u₁≡u₂) PE.refl →
Id-cong (stability-⊢≡∷ Γ≡Δ A₁≡A₂) (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡∷ Γ≡Δ u₁≡u₂)
(J-cong A₁≡A₂ ⊢t₁ t₁≡t₂ B₁≡B₂ u₁≡u₂ v₁≡v₂ w₁≡w₂) PE.refl →
let _ , (⊢A₁ , A₁<) , _ = ∙∙⊢→⊢-<ˢ B₁≡B₂
⊢A₁′ = stability-⊢ Γ≡Δ ⊢A₁
⦃ lt = <ˢ-trans A₁< ! ⦄
⊢t₁′ = stability-⊢∷ Γ≡Δ ⊢t₁
in
J-cong (stability-⊢≡ Γ≡Δ A₁≡A₂) ⊢t₁′
(stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡
(Γ≡Δ
∙⟨ ⊢A₁′ ⟩
∙⟨ Idⱼ (wk₁ ⊢A₁′ ⊢A₁′) (wk₁ ⊢A₁′ ⊢t₁′)
(var₀ ⊢A₁′) ⟩)
B₁≡B₂)
(stability-⊢≡∷ Γ≡Δ u₁≡u₂) (stability-⊢≡∷ Γ≡Δ v₁≡v₂)
(stability-⊢≡∷ Γ≡Δ w₁≡w₂)
(J-β ⊢t ⊢B ⊢u eq) PE.refl →
let _ , (⊢A , A<) , _ = ∙∙⊢→⊢-<ˢ ⊢B
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢t′ = stability-⊢∷ Γ≡Δ ⊢t
in
J-β ⊢t′
(stability-⊢
(Γ≡Δ
∙⟨ ⊢A′ ⟩
∙⟨ Idⱼ (wk₁ ⊢A′ ⊢A′) (wk₁ ⊢A′ ⊢t′) (var₀ ⊢A′) ⟩)
⊢B)
(stability-⊢∷ Γ≡Δ ⊢u) eq
(K-cong A₁≡A₂ t₁≡t₂ B₁≡B₂ u₁≡u₂ v₁≡v₂ ok) PE.refl →
let _ , ⊢Id = ∙⊢→⊢-<ˢ B₁≡B₂
(⊢A₁ , A₁<) , (⊢t₁ , t₁<) , _ = inversion-Id-⊢-<ˢ ⊢Id
⊢A₁′ = stability-⊢ Γ≡Δ ⊢A₁
⦃ lt = <ˢ-trans A₁< ! ⦄
⊢t₁′ = stability-⊢∷ Γ≡Δ ⊢t₁
⦃ lt = <ˢ-trans t₁< ! ⦄
in
K-cong (stability-⊢≡ Γ≡Δ A₁≡A₂) (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡ (Γ≡Δ ∙⟨ Idⱼ ⊢A₁′ ⊢t₁′ ⊢t₁′ ⟩) B₁≡B₂)
(stability-⊢≡∷ Γ≡Δ u₁≡u₂) (stability-⊢≡∷ Γ≡Δ v₁≡v₂) ok
(K-β ⊢B ⊢u ok) PE.refl →
let _ , ⊢Id = ∙⊢→⊢-<ˢ ⊢B
(⊢A , A<) , (⊢t , t<) , _ = inversion-Id-⊢-<ˢ ⊢Id
⊢A′ = stability-⊢ Γ≡Δ ⊢A
⦃ lt = <ˢ-trans A< ! ⦄
⊢t′ = stability-⊢∷ Γ≡Δ ⊢t
⦃ lt = <ˢ-trans t< ! ⦄
in
K-β (stability-⊢ (Γ≡Δ ∙⟨ Idⱼ ⊢A′ ⊢t′ ⊢t′ ⟩) ⊢B)
(stability-⊢∷ Γ≡Δ ⊢u) ok
([]-cong-cong l₁≡l₂ A₁≡A₂ t₁≡t₂ u₁≡u₂ v₁≡v₂ ok) PE.refl →
[]-cong-cong (stability-⊢≡∷L Γ≡Δ l₁≡l₂)
(stability-⊢≡ Γ≡Δ A₁≡A₂) (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(stability-⊢≡∷ Γ≡Δ u₁≡u₂) (stability-⊢≡∷ Γ≡Δ v₁≡v₂) ok
([]-cong-β ⊢l ⊢t eq ok) PE.refl →
[]-cong-β (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢∷ Γ≡Δ ⊢t) eq ok
(equality-reflection ok ⊢Id ⊢v) PE.refl →
equality-reflection ok (stability-⊢ Γ≡Δ ⊢Id)
(stability-⊢∷ Γ≡Δ ⊢v)
(Quot-cong ok ⊢l A₁≡A₂ B₁≡B₂) PE.refl →
let _ , ⊢A₁ , ⊢wk1-A₁ = ∙∙⊢→⊢-<ˢ B₁≡B₂
ΓA₁≡ΔA₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A₁ ⟩
in
Quot-cong ok (stability-⊢∷L Γ≡Δ ⊢l) (stability-⊢≡∷ Γ≡Δ A₁≡A₂)
(stability-⊢≡∷
(ΓA₁≡ΔA₁ ∙⟨ stability-⊢-<ˢ ΓA₁≡ΔA₁ ⊢wk1-A₁ ⟩) B₁≡B₂)
(class-cong ⊢Q t₁≡t₂) PE.refl →
class-cong (stability-⊢ Γ≡Δ ⊢Q) (stability-⊢≡∷ Γ≡Δ t₁≡t₂)
(resp-cong ok A₁≡A₂ B₁≡B₂ t₁≡t₂ u₁≡u₂ v₁≡v₂) PE.refl →
let _ , ⊢A₁ , ⊢wk1-A₁ = ∙∙⊢→⊢-<ˢ B₁≡B₂
ΓA₁≡ΔA₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A₁ ⟩
in
resp-cong ok (stability-⊢≡ Γ≡Δ A₁≡A₂)
(stability-⊢≡ (ΓA₁≡ΔA₁ ∙⟨ stability-⊢-<ˢ ΓA₁≡ΔA₁ ⊢wk1-A₁ ⟩)
B₁≡B₂)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂)
(stability-⊢≡∷ Γ≡Δ v₁≡v₂)
(set-cong A₁≡A₂ B₁≡B₂ t₁≡t₂ u₁≡u₂ v₁≡v₂ w₁≡w₂) PE.refl →
let _ , ⊢A₁ , ⊢wk1-A₁ = ∙∙⊢→⊢-<ˢ B₁≡B₂
ΓA₁≡ΔA₁ = Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A₁ ⟩
in
set-cong (stability-⊢≡ Γ≡Δ A₁≡A₂)
(stability-⊢≡ (ΓA₁≡ΔA₁ ∙⟨ stability-⊢-<ˢ ΓA₁≡ΔA₁ ⊢wk1-A₁ ⟩)
B₁≡B₂)
(stability-⊢≡∷ Γ≡Δ t₁≡t₂) (stability-⊢≡∷ Γ≡Δ u₁≡u₂)
(stability-⊢≡∷ Γ≡Δ v₁≡v₂) (stability-⊢≡∷ Γ≡Δ w₁≡w₂)
(qrec-cong C₁≡C₂ t₁≡t₂ u₁≡u₂ v₁≡v₂ w₁≡w₂)
PE.refl →
let _ , ⊢A , _ , _ , ⊢Q = inversion-Is-set-Cons v₁≡v₂
⊢R , R< = wf-<ˢ (λ ()) u₁≡u₂
⊢S , S< = wf-<ˢ (λ ()) v₁≡v₂
in
qrec-cong (stability-⊢≡ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢Q ⟩) C₁≡C₂)
(stability-⊢≡∷ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A ⟩) t₁≡t₂)
(stability-⊢≡∷
(stability-Resp-Con Γ≡Δ ⊢R ⦃ lt = <ˢ-trans R< ! ⦄) u₁≡u₂)
(stability-⊢≡∷
(stability-Is-set-Con Γ≡Δ ⊢S ⦃ lt = <ˢ-trans S< ! ⦄) v₁≡v₂)
(stability-⊢≡∷ Γ≡Δ w₁≡w₂)
(qrec-β ⊢C ⊢t ⊢u ⊢v ⊢w) PE.refl →
let _ , ⊢A , _ , _ , ⊢Q = inversion-Is-set-Cons ⊢v
⊢R , R< = wf-<ˢ (λ ()) ⊢u
⊢S , S< = wf-<ˢ (λ ()) ⊢v
in
qrec-β (stability-⊢ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢Q ⟩) ⊢C)
(stability-⊢∷ (Γ≡Δ ∙⟨ stability-⊢-<ˢ Γ≡Δ ⊢A ⟩) ⊢t)
(stability-⊢∷
(stability-Resp-Con Γ≡Δ ⊢R ⦃ lt = <ˢ-trans R< ! ⦄) ⊢u)
(stability-⊢∷
(stability-Is-set-Con Γ≡Δ ⊢S ⦃ lt = <ˢ-trans S< ! ⦄) ⊢v)
(stability-⊢∷ Γ≡Δ ⊢w)
opaque
unfolding size
stability-⊢≡∷L′ :
(∀ {s₁} → s₁ <ˢ s₂ → P s₁) →
∇ »⊢ Γ ≡ Δ →
(l₁≡l₂ : ∇ » Γ ⊢ l₁ ≡ l₂ ∷Level) →
size l₁≡l₂ PE.≡ s₂ →
∇ » Δ ⊢ l₁ ≡ l₂ ∷Level
stability-⊢≡∷L′ hyp Γ≡Δ = let open Variants hyp in λ where
(term ok l₁≡l₂) PE.refl →
term ok (stability-⊢≡∷ Γ≡Δ l₁≡l₂)
(literal ok _) _ →
literal ok (wf-⊢≡ʳ Γ≡Δ)
opaque
P-inhabited : P s
P-inhabited =
well-founded-induction P
(λ _ hyp →
record
{ stability-⊢ = stability-⊢′ hyp
; stability-⊢≡ = stability-⊢≡′ hyp
; stability-⊢∷ = stability-⊢∷′ hyp
; stability-⊢∷L = stability-⊢∷L′ hyp
; stability-⊢≡∷ = stability-⊢≡∷′ hyp
; stability-⊢≡∷L = stability-⊢≡∷L′ hyp
})
_
opaque
stability-⊢ : ∇ »⊢ Γ ≡ Δ → ∇ » Γ ⊢[ 𝓙 ] → ∇ » Δ ⊢[ 𝓙 ]
stability-⊢ {𝓙 = [ctxt]} Γ≡Δ _ =
wf-⊢≡ʳ Γ≡Δ
stability-⊢ {𝓙 = [ _ type]} Γ≡Δ ⊢𝓙 =
P.stability-⊢ Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
stability-⊢ {𝓙 = [ _ ≡ _ type]} Γ≡Δ ⊢𝓙 =
P.stability-⊢≡ Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
stability-⊢ {𝓙 = [ _ ∷ _ ]} Γ≡Δ ⊢𝓙 =
P.stability-⊢∷ Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
stability-⊢ {𝓙 = [ _ ≡ _ ∷ _ ]} Γ≡Δ ⊢𝓙 =
P.stability-⊢≡∷ Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
stability-⊢ {𝓙 = [ _ ∷Level]} Γ≡Δ ⊢𝓙 =
P.stability-⊢∷L Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
stability-⊢ {𝓙 = [ _ ≡ _ ∷Level]} Γ≡Δ ⊢𝓙 =
P.stability-⊢≡∷L Inhabited.P-inhabited Γ≡Δ ⊢𝓙 PE.refl
opaque
stability-Resp-Con :
∇ »⊢ Γ ≡ Δ →
∇ »⊢ Resp-Con Γ A B →
∇ »⊢ Resp-Con Γ A B ≡ Resp-Con Δ A B
stability-Resp-Con Γ≡Δ ⊢R =
Variants.stability-Resp-Con (λ _ → Inhabited.P-inhabited) Γ≡Δ ⊢R
⦃ lt = ∃-<ˢ .proj₂ ⦄
opaque
stability-Is-set-Con :
∇ »⊢ Γ ≡ Δ →
∇ »⊢ Is-set-Con Γ A B C →
∇ »⊢ Is-set-Con Γ A B C ≡ Is-set-Con Δ A B C
stability-Is-set-Con Γ≡Δ ⊢S =
Variants.stability-Is-set-Con (λ _ → Inhabited.P-inhabited) Γ≡Δ ⊢S
⦃ lt = ∃-<ˢ .proj₂ ⦄