This project aims to investigate possible formalisations of program equivalence (behavioural, contextual, CIU equivalence and logical relations) using a small subset of Core Erlang, including lists, pattern matching and recursion.
This project only depends on Coq, version 8.15.0 or later.
make compiles the library
The formalisation of the sequential language:
Basics.vcontains simple extensions about the standard libraryExpSyntax.vcontains the formal syntax of language under investigationExpManipulation.vcontains the definition of substitutions, renamingsScoping.vcontains the scoping rules for the languageSubstSemantics.vcontains the dynamic semantics of the languageLogRel.vcontains the logical relationsCompatibility.vcontains the compatibility (congruence) proofs of the logical relationsCIU.vcontains "CIU-equivalence" definitionCTX.vcontains contextual equivalence definitions, proofs about equality of equivalencesEquivs.vcontains simple expression equivalence proofs
The formalisation of the concurrent language:
ConcurrentFunSemantics.vcontains the process-local and inter-process (system) semantics of Core Erlang.Examples.vcontains a number of program evaluation proofs using the concurrent semantics.ConcurrentProperties.vcontains proofs about the properties of the concurrent semantics.Bisimulations.vcontains program equivalence definitions and proofs.
This work is based on the following related work:
- Operational Semantics and Program Equivalence: https://link.springer.com/chapter/10.1007/3-540-45699-6_8
- Autosubst: https://link.springer.com/chapter/10.1007%2F978-3-319-22102-1_24
- Contextual Equivalence for a Probabilistic Language with Continuous Random Variables and Recursion: https://dl.acm.org/doi/pdf/10.1145/3236782