Nola is a library to achieve later-free invariants and borrows by the power of parameterization. It is fully mechanized in Coq with the Iris separation logic framework.
The name Nola comes from No laters and a nickname for New Orleans, Louisiana, US.
- Non-Step-Indexed Separation Logic with Invariants and Rust-Style Borrows. Yusuke Matsushita. Ph.D. Thesis, University of Tokyo. Dec 2023. Paper Talk slides
We use opam ver 2.* for package management.
To set up an opam switch
named nola
and link it to the folder:
opam switch create nola 5.0.0 # Choose an OCaml version
opam switch link nola .
To set up opam repos for Coq and Iris for the current opam switch:
opam repo add coq-released https://coq.inria.fr/opam/released
opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git
To fix development dependencies and compile Coq code:
make devdep
make -j16 # Choose a job number
Or to install as a library locally:
opam install .
To generate and browse a document:
make viewdoc
All the Coq code is in nola/
and structured as follows:
prelude
: Preludeutil/
: General-purpose utilities, extendingstdpp
iris/
: Iris librariesofe
(OFEs)list
(Onlist
),gmap
(Ongmap
),plist
(Onplist
)deriv
(Derivability)upd
(Update),wp
(Weakest precondition),util
(Utilities)sinv
(Simple invariant),sinv_deriv
(Simple invariant relaxed with derivability)inv
(Invariant),inv_deriv
(Invariant relaxed with derivability),na_inv
(Non-atomic invariant),na_inv_deriv
(Non-atomic invariant relaxed with derivability)lft
(Lifetime),borrow
(Borrowing)proph
(Prophecy),proph_ag
(Prophetic agreement),pborrow
(Prophetic borrowing)paradox
(Paradoxes)
heap_lang/
: Variant of Iris HeapLang, withNdnat
(terminating infinite non-determinism) addedexamples/
: Examples