Zulip Chat Archive
Stream: new members
Topic: prove `c=c` in ring
Hank (Apr 22 2024 at 15:56):
I was doing the exercises in Mathematics in Lean, and I was trying to prove the following:
theorem add_left_cancel (a b c : R) (h : a + b = a + c) : b = c := by
rw [←neg_add_cancel_left a b, h, ←add_assoc, add_left_neg, zero_add, rfl]
Everything worked except the rfl in the last. The error message was
tactic 'rewrite' failed, pattern is a metavariable
?m.3545
from equation
?m.3545 = ?m.3545
R : Type u_1
inst✝ : Ring R
a b c : R
h : a + b = a + c
⊢ c = c
Changing rfl to refl didn't work either.
Ruben Van de Velde (Apr 22 2024 at 16:09):
Try just removing it
Richard Osborn (Apr 22 2024 at 16:23):
It might help to look through the following example and try to understand what is happening. Note that rewrite is rw, but it does not try to close the goal with rfl after rewriting. Also, note that rfl is both a tactic and a term. In particular, the example can just be solved with the tactic rfl alone.
#check Eq.refl -- Eq.refl.{u_1} {α : Sort u_1} (a : α) : a = a
#check rfl -- rfl.{u} {α : Sort u} {a : α} : a = a
example : c = c := by
rewrite [Eq.refl c]
rewrite [rfl (a := c)]
exact rfl
Kevin Buzzard (Apr 22 2024 at 20:17):
I don't think rw [rfl] is ever correct (in the sense that it's never useful and very likely to fail)
Colin Jones ⚛️ (Apr 22 2024 at 20:49):
You can just remove the rfl in the rw tactic as rw does it for you.
theorem add_left_cancel (a b c : ℝ) (h : a + b = a + c) : b = c := by
rw [←neg_add_cancel_left a b, h, ←add_assoc, add_left_neg, zero_add]
Hank (Apr 24 2024 at 11:53):
Thanks!
Last updated: May 02 2025 at 03:31 UTC