Zulip Chat Archive
Stream: new members
Topic: How to rewrite when names do not match
Timo Schneider (Jul 05 2020 at 14:48):
I am new to lean and I have a very basic question:
theorem plus_0_n (n:nat): 0+n = n :=
begin
induction n, refl, generalize : n_n.succ = n_n, exact n_ih,
end
I get stuck in this proof, because the names of the variables do not match up, i.e. my induction hypothesis is 0 + n_n = n_n , and n_n : nat. But somehow lean does not want to apply this to the goal, rewriting n_n.succ to n_n - (which I find strange, since both are of type nat). When I try to use the generalize tactic lean changes the name to n_n1, again not allowing me to use rewrite.
Can someone point me to the right tactic to use here?
Johan Commelin (Jul 05 2020 at 14:49):
You need to do something before you can apply the induction hypothesis
Johan Commelin (Jul 05 2020 at 14:49):
n_ih
is only about n_n
, not about n_n + 1
.
Timo Schneider (Jul 05 2020 at 14:55):
Johan Commelin said:
You need to do something before you can apply the induction hypothesis
Yes, I think I want to get this into a form like succ(0+n) = succ(n), in coq I can do so using simplification:
Theorem plus_O_n : forall n : nat, n + 0 = n.
Proof.
intros n. induction n. reflexivity.
simpl. rewrite IHn. reflexivity. Qed.
I guess i need a small theorem to rewrite the goal first in lean.
Johan Commelin (Jul 05 2020 at 15:07):
@Timo Schneider Right. So just tell lean. (In this case it will work.)
show succ (0 + n_n) = succ n_n,
Timo Schneider (Jul 05 2020 at 15:32):
Johan Commelin [said](https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic
Thanks, I got it to work now, but I need to read a bit more about the show tactic to understand what it does.
theorem plus_0_n (n:nat): 0+n = n :=
begin
induction n, refl, show nat.succ (0 + n_n) = nat.succ n_n, simp, assumption,
end
Last updated: Dec 20 2023 at 11:08 UTC