8000 GitHub - COCTI/coq-of-ocaml: Import OCaml programs to Coq πŸ“ 🐫
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

COCTI/coq-of-ocaml

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Logo coq-of-ocaml

Import OCaml programs to Coq.

travis status Join the chat at https://gitter.im/clarus/coq-of-ocaml

https://clarus.github.io/coq-of-ocaml/

Start with the file main.ml:

type 'a tree =
  | Leaf of 'a
  | Node of 'a tree * 'a tree

let rec sum tree =
  match tree with
  | Leaf n -> n
  | Node (tree1, tree2) -> sum tree1 + sum tree2

Run:

coq-of-ocaml main.ml

Get a file Main.v:

Require Import OCaml.OCaml.

Local Open Scope Z_scope.
Local Open Scope type_scope.
Import ListNotations.

Inductive tree (a : Set) : Set :=
| Leaf : a -> tree a
| Node : tree a -> tree a -> tree a.

Arguments Leaf {_}.
Arguments Node {_}.

Fixpoint sum (tree : tree Z) : Z :=
  match tree with
  | Leaf n => n
  | Node tree1 tree2 => Z.add (sum tree1) (sum tree2)
  end.

Features

  • core of OCaml (functions, let bindings, pattern-matching,...) βœ”οΈ
  • type definitions (records, inductive types, synonyms, mutual types) βœ”οΈ
  • modules as namespaces βœ”οΈ
  • modules as dependent records (signatures, functors, first-class modules) βœ”οΈ
  • projects with complex dependencies using .merlin files βœ”οΈ
  • .ml and .mli files βœ”οΈ
  • existential types βœ”οΈ
  • partial support of GADTs 🌊
  • partial support of polymorphic variants 🌊
  • ignores extensible types ❌
  • ignores side-effects ❌

Even in case of errors we try to generate some Coq code. The generated Coq code should be readable and with a size similar to the OCaml source. One should not hesitate to fix remaining compilation errors, by hand or with a script (name collisions, missing Require,...).

Install

Latest stable version

Using the package manager opam, add the Coq repository:

opam repo add coq-released https://coq.inria.fr/opam/released

and run:

opam install coq-of-ocaml

Current development version

To install the current development version:

opam pin add https://github.com/clarus/coq-of-ocaml.git#master

Manually

Read the coq-of-ocaml.opam file at the root of the project to know the dependencies to install and get the list of commands to build the project.

Usage

coq-of-ocaml compiles the .ml or .mli files using Merlin to understand the dependencies of a project. One first needs to have a compiled project with a working configuration of Merlin. The basic command is:

coq-of-ocaml file.ml

If this does not work as expected, you may specify the path to a .merlin file:

coq-of-ocaml -merlin src/.merlin path/file.ml

You can start to experiment with the test files in tests/ or look at our online examples.

License

MIT Β© Guillaume Claret.

About

Import OCaml programs to Coq πŸ“ 🐫

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • OCaml 99.7%
  • Rocq Prover 0.3%
  • C 0.0%
  • Ruby 0.0%
  • Makefile 0.0%
  • Shell 0.0%
0