Skip to content
/ nola Public

Nola: Parameterization for Later-Free Invariants and Borrows

License

Notifications You must be signed in to change notification settings

hopv/nola

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nola: Parameterization for Later-Free Invariants and Borrows

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.

Publication

  • Non-Step-Indexed Separation Logic with Invariants and Rust-Style Borrows. Yusuke Matsushita. Ph.D. Thesis, University of Tokyo. Dec 2023. Paper Talk slides

Getting Started

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

Architecture

All the Coq code is in nola/ and structured as follows:

  • prelude : Prelude
  • util/ : General-purpose utilities, extending stdpp
    • fn (Functions), rel (Relations)
    • prod (Modified product), plist (Product list)
    • proph (Prophecy)
    • intp (Interpretation)
    • order (Order theory), psg (Pseudo-gfp)
    • citree (Coinductive-inductive tree)
  • bi/ : Libraries for bunched implication logic
    • ofe (On OFE), list (On list), gmap (On gmap), plist (On plist)
    • order (Order theory), deriv (Derivability)
    • genupd (General update), updw (Update with a custom world satisfaction), wpw (Weakest precondition with a custom world satisfaction), util (Utilities)
    • paradox (Paradoxes)
  • iris/ : Libraries for Iris base logic
  • heap_lang/ : Variant of Iris HeapLang, supporting Ndnat (infinite non-determinism) and program logic with custom world satisfactions
  • examples/ : Examples

About

Nola: Parameterization for Later-Free Invariants and Borrows

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published