Abstract
Iris is a framework for higher-order concurrent separation logic, which has been implemented in the Coq proof assistant and deployed very effectively in a wide variety of verification projects. Iris was designed with the express goal of simplifying and consolidating the foundations of modern separation logics, but it has evolved over time, and the design and semantic foundations of Iris itself have yet to be fully written down and explained together properly in one place. Here, we attempt to fill this gap, presenting a reasonably complete picture of the latest version of Iris (version 3.1), from first principles and in one coherent narrative.
Highlights
Iris is a framework for higher-order concurrent separation logic, implemented in the Coq proof assistant, which we and a growing network of collaborators have been developing actively since 2014
In Iris 2.0, to support higher-order ghost state, we proposed a generalization of partial commutative monoids (PCMs) to what we call cameras
In Iris 3.0, we aimed to simplify the remaining sources of complexity in Iris by taking the Iris story to its logical conclusion: applying the reductionist Iris methodology to Iris itself! at the core of Iris 3.0 is a small, resourceful base logic, which distills the essence of Iris to what we argue is a bare minimum: it is a higher-order logic extended with the basic connectives of BI, a predicate for resource ownership, and a handful of simple modalities, but it does not bake in any propositions about programs as primitive
Summary
Iris is a framework for higher-order concurrent separation logic, implemented in the Coq proof assistant, which we and a growing network of collaborators have been developing actively since 2014. By foundational machine-checked proofs, we mean proofs that are performed directly in a proof assistant against the operational semantics of the programming languages under consideration and assuming only the low-level axioms of mathematical logic (as encoded in the type theory of Coq).. Iris is general in the sense that it is not tied to a particular language semantics and can be used to derive and deploy a range of different formal systems, including but not limited to: logics for atomicity refinement of fine-grained concurrent data structures (Jung et al, 2015), Kripke logical-relations models for relational reasoning in ML-like languages (Krebbers et al, 2017b; Krogh-Jespersen et al, 2017; Timany et al, 2018; Frumin et al, 2018), program logics for relaxed memory models (Kaiser et al, 2017), a program logic for object capability patterns in a JavaScript-like language (Swasey et al, 2017), and a safety proof for a realistic subset of the Rust programming language (Jung et al, 2018). Before getting to those foundations and what is so interesting about them, we begin with a bit of historical background on concurrent separation logic
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have
Disclaimer: All third-party content on this website/platform is and will remain the property of their respective owners and is provided on "as is" basis without any warranties, express or implied. Use of third-party content does not indicate any affiliation, sponsorship with or endorsement by them. Any references to third-party content is to identify the corresponding services and shall be considered fair use under The CopyrightLaw.