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 |
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 |
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 |