<?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%2FLean_1_to_Lean_3</id>
	<title>Lean theorem prover/History/Lean 1 to Lean 3 - 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%2FLean_1_to_Lean_3"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=Lean_theorem_prover/History/Lean_1_to_Lean_3&amp;action=history"/>
	<updated>2026-10-21T07:35:41Z</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/Lean_1_to_Lean_3&amp;diff=6802&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/Lean_1_to_Lean_3&amp;diff=6802&amp;oldid=prev"/>
		<updated>2026-10-15T19:35:29Z</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:Lean 1 to Lean 3}}&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:Lean 1 to Lean 3}}&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;Lean was started in 2013 by Leonardo de Moura at Microsoft Research. Its first three major versions were written in C++ and developed mainly at Microsoft Research and Carnegie Mellon University. This page covers them: the system described in 2015, the second version&amp;#039;s mode for homotopy type theory and why it did not survive, the third version and its metaprogramming in Lean, and the community&amp;#039;s maintenance of that version after its developers turned to [[Lean theorem prover/History/Lean 4|Lean 4]].&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;Lean was started in 2013 by Leonardo de Moura at Microsoft Research. Its first three major versions were written in C++ and developed mainly at Microsoft Research and Carnegie Mellon University. This page covers them: the system described in 2015, the second version&amp;#039;s mode for homotopy type theory and why it did not survive, the third version and its metaprogramming in Lean, and the community&amp;#039;s maintenance of that version after its developers turned to [[Lean theorem prover/History/Lean 4|Lean 4]].&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-6595:rev-6802: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/Lean_1_to_Lean_3&amp;diff=6595&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/Lean_1_to_Lean_3&amp;diff=6595&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:Lean 1 to Lean 3}}&lt;br /&gt;
Lean was started in 2013 by Leonardo de Moura at Microsoft Research. Its first three major versions were written in C++ and developed mainly at Microsoft Research and Carnegie Mellon University. This page covers them: the system described in 2015, the second version&amp;#039;s mode for homotopy type theory and why it did not survive, the third version and its metaprogramming in Lean, and the community&amp;#039;s maintenance of that version after its developers turned to [[Lean theorem prover/History/Lean 4|Lean 4]].&lt;br /&gt;
&lt;br /&gt;
== The start, 2013 ==&lt;br /&gt;
&lt;br /&gt;
The Lean 4 system description dates the project&amp;#039;s start to 2013, as an interactive theorem prover based on the Calculus of Inductive Constructions.&amp;lt;ref name=&amp;quot;lean4&amp;quot;&amp;gt;Leonardo de Moura and Sebastian Ullrich, &amp;quot;The Lean 4 Theorem Prover and Programming Language (System Description)&amp;quot;, in &amp;#039;&amp;#039;Automated Deduction – CADE 28&amp;#039;&amp;#039;, Lecture Notes in Computer Science 12699, Springer, 2021, pp. 625–635. doi:10.1007/978-3-030-79876-5_37. Author&amp;#039;s copy: https://lean-lang.org/papers/lean4.pdf&amp;lt;/ref&amp;gt; A 2017 paper by three of its early users adds that de Moura started it, and that it was developed mainly at Microsoft Research and Carnegie Mellon University under the Apache 2.0 licence.&amp;lt;ref name=&amp;quot;hott2017&amp;quot;&amp;gt;Floris van Doorn, Jakob von Raumer and Ulrik Buchholtz, &amp;quot;Homotopy type theory in Lean&amp;quot;, in &amp;#039;&amp;#039;Interactive Theorem Proving (ITP 2017)&amp;#039;&amp;#039;, Lecture Notes in Computer Science 10499, Springer, 2017, pp. 479–495. doi:10.1007/978-3-319-66107-0_30. Preprint: https://arxiv.org/abs/1704.06781&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Lean reference manual records that Lean 0.1, the first version, appeared officially on 16 June 2014. It states the project&amp;#039;s goal as combining the trust that comes from a small logical core, the Lean kernel, which others can implement independently, with the convenience and automation of tools such as SMT solvers. The first versions were mainly C++ libraries in which client code could construct proofs that could be checked independently; the design then moved towards a conventional interactive prover, first with tactics written in the scripting language Lua and later with a syntax of its own.&amp;lt;ref name=&amp;quot;refhist&amp;quot;&amp;gt;&amp;#039;&amp;#039;The Lean Language Reference&amp;#039;&amp;#039;, section 1.1 &amp;quot;History&amp;quot;, for version 4.34.0 of Lean. https://lean-lang.org/doc/reference/4.34.0/Introduction/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The 2015 system description ==&lt;br /&gt;
&lt;br /&gt;
The first published account is &amp;quot;The Lean Theorem Prover (system description)&amp;quot; by de Moura, Soonho Kong, Jeremy Avigad, Floris van Doorn and Jakob von Raumer, presented at the 25th Conference on Automated Deduction (CADE-25) in 2015.&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; It states the aim in one line: to bridge the gap between interactive and automated theorem proving, by placing automated tools inside a framework that supports user interaction and the construction of fully specified axiomatic proofs.&lt;br /&gt;
&lt;br /&gt;
The paper describes Lean&amp;#039;s small trusted kernel, written in two layers of C++: a type checker and the operations on terms in about 6,000 lines, and inductive families in about 700 more. The logic could be configured. With an impredicative sort of propositions, which could also be made proof-irrelevant, it gave a version of the Calculus of Inductive Constructions; without one, a version of Martin-Löf type theory. In both cases the universes were non-cumulative and definitions could be polymorphic in universe levels. Above the Lean kernel sat an elaborator that handled higher-order unification, coercions, overloading and type classes together. Proofs could be written as terms, in a declarative style resembling Mizar and Isabelle/Isar, or with tactics. Editing ran in Emacs with continuous checking, and JavaScript bindings let Lean run in a web browser. At Carnegie Mellon it was being used to formalise category theory, homotopy type theory and abstract algebra, and for a course in the spring of 2015.&amp;lt;ref name=&amp;quot;lean2015&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The paper ends with plans: more search and decision procedures, better support for homotopy type theory, and an independent type checker, which it says Lean&amp;#039;s small kernel makes simpler to write.&amp;lt;ref name=&amp;quot;lean2015&amp;quot; /&amp;gt; Independent checkers for Lean now exist; see [[Lean theorem prover/System/Proof export and independent checkers|Proof export and independent checkers]].&lt;br /&gt;
&lt;br /&gt;
== The second version and homotopy type theory ==&lt;br /&gt;
&lt;br /&gt;
The version described in 2015 is the one now called Lean 2; its published source describes itself as a snapshot of Lean 0.2, kept separately because it has special support for homotopy type theory.&amp;lt;ref name=&amp;quot;lean2readme&amp;quot;&amp;gt;Lean 2 source code, README file (&amp;quot;This is a snapshot of the Lean 0.2 theorem prover...&amp;quot;). https://github.com/leanprover/lean2&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lean 2&amp;#039;s kernel had two modes. In the standard mode the lowest universe, &amp;lt;code&amp;gt;Prop&amp;lt;/code&amp;gt;, was proof-irrelevant: any two proofs of a proposition were equal by definition. Proof irrelevance is incompatible with homotopy type theory, in which equality corresponds to paths in a space, so a second mode without proof irrelevance was added, and a library for homotopy type theory was written in it.&amp;lt;ref name=&amp;quot;hott2017&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The third version did not keep that mode. Van Doorn, von Raumer and Buchholtz give two design decisions as reasons: Lean 3&amp;#039;s virtual machine erases proofs, and its mechanism for defining functions by pattern matching relies on axiom K. In 2017 the library therefore remained in Lean 2, which was still maintained but no longer developed.&amp;lt;ref name=&amp;quot;hott2017&amp;quot; /&amp;gt; The reason the standard mode is proof-irrelevant is set out at [[Lean theorem prover/Foundations/Proof irrelevance and subsingleton elimination|Proof irrelevance and subsingleton elimination]].&lt;br /&gt;
&lt;br /&gt;
== Lean 3 ==&lt;br /&gt;
&lt;br /&gt;
Version 3.0.0 of Lean is dated 20 January 2017, the date the reference manual also gives.&amp;lt;ref name=&amp;quot;refhist&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;v300&amp;quot;&amp;gt;Lean 3 source code, version tag v3.0.0, published 20 January 2017. https://github.com/leanprover/lean3/releases/tag/v3.0.0&amp;lt;/ref&amp;gt; The 2017 homotopy paper places the third major version in 2016, and records that many of Lean&amp;#039;s components were rewritten for it and that its unification was restricted, because the full higher-order unification of Lean 2 could produce timeouts and error messages unrelated to the user&amp;#039;s mistake.&amp;lt;ref name=&amp;quot;hott2017&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The change that mattered most was metaprogramming in Lean itself. Ebner, Ullrich, Roesch, Avigad and de Moura described it in 2017. Definitions marked &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt; may use an interface to Lean&amp;#039;s internal structures and procedures, and may recurse without proof of termination. They are compiled to bytecode and run in a virtual machine. Tactics become ordinary Lean programs in a tactic monad, written in the same files and with the same library as the mathematics. The paper&amp;#039;s examples range from small interactive tactics to a simplifier and a superposition prover.&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; The idea is followed backwards at [[Lean theorem prover/History/LCF and the tactic idea|LCF and the tactic idea]] and forwards at [[Lean theorem prover/System/Metaprogramming in Lean|Metaprogramming in Lean]].&lt;br /&gt;
&lt;br /&gt;
In 2017, on Lean 3, a community of users started the mathematical library mathlib.&amp;lt;ref name=&amp;quot;lean4&amp;quot; /&amp;gt; Its history is at [[Lean theorem prover/History/Mathlib and its community|Mathlib and its community]].&lt;br /&gt;
&lt;br /&gt;
== The community&amp;#039;s Lean 3 ==&lt;br /&gt;
&lt;br /&gt;
The last official version of Lean 3 was 3.4.2, dated 18 January 2019.&amp;lt;ref name=&amp;quot;lean3community&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;lean3changes&amp;quot;&amp;gt;Lean 3 community edition, change log (&amp;lt;code&amp;gt;doc/changes.md&amp;lt;/code&amp;gt;), entries from v3.2.0 (June 2017) to 3.51.1c (24 May 2023). https://github.com/leanprover-community/lean/blob/master/doc/changes.md&amp;lt;/ref&amp;gt; The developers turned to a reimplementation, and the original Lean 3 source now carries a notice that it is frozen and that Lean 4 is the official line.&amp;lt;ref name=&amp;quot;lean3frozen&amp;quot;&amp;gt;Lean 3 source code, README file, notice that the code is frozen and Lean 4 is the official line. https://github.com/leanprover/lean3&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mathlib&amp;#039;s users still needed Lean 3, and they continued it themselves. Version 3.5.0c of 26 December 2019 is recorded as the first community version, and the community line ran to 3.51.1c of 24 May 2023.&amp;lt;ref name=&amp;quot;lean3changes&amp;quot; /&amp;gt; The community&amp;#039;s edition describes itself as a fork of Lean 3 maintained by the Lean community, and now warns that Lean 3 is no longer actively maintained and that Lean 4 should be used instead.&amp;lt;ref name=&amp;quot;lean3community&amp;quot;&amp;gt;Lean 3 community edition, README file and its earlier version. https://github.com/leanprover-community/lean&amp;lt;/ref&amp;gt; Mathlib&amp;#039;s own move to Lean 4 is told at [[Lean theorem prover/History/Lean 4|Lean 4]].&lt;br /&gt;
&lt;br /&gt;
The Lean 4 system description names the limits that led to the rewrite. Many parts of Lean 3 could not be changed without editing its C++ source, and proof automation written as Lean 3 metaprograms ran slowly, chiefly because of the overhead of interpreting it in the virtual machine.&amp;lt;ref name=&amp;quot;lean4&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Provenance: the 2015, 2017 and 2021 papers were read, as were the README files and the community change log. The date of version 3.0.0 is the date on its tag; the 2017 homotopy paper&amp;#039;s &amp;quot;2016&amp;quot; is reported as that paper states it. Nothing here is quoted except one line of the Lean 2 README file, in the references.&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 4|Lean 4]]&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>