open import Graded.Modality
open import Graded.Mode
open import Graded.Usage.Restrictions
module Graded.Derived.Omega
{a b} {M : Set a} {Mode : Set b}
{π : Modality M}
{π : IsMode Mode π}
(UR : Usage-restrictions π π)
where
open Modality π hiding (Ο)
open IsMode π
open import Graded.Context π
open import Graded.Context.Properties π
open import Graded.Modality.Properties π
open import Graded.Usage UR
open import Definition.Untyped.Omega M
open import Tools.Bool
open import Tools.Function
open import Tools.Nat using (Nat)
open import Tools.PropositionalEquality
import Tools.Reasoning.PartialOrder
open import Tools.Relation
private variable
n : Nat
Ξ³ : Conβ _
m : Mode
p : M
opaque
unfolding Ο
βΈΟ :
(β m β β’ π β p β€ π + p) β
παΆ βΈ[ m ] Ο {n = n} p
βΈΟ {m} {p} hyp =
lamβ $
sub (var ββ var) $ begin
παΆ β β m β Β· p β€β¨ β€αΆ-refl β lemma _ hyp β©
παΆ β β m β + p Β· β m α΅Β· p β βΛβ¨ +αΆ-identityΛ‘ _ β refl β©
παΆ +αΆ παΆ β β m β + p Β· β m α΅Β· p β βΛβ¨ +αΆ-congΛ‘ (Β·αΆ-zeroΚ³ _) β refl β©
(παΆ β β m β) +αΆ p Β·αΆ (παΆ β β m α΅Β· p β) β
where
lemma :
β m β (β m β β’ π β p β€ π + p) β β m β Β· p β€ β m β + p Β· β m α΅Β· p β
lemma m hyp =
case is-π? β m β of Ξ» where
(yes βmββ‘π) β begin
β m β Β· p ββ¨ ββ-Β·-comm _ β©
p Β· β m β β‘Λβ¨ +-identityΛ‘ _ β©
π + p Β· β m β β‘Λβ¨ +-cong βmββ‘π (Β·βα΅Β·β _) β©
β m β + p Β· β m α΅Β· p β β
(no βmββ’π) β begin
β m β Β· p β€β¨ Β·-monotoneΚ³ (hyp βmββ’π) β©
β m β Β· (π + p) β‘β¨ Β·-distribΛ‘-+ _ _ _ β©
β m β Β· π + β m β Β· p β‘β¨ +-cong (Β·-identityΚ³ _) (ββ-Β·-comm _) β©
β m β + p Β· β m β β‘Λβ¨ +-congΛ‘ (Β·βα΅Β·β _) β©
β m β + p Β· β m α΅Β· p β β
where
open β€-reasoning
open β€αΆ-reasoning
opaque
unfolding Ξ©
βΈΞ© :
(β m β β’ π β p β€ π + p) β
παΆ βΈ[ m ] Ξ© {n = n} p
βΈΞ© {m} {p} hyp =
sub (βΈΟ hyp ββ βΈΟ (hyp ββ ββ-Β·α΅-πΛ‘)) $ begin
παΆ βΛβ¨ Β·αΆ-zeroΚ³ _ β©
p Β·αΆ παΆ βΛβ¨ +αΆ-identityΛ‘ _ β©
παΆ +αΆ p Β·αΆ παΆ β
where
open β€αΆ-reasoning