This directory contains the certified implementation of the financial multi-party contract language described in the paper "Certified Symbolic Management of Financial Multi-Party Contracts". It also includes the Haskell implementation that has been extracted from the Coq implementation along with examples that illustrate the use of the extracted Haskell library.
- Syntax.v defines the language's syntax.
- Typing.v defines the type system.
- Denotational.v defines the denotational semantics; DenotationalTyped.v proves that the denotational semantics is total on well-typed contracts.
- Equivalence.v proves some contract equivalences.
- Antisymmetry.v proves antisymmetry of the denotational semantics.
- SyntacticCausality.v and ContextualCausality.v implement syntactic causality checks and prove them sound.
- TimedTyping.v gives the time-indexed type system and proves that well-typed contracts are causal. In addition, it defines type inference procedure and proves it sound and complete.
- Reduction.v defines the reduction semantics and proves it adequate for the denotational semantics.
- Specialise.v defines specialisation of contracts (partial evaluation w.r.t. a partial external environment) and proves it correct.
- Horizon.v defines the (syntactic) horizon of a contract and proves that it is semantically correct.
The list below details where the theorems (and lemmas, corollaries etc.) from the paper "Certified Symbolic Management of Financial Multi-Party Contracts" can be found in the Coq formalisation:
- Lemma 1: lemma
translateExp_extin TranslateExp.v - Lemma 2: theorem
sem_antisymin Antisymmetry.v - Proposition 3: theorem
Esem_typed_totalandCsem_typed_totalin DenotationalTyped.v - Proposition 4: theorem
horizon_soundin Horizon.v - Proposition 5: lemma
TiTyE_typeand theoremTiTyC_typein TimedTyping.v - Theorem 6: corollary
TiTyC_causalin TimedTyping.v - Lemma 7: lemma
TiTyE_openandTiTyC_openin TimedTyping.v - Theorem 8: theorem
inferC_soundand inferC_complete in TimedTyping.v - Corollary 9: corollary
has_type_causalin TimedTyping.v - Theorem 10: theorem
specialiseExp_soundandspecialise_soundin Specialise.v - Theorem 11: (i) theorem
red_sound1andred_sound2, (ii) theoremred_preservation, and (iii) theoremred_progressin Reduction.v
The function adv from the paper is defined as redfun in
Reduction.v. The soundness and completeness of redfun
is proved by Theorem redfun_red respectively Theorem red_redfun in
Reduction.v.
The functions spE and spC from the paper are defined in
Specialise.v as specialiseExp and
specialise, respectively.
The Extraction subdirectory implements a simple extraction of the Coq definitions to Haskell code using Coq's built-in extraction facility. For convenience, the extracted Haskell code is included in this repository. To reproduce the code extraction from Coq to Haskell use the Makefile in Extraction:
make
cd Extraction
makeThe extracted Haskell code provides a library for writing and managing contracts embedded in Haskell. The Extraction/Examples subdirectory contains a number of example contracts that are written using the extracted Haskell library.
The Coq formalisation uses logical axioms for three abstract data types:
- We assume the types
AssetandPartywith decidable equality (cf. Syntax.v). - We assume the type
FMapof finite mappings given by a standard set of operations on finite mappings together with a set of axioms that specify their properties (cf. FinMap.v).
- To check the proofs: Coq 8.4pl5
- To step through the proofs: GNU Emacs 24.3.1, Proof General 4.2
- To use extracted Haskell library: GHC 7.8.4
To check and compile the complete Coq development, you can use the
Makefile:
> make