Iris Tactics
basics
(referenced from logsem iris tutorial)
Iris propositions include many of the usual logical connectives such
as conjunction P ∧ Q. As such, Iris uses a notation scope to
overload the usual logical notation in Coq. This scope is delimited by
I and bound to iProp Σ. Hence, you may need to wrap your
propositions in (_)%I to use the notations.
Iris uses ssreflect internally. This means the following changes are made to gallina tactics:
- No commas between arguments, meaning you have to write
rewrite H1 H2instead ofrewrite H1, H2. rewrite -Hinstead ofrewrite <-H. But the original also seems to work.- Occurrences are written in front of the argument (
rewrite {1 2 3}Hinstead ofrewrite H at 1 2 3) - Rewrite can unfold definitions as
rewrite /defwhich does thesame asunfold def
tactics
iIntros.: Same asintros. From my experience, it was simplier to intros specifically as much as possible.iIntros "H".:intros HiIntros "[H1 H2]": Used to introsP * Qseparately into spatial context.iIntros "H1 & H2 & H3".: Used to intros multiple hypothesis at once.(H1 & .. & H2 & H3) = [H1 .. [H2 H3] ..].iIntros "[HP HQ]".: Used to introsP ∨ Q.iIntros %x.: Used to intros∀ x.iIntros %x & Hx.: Used to intros∃ x, Φ x.iIntros %H.: Intros⌜...⌝directly into coq context.
iFrame.: Discharge immediate goals from a separating conjunction.iApply "H".: Same asapply.iApply ("H" with "[H1] [H2]").: If applyingHyields two subgoals, automatically passH1to the first andH2to the second.iApply ("H" $! x y z).: Same asapply (H x y z).x, y, zis from the pure context.
iSplitL "H".: Break apart a separating conjunction and pass theHhypothesis to the lhs goal.iSplitR "H".: Same asiSplitL, but passHto the rhs goal.iLeft. iRight.: Same asleft. right.iExists x.. Same asexists x.xis from the pure context.iPureIntro.: Intros pure hypothesis⌜...⌝directly into coq context.
generic input characters
\ent, \vdash:⊢\sep:∗\and:∧\or:∨\ex:∃\all:∀\lc:⌜\rc:⌝\fun, \lambda:λ
Written on July 31, 2025
