<?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%2FExplainers%2FWhen_Lean_says_no</id>
	<title>Lean theorem prover/Explainers/When Lean says no - 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%2FExplainers%2FWhen_Lean_says_no"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=Lean_theorem_prover/Explainers/When_Lean_says_no&amp;action=history"/>
	<updated>2026-10-21T07:33: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/Explainers/When_Lean_says_no&amp;diff=6765&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/Explainers/When_Lean_says_no&amp;diff=6765&amp;oldid=prev"/>
		<updated>2026-10-15T19:34:35Z</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:34, 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:When Lean says no}}&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:When Lean says no}}&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;{{Technical|Lean theorem prover/System/Elaboration|Lean theorem prover/System/Metavariables and unification}}&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;{{Technical|Lean theorem prover/System/Elaboration|Lean theorem prover/System/Metavariables and unification}}&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;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;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;A check that fails ends in a message. The message is not a mark of failure to be cleared&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;A check that fails ends in a message. The message is not a mark of failure to be cleared&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-6558:rev-6765: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/Explainers/When_Lean_says_no&amp;diff=6558&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/Explainers/When_Lean_says_no&amp;diff=6558&amp;oldid=prev"/>
		<updated>2026-10-14T18:00:52Z</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:When Lean says no}}&lt;br /&gt;
{{Technical|Lean theorem prover/System/Elaboration|Lean theorem prover/System/Metavariables and unification}}&lt;br /&gt;
&lt;br /&gt;
A check that fails ends in a message. The message is not a mark of failure to be cleared&lt;br /&gt;
away; it says what Lean was trying to do and where it stopped. This page goes through the&lt;br /&gt;
refusals met most often and shows how to read each one. Every message quoted here is the one&lt;br /&gt;
Lean 4.34.1 prints for the code shown.&lt;br /&gt;
&lt;br /&gt;
== Where a refusal comes from ==&lt;br /&gt;
&lt;br /&gt;
Lean reads a source file in stages. It parses the text, then &amp;#039;&amp;#039;&amp;#039;elaborates&amp;#039;&amp;#039;&amp;#039; it: it turns&lt;br /&gt;
what the author wrote into terms of its core logic, filling in the details left out and&lt;br /&gt;
running the tactics. Then the Lean kernel checks each finished term against the rules of the&lt;br /&gt;
logic.&amp;lt;ref name=&amp;quot;ref-elab&amp;quot;&amp;gt;&amp;#039;&amp;#039;The Lean Language Reference&amp;#039;&amp;#039;, version for Lean 4.34.0&lt;br /&gt;
(lean-lang.org, 2026), chapter 2, &amp;quot;Elaboration and Compilation&amp;quot;, with section 2.3, &amp;quot;The&lt;br /&gt;
Kernel&amp;quot;. https://lean-lang.org/doc/reference/4.34.0/Elaboration-and-Compilation/&amp;lt;/ref&amp;gt; The&lt;br /&gt;
messages met day to day come from elaboration, which still knows what the author wrote and&lt;br /&gt;
can report in those terms. The Lean kernel&amp;#039;s own check is there to guard against mistakes in&lt;br /&gt;
elaboration itself.&amp;lt;ref name=&amp;quot;ref-elab&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each message is attached to a place in the file, given as line and column, and has a&lt;br /&gt;
severity: an error means that the definition or theorem was not accepted as written; a warning&lt;br /&gt;
does not. An editor connected to Lean underlines the place and shows the text.&lt;br /&gt;
&lt;br /&gt;
== A value of the wrong type ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
def three : Nat := &amp;quot;three&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean-output&amp;quot; style=&amp;quot;background: #ffffff; border: 1px dashed #a2a9b1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
Type mismatch&lt;br /&gt;
  &amp;quot;three&amp;quot;&lt;br /&gt;
has type&lt;br /&gt;
  String&lt;br /&gt;
but is expected to have type&lt;br /&gt;
  Nat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The message has three parts: what was given, the type it has, and the type that was needed.&lt;br /&gt;
Here a piece of text was given where a number was promised. In a proof the same message&lt;br /&gt;
means that the proof offered proves a different statement from the one asked, since a&lt;br /&gt;
statement is the type of its proofs (see&lt;br /&gt;
[[Lean theorem prover/Explainers/Types as specifications|types as specifications]]). The two&lt;br /&gt;
types side by side usually show where they part.&lt;br /&gt;
&lt;br /&gt;
== Something left to prove ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
theorem zero_add&amp;#039; (n : Nat) : 0 + n = n := by&lt;br /&gt;
  induction n with&lt;br /&gt;
  | zero =&amp;gt; rfl&lt;br /&gt;
  | succ k ih =&amp;gt; rw [Nat.add_succ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean-output&amp;quot; style=&amp;quot;background: #ffffff; border: 1px dashed #a2a9b1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
unsolved goals&lt;br /&gt;
case succ&lt;br /&gt;
k : Nat&lt;br /&gt;
ih : 0 + k = k&lt;br /&gt;
⊢ (0 + k).succ = k + 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tactics ran out with a goal still open, and Lean shows it in full: the hypotheses above&lt;br /&gt;
the line, what remains below it. Read this way the message nearly gives the answer. The&lt;br /&gt;
hypothesis &amp;lt;code&amp;gt;ih&amp;lt;/code&amp;gt; says that 0 + k is k, and the goal contains 0 + k. Adding&lt;br /&gt;
&amp;lt;code&amp;gt;ih&amp;lt;/code&amp;gt; to the rewrite finishes the proof, as on the page&lt;br /&gt;
[[Lean theorem prover/Explainers/Induction, as the machine sees it|induction, as the machine&lt;br /&gt;
sees it]]. Goals and their display are described in&lt;br /&gt;
[[Lean theorem prover/Explainers/Holes and goals|holes and goals]].&lt;br /&gt;
&lt;br /&gt;
== No known way to do it ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
structure Colour where&lt;br /&gt;
  red : Nat&lt;br /&gt;
  green : Nat&lt;br /&gt;
  blue : Nat&lt;br /&gt;
&lt;br /&gt;
def mix (a b : Colour) : Colour := a + b&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean-output&amp;quot; style=&amp;quot;background: #ffffff; border: 1px dashed #a2a9b1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
failed to synthesize instance of type class&lt;br /&gt;
  HAdd Colour Colour ?m.3&lt;br /&gt;
&lt;br /&gt;
Hint: Type class instance resolution failures can be inspected with the `set_option trace.Meta.synthInstance true` command.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sign + means different things for natural numbers, for integers and for other types. Lean finds&lt;br /&gt;
the right meaning by looking up an &amp;#039;&amp;#039;&amp;#039;instance&amp;#039;&amp;#039;&amp;#039;: a definition, registered in advance, that&lt;br /&gt;
says how to add two values of given types. The message says that the lookup failed. Lean&lt;br /&gt;
looked for a way to add a &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt; to a &amp;lt;code&amp;gt;Colour&amp;lt;/code&amp;gt;, giving a result of a&lt;br /&gt;
type it had not yet settled, written &amp;lt;code&amp;gt;?m.3&amp;lt;/code&amp;gt; (an unfilled hole, in the sense of&lt;br /&gt;
[[Lean theorem prover/Explainers/Holes and goals|holes and goals]]), and found none, because&lt;br /&gt;
nobody has said what adding colours means. The message carries the name&lt;br /&gt;
&amp;lt;code&amp;gt;lean.synthInstanceFailed&amp;lt;/code&amp;gt;, and the Lean Language Reference has an explanation&lt;br /&gt;
under that name. It notes that many such failures come from using the wrong operation, such&lt;br /&gt;
as &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;++&amp;lt;/code&amp;gt;, which joins two pieces of text, was&lt;br /&gt;
meant.&amp;lt;ref name=&amp;quot;ref-synth&amp;quot;&amp;gt;&amp;#039;&amp;#039;The Lean Language Reference&amp;#039;&amp;#039;, version for Lean 4.34.0&lt;br /&gt;
(lean-lang.org, 2026), &amp;quot;Error Explanations&amp;quot;: &amp;lt;code&amp;gt;lean.synthInstanceFailed&amp;lt;/code&amp;gt;.&lt;br /&gt;
https://lean-lang.org/doc/reference/4.34.0/Error-Explanations/About___--synthInstanceFailed/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== No reason to stop ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
def climb (n : Nat) : Nat :=&lt;br /&gt;
  if n = 0 then 0 else climb (n + 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean-output&amp;quot; style=&amp;quot;background: #ffffff; border: 1px dashed #a2a9b1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
fail to show termination for&lt;br /&gt;
  climb&lt;br /&gt;
with errors&lt;br /&gt;
failed to infer structural recursion:&lt;br /&gt;
Cannot use parameter n:&lt;br /&gt;
  failed to eliminate recursive application&lt;br /&gt;
    climb (n + 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
failed to prove termination, possible solutions:&lt;br /&gt;
  - Use `have`-expressions to prove the remaining goals&lt;br /&gt;
  - Use `termination_by` to specify a different well-founded relation&lt;br /&gt;
  - Use `decreasing_by` to specify your own tactic for discharging this kind of goal&lt;br /&gt;
n : Nat&lt;br /&gt;
h✝ : ¬n = 0&lt;br /&gt;
⊢ n + 1 &amp;amp;lt; n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every function in Lean&amp;#039;s logic must be shown to finish (see&lt;br /&gt;
[[Lean theorem prover/Explainers/Functions that always finish|functions that always&lt;br /&gt;
finish]]). Lean tried two ways and reports both. Structural recursion failed because the&lt;br /&gt;
call is on n + 1, which is not a part of n. Well-founded recursion, with n itself as the&lt;br /&gt;
measure, failed too, and the last three lines show the obligation it could not meet: knowing that n is not 0, show that n + 1&lt;br /&gt;
is less than n. That is false. Here the message has found a real fault: for any n other than&lt;br /&gt;
0, the function would call itself for ever. When the obligation is true but Lean&amp;#039;s default&lt;br /&gt;
search cannot prove it, the remedies listed in the message apply.&amp;lt;ref name=&amp;quot;ref-rec&amp;quot;&amp;gt;&amp;#039;&amp;#039;The&lt;br /&gt;
Lean Language Reference&amp;#039;&amp;#039;, version for Lean 4.34.0 (lean-lang.org, 2026), section 7.6,&lt;br /&gt;
&amp;quot;Recursive Definitions&amp;quot;.&lt;br /&gt;
https://lean-lang.org/doc/reference/4.34.0/Definitions/Recursive-Definitions/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== A statement that is false ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
example : 2 + 2 = 5 := by decide&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lean answers &amp;lt;code&amp;gt;Tactic `decide` proved that the proposition&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;2 + 2 = 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;is false&amp;lt;/code&amp;gt;. This refusal is stronger than the others. The tactic&lt;br /&gt;
&amp;lt;code&amp;gt;decide&amp;lt;/code&amp;gt; computes whether a statement is true, and here the computation came out&lt;br /&gt;
the other way, so the message is in effect a disproof.&amp;lt;ref name=&amp;quot;ref-tacref&amp;quot;&amp;gt;&amp;#039;&amp;#039;The Lean&lt;br /&gt;
Language Reference&amp;#039;&amp;#039;, version for Lean 4.34.0 (lean-lang.org, 2026), section 14.5, &amp;quot;Tactic&lt;br /&gt;
Reference&amp;quot;: entry for &amp;lt;code&amp;gt;decide&amp;lt;/code&amp;gt;.&lt;br /&gt;
https://lean-lang.org/doc/reference/4.34.0/Tactic-Proofs/Tactic-Reference/&amp;lt;/ref&amp;gt; Most&lt;br /&gt;
refusals say less. An unsolved goal or a failed search says only that this attempt did not&lt;br /&gt;
succeed; the statement may still be true (see&lt;br /&gt;
[[Lean theorem prover/Explainers/Automation and its limits|automation and its limits]]).&lt;br /&gt;
&lt;br /&gt;
== Reading a message ==&lt;br /&gt;
&lt;br /&gt;
The same order of reading serves for all of these. First the place: which line, which part of&lt;br /&gt;
it. Then the first line of the message, which names the kind of failure. Then the detail:&lt;br /&gt;
what was given against what was expected, or the goal that remains with what may be used for&lt;br /&gt;
it.&lt;br /&gt;
&lt;br /&gt;
Lean tries to carry on after an error, so that one mistake does not hide the rest of the&lt;br /&gt;
file. Often a definition that fails is kept with a hole where the error was, and later&lt;br /&gt;
results that use it are still checked:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;lean lean-fails&amp;quot; style=&amp;quot;background: #f8f9fa; border: 1px solid #c8ccd1; padding: 0.6em; margin: 0.3em 0; font-size: 0.85em; line-height: 1.35; overflow-x: auto; white-space: pre;&amp;quot;&amp;gt;&lt;br /&gt;
def three : Nat := &amp;quot;three&amp;quot;&lt;br /&gt;
&lt;br /&gt;
theorem t : three = three := rfl&lt;br /&gt;
#print axioms t&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file gives the type mismatch shown above, and then &amp;lt;code&amp;gt;&amp;#039;t&amp;#039; depends on axioms:&lt;br /&gt;
[sorryAx]&amp;lt;/code&amp;gt;. The theorem was accepted, but only on credit: it rests on the axiom behind&lt;br /&gt;
&amp;lt;code&amp;gt;sorry&amp;lt;/code&amp;gt;, described in [[Lean theorem prover/Explainers/Holes and goals|holes and&lt;br /&gt;
goals]]. A file is finished when it has no errors at all, not when the results at its end&lt;br /&gt;
are accepted.&lt;br /&gt;
&lt;br /&gt;
A refusal costs little. It changes nothing that was already accepted, and it points to one&lt;br /&gt;
place and one kind of fault. That is why proving in Lean can proceed by trial: a wrong guess&lt;br /&gt;
ends in a specific message, and the message says where to look next.&lt;br /&gt;
&lt;br /&gt;
== Next ==&lt;br /&gt;
&lt;br /&gt;
* [[Lean theorem prover/Explainers/Computation inside proofs|Computation inside proofs]]: proofs that are settled by computing.&lt;br /&gt;
* [[Lean theorem prover/System/Elaboration|Elaboration]]: the technical treatment.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>PMA Publisher</name></author>
	</entry>
</feed>