diff --git a/theories/proofmode/modalities.v b/theories/proofmode/modalities.v index 4ed0b68fd75540be3b470890bd53bcfb061fdda9..36e54a347087d5a31943bfafc85d788ac80826d0 100644 --- a/theories/proofmode/modalities.v +++ b/theories/proofmode/modalities.v @@ -6,8 +6,21 @@ Import bi. (** The `iModIntro` tactic is not tied the Iris modalities, but can be instantiated with a variety of modalities. -In order to plug in a modality, one has to decide for both the intuitionistic and -spatial context what action should be performed upon introducing the modality: +For the purpose of MoSeL, a modality is a mapping of propositions +`M : PROP1 → PROP2` (where `PROP1` and `PROP2` are BI-algebras, although usually +it is the same algebra) that is monotone and distributes over finite products. +Specifically, the following rules have to be satisfied: + + P ⊢ Q emp ⊢ M emp + ---------- + M P ⊢ M Q M P ∗ M Q ⊢ M (P ∗ Q) + +Together those conditions allow one to introduce the modality in the +goal, while stripping away the modalities in the context. + +Additionally, upon introducing a modality one can perform a number of +associated actions on the intuitionistic and spatial contexts. +Such an action can be one of the following: - Introduction is only allowed when the context is empty. - Introduction is only allowed when all hypotheses satisfy some predicate @@ -19,7 +32,22 @@ spatial context what action should be performed upon introducing the modality: - Introduction will clear the context. - Introduction will keep the context as-if. -Formally, these actions correspond to the following inductive type: *) +Formally, these actions correspond to the inductive type [modality_action]. +For each of those actions you have to prove that the transformation is valid. + +To instantiate the modality you have to define: 1) a mixin `modality_mixin`, +2) a record `modality`, 3) a `FromModal` type class instance from `classes.v`. + +For examples consult `modality_id` at the end of this file, or the instances +in the `modality_instances.v` file. + +Note that in MoSeL modalities can map the propositions between two different +BI-algebras. Most of the modalities in Iris operate on the same type of +assertions. For example, the <affine> modality can potentially maps propositions +of an arbitrary BI-algebra into the sub-BI-algebra of affine propositions, but +it is implemented as an endomapping. On the other hand, the embedding modality +⎡-⎤ is a mapping between propositions of different BI-algebras. +*) Inductive modality_action (PROP1 : bi) : bi → Type := | MIEnvIsEmpty {PROP2 : bi} : modality_action PROP1 PROP2