Theorem: SimpleGraph.Walk.concatRec_concat
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp only [concatRec]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ concatRec Hnil Hconcat (concat p h) = Hconcat p h (concatRec Hnil Hconcat p)

tactic: apply eq_of_heq
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ (_ : reverse (reverse (concat p h)) = concat p h) ▸ concatRecAux Hnil Hconcat (reverse (concat p h)) =
    Hconcat p h ((_ : reverse (reverse p) = p) ▸ concatRecAux Hnil Hconcat (reverse p))

tactic: apply rec_heq_of_heq
state_before: case h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ HEq ((_ : reverse (reverse (concat p h)) = concat p h) ▸ concatRecAux Hnil Hconcat (reverse (concat p h)))
    (Hconcat p h ((_ : reverse (reverse p) = p) ▸ concatRecAux Hnil Hconcat (reverse p)))

tactic: trans concatRecAux @Hnil @Hconcat (cons h.symm p.reverse)
state_before: case h.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ HEq (concatRecAux Hnil Hconcat (reverse (concat p h)))
    (Hconcat p h ((_ : reverse (reverse p) = p) ▸ concatRecAux Hnil Hconcat (reverse p)))

tactic: congr
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ HEq (concatRecAux Hnil Hconcat (reverse (concat p h))) (concatRecAux Hnil Hconcat (cons (_ : Adj G w v) (reverse p)))

tactic: simp
state_before: case e_8.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ reverse (concat p h) = cons (_ : Adj G w v) (reverse p)

tactic: rw [concatRecAux, rec_heq_iff_heq]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ HEq (concatRecAux Hnil Hconcat (cons (_ : Adj G w v) (reverse p)))
    (Hconcat p h ((_ : reverse (reverse p) = p) ▸ concatRecAux Hnil Hconcat (reverse p)))

tactic: congr <;> simp [heq_rec_iff_heq]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
motive : (u v : V) → Walk G u v → Sort u_1
Hnil : {u : V} → motive u u nil
Hconcat : {u v w : V} → (p : Walk G u v) → (h : Adj G v w) → motive u v p → motive u w (concat p h)
u v w : V
p : Walk G u v
h : Adj G v w
⊢ HEq (Hconcat (reverse (reverse p)) (_ : Adj G v w) (concatRecAux Hnil Hconcat (reverse p)))
    (Hconcat p h ((_ : reverse (reverse p) = p) ▸ concatRecAux Hnil Hconcat (reverse p)))