Theorem: CategoryTheory.List.mapF.unitor_lax_oplax (Moncalc/CategoryTheory/List/Functor.lean)

State before:
α : Type u
inst✝ : Category α
as : List α
⊢ mapF.unitorLax as ≫ mapF.unitorOplax as = 𝟙 as
Tactic:
induction as
State after:
case nil
α : Type u
inst✝ : Category α
⊢ mapF.unitorLax [] ≫ mapF.unitorOplax [] = 𝟙 []

case cons
α : Type u
inst✝ : Category α
head✝ : α
tail✝ : List α
tail_ih✝ : mapF.unitorLax tail✝ ≫ mapF.unitorOplax tail✝ = 𝟙 tail✝
⊢ mapF.unitorLax (head✝ :: tail✝) ≫ mapF.unitorOplax (head✝ :: tail✝) = 𝟙 (head✝ :: tail✝)

State before:
α : Type u
inst✝ : Category α
⊢ mapF.unitorLax [] ≫ mapF.unitorOplax [] = 𝟙 []
Tactic:
case nil => rfl
State after:
no goals

State before:
α : Type u
inst✝ : Category α
a : α
as : List α
h_ind : mapF.unitorLax as ≫ mapF.unitorOplax as = 𝟙 as
⊢ mapF.unitorLax (a :: as) ≫ mapF.unitorOplax (a :: as) = 𝟙 (a :: as)
Tactic:
case cons a as h_ind =>
  dsimp [mapF.unitorLax, mapF.unitorOplax, List.id, DVect2.fromList]
  rw [h_ind, Category.id_comp]
State after:
no goals

State before:
α : Type u
inst✝ : Category α
⊢ mapF.unitorLax [] ≫ mapF.unitorOplax [] = 𝟙 []
Tactic:
rfl
State after:
no goals

State before:
α : Type u
inst✝ : Category α
a : α
as : List α
h_ind : mapF.unitorLax as ≫ mapF.unitorOplax as = 𝟙 as
⊢ mapF.unitorLax (a :: as) ≫ mapF.unitorOplax (a :: as) = 𝟙 (a :: as)
Tactic:
dsimp [mapF.unitorLax, mapF.unitorOplax, List.id, DVect2.fromList]
State after:
α : Type u
inst✝ : Category α
a : α
as : List α
h_ind : mapF.unitorLax as ≫ mapF.unitorOplax as = 𝟙 as
⊢ DVect2.cons (𝟙 a ≫ 𝟙 a) (mapF.unitorLax as ≫ mapF.unitorOplax as) = DVect2.cons (𝟙 a) (𝟙 as)

State before:
α : Type u
inst✝ : Category α
a : α
as : List α
h_ind : mapF.unitorLax as ≫ mapF.unitorOplax as = 𝟙 as
⊢ DVect2.cons (𝟙 a ≫ 𝟙 a) (mapF.unitorLax as ≫ mapF.unitorOplax as) = DVect2.cons (𝟙 a) (𝟙 as)
Tactic:
rw [h_ind, Category.id_comp]
State after:
no goals