All Projects → garrigue → Certint

garrigue / Certint

A Certified Interpreter for ML with Structural Polymorphism

Labels

Projects that are alternatives of or similar to Certint

Coqpie
CoqPIE (an IDE for the Coq theorem prover + PEDANTIC)
Stars: ✭ 8 (-79.49%)
Mutual labels:  coq
Ledgertheory
Stars: ✭ 12 (-69.23%)
Mutual labels:  coq
Profunctor Monad
Bidirectional programming in Haskell with monadic profunctors
Stars: ✭ 30 (-23.08%)
Mutual labels:  coq
Hott Species
Combinatorial species in HoTT
Stars: ✭ 9 (-76.92%)
Mutual labels:  coq
Coqjvm
Coq executable semantics and resource verifier
Stars: ✭ 10 (-74.36%)
Mutual labels:  coq
Hello World
A Hello World program in Coq.
Stars: ✭ 14 (-64.1%)
Mutual labels:  coq
Autosubst
Automation for de Bruijn syntax and substitution in Coq
Stars: ✭ 22 (-43.59%)
Mutual labels:  coq
Compcert
The CompCert formally-verified C compiler
Stars: ✭ 984 (+2423.08%)
Mutual labels:  coq
Stalin Sort
Add a stalin sort algorithm in any language you like ❣️ if you like give us a ⭐️
Stars: ✭ 868 (+2125.64%)
Mutual labels:  coq
Hott
Homotopy type theory
Stars: ✭ 946 (+2325.64%)
Mutual labels:  coq
Monads
Coq code accompanying several articles on semantics of functional programming languages
Stars: ✭ 9 (-76.92%)
Mutual labels:  coq
Dblib Linear
Formalisation of the linear lambda calculus in Coq
Stars: ✭ 10 (-74.36%)
Mutual labels:  coq
Vvclocks
Verified vector clocks, with Coq!
Stars: ✭ 14 (-64.1%)
Mutual labels:  coq
Cufp 2015 Tutorial
An introductory tutorial for the Coq proof assistant.
Stars: ✭ 9 (-76.92%)
Mutual labels:  coq
Nuprlincoq
Implementation of Nuprl's type theory in Coq
Stars: ✭ 31 (-20.51%)
Mutual labels:  coq
Cpp2v
Formalization of C++ for verification purposes.
Stars: ✭ 24 (-38.46%)
Mutual labels:  coq
Jt89
sn76489an compatible Verilog core, with emphasis on FPGA implementation and Megadrive/Master System compatibility
Stars: ✭ 14 (-64.1%)
Mutual labels:  coq
Parseque
Total Parser Combinators in Coq
Stars: ✭ 37 (-5.13%)
Mutual labels:  coq
Paramcoq
Coq plugin for parametricity [[email protected]]
Stars: ✭ 32 (-17.95%)
Mutual labels:  coq
Coq Printf
Implementation of sprintf for Coq
Stars: ✭ 15 (-61.54%)
Mutual labels:  coq

A Certified Interpreter for ML with Structural Polymorphism

Jacques Garrigue, updated April 2020

The files in this archive contain a proof of type soundness for structural polymorphism based on local constraints [1], together with soundness and principality of the type inference algorithm, and a certified interpreter. See the support page for detailed information.

I started from a proof of type soundness for core ML by Arthur Chargueraud, which accompanied "Engineering formal metatheory" [2]. The library files (Lib_* and Metatheory*) are almost untouched. For compatibility we also copied FSetList.v from Coq 8.2.

The new files are as follows.

  • Metatheory_SP: new generic lemmas used in developments
  • Cardinal: lemmas about finite set cardinals
  • ML_SP_Definitions: basic definitions
  • ML_SP_Infrastructure: structural lemmas on kinds and types
  • ML_SP_Soundness: lemmas on derivations and proof of type soundness
  • ML_SP_Eval: proof of type soundness for a stack-based evaluator
  • ML_SP_Rename: renaming lemmas, and Gc elimination
  • ML_SP_Unify: soundness and completeness of unification
  • ML_SP_Inference: soundness and principality of type inference
  • ML_SP_Domain: instantiation of all the above proofs to polymorphic variants
  • ML_SP_Unify/Inference_wf: termination counters are in Prop

Of the above, Definitions, Infrastructure and Soundness are base on the core ML proof, but were heavily modified. Eval, Unify, Inference and Domain are completely new.

All the above development were checked with coq 8.11.0. (Porting to 8.11.0 is the only change wrt. the version of september 2010) You can compile them with "sh build.sh"

You can also play with the type checker. It does not work inside Coq at this point, but you should compile typinf.mli and typinf.ml (obtained by running Extraction.v), and look at use_typinf.ml for how to use them. (It contains a number of petty printers and conversion functions that make things easier).

Here are all the steps: (the first 3 steps are optional)

$ sh mkmakefile.sh
$ make Extraction.vo
$ make html
$ ocamlc -c typinf.mli
$ ocamlc -c typinf.ml
$ ocaml
        Objective Caml version ...
# #use "use_typinf.ml";;

[1] Jacques Garrigue: A Certified Interpreter of ML with Structural Polymorphism and Recursive Types. Mathematical Structures in Computer Science, November 2014, pages 1-25. Earlier version presented at APLAS'10, Shanghai, China, November 2010. link

[2] Brian Aydemir, Arthur Chargueraud, Benjamin C. Pierce, Randy Pollack and Stephanie Weirich: Engineering Formal Metatheory. POPL'08. link

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].