liblayers

General-purpose libraries

ExtensionalityAxioms Logical axioms we depend on
Decision Typeclass for decision procedures and basic instances
LogicalRelations Binary logical relations (generalizes Coq's setoid rewriting and provides related tactics)
Functor Functor typeclass and basic instances
Monad Monad typeclass and basic instances
OptionMonad The option monad and related definitions
PowersetMonad The powerset monad (- -> Type) and related definitions
Lens Lenses (generalized, first-class record fields)
Lift Lifting along lenses

Abstract layer calculus

OptionOrders Orders for the option monads
LayerData Categorical structure for our types of abstract states and simulation relations blueprints
Structures Common mathematical structures used by the calculus
PseudoJoin The "pseudojoin" structure satisfied by our ⊕ operators
Primitives Interface for types of primitive specifications
Modules Interface for types of modules
Layers Interface for types of layer specifications
Semantics Interface for our semantics operators [[-]]
Language Rules of our "layer logic"
PTrees Definitions and theorems related to PTrees (finite maps over identifiers, from Compcert's general-purpose libraries)
PTreeModules Implementation of modules as finite maps from identifiers to function definitions
PTreeLayers Implementation of layer specifications as finite maps from identifiers to primitive specifications
PTreeSemantics Helpers for creating semantics operators involving PTreeModules and PTreeLayers
LayerLogicImpl Soundness proof for the rules of our logic

Connecting with CompcertX

CompcertStructures Orders and lemmas about some of Compcert's data structures
ErrorMonad Definitions related to Compcert's res monad (similar to option, result or error)
LiftMem Lift the Compcert memory model along a lens
LiftMemX Lift CompcertX's additional memory operations
LiftValueDomain Lift the mmatch predicate used by Compcert's value analysis
LiftValueAnalysis Lift more properties required by Compcert's value analysis
LiftDeadcodeproof Lift the magree predicated used by Compcert's dead code elimination
AbstractData Interface for the types of abstract data our layers are instrumented with
MemWithData Construct a new Compcert memory model by adding an abstract data field to an existing one
Stencil Interface of stencils: Compcert program templates we quantify over
StencilImpl Implementation of stencils
MakeProgram Interface of the make_program function, which constructs Compcert programs from a stencil, module, and layer interface
MakeProgramImpl Implementation of make_program
GenSem General framework to build primitive specifications from high-level Coq functions of various types
ClightModules Use layer specifications to instantiate Compcert external function semantics

Instantiating the calculus for Certikos

The Certikos proofs predate the abstract layer calculus (and informed its design). Because of this, our initial instantiation of this calculus was designed to retrofit our existing code. In future work, we will attempt to refactor our proofs and this instantiation to fit the new framework better. For now, the following modules were designed to provide a compatibility interface, allowing us to reuse our existing proof with minimal effort.

CompatData Compatibility for AbstractData
CompatPrimSem Concrete primitive specifications
CompatGenSem Specialization of GenSem (see above) to the concrete primitive specifications
CompatLayerDef Definition of our layer specifications (PTreeLayers of CompatPrimSems, augmented with memory accessors)
CompatLayerFacts Some properties of our concrete layer specifications
CompatLayerInvariants Invariant-related properties of the concrete layer specifications
CompatSemantics Building semantics operators operating on the concrete layer specifications
CompatLayers Bundle of all Coq libraries related to the concrete layer specifications
CompatExternalCalls Building Compcert external function semantics from concrete layer specifications
CompatClightSem Semantics of ClightX(L)
I64Layer Generic layer specification fragment for the 64-bits integer manipulation primitives which Compcert-generated code relies on
I64LayerAutosim I64 layer fragments always simulate one another