What is Coq?

Handling proofs and programs

Coq implements a program specification and mathematical higher-level language called Gallina that is based on an expressive formal language called the Calculus of Inductive Constructions that itself combines both a higher-order logic and a richly-typed functional programming language. Through a vernacular language of commands, Coq allows:

  • to define functions or predicates, that can be evaluated efficiently;
  • to state mathematical theorems and software specifications;
  • to interactively develop formal proofs of these theorems;
  • to machine-check these proofs by a relatively small certification "kernel";
  • to extract certified programs to languages like Objective Caml, Haskell or Scheme.

As a proof development system, Coq provides interactive proof methods, decision and semi-decision algorithms, and a tactic language for letting the user define its own proof methods. Connection with external computer algebra system or theorem provers is available.

As a platform for the formalization of mathematics or the development of programs, Coq provides support for high-level notations, implicit contents and various other useful kinds of macros.

The Coq bundle

Coq comes with libraries for efficient arithmetics in N, Z and Q, libraries about lists, finite sets and finite maps, libraries on abstract sets, relations, classical analysis, etc.

Coq is released with:

  • a graphical user interface based on gtk (CoqIDE) (see the chapter of the reference manual about CoqIDE),
  • documentation tools (coqdoc and coq-tex) and a statistics tool (coqwc),
  • dependency and makefile generation tools for Coq (coq_makefile and coqdep),
  • a stand-alone proof verifier (coqchk).

Coq is the result of about 30 years of research. It started in 1984 from an implementation of the Calculus of Constructions at INRIA-Rocquencourt by Thierry Coquand and Gérard Huet. In 1991, Christine Paulin extended it to the Calculus of Inductive Constructions. All in all, about fifty people contributed to the development of Coq features (see our credits file, the credits chapter in the Coq Reference Manual or the synthetic who did what table).

The development is coordinated by the ADT Coq (Action for Technological Development), that gathers the teams involved in the implementation of the Coq Proof Assistant. The teams registered in the ADT are the INRIA projects πr² and Marelle, and the team CPR from CNAM.

Coq is written in the OCaml language, with a bit of C. It is distributed under the GNU Lesser General Public Licence Version 2.1 (LGPL).