689 lines
35 KiB
HTML
689 lines
35 KiB
HTML
<h1 id="awesome-coq-awesome">Awesome Coq <a
|
||
href="https://awesome.re"><img src="https://awesome.re/badge.svg"
|
||
alt="Awesome" /></a></h1>
|
||
<p><a
|
||
href="https://github.com/coq-community/manifesto"><img src="coq-logo.svg" align="right" width="100" alt="coq-community logo" title="Awesome Coq is a coq-community project"></a></p>
|
||
<blockquote>
|
||
<p>A curated list of awesome Coq libraries, plugins, tools, and
|
||
resources.</p>
|
||
</blockquote>
|
||
<p>The <a href="https://coq.inria.fr">Coq proof assistant</a> provides a
|
||
formal language to write mathematical definitions, executable
|
||
algorithms, and theorems, together with an environment for
|
||
semi-interactive development of machine-checked proofs.</p>
|
||
<p>Contributions welcome! Read the <a
|
||
href="https://github.com/coq-community/awesome-coq/blob/master/CONTRIBUTING.md">contribution
|
||
guidelines</a> first.</p>
|
||
<h2 id="contents">Contents</h2>
|
||
<ul>
|
||
<li><a href="#projects">Projects</a>
|
||
<ul>
|
||
<li><a href="#frameworks">Frameworks</a></li>
|
||
<li><a href="#user-interfaces">User Interfaces</a></li>
|
||
<li><a href="#libraries">Libraries</a></li>
|
||
<li><a href="#package-and-build-management">Package and Build
|
||
Management</a></li>
|
||
<li><a href="#plugins">Plugins</a></li>
|
||
<li><a href="#puzzles-and-games">Puzzles and Games</a></li>
|
||
<li><a href="#tools">Tools</a></li>
|
||
<li><a href="#type-theory-and-mathematics">Type Theory and
|
||
Mathematics</a></li>
|
||
<li><a href="#verified-software">Verified Software</a></li>
|
||
</ul></li>
|
||
<li><a href="#resources">Resources</a>
|
||
<ul>
|
||
<li><a href="#community">Community</a></li>
|
||
<li><a href="#blogs">Blogs</a></li>
|
||
<li><a href="#books">Books</a></li>
|
||
<li><a href="#course-material">Course Material</a></li>
|
||
<li><a href="#tutorials-and-hints">Tutorials and Hints</a></li>
|
||
</ul></li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="projects">Projects</h2>
|
||
<h3 id="frameworks">Frameworks</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/AU-COBRA/ConCert">ConCert</a> -
|
||
Framework for smart contract testing and verification featuring a code
|
||
extraction pipeline to several smart contract languages.</li>
|
||
<li><a href="https://github.com/CoqEAL/CoqEAL">CoqEAL</a> - Framework to
|
||
ease change of data representations in proofs.</li>
|
||
<li><a href="https://github.com/adampetcher/fcf">FCF</a> - Framework for
|
||
proofs of cryptography.</li>
|
||
<li><a href="https://github.com/mit-plv/fiat">Fiat</a> - Mostly
|
||
automated synthesis of correct-by-construction programs.</li>
|
||
<li><a href="https://github.com/lthms/FreeSpec">FreeSpec</a> - Framework
|
||
for modularly verifying programs with effects and effect handlers.</li>
|
||
<li><a href="https://github.com/imdea-software/htt/">Hoare Type
|
||
Theory</a> - A shallow embedding of sequential separation logic
|
||
formulated as a type theory.</li>
|
||
<li><a href="https://www.site.uottawa.ca/~afelty/HybridCoq/">Hybrid</a>
|
||
- System for reasoning using higher-order abstract syntax
|
||
representations of object logics.</li>
|
||
<li><a href="https://iris-project.org">Iris</a> - Higher-order
|
||
concurrent separation logic framework.</li>
|
||
<li><a href="https://github.com/querycert/qcert">Q*cert</a> - Platform
|
||
for implementing and verifying query compilers.</li>
|
||
<li><a href="https://github.com/SSProve/ssprove">SSProve</a> - Framework
|
||
for modular cryptographic proofs based on the Mathematical Components
|
||
library.</li>
|
||
<li><a href="https://github.com/VeriNum/vcfloat">VCFloat</a> - Framework
|
||
for verifying C programs with floating-point computations.</li>
|
||
<li><a href="https://github.com/uwplse/verdi">Verdi</a> - Framework for
|
||
formally verifying distributed systems implementations.</li>
|
||
<li><a href="https://vst.cs.princeton.edu">VST</a> - 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.</li>
|
||
</ul>
|
||
<h3 id="user-interfaces">User Interfaces</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://coq.inria.fr/refman/practical-tools/coqide.html">CoqIDE</a>
|
||
- Standalone graphical tool for interacting with Coq.</li>
|
||
<li><a href="https://github.com/whonore/Coqtail">Coqtail</a> - Interface
|
||
for Coq based on the Vim text editor.</li>
|
||
<li><a href="https://github.com/ejgallego/coq-lsp">Coq LSP</a> -
|
||
Language server and extension for the Visual Studio Code and VSCodium
|
||
editors with custom document checking engine.</li>
|
||
<li><a href="https://proofgeneral.github.io">Proof General</a> - Generic
|
||
interface for proof assistants based on the extensible, customizable
|
||
text editor Emacs.</li>
|
||
<li><a href="https://github.com/cpitclaudel/company-coq">Company-Coq</a>
|
||
- IDE extensions for Proof General’s Coq mode.</li>
|
||
<li><a
|
||
href="https://github.com/ProofGeneral/opam-switch-mode">opam-switch-mode</a>
|
||
- IDE extension for Proof General to locally change or reset the opam
|
||
switch from a menu or using a command.</li>
|
||
<li><a href="https://github.com/jscoq/jscoq">jsCoq</a> - Port of Coq to
|
||
JavaScript, which enables running Coq projects in a browser.</li>
|
||
<li><a href="https://github.com/EugeneLoy/coq_jupyter">Jupyter kernel
|
||
for Coq</a> - Coq support for the Jupyter Notebook web environment.</li>
|
||
<li><a href="https://github.com/coq-community/vscoq">VsCoq</a> -
|
||
Language server and extension for the Visual Studio Code and VSCodium
|
||
editors.</li>
|
||
<li><a href="https://github.com/coq-community/vscoq/tree/vscoq1">VsCoq
|
||
Legacy</a> - Backwards-compatible extension for the Visual Studio Code
|
||
and VSCodium editors using Coq’s legacy XML protocol.</li>
|
||
<li><a href="https://github.com/impermeable/waterproof">Waterproof
|
||
editor</a> - Educational environment for writing mathematical proofs in
|
||
interactive notebooks.</li>
|
||
</ul>
|
||
<h3 id="libraries">Libraries</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/coq-community/alea">ALEA</a> - Library
|
||
for reasoning on randomized algorithms.</li>
|
||
<li><a href="https://github.com/math-comp/algebra-tactics">Algebra
|
||
Tactics</a> - Ring and field tactics for Mathematical Components.</li>
|
||
<li><a href="https://github.com/coq/bignums">Bignums</a> - Library of
|
||
arbitrarily large numbers.</li>
|
||
<li><a href="https://github.com/mit-plv/bbv">Bedrock Bit Vectors</a> -
|
||
Library for reasoning on fixed precision machine words.</li>
|
||
<li><a href="https://github.com/Salamari/CertiGraph">CertiGraph</a> -
|
||
Library for reasoning about directed graphs and their embedding in
|
||
separation logic.</li>
|
||
<li><a href="https://github.com/fblanqui/color">CoLoR</a> - Library on
|
||
rewriting theory, lambda-calculus and termination, with sub-libraries on
|
||
common data structures extending the Coq standard library.</li>
|
||
<li><a href="https://github.com/jwiegley/coq-haskell">coq-haskell</a> -
|
||
Library smoothing the transition to Coq for Haskell users.</li>
|
||
<li><a href="https://github.com/DmxLarchey/Coq-Kruskal">Coq-Kruskal</a>
|
||
- Collection of libraries related to rose trees and Kruskal’s tree
|
||
theorem.</li>
|
||
<li><a
|
||
href="https://gitlab.inria.fr/coqinterval/interval/">CoqInterval</a> -
|
||
Tactics for performing proofs of inequalities on expressions of real
|
||
numbers.</li>
|
||
<li><a href="https://github.com/tchajed/coq-record-update">Coq record
|
||
update</a> - Library which provides a generic way to update Coq record
|
||
fields.</li>
|
||
<li><a href="https://gitlab.mpi-sws.org/iris/stdpp">Coq-std++</a> -
|
||
Extended alternative standard library for Coq.</li>
|
||
<li><a href="https://github.com/coq-community/coq-ext-lib">ExtLib</a> -
|
||
Collection of theories and plugins that may be useful in other Coq
|
||
developments.</li>
|
||
<li><a href="https://github.com/imdea-software/fcsl-pcm">FCSL-PCM</a> -
|
||
Formalization of partial commutative monoids as used in verification of
|
||
pointer-manipulating programs.</li>
|
||
<li><a href="https://gitlab.inria.fr/flocq/flocq">Flocq</a> -
|
||
Formalization of floating-point numbers and computations.</li>
|
||
<li><a
|
||
href="https://github.com/uds-psl/coq-library-undecidability">Formalised
|
||
Undecidable Problems</a> - Library of undecidable problems and
|
||
reductions between them.</li>
|
||
<li><a href="https://github.com/vafeiadis/hahn">Hahn</a> - Library for
|
||
reasoning on lists and binary relations.</li>
|
||
<li><a href="https://github.com/DeepSpec/InteractionTrees">Interaction
|
||
Trees</a> - Library for representing recursive and impure programs.</li>
|
||
<li><a href="https://github.com/Matafou/LibHyps">LibHyps</a> - Library
|
||
of Ltac tactics to manage and manipulate hypotheses in proofs.</li>
|
||
<li><a href="https://github.com/thery/mathcomp-extra">MathComp Extra</a>
|
||
- Extra material for the Mathematical Components library, including the
|
||
AKS primality test and RSA encryption and decryption.</li>
|
||
<li><a href="https://github.com/math-comp/mczify">Mczify</a> - Library
|
||
enabling Micromega arithmetic solvers to work when using Mathematical
|
||
Components number definitions.</li>
|
||
<li><a href="https://github.com/plclub/metalib">Metalib</a> - Library
|
||
for programming language metatheory using locally nameless variable
|
||
binding representations.</li>
|
||
<li><a href="http://plv.mpi-sws.org/paco/">Paco</a> - Library for
|
||
parameterized coinduction.</li>
|
||
<li><a href="https://github.com/coq-community/reglang">Regular Language
|
||
Representations</a> - Translations between different definitions of
|
||
regular languages, including regular expressions and automata.</li>
|
||
<li><a href="https://github.com/damien-pous/relation-algebra">Relation
|
||
Algebra</a> - Modular formalization of algebras with heterogeneous
|
||
binary relations as models.</li>
|
||
<li><a href="https://github.com/Lysxia/coq-simple-io">Simple IO</a> -
|
||
Input/output monad with user-definable primitive operations.</li>
|
||
<li><a href="https://github.com/charguer/tlc">TLC</a> - Non-constructive
|
||
alternative to Coq’s standard library.</li>
|
||
</ul>
|
||
<h3 id="package-and-build-management">Package and Build Management</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://coq.inria.fr/refman/practical-tools/utilities.html">coq_makefile</a>
|
||
- Build tool distributed with Coq and based on generating a
|
||
makefile.</li>
|
||
<li><a href="https://github.com/coq-community/coq-nix-toolbox">Coq Nix
|
||
Toolbox</a> - Nix helper scripts to automate local builds and continuous
|
||
integration for Coq.</li>
|
||
<li><a href="https://coq.inria.fr/opam/www/">Coq Package Index</a> -
|
||
Collection of Coq packages based on opam.</li>
|
||
<li><a href="https://github.com/coq/platform">Coq Platform</a> - Curated
|
||
collection of packages to support Coq use in industry, education, and
|
||
research.</li>
|
||
<li><a href="https://github.com/coq-community/templates">coq-community
|
||
Templates</a> - Templates for generating configuration files for Coq
|
||
projects.</li>
|
||
<li><a href="https://people.debian.org/~jpuydt/coq_platform.html">Debian
|
||
Coq packages</a> - Coq-related packages available in the testing
|
||
distribution of Debian.</li>
|
||
<li><a href="https://github.com/coq-community/docker-coq">Docker-Coq</a>
|
||
- Docker images for many versions of Coq.</li>
|
||
<li><a
|
||
href="https://github.com/math-comp/docker-mathcomp">Docker-MathComp</a>
|
||
- Docker images for many combinations of versions of Coq and the
|
||
Mathematical Components library.</li>
|
||
<li><a
|
||
href="https://github.com/marketplace/actions/docker-coq-action">Docker-Coq
|
||
GitHub Action</a> - GitHub container action that can be used with
|
||
Docker-Coq or Docker-MathComp.</li>
|
||
<li><a href="https://dune.build">Dune</a> - Composable and opinionated
|
||
build system for OCaml and Coq (former jbuilder).</li>
|
||
<li><a href="https://nixos.org/nix/">Nix</a> - Package manager for Linux
|
||
and other Unix systems, supporting atomic upgrades and rollbacks.</li>
|
||
<li><a
|
||
href="https://search.nixos.org/packages?channel=unstable&query=coqPackages">Nix
|
||
Coq packages</a> - Collection of Coq-related packages for Nix.</li>
|
||
<li><a href="https://opam.ocaml.org">opam</a> - Flexible and
|
||
Git-friendly package manager for OCaml and Coq with multiple compiler
|
||
support.</li>
|
||
</ul>
|
||
<h3 id="plugins">Plugins</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/coq-community/aac-tactics">AAC
|
||
Tactics</a> - Tactics for rewriting universally quantified equations,
|
||
modulo associativity and commutativity of some operator.</li>
|
||
<li><a href="https://github.com/damien-pous/coinduction">Coinduction</a>
|
||
- Plugin for doing proofs by enhanced coinduction.</li>
|
||
<li><a href="https://github.com/LPCIC/coq-elpi">Coq-Elpi</a> - Extension
|
||
framework based on λProlog providing an extensive API to implement
|
||
commands and tactics.</li>
|
||
<li><a href="https://github.com/lukaszcz/coqhammer">CoqHammer</a> -
|
||
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.</li>
|
||
<li><a href="https://github.com/mattam82/Coq-Equations">Equations</a> -
|
||
Function definition package for Coq.</li>
|
||
<li><a href="https://gitlab.inria.fr/gappa/coq">Gappa</a> - Tactic for
|
||
discharging goals about floating-point arithmetic and round-off
|
||
errors.</li>
|
||
<li><a href="https://github.com/math-comp/hierarchy-builder">Hierarchy
|
||
Builder</a> - Collection of commands for declaring Coq hierarchies based
|
||
on packed classes.</li>
|
||
<li><a href="https://gitlab.inria.fr/fbesson/itauto">Itauto</a> -
|
||
SMT-like tactics for combined propositional reasoning about function
|
||
symbols, constructors, and arithmetic.</li>
|
||
<li><a
|
||
href="https://coq.inria.fr/refman/proof-engine/ltac2.html">Ltac2</a> -
|
||
Experimental typed tactic language similar to Coq’s classic Ltac
|
||
language.</li>
|
||
<li><a href="https://github.com/MetaCoq/metacoq">MetaCoq</a> - Project
|
||
formalizing Coq in Coq and providing tools for manipulating Coq terms
|
||
and developing certified plugins.</li>
|
||
<li><a href="https://github.com/Mtac2/Mtac2">Mtac2</a> - Plugin adding
|
||
typed tactics for backward reasoning.</li>
|
||
<li><a href="https://github.com/coq-community/paramcoq">Paramcoq</a> -
|
||
Plugin to generate parametricity translations of Coq terms.</li>
|
||
<li><a href="https://github.com/QuickChick/QuickChick">QuickChick</a> -
|
||
Plugin for randomized property-based testing.</li>
|
||
<li><a href="https://github.com/smtcoq/smtcoq">SMTCoq</a> - Tool that
|
||
checks proof witnesses coming from external SAT and SMT solvers.</li>
|
||
<li><a href="https://coq-tactician.github.io">Tactician</a> -
|
||
Interactive tool which learns from previously written tactic scripts
|
||
across all the installed Coq packages and suggests the next tactic to be
|
||
executed or tries to automate proof synthesis fully.</li>
|
||
<li><a href="https://github.com/unicoq/unicoq">Unicoq</a> - Plugin that
|
||
replaces the existing unification algorithm with an enhanced one.</li>
|
||
<li><a href="https://github.com/impermeable/coq-waterproof">Waterproof
|
||
proof language</a> - Plugin providing a language for writing proof
|
||
scripts in a style that resembles non-mechanized mathematical
|
||
proof.</li>
|
||
</ul>
|
||
<h3 id="puzzles-and-games">Puzzles and Games</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/coq-community/coqoban">Coqoban</a> - Coq
|
||
implementation of Sokoban, the Japanese warehouse keepers’ game.</li>
|
||
<li><a href="https://github.com/thery/hanoi">Hanoi</a> - The Tower of
|
||
Hanoi puzzle in Coq, including generalizations and theorems about
|
||
configurations.</li>
|
||
<li><a href="https://github.com/thery/minirubik">Mini-Rubik</a> - Coq
|
||
formalization and solver of the 2x2x2 version of the Rubik’s Cube
|
||
puzzle.</li>
|
||
<li><a href="https://github.com/codyroux/name-the-biggest-number">Name
|
||
the Biggest Number</a> - Repository for submitting proven contenders for
|
||
the title of biggest number in Coq.</li>
|
||
<li><a
|
||
href="https://github.com/uncomputable/natural-number-game">Natural
|
||
Number Game</a> - Coq version of the natural number game developed for
|
||
the Lean prover.</li>
|
||
<li><a href="https://github.com/coq-community/sudoku">Sudoku</a> -
|
||
Formalization and solver of the Sudoku number-placement puzzle in
|
||
Coq.</li>
|
||
<li><a href="https://github.com/thery/T2048">T2048</a> - Coq version of
|
||
the 2048 sliding tile game.</li>
|
||
</ul>
|
||
<h3 id="tools">Tools</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/cpitclaudel/alectryon">Alectryon</a> -
|
||
Collection of tools for writing technical documents that mix Coq code
|
||
and prose.</li>
|
||
<li><a
|
||
href="https://github.com/uds-psl/autosubst-ocaml">Autosubst-ocaml</a> -
|
||
Tool that generates Coq code for handling binders in syntax, such as for
|
||
renaming and substitutions.</li>
|
||
<li><a href="https://gitlab.inria.fr/charguer/cfml2">CFML</a> - Tool for
|
||
proving properties of OCaml programs in separation logic.</li>
|
||
<li><a href="https://github.com/xavierleroy/coq2html">coq2html</a> -
|
||
Alternative HTML documentation generator for Coq.</li>
|
||
<li><a
|
||
href="https://coq.inria.fr/refman/using/tools/coqdoc.html">coqdoc</a> -
|
||
Standard documentation tool that generates LaTeX or HTML files from Coq
|
||
code.</li>
|
||
<li><a href="https://github.com/clarus/coq-of-ocaml">CoqOfOCaml</a> -
|
||
Tool for generating idiomatic Coq from OCaml code.</li>
|
||
<li><a
|
||
href="https://github.com/coq-community/coq-dpdgraph">coq-dpdgraph</a> -
|
||
Tool for building dependency graphs between Coq objects.</li>
|
||
<li><a href="https://github.com/JasonGross/coq-scripts">coq-scripts</a>
|
||
- Scripts for dealing with Coq files, including tabulating proof
|
||
times.</li>
|
||
<li><a href="https://github.com/JasonGross/coq-tools">coq-tools</a> -
|
||
Scripts for manipulating Coq developments.
|
||
<ul>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/find-bug.py"><code>find-bug.py</code></a>
|
||
- Automatically minimizes source files producing an error, creating
|
||
small test cases for Coq bugs.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/absolutize-imports.py"><code>absolutize-imports.py</code></a>
|
||
- Processes source files to make loading of dependencies robust against
|
||
shadowing of file names.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/inline-imports.py"><code>inline-imports.py</code></a>
|
||
- Creates stand-alone source files from developments by inlining the
|
||
loading of all dependencies.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/minimize-requires.py"><code>minimize-requires.py</code></a>
|
||
- Removes loading of unused dependencies.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/move-requires.py"><code>move-requires.py</code></a>
|
||
- Moves all dependency loading statements to the top of source
|
||
files.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/move-vernaculars.py"><code>move-vernaculars.py</code></a>
|
||
- Lifts many vernacular commands and inner lemmas out of proof script
|
||
blocks.</li>
|
||
<li><a
|
||
href="https://github.com/JasonGross/coq-tools/blob/master/proof-using-helper.py"><code>proof-using-helper.py</code></a>
|
||
- Modifies source files to include proof annotations for faster parallel
|
||
proving.</li>
|
||
</ul></li>
|
||
<li><a href="https://github.com/uwdb/Cosette">Cosette</a> - Automated
|
||
solver for reasoning about SQL query equivalences.</li>
|
||
<li><a href="https://github.com/plclub/hs-to-coq">hs-to-coq</a> -
|
||
Converter from Haskell code to equivalent Coq code.</li>
|
||
<li><a href="https://github.com/plclub/lngen">lngen</a> - Tool for
|
||
generating locally nameless Coq definitions and proofs.</li>
|
||
<li><a href="http://gallium.inria.fr/~fpottier/menhir/">Menhir</a> -
|
||
Parser generator that can output Coq code for verified parsers.</li>
|
||
<li><a href="https://github.com/EngineeringSoftware/mcoq">mCoq</a> -
|
||
Mutation analysis tool for Coq projects.</li>
|
||
<li><a href="https://github.com/ott-lang/ott">Ott</a> - Tool for writing
|
||
definitions of programming languages and calculi that can be translated
|
||
to Coq.</li>
|
||
<li><a href="https://github.com/ejgallego/pycoq">PyCoq</a> - Set of
|
||
bindings and libraries for interacting with Coq from inside Python
|
||
3.</li>
|
||
<li><a
|
||
href="https://github.com/EngineeringSoftware/roosterize">Roosterize</a>
|
||
- Tool for suggesting lemma names in Coq projects.</li>
|
||
<li><a href="https://github.com/rems-project/sail">Sail</a> - Tool for
|
||
specifying instruction set architecture (ISA) semantics of processors
|
||
and generating Coq definitions.</li>
|
||
<li><a href="https://github.com/ejgallego/coq-serapi">SerAPI</a> - Tools
|
||
and OCaml library for (de)serialization of Coq code to and from JSON and
|
||
S-expressions.</li>
|
||
<li><a href="https://github.com/ecranceMERCE/trakt">Trakt</a> - Generic
|
||
goal preprocessing tool for proof automation tactics.</li>
|
||
</ul>
|
||
<h3 id="type-theory-and-mathematics">Type Theory and Mathematics</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/math-comp/analysis">Analysis</a> -
|
||
Library for classical real analysis compatible with Mathematical
|
||
Components.</li>
|
||
<li><a href="https://github.com/jwiegley/category-theory">Category
|
||
Theory in Coq</a> - Axiom-free formalization of category theory.</li>
|
||
<li><a
|
||
href="https://github.com/coq-community/comp-dec-modal">Completeness and
|
||
Decidability of Modal Logic Calculi</a> - Soundness, completeness, and
|
||
decidability for the logics K, K*, CTL, and PDL.</li>
|
||
<li><a href="https://github.com/thery/coqprime">CoqPrime</a> - Library
|
||
for certifying primality using Pocklington and Elliptic Curve
|
||
certificates.</li>
|
||
<li><a href="https://github.com/coq-community/corn">CoRN</a> - Library
|
||
of constructive real analysis and algebra.</li>
|
||
<li><a href="https://github.com/coq-community/coqtail-math">Coqtail
|
||
Math</a> - Library of mathematical results ranging from arithmetic to
|
||
real and complex analysis.</li>
|
||
<li><a
|
||
href="https://gitlab.inria.fr/coquelicot/coquelicot">Coquelicot</a> -
|
||
Formalization of classical real analysis compatible with the standard
|
||
library and focusing on usability.</li>
|
||
<li><a href="https://github.com/math-comp/finmap">Finmap</a> - Extension
|
||
of Mathematical Components with finite maps, sets, and multisets.</li>
|
||
<li><a href="https://github.com/coq-community/fourcolor">Four Color
|
||
Theorem</a> - Formal proof of the Four Color Theorem, a landmark result
|
||
of graph theory.</li>
|
||
<li><a href="https://github.com/coq-community/gaia">Gaia</a> -
|
||
Implementation of books from Bourbaki’s Elements of Mathematics,
|
||
including set theory and number theory.</li>
|
||
<li><a href="https://github.com/GeoCoq/GeoCoq">GeoCoq</a> -
|
||
Formalization of geometry based on Tarski’s axiom system.</li>
|
||
<li><a href="https://github.com/coq-community/graph-theory">Graph
|
||
Theory</a> - Formalized graph theory results.</li>
|
||
<li><a href="https://github.com/HoTT/Coq-HoTT">Homotopy Type Theory</a>
|
||
- Development of homotopy-theoretic ideas.</li>
|
||
<li><a href="https://github.com/affeldt-aist/infotheo">Infotheo</a> -
|
||
Formalization of information theory and linear error-correcting
|
||
codes.</li>
|
||
<li><a href="http://math-comp.github.io">Mathematical Components</a> -
|
||
Formalization of mathematical theories, focusing in particular on group
|
||
theory.</li>
|
||
<li><a href="https://github.com/coq-community/math-classes">Math
|
||
Classes</a> - Abstract interfaces for mathematical structures based on
|
||
type classes.</li>
|
||
<li><a href="https://github.com/affeldt-aist/monae">Monae</a> - Monadic
|
||
effects and equational reasoning.</li>
|
||
<li><a href="https://github.com/math-comp/odd-order">Odd Order
|
||
Theorem</a> - Formal proof of the Odd Order Theorem, a landmark result
|
||
of finite group theory.</li>
|
||
<li><a href="https://github.com/roglo/puiseuxth">Puiseuxth</a> - Proof
|
||
of Puiseux’s theorem and computation of roots of polynomials of
|
||
Puiseux’s series.</li>
|
||
<li><a href="https://github.com/UniMath/UniMath">UniMath</a> - Library
|
||
which aims to formalize a substantial body of mathematics using the
|
||
univalent point of view.</li>
|
||
</ul>
|
||
<h3 id="verified-software">Verified Software</h3>
|
||
<ul>
|
||
<li><a href="http://compcert.inria.fr">CompCert</a> - High-assurance
|
||
compiler for almost all of the C language (ISO C99), generating
|
||
efficient code for the PowerPC, ARM, RISC-V and x86 processors.</li>
|
||
<li><a href="https://github.com/certichain/ceramist">Ceramist</a> -
|
||
Verified hash-based approximate membership structures such as Bloom
|
||
filters.</li>
|
||
<li><a href="https://github.com/CertiCoq/certicoq">CertiCoq</a> -
|
||
Verified compiler from Gallina, the internal language of Coq, down to
|
||
CompCert’s Clight language.</li>
|
||
<li><a href="https://github.com/mit-plv/fiat-crypto">Fiat-Crypto</a> -
|
||
Cryptographic primitive code generation.</li>
|
||
<li><a href="https://github.com/clayrat/fav-ssr">Functional Algorithms
|
||
Verified in SSReflect</a> - Purely functional verified implementations
|
||
of algorithms for searching, sorting, and other fundamental
|
||
problems.</li>
|
||
<li><a
|
||
href="https://gitlab.inria.fr/agueneau/incremental-cycles">Incremental
|
||
Cycles</a> - Verified OCaml implementation of an algorithm for
|
||
incremental cycle detection in graphs.</li>
|
||
<li><a href="https://github.com/jasmin-lang/jasmin">Jasmin</a> -
|
||
Formalized language and verified compiler for high-assurance and
|
||
high-speed cryptography.</li>
|
||
<li><a href="https://github.com/jscert/jscert">JSCert</a> - Coq
|
||
specification of ECMAScript 5 (JavaScript) with verified reference
|
||
interpreter.</li>
|
||
<li><a
|
||
href="https://gitlab.mpi-sws.org/iris/lambda-rust">lambda-rust</a> -
|
||
Formal model of a Rust core language and type system, a logical relation
|
||
for the type system, and safety proofs for some Rust libraries.</li>
|
||
<li><a href="https://gitlab.mpi-sws.org/RT-PROOFS/rt-proofs">Prosa</a> -
|
||
Definitions and proofs for real-time system schedulability
|
||
analysis.</li>
|
||
<li><a href="https://github.com/mit-plv/riscv-coq">RISC-V Specification
|
||
in Coq</a> - Definition of the RISC-V processor instruction set
|
||
architecture and extensions.</li>
|
||
<li><a href="https://github.com/pi8027/stablesort">Stable sort
|
||
algorithms in Coq</a> - Generic and modular proofs of correctness,
|
||
including stability, of mergesort functions.</li>
|
||
<li><a href="https://github.com/math-comp/tarjan">Tarjan and
|
||
Kosaraju</a> - Verified implementations of algorithms for topological
|
||
sorting and finding strongly connected components in finite graphs.</li>
|
||
<li><a href="http://velus.inria.fr">Vélus</a> - Verified compiler for a
|
||
Lustre/Scade-like dataflow synchronous language.</li>
|
||
<li><a href="https://github.com/uwplse/verdi-raft">Verdi Raft</a> -
|
||
Implementation of the Raft distributed consensus protocol, verified in
|
||
Coq using the Verdi framework.</li>
|
||
<li><a href="https://github.com/WasmCert/WasmCert-Coq/">WasmCert-Coq</a>
|
||
- Formalization in Coq of the WebAssembly (aka Wasm) 1.0
|
||
specification.</li>
|
||
</ul>
|
||
<h2 id="resources">Resources</h2>
|
||
<h3 id="community">Community</h3>
|
||
<ul>
|
||
<li><a href="https://coq.inria.fr">Official Coq website</a></li>
|
||
<li><a href="https://coq.inria.fr/refman/">Official Coq manual</a></li>
|
||
<li><a href="https://coq.inria.fr/stdlib/">Official Coq standard
|
||
library</a></li>
|
||
<li><a href="https://coq.discourse.group">Official Coq Discourse
|
||
forum</a></li>
|
||
<li><a href="https://coq.zulipchat.com">Official Coq Zulip chat</a></li>
|
||
<li><a href="https://sympa.inria.fr/sympa/arc/coq-club">Official
|
||
Coq-Club mailing list</a></li>
|
||
<li><a href="https://github.com/coq/coq/wiki">Official Coq wiki</a></li>
|
||
<li><a href="https://x.com/CoqLang">Official Coq X/Twitter</a></li>
|
||
<li><a href="https://coq.gitlab.io/zulip-archive/">Coq Zulip chat
|
||
archive</a></li>
|
||
<li><a href="https://www.reddit.com/r/Coq/">Coq subreddit</a></li>
|
||
<li><a href="https://stackoverflow.com/questions/tagged/coq">Coq tag on
|
||
Stack Overflow</a></li>
|
||
<li><a
|
||
href="https://cstheory.stackexchange.com/questions/tagged/coq">Coq tag
|
||
on Theoretical Computer Science Stack Exchange</a></li>
|
||
<li><a
|
||
href="https://proofassistants.stackexchange.com/questions/tagged/coq">Coq
|
||
tag on Proof Assistants Stack Exchange</a></li>
|
||
<li><a href="https://zenodo.org/search?q=keywords%3A%22Coq%22">Coq
|
||
keyword on Zenodo</a></li>
|
||
<li><a href="https://github.com/coq-community/manifesto">Coq-community
|
||
package maintenance project</a></li>
|
||
<li><a href="https://github.com/math-comp/math-comp/wiki">Mathematical
|
||
Components wiki</a></li>
|
||
<li><a href="https://github.com/coq-community/coq-100-theorems">100
|
||
famous theorems proved using Coq</a></li>
|
||
<li><a href="https://coq.pl-a.net">Planet Coq link aggregator</a></li>
|
||
</ul>
|
||
<h3 id="blogs">Blogs</h3>
|
||
<ul>
|
||
<li><a href="https://project.inria.fr/coqexchange/news/">Coq Exchange:
|
||
ideas and experiment reports about Coq</a></li>
|
||
<li><a href="http://gallium.inria.fr/blog">Gagallium</a></li>
|
||
<li><a href="https://gmalecha.github.io">Gregory Malecha’s blog</a></li>
|
||
<li><a href="http://www.joachim-breitner.de/blog/tag/Coq">Joachim
|
||
Breitner’s blog posts on Coq</a></li>
|
||
<li><a href="https://blog.poisson.chat">Lysxia’s blog</a></li>
|
||
<li><a href="http://plv.csail.mit.edu/blog/category/coq.html">MIT PLV
|
||
blog posts on Coq</a></li>
|
||
<li><a href="https://www.seas.upenn.edu/~plclub/blog/">PLClub
|
||
Blog</a></li>
|
||
<li><a href="http://poleiro.info">Poleiro: a Coq blog by Arthur Azevedo
|
||
de Amorim</a></li>
|
||
<li><a href="https://www.ralfj.de/blog/categories/coq.html">Ralf Jung’s
|
||
blog posts on Coq</a></li>
|
||
<li><a href="https://soap.coffee/~lthms/tags/coq.html">Thomas Letan’s
|
||
blog posts on Coq</a></li>
|
||
</ul>
|
||
<h3 id="books">Books</h3>
|
||
<ul>
|
||
<li><a href="https://www.labri.fr/perso/casteran/CoqArt/">Coq’Art</a> -
|
||
The first book dedicated to Coq.</li>
|
||
<li><a href="https://softwarefoundations.cis.upenn.edu">Software
|
||
Foundations</a> - Series of Coq-based textbooks on logic, functional
|
||
programming, and foundations of programming languages, aimed at being
|
||
accessible to beginners.
|
||
<ul>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/lf-current/index.html">Volume
|
||
1: Logical Foundations</a> - Introduction to functional programming,
|
||
basic concepts of logic, and computer-assisted theorem proving.</li>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/plf-current/index.html">Volume
|
||
2: Programming Language Foundations</a> - Introduction to the theory of
|
||
programming languages, including operational semantics, Hoare logic, and
|
||
static type systems.</li>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/vfa-current/index.html">Volume
|
||
3: Verified Functional Algorithms</a> - Demonstration of how a variety
|
||
of fundamental data structures can be specified and verified.</li>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/qc-current/index.html">Volume
|
||
4: QuickChick</a> - Introduction to tools for combining randomized
|
||
property-based testing with formal specification and proof.</li>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/vc-current/index.html">Volume
|
||
5: Verifiable C</a> - An extended tutorial on specifying and verifying C
|
||
programs using the Verified Software Toolchain.</li>
|
||
<li><a
|
||
href="https://softwarefoundations.cis.upenn.edu/slf-current/index.html">Volume
|
||
6: Separation Logic Foundations</a> - An introduction to separation
|
||
logic and how to build program verification tools on top of it.</li>
|
||
</ul></li>
|
||
<li><a href="http://adam.chlipala.net/cpdt/">Certified Programming with
|
||
Dependent Types</a> - Textbook about practical engineering with Coq
|
||
which teaches advanced practical tricks and a very specific style of
|
||
proof.</li>
|
||
<li><a
|
||
href="https://www.cs.princeton.edu/~appel/papers/plcc.pdf">Program
|
||
Logics for Certified Compilers</a> - 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.</li>
|
||
<li><a href="http://adam.chlipala.net/frap/">Formal Reasoning About
|
||
Programs</a> - Book that simultaneously provides a general introduction
|
||
to formal logical reasoning about the correctness of programs and to
|
||
using Coq for this purpose.</li>
|
||
<li><a href="https://ilyasergey.net/pnp/">Programs and Proofs</a> - 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.</li>
|
||
<li><a
|
||
href="https://www.sciencedirect.com/book/9781785481123/computer-arithmetic-and-formal-proofs">Computer
|
||
Arithmetic and Formal Proofs</a> - Book that describes how to formally
|
||
specify and verify floating-point algorithms in Coq using the Flocq
|
||
library.</li>
|
||
<li><a href="https://math-comp.github.io/mcb/">The Mathematical
|
||
Components book</a> - Book oriented towards mathematically inclined
|
||
users, focusing on the Mathematical Components library and the SSReflect
|
||
proof language.</li>
|
||
<li><a href="https://github.com/uds-psl/MPCTT">Modeling and Proving in
|
||
Computational Type Theory</a> - Book covering topics in computational
|
||
logic using Coq, including foundations, canonical case studies, and
|
||
practical programming.</li>
|
||
<li><a href="https://github.com/coq-community/hydra-battles">Hydras
|
||
& Co.</a> - Continuously in-progress book and library on Kirby and
|
||
Paris’ hydra battles and other entertaining formalized mathematics in
|
||
Coq, including a proof of the Gödel-Rosser first incompleteness
|
||
theorem.</li>
|
||
</ul>
|
||
<h3 id="course-material">Course Material</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://staff.aist.go.jp/reynald.affeldt/documents/karate-coq.pdf">An
|
||
Introduction to MathComp-Analysis</a> - Lecture notes on getting started
|
||
with the Mathematical Components library and using it for classical
|
||
reasoning and real analysis.</li>
|
||
<li><a href="https://chargueraud.org/teach/verif/">Foundations of
|
||
Separation Logic</a> - Introduction to using separation logic to reason
|
||
about sequential imperative programs in Coq.</li>
|
||
<li><a href="https://github.com/thery/FlocqLecture">Floating-Point
|
||
Numbers and Formal Proof</a> - Introductory course on Coq real numbers
|
||
and floating-point numbers from the Flocq library.</li>
|
||
<li><a href="https://gitlab.com/umb-svl/turing">Introduction to the
|
||
Theory of Computation</a> - Formalization to support an undergraduate
|
||
course on the theory of computation, including languages and Turing
|
||
machines.</li>
|
||
<li><a href="https://github.com/clarksmr/sf-lectures">Lectures on
|
||
Software Foundations</a> - Material on the Software Foundations series
|
||
of textbooks, including a series of YouTube videos.</li>
|
||
<li><a href="https://github.com/gares/math-comp-school-2022">MathComp
|
||
School</a> - Coq sources for lessons and exercises that introduce the
|
||
SSReflect proof language and the Mathematical Components library.</li>
|
||
<li><a href="https://github.com/xavierleroy/cdf-mech-sem">Mechanized
|
||
Semantics</a> - Companion Coq sources for a course on programming
|
||
language semantics at Collège de France.</li>
|
||
<li><a href="https://github.com/xavierleroy/cdf-program-logics">Program
|
||
Logics</a> - Companion Coq sources for a course on program logics at
|
||
Collège de France.</li>
|
||
<li><a
|
||
href="https://gitlab.science.ru.nl/program-verification/course-2023-2024">Program
|
||
verification with types and logic</a> - Lectures and exercise material
|
||
for a course in programming language semantics, type systems and program
|
||
logics, using Coq, at Radboud University Nijmegen.</li>
|
||
<li><a
|
||
href="https://team.inria.fr/stamp/proofs-and-reliable-programming-using-coq-2022/">Proofs
|
||
and Reliable Programming using Coq</a> - Introduction to developing and
|
||
verifying programs with Coq.</li>
|
||
</ul>
|
||
<h3 id="tutorials-and-hints">Tutorials and Hints</h3>
|
||
<ul>
|
||
<li><a href="https://github.com/coq-community/coq-art">Coq’Art Exercises
|
||
and Tutorials</a> - Coq code and exercises from the Coq’Art book,
|
||
including additional tutorials.</li>
|
||
<li><a href="http://cel.archives-ouvertes.fr/inria-00001173">Coq in a
|
||
Hurry</a> - Introduction to how Coq can be used to define logical
|
||
concepts and functions and reason about them.</li>
|
||
<li><a href="https://inria.hal.science/hal-04452421">Coq requirements in
|
||
Common Criteria evaluations</a> - Guide on how to write readable and
|
||
reviewable Coq code in high assurance applications.</li>
|
||
<li><a href="https://charlesaverill.github.io/ctpe/">Coq Tactics in
|
||
Plain English</a> - Guide to Coq tactics with explanations and
|
||
examples.</li>
|
||
<li><a href="https://learnxinyminutes.com/docs/coq/">Learn X in Y
|
||
minutes where X=Coq</a> - Whirlwind tour of Coq as a language.</li>
|
||
<li><a href="https://github.com/coq-community/lemma-overloading">Lemma
|
||
Overloading</a> - Demonstration of design patterns for programming and
|
||
proving with canonical structures.</li>
|
||
<li><a href="https://github.com/math-comp/tutorial_material">MathComp
|
||
Tutorial Materials</a> - Source code for Mathematical Components
|
||
tutorials.</li>
|
||
<li><a href="https://mdnahas.github.io/doc/nahas_tutorial.html">Mike
|
||
Nahas’s Coq Tutorial</a> - Basics of using Coq to write formal
|
||
proofs.</li>
|
||
<li><a href="https://github.com/coq-community/coq-tricks">Tricks in
|
||
Coq</a> - Tips, tricks, and features in Coq that are hard to
|
||
discover.</li>
|
||
</ul>
|
||
<p><a href="https://github.com/coq-community/awesome-coq">coq.md
|
||
Github</a></p>
|