December 2009

The Mechanized Semantic Library is a collection of mathematical techniques
useful for developing semantic models of program logics and type systems:
**separation algebras**, **permission share models**,
**indirection theory** (a clean axiomatization of step indexing),
and **modal logics**.

The library has a special emphasis on techniques which integrate smoothly into a
mechanical theorem prover; at the moment the library is only available for use
in Coq.

MSL v0.2 has the following enhancements over v0.1:

- Fully-worked example using the MSL: mechanized type soundness of the polymorphic lambda calculus with references.
- Recursive predicates: both regular and higher-order recursion, plus utility lemmas for proving contractiveness.
- Fancier knots: we support knots which provide monotonic predicates and allow for bifunctors.
- A proof that squash and unsquash form Galois connection.
- Minor mathematical improvements: we define a more general "fashionable" and weaken the definition of "unage_identity".
- Engineering upgrades: redo build system; new "msl.v" file to import the entire library for clients; streamline path to use indirection theory without separation algebras; a few definition tweeks for engineering purposes; and various utility lemmas, including a theory of fashionable implication.

The Mechanized Semantic Library is made available under a BSD-style license.

# | Name | Description | Paper(s) |

1. | Base | Axioms for computation; custom tactics; basic theorems | |

2. | Separation Algebras | Compositional semantic models for separation logic | [2], [3], [4] |

4. | Shares | Share accounting to model fractional ownership in separation logic | [2] |

5. | Indirection Theory | Semantic models for approximating contravariant circularities | [3], [4] |

6. | Logics | Definitions of substructural and modal logics | [1], [2], [3], [4] |

# | Title | Authors | Read | Cite |

[1] | Multimodal Separation Logic for Reasoning About Operational Semantics |
R. Dockins, A. W. Appel, A. Hobor | BibTeX | |

[2] | A Fresh Look at Separation Algebras and Share Accounting | R. Dockins, A. Hobor, A. W. Appel | BibTeX | |

[3] | A Theory of Indirection via Approximation | A. Hobor, R. Dockins, A. W. Appel | BibTeX | |

[4] | A Logical Mix of Approximation and Separation | A. Hobor, R. Dockins, A. W. Appel | BibTeX |

List order is by publication date. For a mapping of files to papers please see the file list.

The MSL includes some associated examples using various components of the library. The first example, released with v0.2, is a mechanized type soundness proof for the polymorphic lambda calculus with references. We plan to include more examples as we continue to build the MSL. These examples are released under the same BSD-style license as the MSL.

# | Example | Components |

1 | Type Soundness of the Polymorphic Lambda Calculus with References | Indirection Theory, Logics |

The following projects use the MSL. Although the MSL is utilized in them, and in some cases was developed in conjunction with them, they are independent projects, with their own developers, goals, codebase, and associated license schemes.

The goal of the Concurrent C Minor Project is to connect machine-verified source programs in sequential and concurrent programming languages to machine-verified optimizing compilers.

# | File name | Component | Associated paper(s) |

1. | ClassicalReasoningAboutComputation.v | Base | |

2. | base.v | Base | |

3. | sepalg.v | Separation Algebras | [2] |

4. | sepalg_generators.v | Separation Algebras | [2], [3], [4] |

5. | boolean_alg.v | Shares | [2] |

6. | tree_shares.v | Shares | [2] |

7. | shares.v | Shares | [2] |

8. | knot.v | Indirection Theory | [3] |

9. | knot_hered.v | Indirection Theory | [4] |

10. | knot_bells.v | Indirection Theory | |

11. | knot_lemmas.v | Indirection Theory | [3] |

12. | knot_sa.v | Indirection Theory | [3], [4] |

13. | knot_sa_trivial.v | Indirection Theory | |

14. | knot_prop.v | Indirection Theory | |

15. | sepalg_functors.v | Indirection Theory | [4] |

16. | knot_setoid.v | Indirection Theory | [3] |

17. | knot_unique.v | Indirection Theory | [3] |

18. | age_sepalg.v | Logics | [3], [4] |

19. | predicates_hered.v | Logics | [1], [2], [3], [4] |

20. | subtypes.v | Logics | [1], [4] |

21. | predicates_rec.v | Logics | [1], [4] |

22. | contractive.v | Logics | [1], [4] |

23. | msl.v | MSL |

Download
ClassicalReasoningAboutComputation.v

This file contains the axiom base for the development. We assume the classical
axiom, dependent unique choice, relational choice, functional extensionality and
propositional extensionality. However, the proofs in this distribution use only
the extensionality axioms.

Download
base.v

This exports the parts of the Coq standard library used throughout the
development as well as a few custom convenience tactics.

Download
sepalg.v

This file defines our relational form of separation algebras with the
disjointness axiom. We also define the join_sub relation and the joins relation.
Additionally, elementary lemmas about the definitions are proved.

Download
sepalg_generators.v

We define SA operators in this file. All the operators mentioned in
[2], [3], and [4] appear here, along with
a few others.

Download
boolean_alg.v

This file defines boolean algebras from an order-theoretic perspective. We also
define axioms relating to properties we desire of share models, including
relativization, splitting and token factory axioms.

Download
tree_shares.v

Here we construct the boolean-labeled tree share model as discussed in
[2]. Note, however, that the proof of the token counting
axioms follow a slightly different path than the proof in that paper. This
is mostly because reasoning about sets in Coq is inconvenient.

Download
shares.v

This file simply repackages the construction from tree_shares.v into a nicer
interface for downstream users. We also define the notion of a "positive" share;
that is a nonunit share.

Download
knot.v

This file contains the central "knot" development used to model approximations
to contravariant circularities. Included are both the axiomitization and the
model construction. It follows section 8 of [3] quite
closely.

Download
knot_hered.v

Enhances knot.v by threading a monotonicity property through the construction.
The result is that all predicates extracted from a knot are automatically
hereditary. Although the axiomatization is not much more complex than in
the basic case, the construction is significantly harder. The
axiomatization is explained in section 2.3 of [4]; the
construction will
be explained in a future paper.

Download
knot_bells.v

Enhances knot_hered.v to allow the input to the knot to be a bifunctor, and
allow the user to supply a relation that further restricts the predicates that
can be stored in the knot. The axiomatization is slightly more complicated
than in the knot_hered case, but the construction is again more complicated.
This file will be explained in a future paper.

Download
knot_lemmas.v

Easy lemmas that follow from the theory of indirection, including a Galois
connection.

Download
knot_sa.v

The definition of a separation algebra on top of knots as coved in section 7 of
[3] and in more detail in sections 6 and 7 of
[4].

Download
knot_sa_trivial.v

Used when you want to use the logics module, but do not have interesting
separation behavior.

Download
knot_prop.v

This file specializes the knot, knot_lemmas, and knot_sa files to use "Prop" as truth
values.

Download
sepalg_functors.v

A technical development of "unmapping" needed to get the extra unage*
properties in knot_sa as explained in section 7 of [4].

Download
knot_setoid.v

An alternate, axiom-free, development of the knot. We avoid the need for the
extensionality axiom by working explicitly up to equivalance relations and
weakening the axioms of the theory accordingly.

Download
knot_unique.v

The development of the uniqueness proof for knots. We prove that any two
implementations of the theory of indirection are isomorphic.

Download
age_sepalg.v

We enhance separation algebras with a notion of aging as in sections 2 and 6 of
[4]. The
"ASA" typeclass presents an interface sufficient to define the Kripke model
below. The interface is implemented using the properties
obtained from knot_sa.

Download
predicates_hered.v

Definition of the higher-order modal separation logic as discussed in sections
2, 4, 5, and 6 of [1]; section 4
of [2]; sections 5, 6, and 7 of [3];
and sections 3 and 6 of [4].

Download
subtypes.v

Lemmas about fashionable implication. This is partially explained in section 4
of [4].

Download
predicates_rec.v

Definition and proofs about equirecursion. We include both the standard
"mu" recursion as well as a more powerful higher-order variant. This file
is partially explained in section 4 of [4] and will be explained in
more detail in a future paper.

Download
contractive.v

A collection of utility lemmas for proving that various predicate functions are
contractive or nonexpansive (for both the regular recursion and the higher-order
variety). This file is partially explained in section 4 of
[4] and will be explained in more detail in a future paper.

Download
msl.v

A file which re-exports the major components of the MSL library for users.

The Mechanized Semantic Library is developed and maintained by Andrew W. Appel, Robert Dockins, and Aquinas Hobor.

Copyright (c) 2009, Andrew Appel, Robert Dockins and Aquinas Hobor.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

- Redistribution of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

- Redistribution in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.