The iris-lean
    project aims to port Iris into Lean. As it stands now, the project
    is mainly a formalization of Iris Proof Mode frontend MoSeL.
I want to understand concretely what iris-lean has
    accomplished, in order to judge how it might be used for mechanizing
    other separation logics in Lean. To do this, I worked my way up the
    project’s import graph, and made an inventory of which kind of
    theorems are in each file.
Here are my notes about what each file in the
    iris-lean repository does.
Iris.Std.Classes
    mathlib somewhereIris.Std.Tactic
    Iris.Std.Rewrite
    Iris.Std.DelabRule
    Iris.Std.BigOp
    LawfulBigOp f unit eq: f is lawful
    with respect to an equality relation eqIris.BI.Notation
    Iris.BI.BIBase
    PROP : TypeBIBaseIris.Algebra.OFE
    Iris.BI.BI
    BIBase and COFErw_mono_rule, registers
    that attribute for bi_sep_mono and
    persistently_monoIris.BI.Classes
    Iris.BI.Extensions
    Iris.Std.TC
    class inductive, unif_hint: none of
    these words are in the bibleIris.BI.DerivedLaws
    BI typeclassrw_mono_rule.
    Does that mean you can rewrite under them?LawfulBigOp instance for:
    and with equality BiEntails and unit
    Truesep with equality BiEntails and unit
    empIris.BI.Instances
    Affine, Absorbing,
    Intuitionistic, and Persistent instances
    for BI definitionsIris.Std.Expr, Iris.Std.Nat,
    Iris.Std.Prod, Iris.Std.Expr,
    Iris.Std.Qq, Iris.Std.Equivalence
    Iris.Instances.Data.SetNotation
    (- || -)Iris.Instances.Data.State
    State is a function
    Nat -> StateResult, and StateResult is
    either “unknown”, “result -”, or “conflict”
    Iris.Instances.Classical.Instance
    BI instance (resp. BIBase and discrete
    COFE) for propositions over State
    (HeapProp)BIBase is just lifting
    later does no step-indexingpersistently means the proposition is
    state-irrelevantIris.Instances.Classical.Notation
    HeapPropI didn’t end up reading anything in ProofMode,
    because Lean metaprogramming is still magical to me, and I’m happy
    to leave it as “that code works”. There is a single example in the
    repository.
iris-lean do, and what’s next?iris-lean implements a collection of tactics against
    a particular axiomatization of separation logic.
The most glaring deficiency in iris-lean is the fact
    that it’s never actually instantiated. Trying to do this for a
    simple separation logic (and mechanizing its adequacy theorem) would
    be an obvious next step. I suspect that in the process of doing
    this, one would need to break up the BIBase typeclass
    into smaller components—not every logic will have all of the
    features of Iris. This could possibly be a fragment of one of the
    early logics presented in Iris from the Ground Up, but I
    think that might even be a little much at this point.
They also have no program logics developed on top of their separation logic. Implementing an analogue of the generic program logic code from Iris would probably require a lot of work. It would be nice if there was generic tactic-writing code for this.
The results for OFEs and COFEs could be
    ported from regular Iris, since those have no dependencies in Iris.
    I’m curious about if any of this work can integrate into
    Mathlib.
The README for iris-lean mentions an
    issue with generalized rewriting. I don’t fully understand how they
    solve this issue with their rw' tactic in the
    development. Which features of generalized rewriting does
    iris-lean need, and what has changed since this project
    was under development?
My fork is
    updated to Lean 4.14.0-rc2. The import graph was
    generated using importGraph.