module Graded.Modality.Morphism.Type-restrictions where
open import Tools.Bool
open import Tools.Function
open import Tools.Level
open import Tools.Product
open import Tools.PropositionalEquality
open import Tools.Relation
open import Tools.Sum
open import Definition.Typed.Restrictions
open import Definition.Untyped.NotParametrised
open import Definition.Untyped.Properties.NotParametrised
open import Definition.Untyped.QuantityTranslation
open import Graded.Modality
private variable
trp trp₁ trp₂ : Bool
R R₁ R₂ R₃ : Type-restrictions _
b : BinderMode
M M₁ M₂ : Set _
tr₁ tr₂ tr-Σ₁ tr-Σ₂ : M₁ → M₂
p q : M
s : Strength
record Are-preserving-type-restrictions
{a₁ a₂} {M₁ : Set a₁} {M₂ : Set a₂}
{𝕄₁ : Modality M₁} {𝕄₂ : Modality M₂}
(transparent : Bool)
(R₁ : Type-restrictions 𝕄₁) (R₂ : Type-restrictions 𝕄₂)
(tr tr-Σ : M₁ → M₂) : Set (a₁ ⊔ a₂) where
no-eta-equality
private
module M₁ = Modality 𝕄₁
module M₂ = Modality 𝕄₂
module R₁ = Type-restrictions R₁
module R₂ = Type-restrictions R₂
field
unfolding-mode-preserved :
R₁.unfolding-mode ≡ R₂.unfolding-mode
level-support-preserved :
R₁.level-support ≤LS R₂.level-support
Omega-plus-preserved :
R₁.Omega-plus-allowed → R₂.Omega-plus-allowed
Unitʷ-η-preserved :
R₁.Unitʷ-η → R₂.Unitʷ-η
Unit-preserved :
R₁.Unit-allowed s → R₂.Unit-allowed s
ΠΣ-preserved :
R₁.ΠΣ-allowed b p q →
R₂.ΠΣ-allowed b (tr-BinderMode transparent tr tr-Σ b p) (tr q)
Opacity-preserved :
¬ T transparent → R₁.Opacity-allowed → R₂.Opacity-allowed
K-preserved :
R₁.K-allowed → R₂.K-allowed
[]-cong-preserved :
R₁.[]-cong-allowed s → R₂.[]-cong-allowed s
Equality-reflection-preserved :
R₁.Equality-reflection → R₂.Equality-reflection
Quot-preserved :
R₁.Quot-allowed → R₂.Quot-allowed
Quot-allowed→tr-𝟘≡𝟘 :
R₁.Quot-allowed → tr M₁.𝟘 ≡ M₂.𝟘
opaque
unfolding Type-restrictions.Level-is-small
Level-is-small-preserved : R₁.Level-is-small → R₂.Level-is-small
Level-is-small-preserved = ≤LS→≡small→≡small level-support-preserved
opaque
unfolding Type-restrictions.Level-allowed
Level-allowed⇔ : R₁.Level-allowed ⇔ R₂.Level-allowed
Level-allowed⇔ =
≤LS→≢only-literals⇔≢only-literals level-support-preserved
record Are-reflecting-type-restrictions
{a₁ a₂} {M₁ : Set a₁} {M₂ : Set a₂}
{𝕄₁ : Modality M₁} {𝕄₂ : Modality M₂}
(transparent : Bool)
(R₁ : Type-restrictions 𝕄₁) (R₂ : Type-restrictions 𝕄₂)
(tr tr-Σ : M₁ → M₂) : Set (a₁ ⊔ a₂) where
no-eta-equality
private
module M₁ = Modality 𝕄₁
module M₂ = Modality 𝕄₂
module R₁ = Type-restrictions R₁
module R₂ = Type-restrictions R₂
field
unfolding-mode-reflected :
R₁.unfolding-mode ≡ R₂.unfolding-mode
level-support-reflected :
R₂.level-support ≤LS R₁.level-support
Unitʷ-η-reflected :
R₂.Unitʷ-η → R₁.Unitʷ-η
Unit-reflected :
R₂.Unit-allowed s → R₁.Unit-allowed s
ΠΣ-reflected :
R₂.ΠΣ-allowed b (tr-BinderMode transparent tr tr-Σ b p) (tr q) →
R₁.ΠΣ-allowed b p q
Opacity-reflected :
R₂.Opacity-allowed → R₁.Opacity-allowed
K-reflected :
R₂.K-allowed → R₁.K-allowed
[]-cong-reflected :
R₂.[]-cong-allowed s ⊎ M₂.Trivial →
R₁.[]-cong-allowed s ⊎ M₁.Trivial
Equality-reflection-reflected :
R₂.Equality-reflection → R₁.Equality-reflection
Quot-reflected :
R₂.Quot-allowed ⊎ M₂.Trivial →
R₁.Quot-allowed ⊎ M₁.Trivial
opaque
unfolding Type-restrictions.Level-is-small
Level-is-small-reflected : R₂.Level-is-small → R₁.Level-is-small
Level-is-small-reflected = ≤LS→≡small→≡small level-support-reflected
opaque
unfolding Type-restrictions.Level-allowed
Level-allowed⇔ : R₁.Level-allowed ⇔ R₂.Level-allowed
Level-allowed⇔ =
sym⇔ $
≤LS→≢only-literals⇔≢only-literals level-support-reflected
Are-preserving-type-restrictions-id :
Are-preserving-type-restrictions trp R R idᶠ idᶠ
Are-preserving-type-restrictions-id {R = R} = λ where
.unfolding-mode-preserved → refl
.level-support-preserved → refl-≤LS
.Omega-plus-preserved → idᶠ
.Unitʷ-η-preserved → idᶠ
.Unit-preserved → idᶠ
.ΠΣ-preserved {b = BMΠ} → idᶠ
.ΠΣ-preserved {b = BMΣ _} → idᶠ
.Opacity-preserved → λ _ → idᶠ
.K-preserved → idᶠ
.[]-cong-preserved → idᶠ
.Equality-reflection-preserved → idᶠ
.Quot-preserved → idᶠ
.Quot-allowed→tr-𝟘≡𝟘 → λ _ → refl
where
open Are-preserving-type-restrictions
open Type-restrictions R
Are-reflecting-type-restrictions-id :
Are-reflecting-type-restrictions trp R R idᶠ idᶠ
Are-reflecting-type-restrictions-id {R = R} = λ where
.unfolding-mode-reflected → refl
.level-support-reflected → refl-≤LS
.Unitʷ-η-reflected → idᶠ
.Unit-reflected → idᶠ
.ΠΣ-reflected {b = BMΠ} → idᶠ
.ΠΣ-reflected {b = BMΣ _} → idᶠ
.Opacity-reflected → idᶠ
.K-reflected → idᶠ
.[]-cong-reflected → idᶠ
.Equality-reflection-reflected → idᶠ
.Quot-reflected → idᶠ
where
open Are-reflecting-type-restrictions
open Type-restrictions R
Are-preserving-type-restrictions-∘ :
Are-preserving-type-restrictions trp₁ R₂ R₃ tr₁ tr-Σ₁ →
Are-preserving-type-restrictions trp₂ R₁ R₂ tr₂ tr-Σ₂ →
Are-preserving-type-restrictions (trp₁ ∨ trp₂)
R₁ R₃ (tr₁ ∘→ tr₂) (tr-Σ₁ ∘→ tr-Σ₂)
Are-preserving-type-restrictions-∘ {tr₁} m₁ m₂ = λ where
.unfolding-mode-preserved →
trans M₂.unfolding-mode-preserved M₁.unfolding-mode-preserved
.level-support-preserved →
trans-≤LS M₂.level-support-preserved M₁.level-support-preserved
.Omega-plus-preserved →
M₁.Omega-plus-preserved ∘→ M₂.Omega-plus-preserved
.Unitʷ-η-preserved →
M₁.Unitʷ-η-preserved ∘→ M₂.Unitʷ-η-preserved
.Unit-preserved →
M₁.Unit-preserved ∘→ M₂.Unit-preserved
.ΠΣ-preserved {b = BMΠ} →
M₁.ΠΣ-preserved ∘→ M₂.ΠΣ-preserved
.ΠΣ-preserved {b = BMΣ _} →
M₁.ΠΣ-preserved ∘→ M₂.ΠΣ-preserved
.Opacity-preserved ok →
let ok = ok ∘→ T-∨ .proj₂ in
M₁.Opacity-preserved (ok ∘→ inj₁) ∘→
M₂.Opacity-preserved (ok ∘→ inj₂)
.K-preserved →
M₁.K-preserved ∘→ M₂.K-preserved
.[]-cong-preserved →
M₁.[]-cong-preserved ∘→ M₂.[]-cong-preserved
.Equality-reflection-preserved →
M₁.Equality-reflection-preserved ∘→
M₂.Equality-reflection-preserved
.Quot-preserved →
M₁.Quot-preserved ∘→ M₂.Quot-preserved
.Quot-allowed→tr-𝟘≡𝟘 ok →
trans (cong tr₁ (M₂.Quot-allowed→tr-𝟘≡𝟘 ok))
(M₁.Quot-allowed→tr-𝟘≡𝟘 (M₂.Quot-preserved ok))
where
open Are-preserving-type-restrictions
module M₁ = Are-preserving-type-restrictions m₁
module M₂ = Are-preserving-type-restrictions m₂
Are-reflecting-type-restrictions-∘ :
Are-reflecting-type-restrictions trp₁ R₂ R₃ tr₁ tr-Σ₁ →
Are-reflecting-type-restrictions trp₂ R₁ R₂ tr₂ tr-Σ₂ →
Are-reflecting-type-restrictions (trp₁ ∨ trp₂) R₁ R₃ (tr₁ ∘→ tr₂)
(tr-Σ₁ ∘→ tr-Σ₂)
Are-reflecting-type-restrictions-∘ m₁ m₂ = λ where
.unfolding-mode-reflected →
trans M₂.unfolding-mode-reflected M₁.unfolding-mode-reflected
.level-support-reflected →
trans-≤LS M₁.level-support-reflected M₂.level-support-reflected
.Unitʷ-η-reflected →
M₂.Unitʷ-η-reflected ∘→ M₁.Unitʷ-η-reflected
.Unit-reflected →
M₂.Unit-reflected ∘→ M₁.Unit-reflected
.ΠΣ-reflected {b = BMΠ} →
M₂.ΠΣ-reflected ∘→ M₁.ΠΣ-reflected
.ΠΣ-reflected {b = BMΣ _} →
M₂.ΠΣ-reflected ∘→ M₁.ΠΣ-reflected
.Opacity-reflected →
M₂.Opacity-reflected ∘→ M₁.Opacity-reflected
.K-reflected →
M₂.K-reflected ∘→ M₁.K-reflected
.[]-cong-reflected →
M₂.[]-cong-reflected ∘→ M₁.[]-cong-reflected
.Equality-reflection-reflected →
M₂.Equality-reflection-reflected ∘→
M₁.Equality-reflection-reflected
.Quot-reflected →
M₂.Quot-reflected ∘→ M₁.Quot-reflected
where
open Are-reflecting-type-restrictions
module M₁ = Are-reflecting-type-restrictions m₁
module M₂ = Are-reflecting-type-restrictions m₂