## Stream: new members

### Topic: How do I do induction with length t here

#### YH (Dec 17 2019 at 23:47):

variables {A : Type} {x : A} {s t : list A}

lemma ex : length (reverse t) = length t :=
begin
induction (length t) with n hn,
sorry,
sorry,
end


in this lemma I want to write induction (length t) with n hn but then the goals are like

2 goals
case nat.zero
A : Type,
t : list A
⊢ length (reverse t) = 0

case nat.succ
A : Type,
t : list A,
n : ℕ,
hn : length (reverse t) = n
⊢ length (reverse t) = nat.succ n


which is not what I wanted.

#### Kevin Buzzard (Dec 17 2019 at 23:53):

But it is what the tactic is expected to do

#### Marc Huisinga (Dec 17 2019 at 23:53):

you probably want to induct on t

#### YH (Dec 17 2019 at 23:53):

Did try induction on t.

#### Kevin Buzzard (Dec 17 2019 at 23:54):

You'll need some intermediate lemmas but this is the way to do it

#### Marc Huisinga (Dec 18 2019 at 00:01):

if you want to see a oneliner-solution i can post it, but it's a nice small exercise

#### YH (Dec 18 2019 at 00:03):

I just finished my 23-liner. Show me the oneliner please.

#### YH (Dec 18 2019 at 00:03):

lemma ex2 {t : list A} : length (reverse t) = length t :=
begin
induction t with x xs hs,
unfold reverse,
unfold reverse_core,
unfold reverse,
unfold reverse_core,
unfold length,
have l : ∀ s t : list A, length (reverse_core s t) = length s + length t,
intro s,
induction s with y ys h1,
unfold reverse_core,
unfold length,
intro t,
rw zero_add,
unfold reverse_core,
intro t,
rw h1 (y :: t),
unfold length,
simp,
rw l _ _,
unfold length,
simp,
end


#### Marc Huisinga (Dec 18 2019 at 00:04):

it does use some basic intermediate list lemmas.

lemma ex : length (reverse t) = length t :=
by induction t; simpa only [list.reverse_cons, list.length_append, list.length, add_right_inj]


#### YH (Dec 18 2019 at 00:05):

OK. reverse_cons is the one I didn't know.

#### YH (Dec 18 2019 at 00:07):

what is simpa, lean cannot find it.

#### Marc Huisinga (Dec 18 2019 at 00:07):

you can find a description of most mathlib tactics here: https://github.com/leanprover-community/mathlib/blob/master/docs/tactics.md

#### YH (Dec 18 2019 at 00:09):

⊢ length (reverse (t_hd :: t_tl)) = length (t_hd :: t_tl)


Still have this goal.

#### Marc Huisinga (Dec 18 2019 at 00:14):

did you import data.list?

#### YH (Dec 18 2019 at 00:15):

import data.list.basic

#### Marc Huisinga (Dec 18 2019 at 00:16):

works for me :shrug:

#### YH (Dec 18 2019 at 00:22):

Oh my bad, I defined my own length in this hidden name space. facepalm.

Last updated: May 14 2021 at 06:16 UTC