import Graded.Modality
module Graded.Usage.Restrictions.Natrec
{a} {M : Set a}
(open Graded.Modality M)
(𝕄 : Modality)
where
open import Tools.Empty
open import Tools.PropositionalEquality
open import Tools.Product
open Modality 𝕄
private variable
p p′ q r z₁ z₂ s₁ s₂ : M
data Natrec-mode : Set a where
Nr : ⦃ has-nr : Has-nr semiring-with-meet ⦄ → Natrec-mode
No-nr : Natrec-mode
No-nr-glb : ⦃ ok : Has-well-behaved-GLBs semiring-with-meet ⦄ →
Natrec-mode
private variable
nm : Natrec-mode
data Natrec-mode-has-nr : Natrec-mode → Set a where
Nr :
⦃ has-nr : Has-nr semiring-with-meet ⦄ →
Natrec-mode-has-nr Nr
data Natrec-mode-no-nr : Natrec-mode → Set a where
No-nr : Natrec-mode-no-nr No-nr
data Natrec-mode-no-nr-glb : Natrec-mode → Set a where
No-nr-glb :
⦃ ok : Has-well-behaved-GLBs semiring-with-meet ⦄ →
Natrec-mode-no-nr-glb No-nr-glb
data Natrec-mode-supports-usage-inference : Natrec-mode → Set a where
Nr :
⦃ has-nr : Has-nr semiring-with-meet ⦄ →
Natrec-mode-supports-usage-inference Nr
No-nr-glb :
⦃ ok : Has-well-behaved-GLBs semiring-with-meet ⦄ →
(∀ r z s → ∃ λ p → Greatest-lower-bound p (nrᵢ r z s)) →
Natrec-mode-supports-usage-inference No-nr-glb
Natrec-mode-Has-nr :
Natrec-mode-has-nr nm →
Has-nr semiring-with-meet
Natrec-mode-Has-nr (Nr ⦃ has-nr ⦄) = has-nr
Natrec-mode-Has-well-behaved-GLBs :
Natrec-mode-no-nr-glb nm →
Has-well-behaved-GLBs semiring-with-meet
Natrec-mode-Has-well-behaved-GLBs (No-nr-glb ⦃ ok ⦄) = ok
opaque
Nr-available-propositional :
(x y : Natrec-mode-has-nr nm) → x ≡ y
Nr-available-propositional Nr Nr = refl
opaque
¬[Nr∧No-nr] :
Natrec-mode-has-nr nm →
Natrec-mode-no-nr nm →
⊥
¬[Nr∧No-nr] Nr ()
opaque
¬[Nr∧No-nr-glb] :
Natrec-mode-has-nr nm →
Natrec-mode-no-nr-glb nm →
⊥
¬[Nr∧No-nr-glb] Nr ()
opaque
¬[No-nr∧No-nr-glb] :
Natrec-mode-no-nr nm →
Natrec-mode-no-nr-glb nm →
⊥
¬[No-nr∧No-nr-glb] No-nr ()
data Natrec-mode? (nm : Natrec-mode) : Set a where
does-have-nr :
⦃ has-nr : Natrec-mode-has-nr nm ⦄ → Natrec-mode? nm
does-not-have-nr :
⦃ no-nr : Natrec-mode-no-nr nm ⦄ → Natrec-mode? nm
does-not-have-nr-glb :
⦃ no-nr : Natrec-mode-no-nr-glb nm ⦄ → Natrec-mode? nm
opaque
natrec-mode? : ∀ nm → Natrec-mode? nm
natrec-mode? Nr = does-have-nr ⦃ Nr ⦄
natrec-mode? No-nr = does-not-have-nr ⦃ No-nr ⦄
natrec-mode? No-nr-glb = does-not-have-nr-glb ⦃ No-nr-glb ⦄