module MLTT.Uniqueness where
open import Prelude
open import WSLN
open import MLTT.Syntax
open import MLTT.Judgement
open import MLTT.Cofinite
open import MLTT.Ok
open import MLTT.WellScoped
open import MLTT.Weakening
open import MLTT.Substitution
open import MLTT.Admissible
open import MLTT.ExistsFresh
svVr :
{l l' : Lvl}
{ฮ : Cx}
{A A' : Ty}
{x x' : ๐ธ}
(_ : Ok ฮ)
(_ : (x , A , l) isIn ฮ)
(_ : (x' , A' , l') isIn ฮ)
(_ : x โก x')
โ
(l โก l') โง (A โก A')
svVr _ isInNew isInNew _ = refl , refl
svVr (okโจ _ q _) isInNew (isInOld p') refl =
รelim (โโยฌโ q (isInโdom p'))
svVr (okโจ _ q _) (isInOld p) isInNew refl =
รelim (โโยฌโ q (isInโdom p))
svVr (okโจ _ _ q) (isInOld p) (isInOld p') e = svVr q p p' e
svTy :
{l l' : Lvl}
{ฮ : Cx}
{A A' : Ty}
{a : Tm}
(_ : ฮ โข a โถ A โฆ l)
(_ : ฮ โข a โถ A' โฆ l')
โ
(l โก l') โง (ฮ โข A ๏ผ A' โฆ l)
svTy (โขconv qโ qโ) q' with (refl , q) โ svTy qโ q' =
(refl , Trans (Symm qโ) q)
svTy q (โขconv qโ' qโ') with (refl , q') โ svTy q qโ' =
(refl , Trans q' qโ')
svTy (โข๐ฏ qโ qโ) (โข๐ฏ _ qโ')
with (refl , refl) โ svVr qโ qโ qโ' refl =
(refl , Refl (okโty qโ qโ))
svTy (โข๐ q) (โข๐ _) = (refl , Refl (โข๐ q))
svTy (โข๐ท _ qโ _) (โข๐ท _ _ _) = refl , (Refl (โข๐ (โขok qโ)))
svTy (โข๐{B = B} S qโ qโ _) (โข๐{B = B'} S' qโ' qโ' _)
with (refl , _ ) โ svTy qโ qโ'
| (x , x#S โโช x#S' โโช x#) โ fresh (S , S' , B , B')
with (refl , r) โ svTy (qโ x x#S) (qโ' x x#S') =
refl , (๐ทCongโป (Refl qโ) r x#)
svTy (โขโ{B = B} S _ qโ qโ _) (โขโ S' _ qโ' qโ' _)
with (refl , _) โ svTy qโ qโ'
| (x , x#S โโช x#S' โโช x#) โ fresh (S , S' , B)
with (refl , _) โ svTy (qโ x x#S) (qโ' x x#S') =
(refl , Refl (concTy B x (qโ x x#S) qโ x#))
svTy (โข๐๐ q _ _) (โข๐๐ q' _ _)
with (refl , _) โ svTy q q' =
(refl , Refl (โข๐ (โขok q)))
svTy (โข๐ซ๐๐๐ฅ q _) (โข๐ซ๐๐๐ฅ q' _)
with (refl , r) โ svTy q q' =
(refl , ๐๐Cong r (Refl q) (Refl q))
svTy{ฮ = ฮ} (โข๐{l}{A = A}{C}{a}{b}{e = e} S qโ qโ qโ qโ qโ hโ hโ)
(โข๐ _ _ qโ' _ qโ' _ _ _)
with (refl , _) โ svTy qโ qโ'
| (refl , _) โ svTy qโ qโ'
| (y , y#S โโช y#C) โ fresh (S , C)
with (x , x#y โโช x#S) โ fresh (y , S) =
(refl , Refl (concTyยฒ C x y
(qโ x y (##:: y#S (##:: (x#y โโช x#S) ##โ)))
qโ
q
x#C
y#C))
where
x#ฮ : x # ฮ
x#ฮ = ฯโ ([]โปยน (โขok (hโ x x#S)))
x#A : x # A
x#A = โโ (โขsupp hโ โ โโชโ) x#ฮ
x#a : x # a
x#a = โโ (โขsupp qโ โ โโชโ) x#ฮ
x#C : x # C
x#C = โโ (โขsupp qโ โ โโชโ โ []ยฒsupp C a (๐ซ๐๐๐ฅ a)) x#ฮ
q : ฮ โข e โถ (x := b) * ๐๐ A a (๐ฏ x) โฆ l
q rewrite ssbFresh x b A x#A
| ssbFresh x b a x#a
| updateEq{id}{b} x = qโ
svTy (โข๐๐๐ญ q) (โข๐๐๐ญ _) = (refl , Refl (โข๐ q))
svTy (โข๐ณ๐๐ซ๐จ q) (โข๐ณ๐๐ซ๐จ _) = (refl , Refl (โข๐๐๐ญ q))
svTy (โข๐ฌ๐ฎ๐๐ q) (โข๐ฌ๐ฎ๐๐ _) = (refl , Refl (โข๐๐๐ญ (โขok q)))
svTy (โข๐ง๐ซ๐๐{C = C} S qโ _ qโ h) (โข๐ง๐ซ๐๐ _ qโ' _ _ _)
with (refl , _) โ svTy qโ qโ'
| (x , x#S โโช x#) โ fresh (S , C) =
(refl , Refl (concTy C x (h x x#S) qโ x#))