Commit a7b8df6f authored by Joseph Tassarotti's avatar Joseph Tassarotti Committed by Robbert Krebbers

More comments about iInv tactics.

parent 5a545315
...@@ -170,8 +170,11 @@ Rewriting / simplification ...@@ -170,8 +170,11 @@ Rewriting / simplification
Iris Iris
---- ----
- `iInv N as (x1 ... xn) "ipat" "Hclose"` : open the invariant `N`, the update - `iInv (N with "selpat") as (x1 ... xn) "ipat" "Hclose"` : open the invariant
for closing the invariant is put in a hypothesis named `Hclose`. `N`. The selection pattern `selpat` is used for any auxiliary assertions
needed to open the invariant (e.g. for cancelable or non-atomic
invariants). The update for closing the invariant is put in a hypothesis named
`Hclose`.
Miscellaneous Miscellaneous
------------- -------------
......
...@@ -468,18 +468,19 @@ Proof. by apply as_valid. Qed. ...@@ -468,18 +468,19 @@ Proof. by apply as_valid. Qed.
Lemma as_valid_2 (φ : Prop) {PROP : bi} (P : PROP) `{!AsValid φ P} : P φ. Lemma as_valid_2 (φ : Prop) {PROP : bi} (P : PROP) `{!AsValid φ P} : P φ.
Proof. by apply as_valid. Qed. Proof. by apply as_valid. Qed.
(* Input: `P`; Outputs: `N`, (* Input: [P]; Outputs: [N],
Extracts the namespace associated with an invariant assertion. Used for `iInv`. *) Extracts the namespace associated with an invariant assertion. Used for [iInv]. *)
Class IntoInv {PROP : bi} (P: PROP) (N: namespace). Class IntoInv {PROP : bi} (P: PROP) (N: namespace).
Arguments IntoInv {_} _%I _. Arguments IntoInv {_} _%I _.
Hint Mode IntoInv + ! - : typeclass_instances. Hint Mode IntoInv + ! - : typeclass_instances.
(* Input: `Pinv`; (* Input: [Pinv]
- `Pinv`, an invariant assertion Arguments:
- `Pin` the additional assertions needed for opening an invariant; - [Pinv] is an invariant assertion
- `Pout` is the assertion obtained by opening the invariant; - [Pin] is an additional assertion needed for opening an invariant
- `Q` is a goal on which iInv may be invoked; - [Pout] is the assertion obtained by opening the invariant
- `Q'` is the transformed goal that must be proved after opening the invariant. - [Q] is a goal on which iInv may be invoked
- [Q'] is the transformed goal that must be proved after opening the invariant.
There are similarities to the definition of ElimModal, however we There are similarities to the definition of ElimModal, however we
want to be general enough to support uses in settings where there want to be general enough to support uses in settings where there
......
...@@ -1865,6 +1865,11 @@ Tactic Notation "iMod" open_constr(lem) "as" "(" simple_intropattern(x1) ...@@ -1865,6 +1865,11 @@ Tactic Notation "iMod" open_constr(lem) "as" "(" simple_intropattern(x1)
Tactic Notation "iMod" open_constr(lem) "as" "%" simple_intropattern(pat) := Tactic Notation "iMod" open_constr(lem) "as" "%" simple_intropattern(pat) :=
iDestructCore lem as false (fun H => iModCore H; iPure H as pat). iDestructCore lem as false (fun H => iModCore H; iPure H as pat).
(** * Assert *)
(* Finds a hypothesis in the context that is an invariant with
namespace [N]. To do so, we check whether for each hypothesis
["H":P] we can find an instance of [IntoInv P N] *)
Tactic Notation "iAssumptionInv" constr(N) := Tactic Notation "iAssumptionInv" constr(N) :=
let rec find Γ i P := let rec find Γ i P :=
lazymatch Γ with lazymatch Γ with
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment