<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=Lean_theorem_prover%2FHistory%2FThe_Calculus_of_Constructions</id>
	<title>Lean theorem prover/History/The Calculus of Constructions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=Lean_theorem_prover%2FHistory%2FThe_Calculus_of_Constructions"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=Lean_theorem_prover/History/The_Calculus_of_Constructions&amp;action=history"/>
	<updated>2026-10-21T06:37:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://invarians.org/index.php?title=Lean_theorem_prover/History/The_Calculus_of_Constructions&amp;diff=6801&amp;oldid=prev</id>
		<title>PMA Publisher: Published from the Principia Machina source</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=Lean_theorem_prover/History/The_Calculus_of_Constructions&amp;diff=6801&amp;oldid=prev"/>
		<updated>2026-10-15T19:35:28Z</updated>

		<summary type="html">&lt;p&gt;Published from the Principia Machina source&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:35, 15 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{DISPLAYTITLE:The Calculus of Constructions}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{DISPLAYTITLE:The Calculus of Constructions}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Lean theorem prover map}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Calculus of Constructions is a type theory introduced by Thierry Coquand and Gérard Huet in the mid-1980s. With inductive types added in 1989, it became the Calculus of Inductive Constructions, the logic of the proof assistant Coq, now called the Rocq Prover. Lean&amp;#039;s logic is a member of the same family. This page follows the calculus from Coquand&amp;#039;s thesis to the present and states where Lean departs from its relatives.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Calculus of Constructions is a type theory introduced by Thierry Coquand and Gérard Huet in the mid-1980s. With inductive types added in 1989, it became the Calculus of Inductive Constructions, the logic of the proof assistant Coq, now called the Rocq Prover. Lean&amp;#039;s logic is a member of the same family. This page follows the calculus from Coquand&amp;#039;s thesis to the present and states where Lean departs from its relatives.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-6594:rev-6801:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>PMA Publisher</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=Lean_theorem_prover/History/The_Calculus_of_Constructions&amp;diff=6594&amp;oldid=prev</id>
		<title>PMA Publisher: Published from the Principia Machina source</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=Lean_theorem_prover/History/The_Calculus_of_Constructions&amp;diff=6594&amp;oldid=prev"/>
		<updated>2026-10-14T18:01:13Z</updated>

		<summary type="html">&lt;p&gt;Published from the Principia Machina source&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:The Calculus of Constructions}}&lt;br /&gt;
The Calculus of Constructions is a type theory introduced by Thierry Coquand and Gérard Huet in the mid-1980s. With inductive types added in 1989, it became the Calculus of Inductive Constructions, the logic of the proof assistant Coq, now called the Rocq Prover. Lean&amp;#039;s logic is a member of the same family. This page follows the calculus from Coquand&amp;#039;s thesis to the present and states where Lean departs from its relatives.&lt;br /&gt;
&lt;br /&gt;
== Coquand&amp;#039;s thesis and the first engine ==&lt;br /&gt;
&lt;br /&gt;
Coquand and Huet both worked at INRIA. Coquand&amp;#039;s thesis, which presented what was first called the Theory of Constructions, was defended on 31 January 1985. The Coq reference manual&amp;#039;s history, written by Huet, Coquand and Christine Paulin-Mohring, describes the first software as a prototype type checker for that formalism, developed from late 1983 to early 1985 and mostly Huet&amp;#039;s work. It names Girard&amp;#039;s polymorphic System F and de Bruijn&amp;#039;s Automath as influences; Huet&amp;#039;s earlier summary in the same manual describes the calculus as combining Martin-Löf&amp;#039;s type theory and Girard&amp;#039;s polymorphic calculus in a higher-order extension of the Automath language. The prototype used a single binding operator for both the dependent product and function abstraction, in the manner of Automath, and handled substitution with de Bruijn indices.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot;&amp;gt;The Rocq Prover Reference Manual, &amp;quot;History of Coq&amp;quot;, including &amp;quot;A short history of the early versions&amp;quot; written by Thierry Coquand, Gérard Huet and Christine Paulin-Mohring in September 2015 and Huet&amp;#039;s summary of February 1995. https://rocq-prover.org/doc/master/refman/history.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A preliminary version of their paper on the calculus was presented at the International Symposium on Semantics of Data Types at Sophia-Antipolis in June 1984. Coquand and Huet described it at EUROCAL in 1985, and under its present name in an INRIA report of May 1986 and in the journal &amp;#039;&amp;#039;Information and Computation&amp;#039;&amp;#039; in 1988.&amp;lt;ref name=&amp;quot;ch1986&amp;quot;&amp;gt;Thierry Coquand and Gérard Huet, &amp;quot;The calculus of constructions&amp;quot;, INRIA Research Report RR-0530, May 1986. https://inria.hal.science/inria-00076024&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;ch1985&amp;quot;&amp;gt;Thierry Coquand and Gérard Huet, &amp;quot;Constructions: a higher order proof system for mechanizing mathematics&amp;quot;, in &amp;#039;&amp;#039;EUROCAL &amp;#039;85&amp;#039;&amp;#039;, Lecture Notes in Computer Science 203, Springer, 1985, pp. 151–184. doi:10.1007/3-540-15983-5_13&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;ch1988&amp;quot;&amp;gt;Thierry Coquand and Gérard Huet, &amp;quot;The calculus of constructions&amp;quot;, &amp;#039;&amp;#039;Information and Computation&amp;#039;&amp;#039; 76 (2–3), 1988, pp. 95–120. doi:10.1016/0890-5401(88)90005-3&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What the calculus says ==&lt;br /&gt;
&lt;br /&gt;
In the 1986 report every proof is a lambda-expression whose type is the proposition it proves. Erasing the types leaves a pure lambda-term, the algorithm the proof contains, and computing with it corresponds to cut elimination. The authors call the correspondence between propositions and types, as Martin-Löf had advocated, a powerful paradigm for computer science. They prove that every computation in the calculus terminates, and obtain the consistency of the logic as a corollary. They also say that their terms are inspired by the Automath languages.&amp;lt;ref name=&amp;quot;ch1986&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The calculus is &amp;#039;&amp;#039;&amp;#039;impredicative&amp;#039;&amp;#039;&amp;#039;: a proposition may be formed by quantifying over all propositions, itself included. Christine Paulin-Mohring&amp;#039;s later introduction gives the standard example. The type of the polymorphic identity on propositions, &amp;quot;for every proposition &amp;#039;&amp;#039;X&amp;#039;&amp;#039;, &amp;#039;&amp;#039;X&amp;#039;&amp;#039; implies &amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;quot;, is itself a proposition. She adds that impredicativity is powerful but fragile. Only the sort of propositions may have it; making the next universe impredicative as well gives an inconsistent system.&amp;lt;ref name=&amp;quot;pm2015&amp;quot;&amp;gt;Christine Paulin-Mohring, &amp;quot;Introduction to the Calculus of Inductive Constructions&amp;quot;, in B. Woltzenlogel Paleo and D. Delahaye (eds.), &amp;#039;&amp;#039;All about Proofs, Proofs for All&amp;#039;&amp;#039;, Studies in Logic 55, College Publications, 2015. https://inria.hal.science/hal-01094195&amp;lt;/ref&amp;gt; Lean&amp;#039;s &amp;lt;code&amp;gt;Prop&amp;lt;/code&amp;gt; has the same property; see [[Lean theorem prover/Foundations/Universes and Prop|Universes and Prop]].&lt;br /&gt;
&lt;br /&gt;
== Inductive types ==&lt;br /&gt;
&lt;br /&gt;
The pure calculus can encode natural numbers, lists and other data by impredicative definitions, but Paulin-Mohring records two drawbacks: functions over the encoded types compute inefficiently, and some natural properties of them cannot be proved.&amp;lt;ref name=&amp;quot;pm2015&amp;quot; /&amp;gt; Version 4.4 of the software, frozen in March 1988, already offered inductive types encoded in this way.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Coquand and Paulin-Mohring then added inductive definitions as primitives, following the pattern of Martin-Löf&amp;#039;s type theory. Their paper &amp;quot;Inductively defined types&amp;quot; was presented at COLOG-88 and published in 1990; the manual dates the extension to 1989.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;cp1990&amp;quot;&amp;gt;Thierry Coquand and Christine Paulin, &amp;quot;Inductively defined types&amp;quot;, in P. Martin-Löf and G. Mints (eds.), &amp;#039;&amp;#039;COLOG-88&amp;#039;&amp;#039;, Lecture Notes in Computer Science 417, Springer, 1990, pp. 50–66. doi:10.1007/3-540-52335-9_47&amp;lt;/ref&amp;gt; The result is the &amp;#039;&amp;#039;&amp;#039;Calculus of Inductive Constructions&amp;#039;&amp;#039;&amp;#039;. Its rules were set out by Paulin-Mohring in 1993.&amp;lt;ref name=&amp;quot;pm1993&amp;quot;&amp;gt;Christine Paulin-Mohring, &amp;quot;Inductive definitions in the system Coq: rules and properties&amp;quot;, in &amp;#039;&amp;#039;Typed Lambda Calculi and Applications (TLCA &amp;#039;93)&amp;#039;&amp;#039;, Lecture Notes in Computer Science 664, Springer, 1993, pp. 328–345. doi:10.1007/BFb0037116&amp;lt;/ref&amp;gt; In Lean every inductive type comes with a recursor that is its induction principle; see [[Lean theorem prover/Foundations/Inductive types and recursors|Inductive types and recursors]].&lt;br /&gt;
&lt;br /&gt;
== Coq ==&lt;br /&gt;
&lt;br /&gt;
At the end of 1989 the system was renamed Coq, for the Calculus of Inductive Constructions, with version 5.1.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot; /&amp;gt; The name referred to the Calculus of Constructions, to Thierry Coquand, and to the rooster, a French national symbol.&amp;lt;ref name=&amp;quot;rocqabout&amp;quot;&amp;gt;The Rocq Prover, &amp;quot;About&amp;quot; page, sections &amp;quot;An Overview of the Name&amp;#039;s Evolution&amp;quot; and &amp;quot;Awards&amp;quot;. https://rocq-prover.org/about&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The early system already had the division of labour Lean has today. Its theorem prover ran tactics written in CAML &amp;quot;in the LCF fashion&amp;quot;, and users could add their own.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot; /&amp;gt; From version 4.7 in 1988 the proof checker, called the Constructive Engine, was kept apart as the trusted core: a proof term assembled by tactics was checked again in full by the engine, so the tactics did not themselves need to be certified.&amp;lt;ref name=&amp;quot;rocqhist&amp;quot; /&amp;gt; The idea is followed at [[Lean theorem prover/History/LCF and the tactic idea|LCF and the tactic idea]].&lt;br /&gt;
&lt;br /&gt;
In 2013 the ACM Software System Award was given to the team that first developed Coq.&amp;lt;ref name=&amp;quot;rocqabout&amp;quot; /&amp;gt; The project later took a new name. Version 9.0 of the Rocq Prover, issued on 12 March 2025, completed the renaming from the Coq Proof Assistant.&amp;lt;ref name=&amp;quot;rocq9&amp;quot;&amp;gt;The Rocq Prover, &amp;quot;Rocq 9.0.0&amp;quot; (announcement of version 9.0.0, 12 March 2025). https://rocq-prover.org/releases/9.0.0&amp;lt;/ref&amp;gt; The new name honours Inria Rocquencourt, where the prover was first developed.&amp;lt;ref name=&amp;quot;rocqabout&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lean&amp;#039;s place in the family ==&lt;br /&gt;
&lt;br /&gt;
Lean implements a version of the Calculus of Inductive Constructions. Its developers have said so from the start: the 2015 system description presents Lean&amp;#039;s trusted kernel as a version of it when the sort of propositions is impredicative, and the 2017 paper on Lean 3&amp;#039;s metaprogramming cites Coquand and Huet (1988) and Coquand and Paulin (1990) for the logic.&amp;lt;ref name=&amp;quot;lean2015&amp;quot;&amp;gt;Leonardo de Moura, Soonho Kong, Jeremy Avigad, Floris van Doorn and Jakob von Raumer, &amp;quot;The Lean Theorem Prover (system description)&amp;quot;, in &amp;#039;&amp;#039;Automated Deduction – CADE-25&amp;#039;&amp;#039;, Lecture Notes in Computer Science 9195, Springer, 2015, pp. 378–388. doi:10.1007/978-3-319-21401-6_26. Author&amp;#039;s copy: https://lean-lang.org/papers/system.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;ebner2017&amp;quot;&amp;gt;Gabriel Ebner, Sebastian Ullrich, Jared Roesch, Jeremy Avigad and Leonardo de Moura, &amp;quot;A metaprogramming framework for formal verification&amp;quot;, &amp;#039;&amp;#039;Proceedings of the ACM on Programming Languages&amp;#039;&amp;#039; 1 (ICFP), article 34, 2017. doi:10.1145/3110278. Author&amp;#039;s copy: https://lean-lang.org/papers/tactic.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is not the same theory as Coq&amp;#039;s. Mario Carneiro&amp;#039;s 2019 account of Lean&amp;#039;s type theory lists the differences as they then stood. Coq&amp;#039;s universes are cumulative, so that a type in one universe also belongs to every larger one, and Lean&amp;#039;s are not. Coq&amp;#039;s core language has primitive constructs for recursion and pattern matching, while Lean&amp;#039;s kernel has only the recursors, and recursive definitions are compiled into them. Lean&amp;#039;s definitions are polymorphic in universe levels. Lean has definitional proof irrelevance, any two proofs of a proposition being equal by definition, where Coq then had it only as an axiom. And Lean has quotient types with a computation rule.&amp;lt;ref name=&amp;quot;carneiro2019&amp;quot;&amp;gt;Mario Carneiro, &amp;#039;&amp;#039;The Type Theory of Lean&amp;#039;&amp;#039;, thesis, April 2019, section 2.8 &amp;quot;Differences from Coq&amp;quot;. https://github.com/digama0/lean-type-theory/releases/download/v1.0/main.pdf&amp;lt;/ref&amp;gt; The 2015 description had already noted that, unlike Coq, Lean keeps fixed-point expressions, match expressions and the termination checker out of the Lean kernel.&amp;lt;ref name=&amp;quot;lean2015&amp;quot; /&amp;gt; These features of Lean are treated at [[Lean theorem prover/Foundations/Proof irrelevance and subsingleton elimination|Proof irrelevance and subsingleton elimination]], [[Lean theorem prover/Foundations/Quotient types|Quotient types]] and [[Lean theorem prover/Foundations/Structural and well-founded recursion|Structural and well-founded recursion]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Provenance: the Rocq reference manual&amp;#039;s history, the 1986 INRIA report, Paulin-Mohring&amp;#039;s 2015 introduction, Carneiro&amp;#039;s thesis, the two Lean papers and the Rocq project&amp;#039;s pages were read. Coquand&amp;#039;s thesis, the 1985, 1988, 1990 and 1993 papers were not opened; their details come from the publishers&amp;#039; records and the manual. The date of the decision to rename Coq was not verified and is not given.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Next ==&lt;br /&gt;
&lt;br /&gt;
[[Lean theorem prover/History/Lean 1 to Lean 3|Lean 1 to Lean 3]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>PMA Publisher</name></author>
	</entry>
</feed>