Awesome Coq
A curated list of awesome Coq libraries, plugins, tools, and resources.
The Coq proof assistant provides a
formal language to write mathematical definitions, executable algorithms,
and theorems, together with an environment for semi-interactive
development of machine-checked proofs.
Contributions welcome! Read the
contribution guidelines first.
Contents
Projects
Frameworks
-
CoqEAL - Framework to
ease change of data representations in proofs.
-
FCF - Framework for
proofs of cryptography.
-
Fiat - Mostly automated
synthesis of correct-by-construction programs.
-
FreeSpec - Framework for
modularly verifying programs with effects and effect handlers.
-
Hybrid -
System for reasoning using higher-order abstract syntax representations
of object logics.
-
Iris - Higher-order concurrent
separation logic framework.
-
Q*cert - Platform for
implementing and verifying query compilers.
-
Verdi - Framework for
formally verifying distributed systems implementations.
-
VST - Toolchain for verifying
C code inside Coq in a higher-order concurrent, impredicative separation
logic that is sound w.r.t. the Clight language of the CompCert compiler.
User Interfaces
-
CoqIDE
- Standalone graphical tool for interacting with Coq.
-
Coqtail - Interface for
Coq based on the Vim text editor.
-
Proof General - Generic
interface for proof assistants based on the extensible, customizable
text editor Emacs.
-
Company-Coq -
IDE extensions for Proof General’s Coq mode.
-
jsCoq - Port of Coq to
JavaScript, which enables running Coq projects in a browser.
-
Jupyter kernel for Coq
- Coq support for the Jupyter Notebook web environment.
-
VSCoq - Extension
for the Visual Studio Code editor.
Libraries
-
ALEA - Library for
reasoning on randomized algorithms.
-
Bignums - Library of
arbitrarily large numbers.
-
CoLoR - Library on rewriting theory,
lambda-calculus and termination, with sub-libraries on common data
structures extending the Coq standard library.
-
coq-haskell -
Library smoothing the transition to Coq for Haskell users.
-
Coq record update
- Library which provides a generic way to update Coq record fields.
-
Coq-std++ - Extended
alternative standard library for Coq.
-
ExtLib -
Collection of theories and plugins that may be useful in other Coq
developments.
-
FCSL-PCM -
Formalization of partial commutative monoids as used in verification of
pointer-manipulating programs.
-
Flocq - Formalization of
floating-point computations.
-
Formalised Undecidable Problems
- Library of undecidable problems and reductions between them.
-
Hahn - Library for
reasoning on lists and binary relations.
-
Mczify - Library
enabling Micromega arithmetic solvers to work when using Mathematical
Components number definitions.
-
Metalib - Library for
programming language metatheory using locally nameless variable binding
representations.
-
Monae - Monadic
effects and equational reasoning.
-
Paco - Library for
parameterized coinduction.
-
Regular Language Representations
- Translations between different definitions of regular languages,
including regular expressions and automata.
-
Relation Algebra
- Modular formalization of algebras with heterogeneous binary relations
as models.
-
Simple IO -
Input/output monad with user-definable primitive operations.
-
TLC - Non-constructive
alternative to Coq’s standard library.
Package and Build Management
-
coq_makefile
- Build tool distributed with Coq and based on generating a makefile.
-
Coq Nix Toolbox
- Nix helper scripts to automate local builds and continuous integration
for Coq.
-
Coq Package Index -
OPAM-based collection of Coq packages.
-
Coq platform - Curated
collection of packages to support Coq use in industry, education, and
research.
-
coq-community Templates
- Templates for generating configuration files for Coq projects.
-
Docker-Coq -
Docker images for many versions of Coq.
-
Docker-MathComp
- Docker images for many combinations of versions of Coq and the
Mathematical Components library.
-
Docker-Coq GitHub Action
- GitHub container action that can be used with Docker-Coq or
Docker-MathComp.
-
Dune - Composable and opinionated build
system for Coq and OCaml (former jbuilder).
-
Nix - Package manager for Linux and
other Unix systems, supporting atomic upgrades and rollbacks.
-
Nix Coq packages
- Collection of Coq-related packages for Nix.
-
OPAM - Flexible and Git-friendly
package manager for OCaml with multiple compiler support.
Plugins
-
AAC Tactics -
Tactics for rewriting universally quantified equations, modulo
associativity and commutativity of some operator.
-
Coq-Elpi - Extension
framework based on λProlog providing an extensive API to implement
commands and tactics.
-
CoqHammer -
General-purpose automated reasoning hammer tool that combines learning
from previous proofs with the translation of problems to automated
provers and the reconstruction of found proofs.
-
Equations -
Function definition package for Coq.
-
Gappa - Tactic for
discharging goals about floating-point arithmetic and round-off errors.
-
Hierarchy Builder
- Collection of commands for declaring Coq hierarchies based on packed
classes.
-
Ltac2
- Experimental typed tactic language similar to Coq’s classic Ltac
language.
-
MetaCoq - Project
formalizing Coq in Coq and providing tools for manipulating Coq terms
and developing certified plugins.
-
Mtac2 - Plugin adding typed
tactics for backward reasoning.
-
Paramcoq -
Plugin to generate parametricity translations of Coq terms.
-
QuickChick -
Plugin for randomized property-based testing.
-
SMTCoq - Tool that checks
proof witnesses coming from external SAT and SMT solvers.
-
Unicoq - Plugin that
replaces the existing unification algorithm with an enhanced one.
-
Alectryon -
Collection of tools for writing technical documents that mix Coq code
and prose.
-
Autosubst 2 - Tool
that generates Coq code for handling binders in syntax, such as for
renaming and substitutions.
-
CFML - Tool for
proving properties of OCaml programs in separation logic.
-
coq2html -
Alternative HTML documentation generator for Coq.
-
coqdoc
- Standard documentation tool that generates LaTeX or HTML files from
Coq code.
-
CoqOfOCaml - Tool
for generating idiomatic Coq from OCaml code.
-
coq-dpdgraph -
Tool for building dependency graphs between Coq objects.
-
coq-scripts -
Scripts for dealing with Coq files, including tabulating proof times.
-
coq-tools -
Scripts for manipulating Coq developments.
-
find-bug.py
- Automatically minimizes source files producing an error, creating
small test cases for Coq bugs.
-
absolutize-imports.py
- Processes source files to make loading of dependencies robust
against shadowing of file names.
-
inline-imports.py
- Creates stand-alone source files from developments by inlining the
loading of all dependencies.
-
minimize-requires.py
- Removes loading of unused dependencies.
-
move-requires.py
- Moves all dependency loading statements to the top of source
files.
-
move-vernaculars.py
- Lifts many vernacular commands and inner lemmas out of proof
script blocks.
-
proof-using-helper.py
- Modifies source files to include proof annotations for faster
parallel proving.
-
Cosette - Automated solver
for reasoning about SQL query equivalences.
-
hs-to-coq - Converter
from Haskell code to equivalent Coq code.
-
lngen - Tool for
generating locally nameless Coq definitions and proofs.
-
Menhir - Parser
generator that can output Coq code for verified parsers.
-
mCoq -
Mutation analysis tool for Coq projects.
-
Ott - Tool for writing
definitions of programming languages and calculi that can be translated
to Coq.
-
Roosterize
- Tool for suggesting lemma names in Coq projects.
-
SerAPI - Tools and
OCaml library for (de)serialization of Coq code to and from JSON and
S-expressions.
Type Theory and Mathematics
-
Analysis - Library
for classical real analysis compatible with Mathematical Components.
-
Category Theory in Coq
- Axiom-free formalization of category theory.
-
Completeness and Decidability of Modal Logic Calculi
- Soundness, completeness, and decidability for the logics K, K*, CTL,
and PDL.
-
CoqPrime - Library for
certifying primality using Pocklington and Elliptic Curve certificates.
-
CoRN - Library of
constructive real analysis and algebra.
-
Coqtail Math
- Library of mathematical results ranging from arithmetic to real and
complex analysis.
-
Coquelicot -
Formalization of classical real analysis compatible with the standard
library and focusing on usability.
-
Finmap - Extension of
Mathematical Components with finite maps, sets, and multisets.
-
Four Color Theorem
- Formal proof of the Four Color Theorem, a landmark result of graph
theory.
-
Gaia -
Implementation of books from Bourbaki’s Elements of Mathematics,
including set theory and number theory.
-
GeoCoq - Formalization of
geometry based on Tarski’s axiom system.
-
Goedel -
Constructive proof of the Gödel-Rosser incompleteness theorem.
-
Graph Theory
- Formalized graph theory results.
-
Homotopy Type Theory -
Development of homotopy-theoretic ideas.
-
Infotheo -
Formalization of information theory and linear error-correcting codes.
-
Mathematical Components -
Formalization of mathematical theories, focusing in particular on group
theory.
-
Math Classes
- Abstract interfaces for mathematical structures based on type classes.
-
Odd Order Theorem -
Formal proof of the Odd Order Theorem, a landmark result of finite group
theory.
-
Puiseuxth - Proof of
Puiseux’s theorem and computation of roots of polynomials of Puiseux’s
series.
-
UniMath - Library which
aims to formalize a substantial body of mathematics using the univalent
point of view.
Verified Software
-
CompCert - High-assurance
compiler for almost all of the C language (ISO C99), generating
efficient code for the PowerPC, ARM, RISC-V and x86 processors.
-
Ceramist - Verified
hash-based approximate membership structures such as Bloom filters.
-
Fiat-Crypto -
Cryptographic primitive code generation.
-
Incremental Cycles
- Verified OCaml implementation of an algorithm for incremental cycle
detection in graphs.
-
JSCert - Coq
specification of ECMAScript 5 (JavaScript) with verified reference
interpreter.
-
lambda-rust -
Formal model of a Rust core language and type system, a logical relation
for the type system, and safety proofs for some Rust libraries.
-
RISC-V Specification in Coq
- Definition of the RISC-V processor instruction set architecture and
extensions.
-
Vélus - Verified compiler for a
Lustre/Scade-like dataflow synchronous language.
-
Verdi Raft -
Implementation of the Raft distributed consensus protocol, verified in
Coq using the Verdi framework.
Resources
Blogs
Books
-
Coq’Art - The
first book dedicated to Coq.
-
Software Foundations
- Series of Coq-based textbooks on logic, functional programming, and
foundations of programming languages, aimed at being accessible to
beginners.
-
Certified Programming with Dependent Types
- Textbook about practical engineering with Coq which teaches advanced
practical tricks and a very specific style of proof.
-
Program Logics for Certified Compilers
- Book that explains how to construct program logics using separation
logic, accompanied by a formal model in Coq which is applied to the
Clight programming language and other examples.
-
Formal Reasoning About Programs
- Book that simultaneously provides a general introduction to formal
logical reasoning about the correctness of programs and to using Coq for
this purpose.
-
Programs and Proofs - Book
that gives a brief and practically-oriented introduction to interactive
proofs in Coq which emphasizes the computational nature of inductive
reasoning about decidable propositions via a small set of primitives
from the SSReflect proof language.
-
Computer Arithmetic and Formal Proofs
- Book that describes how to formally specify and verify floating-point
algorithms in Coq using the Flocq library.
-
The Mathematical Components book
- Book oriented towards mathematically inclined users, focusing on the
Mathematical Components library and the SSReflect proof language.
-
Modeling and Proving in Computational Type Theory
- Book covering topics in computational logic using Coq, including
foundations, canonical case studies, and practical programming.
Course Material
Tutorials and Hints