Nola is a library for parameterizing higher-order ghost state, which enables wiping out the later modality. It is fully mechanized in Coq with the Iris separation logic framework.
The name Nola comes from 'No later' and the 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
bi/
: Libraries for bunched implication logiciris/
: Libraries for Iris base logiciprop
(iprop
)own
(Onown
)list
(On lists)option
(Onoption
),agree
(Onagree
),csum
(Oncsum
)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),borrow_deriv
(Borrowing relaxed with derivability)proph
(Prophecy),proph_ag
(Prophetic agreement),pborrow
(Prophetic borrowing)cif
(Coinductive-inductive formula)
heap_lang/
: Variant of Iris HeapLang, supportingNdnat
(infinite non-determinism) and program logic with custom world satisfactionsexamples/
: Exampleslogic
(Logic)