------------------------------------------------------------------------
-- Modality variants
------------------------------------------------------------------------
open import Tools.Level
module Graded.Modality.Variant (a : Level) where
open import Tools.Bool
open import Tools.Empty
open import Tools.Level
open import Tools.PropositionalEquality
open import Tools.Relation
open import Tools.Unit
-- Modality variants:
-- * Modalities can come with one mode (๐แต) or two (๐แต and ๐แต).
-- * They can also come with, or not come with, a dedicated
-- natrec-star operator _โ_โท_. Even if they don't come with a
-- *dedicated* natrec-star operator one or more such operators can
-- perhaps still be defined.
record Modality-variant : Set (lsuc a) where
field
-- Is the mode ๐แต allowed?
๐แต-allowed : Bool
-- Is a dedicated natrec-star operator available?
โ-available : Set a
-- The type โ-available is a proposition.
โ-available-propositional : (p q : โ-available) โ p โก q
-- The type โ-available is decided.
โ-available-decided : Dec โ-available
-- A variant for which a dedicated natrec-star operator must be
-- available, and ๐แต is available if the boolean is true.
โ-available-and-๐แต-available-if : Bool โ Modality-variant
โ-available-and-๐แต-available-if ok = record
{ ๐แต-allowed = ok
; โ-available = Lift _ โค
; โ-available-propositional = ฮป _ _ โ refl
; โ-available-decided = yes _
}
-- A variant for which a dedicated natrec-star operator is not
-- available, and ๐แต is available if the boolean is true.
โ-not-available-and-๐แต-available-if : Bool โ Modality-variant
โ-not-available-and-๐แต-available-if ok = record
{ ๐แต-allowed = ok
; โ-available = Lift _ โฅ
; โ-available-propositional = ฮป ()
; โ-available-decided = no (ฮป ())
}