Submitted to CPP 2015
Section II. Language-independent infrastructure (borrowed from Compcert) | |
smallstep | Small-step and big-step operational semantics |
smallstep_guided | Guided infinite executions (not part of CompCert) |
smallstep_exists_beh | Lemma 1: Existence of behaviors |
Section III. Procedural semantics | |
proc | Procedural semantics |
Section IV. Compositional semantics | |
comp | Compositional semantics |
Section V. Linking | |
resolution | Internal call resolution by behavior simulation. Semantic linking |
link | Theorem 1: linking in the same language |
proc_comp_stuck | Lemma 2: Relationship between procedural and compositional semantics thanks to linking. |
Section VI. Refinement | |
refinement | Compositional refinement. Theorems 2 and 3. |
ccimproves | Theorem 4: The CompCert improvement relation is a refinement relation. |
Library files | |
map | Applicative maps |
stream | Infinite streams |
classic | Classical logic |
tac | Useful tactics |
instance | Redefinition of RTL as a procedural/compositional semantics, and proof of equivalence. Making CSE proof compositional. |
unify | Correspondence between our definitions and CompCert's for semantics and behaviors |
CompCert RTL language and its optimization | |
Registers | Register maps. |
RTL | Register Transfer Language. |
Kildall | Data-flow analysis. |
SelectOpSrc | Offset addressing. |
CombineOp | Recognition of combined operations, addressing modes and conditions. |
CSE | Common subexpression elimination through value numbering: definition of the transformation. |
CombineOpproof | Proof of the recognition phase. |
CSEproof | Correctness of the CSE transformation. |
When we ported the proofs of CSE, we did not even need to understand how they worked. Once we suitably adapted the CompCert event system, they simply went through. | |
CompCert general setting | |
AST | Memory chunks, global variables and program transformations. |
Integers | 32-bit machine integers |
Values | Run-time integer and pointer values. (We dropped floating-point values because of some assumption in CompCert that an external function call has to return a value of the type expected by its caller (see the offical CompCert development), which is not yet supported by our compositional semantics.) |
Memdata | Concrete bytewise representation of data in memory |
Memtype | Specification of the memory model |
Memory | Implementation of the memory model |
Events | CompCert events. We also integrate our external call events into CompCert's setting. |
Globalenvs | Global environments, mapping syntactic declared program symbols to memory locations. Our instantiation is parameterized over the global environment, and we clearly distinguish a symbol declaration from an actual function definition. In other words, we assume that all symbols are fixed and their corresponding memory locations are fixed in advance. Only actual function definitions actually change. |
Smallstep | CompCert definitions for small-step semantics |
Behaviors | CompCert definitions for big-step semantics. Behavior improvement and correctness of two useful proof techniques, namely forward and backward simulations, wrt. behavior improvement. |
Op | Architecture-specific (here we took x86) CPU low-level operators and addressing modes. |
CompCert library files | |
Axioms | Axioms needed by CompCert: functional extensionality and propositional extensionality. |
Coqlib | Tactics |
Intv | Integer intervals |
Errors | Error reporting and the Error monad |
Maps | Applicative finite maps |
Iteration | Bounded and unbounded iterators. |
Lattice | Semi-lattices. |
Ordered | Ordered sets. |
Heaps | Heap data structure. |
Wfsimpl | Well-founded Noetherian recursion. |
Note: you will need Coq 8.3pl3 (and an estimated 15 minutes) to process the files.