open import Graded.Modality
open import Graded.Usage.Restrictions
open import Definition.Typed.Restrictions
module Graded.Heap.Assumptions
{a} {M : Set a} {𝕄 : Modality M}
(UR : Usage-restrictions 𝕄)
(TR : Type-restrictions 𝕄)
where
open Modality 𝕄
open Type-restrictions TR
open Usage-restrictions UR
open import Graded.Mode 𝕄
open import Graded.Modality.Properties.Subtraction semiring-with-meet
open import Graded.Usage.Restrictions.Natrec 𝕄
open import Tools.Empty
open import Tools.Function
open import Tools.Product
open import Tools.PropositionalEquality
open import Tools.Relation
open import Tools.Sum
record Assumptions : Set a where
field
subtraction-ok : Supports-subtraction
Unitʷ-η→ : ∀ {p q} → Unitʷ-η → Unitrec-allowed 𝟙ᵐ p q → p ≤ 𝟘
natrec-mode-ok :
(Σ Nr-available λ has-nr →
Is-factoring-nr M (Natrec-mode-Has-nr has-nr)) ⊎
Nr-not-available-GLB
opaque
¬Nr-not-available : ¬ Nr-not-available
¬Nr-not-available x =
case natrec-mode-ok of λ where
(inj₁ (y , _)) → ¬[Nr∧No-nr] y x
(inj₂ y) → ¬[No-nr∧No-nr-glb] x y
opaque
factoring-nr :
⦃ has-nr : Nr-available ⦄ →
Is-factoring-nr M (Natrec-mode-Has-nr has-nr)
factoring-nr ⦃ has-nr ⦄ =
case natrec-mode-ok of λ where
(inj₁ (has-nr′ , factoring)) →
case Nr-available-propositional has-nr has-nr′ of λ where
refl → factoring
(inj₂ no-nr) → ⊥-elim (¬[Nr∧No-nr-glb] has-nr no-nr)