diff --git a/theories/proofmode/classes.v b/theories/proofmode/classes.v index 25e01bcbfdceef37b04b83cbac8a031faa028e51..3810256998af00ff56ce85eef29ebcf9d17c2d2e 100644 --- a/theories/proofmode/classes.v +++ b/theories/proofmode/classes.v @@ -43,6 +43,19 @@ Proof. by exists φ. Qed. Hint Extern 0 (IntoPureT _ _) => notypeclasses refine (into_pureT_hint _ _ _) : typeclass_instances. +(* [FromPure] is used when introducing a pure assertion. It is used by + iPure, the "[%]" specialization pattern, and the [with "[%]"] + pattern when using [iAssert]. + + The [a] Boolean asserts whether we introduce the pure assertion in + an affine way or in an absorbing way. When [FromPure true P φ] is + derived, then [FromPure false P φ] can always be derived too. We + use [true] for specialization patterns and [false] for the [iPure] + tactic. + + This Boolean is not needed for [IntoPure], because in the case of + [IntoPure], we can have the same behavior by asking that [P] be + [Affine]. *) Class FromPure {PROP : bi} (a : bool) (P : PROP) (φ : Prop) := from_pure : bi_affinely_if a ⌜φ⌠⊢ P. Arguments FromPure {_} _ _%I _%type_scope : simpl never.