The word coq means "rooster" in French, and stems from a local tradition of naming a couple of French research development tools with animal names.[3] Up to 1991, Coquand was implementing a language called the Calculus of Constructions and it was simply called CoC at this time. In 1991, a new implementation based on the extended Calculus of Inductive Constructions was started and the name changed from CoC to Coq, also an indirect reference to Thierry Coquand who developed the Calculus of Constructions along with Gérard Huet and the Calculus of Inductive Constructions along with Christine Paulin.

Coq provides a specification language called Gallina[4](that means hen in spanish). Programs written in Gallina have the strong normalization property – they always terminate. This is one way to avoid the halting problem. This may be surprising, since infinite loops (non-termination) are common in other programming languages. [5]

Based on this work, a significant extension to Coq was developed called Ssreflect (which stands for "small scale reflection").[7] Despite the name, most of the new features added to Coq by Ssreflect are general purpose features, useful not merely for the computational reflection style of proof. These include:

Additional convenient notations for irrefutable and refutable pattern matching, on inductive types with one or two constructors

Implicit arguments for functions applied to zero arguments – which is useful when programming with higher-order functions

Concise anonymous arguments

An improved set tactic with more powerful matching

Support for reflection

Ssreflect 1.4 is freely available dual-licensed under the open source CeCILL-B or CeCILL-2.0 license, and is compatible with Coq 8.4.[8]