Skip to content
Snippets Groups Projects
Commit 402311c1 authored by Eric Giovannini's avatar Eric Giovannini
Browse files

Update IntensionalOrder

parent 162afb39
No related branches found
No related tags found
No related merge requests found
{-# OPTIONS --lossy-unification #-} {-# OPTIONS --lossy-unification #-}
{-# OPTIONS --allow-unsolved-metas #-}
module Syntax.IntensionalOrder where module Syntax.IntensionalOrder where
open import Cubical.Foundations.Prelude renaming (comp to compose) open import Cubical.Foundations.Prelude renaming (comp to compose)
...@@ -71,8 +74,8 @@ data Val⊑ where ...@@ -71,8 +74,8 @@ data Val⊑ where
injNatUp : Val⊑ [] nat V V' -> injNatUp : Val⊑ [] nat V V' ->
Val⊑ [] inj-nat V (injectN [ !s ,s V' ]v) Val⊑ [] inj-nat V (injectN [ !s ,s V' ]v)
{- injArrUp : Val⊑ [] c V V' -> injArrUp : Val⊑ [] (dyn ⇀ dyn) V V' ->
Val⊑ [] (inj-arr c) V {!!} -} Val⊑ [] (inj-arr (refl-⊑ _)) V (injectArr [ !s ,s V' ]v)
-- ((injectArr {S = S} (V' [ wk ]v)) [ {!injectArr {S = S} (V' [ wk ]v)!} ]v) -- (injectArr (V' [ wk ]v) [ !s ,s V ]v) -- ((injectArr {S = S} (V' [ wk ]v)) [ {!injectArr {S = S} (V' [ wk ]v)!} ]v) -- (injectArr (V' [ wk ]v) [ !s ,s V ]v)
mapDyn-nat : ∀ {Vn Vn' Vf} → mapDyn-nat : ∀ {Vn Vn' Vf} →
...@@ -87,16 +90,11 @@ data Val⊑ where ...@@ -87,16 +90,11 @@ data Val⊑ where
Val⊑ (inj-arr c ∷ []) (inj-arr c) Vs (mapDyn Vn Vf) Val⊑ (inj-arr c ∷ []) (inj-arr c) Vs (mapDyn Vn Vf)
-- if x <= y then e x <= δr y
up-L : ∀ S⊑T → Val⊑ ((ty-prec S⊑T) ∷ []) (refl-⊑ (ty-right S⊑T)) (up S⊑T) (δr S⊑T)
-- if x <= y then δl x <= e y
up-R : ∀ S⊑T → Val⊑ ((refl-⊑ (ty-left S⊑T)) ∷ []) (ty-prec S⊑T) (δl S⊑T) (up S⊑T)
isProp⊑ : isProp (Val⊑ C c V V') isProp⊑ : isProp (Val⊑ C c V V')
-- We make this an arbitrary E and e rather than -- We make this an arbitrary E and e rather than
-- Val⊑ (trans-⊑ctx C D) (trans-⊑ c d) V V' -- Val⊑ (trans-⊑ctx C D) (trans-⊑ c d) V V'
-- in order to avoid the "green slime" issue -- in order to avoid the "green slime" issue when pattern matching
hetTrans : ∀ {E e} -> Val⊑ C c V V' → Val⊑ D d V' V'' → Val⊑ E e V V'' hetTrans : ∀ {E e} -> Val⊑ C c V V' → Val⊑ D d V' V'' → Val⊑ E e V V''
...@@ -108,17 +106,18 @@ data EvCtx⊑ where ...@@ -108,17 +106,18 @@ data EvCtx⊑ where
_[_]e : EvCtx⊑ C c d E E' → Subst⊑ B C γ γ' → EvCtx⊑ B c d (E [ γ ]e) (E' [ γ' ]e) _[_]e : EvCtx⊑ C c d E E' → Subst⊑ B C γ γ' → EvCtx⊑ B c d (E [ γ ]e) (E' [ γ' ]e)
bind : Comp⊑ (c ∷ C) d M M' → EvCtx⊑ C c d (bind M) (bind M') bind : Comp⊑ (c ∷ C) d M M' → EvCtx⊑ C c d (bind M) (bind M')
dn-L : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-right S⊑T)) (ty-prec S⊑T) (dn S⊑T) (δr S⊑T)
dn-R : ∀ S⊑T → EvCtx⊑ [] (ty-prec S⊑T) (refl-⊑ (ty-left S⊑T)) (δl S⊑T) (dn S⊑T)
-- retractionR : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-right S⊑T)) (refl-⊑ (ty-right S⊑T)) -- retractionR : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-right S⊑T)) (refl-⊑ (ty-right S⊑T))
-- (vToE (δr S⊑T) ∘E δr S⊑T) -- (vToE (δr S⊑T) ∘E δr S⊑T)
-- (vToE (up S⊑T) ∘E dn S⊑T) -- (vToE (up S⊑T) ∘E dn S⊑T)
retraction : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-left S⊑T)) (refl-⊑ (ty-left S⊑T))
((dn S⊑T) ∘E vToE (up S⊑T)) -- retraction : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-left S⊑T)) (refl-⊑ (ty-left S⊑T))
((δl S⊑T) ∘E vToE (δl S⊑T)) -- ((dn S⊑T) ∘E vToE (up S⊑T))
-- ((δl S⊑T) ∘E vToE (δl S⊑T))
-- Opposite order is admissible -- Opposite order is admissible
hetTrans : EvCtx⊑ C b c E E' → EvCtx⊑ C' b' c' E' E'' → EvCtx⊑ (trans-⊑ctx C C') (trans-⊑ b b') (trans-⊑ c c') E E'' hetTrans : EvCtx⊑ C b c E E' → EvCtx⊑ C' b' c' E' E'' →
EvCtx⊑ (trans-⊑ctx C C') (trans-⊑ b b') (trans-⊑ c c') E E''
isProp⊑ : isProp (EvCtx⊑ C c d E E') isProp⊑ : isProp (EvCtx⊑ C c d E E')
data Comp⊑ where data Comp⊑ where
...@@ -128,15 +127,41 @@ data Comp⊑ where ...@@ -128,15 +127,41 @@ data Comp⊑ where
err : Comp⊑ [] c err err err : Comp⊑ [] c err err
ret : Comp⊑ (c ∷ []) c ret ret ret : Comp⊑ (c ∷ []) c ret ret
app : Comp⊑ (c ∷ c ⇀ d ∷ []) d app app app : Comp⊑ (c ∷ c ⇀ d ∷ []) d app app
matchNat : ∀ {Kz Kz' Ks Ks'} → Comp⊑ C c Kz Kz' → Comp⊑ (nat ∷ C) c Ks Ks' → Comp⊑ (nat ∷ C) c (matchNat Kz Ks) (matchNat Kz' Ks') matchNat : ∀ {Kz Kz' Ks Ks'} →
Comp⊑ C c Kz Kz' →
Comp⊑ (nat ∷ C) c Ks Ks' →
Comp⊑ (nat ∷ C) c (matchNat Kz Ks) (matchNat Kz' Ks')
err⊥ : Comp⊑ (refl-⊑ctx Γ) (refl-⊑ S) err' M err⊥ : Comp⊑ (refl-⊑ctx Γ) (refl-⊑ S) err' M
hetTrans : Comp⊑ C c M M' → Comp⊑ D d M' M'' → Comp⊑ (trans-⊑ctx C D) (trans-⊑ c d) M M'' hetTrans : Comp⊑ C c M M' → Comp⊑ D d M' M'' →
Comp⊑ (trans-⊑ctx C D) (trans-⊑ c d) M M''
isProp⊑ : isProp (Comp⊑ C c M M') isProp⊑ : isProp (Comp⊑ C c M M')
-- Cast rules are admissible
-- if x <= y then e x <= δr y
up-L : ∀ S⊑T → Val⊑ ((ty-prec S⊑T) ∷ []) (refl-⊑ (ty-right S⊑T)) (emb (ty-prec S⊑T)) (δr-e (ty-prec S⊑T))
-- if x <= y then δl x <= e y
up-R : ∀ S⊑T → Val⊑ ((refl-⊑ (ty-left S⊑T)) ∷ []) (ty-prec S⊑T) (δl-e (ty-prec S⊑T)) (emb (ty-prec S⊑T))
dn-L : ∀ S⊑T → EvCtx⊑ [] (refl-⊑ (ty-right S⊑T)) (ty-prec S⊑T) (proj (ty-prec S⊑T)) (δr-p (ty-prec S⊑T))
dn-R : ∀ S⊑T → EvCtx⊑ [] (ty-prec S⊑T) (refl-⊑ (ty-left S⊑T)) (δl-p (ty-prec S⊑T)) (proj (ty-prec S⊑T))
up-L = {!!}
up-R = {!!}
dn-L = {!!}
dn-R = {!!}
-- Key lemmas about pushing and pulling perturbations across type precision. -- Key lemmas about pushing and pulling perturbations across type precision.
-- If S ⊑ T, and if δs is a perturbation on S, then pushing it to a perturbation on T -- If S ⊑ T, and if δs is a perturbation on S, then pushing it to a perturbation on T
-- produces a related perturbation. -- produces a related perturbation.
...@@ -144,8 +169,13 @@ data Comp⊑ where ...@@ -144,8 +169,13 @@ data Comp⊑ where
push-lemma-e : ∀ (c : S ⊑ T) δs -> push-lemma-e : ∀ (c : S ⊑ T) δs ->
Val⊑ (c ∷ []) c (Pertᴱ→Val δs) (Pertᴱ→Val (PushE c δs)) Val⊑ (c ∷ []) c (Pertᴱ→Val δs) (Pertᴱ→Val (PushE c δs))
push-lemma-p : ∀ (c : S ⊑ T) δs ->
EvCtx⊑ [] c c (Pertᴾ→EC δs) (Pertᴾ→EC (PushP c δs))
pull-lemma-e : ∀ (c : S ⊑ T) δt -> pull-lemma-e : ∀ (c : S ⊑ T) δt ->
Val⊑ (c ∷ []) c (Pertᴱ→Val (PullE c δt)) (Pertᴱ→Val δt) Val⊑ (c ∷ []) c (Pertᴱ→Val (PullE c δt)) (Pertᴱ→Val δt)
pull-lemma-p : ∀ (c : S ⊑ T) δt ->
EvCtx⊑ [] c c (Pertᴾ→EC (PullP c δt)) (Pertᴾ→EC δt)
push-lemma-e nat id = var push-lemma-e nat id = var
push-lemma-e dyn id = var push-lemma-e dyn id = var
...@@ -157,6 +187,8 @@ push-lemma-e inj-nat id = var ...@@ -157,6 +187,8 @@ push-lemma-e inj-nat id = var
push-lemma-e (inj-arr c) id = var push-lemma-e (inj-arr c) id = var
push-lemma-e (inj-arr c) (δi ⇀ δo) = {!!} push-lemma-e (inj-arr c) (δi ⇀ δo) = {!!}
push-lemma-p = {!!}
pull-lemma-e c id = var pull-lemma-e c id = var
pull-lemma-e (ci ⇀ co) (δi ⇀ δo) = {!!} pull-lemma-e (ci ⇀ co) (δi ⇀ δo) = {!!}
...@@ -164,9 +196,7 @@ pull-lemma-e dyn (PertD δn δf) = reflexive ...@@ -164,9 +196,7 @@ pull-lemma-e dyn (PertD δn δf) = reflexive
pull-lemma-e inj-nat (PertD δn δf) = mapDyn-nat reflexive pull-lemma-e inj-nat (PertD δn δf) = mapDyn-nat reflexive
pull-lemma-e (inj-arr c) (PertD δn δf) = mapDyn-arr (pull-lemma-e c δf) pull-lemma-e (inj-arr c) (PertD δn δf) = mapDyn-arr (pull-lemma-e c δf)
pull-lemma-p = {!!}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment