Zulip Chat Archive
Stream: new members
Topic: Proving functions are equal
Devon Richards (Jan 13 2021 at 00:36):
I was playing around with lean trying to familiarize myself with it so I decided to try and define finite sequences and some operations on them. I defined finite_sequence (n : nat) (\alpha : Type u)
as fin n \to \alpha
. Then I defined initial_segment s m
which is the sequence of the first m elements of s, and concat s t
which is the sequence made by the elements of s followed by the elements of t.
Now I'm trying to prove that \forall (s t : finite_sequence n \alpha), s = initial_segment (concat s t)
and I'm having trouble figuring out how to prove it in Lean. The outline of the proof in my head is to show that \forall i, s i = (initial_segment (concat s t)) i
. Do I need to restate the theorem in that form or is there some good way to prove them equal otherwise without needing to simplify the definitions till they're definitionaly equal? I was wanting to treat the sequences as concrete objects not functions so the equality without the explicit parameter seemed much more aesthetically appealing.
Hanting Zhang (Jan 13 2021 at 00:44):
To "prove things are equal by proving their parts are equal," i.e. extensionality, you use the ext
tactic (tactic#ext). Although this is general advice and I'm not completely sure it will work for your case.
Chris Hughes (Jan 13 2021 at 00:46):
funext
is the theorem you need. The ext
tactic is one way of automatically applying funext
Devon Richards (Jan 13 2021 at 00:47):
Thank you, that was exactly what I wanted.
Last updated: Dec 20 2023 at 11:08 UTC