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

tactic: cases p'
state_before: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h : Adj G u✝ w
p' : Walk G u✝ v'
he : concat nil h = concat p' h'
⊢ ∃ hv, Walk.copy nil (_ : u✝ = u✝) hv = p'

tactic: exact ⟨rfl, rfl⟩
state_before: case nil.nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' h : Adj G v' w
he : concat nil h = concat nil h'
⊢ ∃ hv, Walk.copy nil (_ : v' = v') hv = nil

tactic: exfalso
state_before: case nil.cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h : Adj G u✝ w
v✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : concat nil h = concat (cons h✝ p✝) h'
⊢ ∃ hv, Walk.copy nil (_ : u✝ = u✝) hv = cons h✝ p✝

tactic: simp only [concat_nil, concat_cons, cons.injEq] at he
state_before: case nil.cons.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h : Adj G u✝ w
v✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : concat nil h = concat (cons h✝ p✝) h'
⊢ False

tactic: obtain ⟨rfl, he⟩ := he
state_before: case nil.cons.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h : Adj G u✝ w
v✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : w = v✝ ∧ HEq nil (concat p✝ h')
⊢ False

tactic: simp only [heq_iff_eq] at he
state_before: case nil.cons.h.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h h✝ : Adj G u✝ w
p✝ : Walk G w v'
he : HEq nil (concat p✝ h')
⊢ False

tactic: exact concat_ne_nil _ _ he.symm
state_before: case nil.cons.h.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ : V
h h✝ : Adj G u✝ w
p✝ : Walk G w v'
he : nil = concat p✝ h'
⊢ False

tactic: rw [concat_cons] at he
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝ w✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
p' : Walk G u✝ v'
he : concat (cons h✝ p✝) h = concat p' h'
⊢ ∃ hv, Walk.copy (cons h✝ p✝) (_ : u✝ = u✝) hv = p'

tactic: cases p'
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝ w✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
p' : Walk G u✝ v'
he : cons h✝ (concat p✝ h) = concat p' h'
⊢ ∃ hv, Walk.copy (cons h✝ p✝) (_ : u✝ = u✝) hv = p'

tactic: exfalso
state_before: case cons.nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
v✝ w✝ : V
p✝ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
h✝ : Adj G v' v✝
he : cons h✝ (concat p✝ h) = concat nil h'
⊢ ∃ hv, Walk.copy (cons h✝ p✝) (_ : v' = v') hv = nil

tactic: simp only [concat_nil, cons.injEq] at he
state_before: case cons.nil.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
v✝ w✝ : V
p✝ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
h✝ : Adj G v' v✝
he : cons h✝ (concat p✝ h) = concat nil h'
⊢ False

tactic: obtain ⟨rfl, he⟩ := he
state_before: case cons.nil.h
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
v✝ w✝ : V
p✝ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
h✝ : Adj G v' v✝
he : v✝ = w ∧ HEq (concat p✝ h) nil
⊢ False

tactic: rw [heq_iff_eq] at he
state_before: case cons.nil.h.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' v✝ w✝ : V
p✝ : Walk G v✝ w✝
h✝ h' : Adj G v' v✝
ih : ∀ {h : Adj G w✝ v✝} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ v✝
he : HEq (concat p✝ h) nil
⊢ False

tactic: exact concat_ne_nil _ _ he
state_before: case cons.nil.h.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' v✝ w✝ : V
p✝ : Walk G v✝ w✝
h✝ h' : Adj G v' v✝
ih : ∀ {h : Adj G w✝ v✝} {p' : Walk G v✝ v'}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ v✝
he : concat p✝ h = nil
⊢ False

tactic: rw [concat_cons, cons.injEq] at he
state_before: case cons.cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝¹ w✝ : V
h✝¹ : Adj G u✝ v✝¹
p✝¹ : Walk G v✝¹ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝¹ v'}, concat p✝¹ h = concat p' h' → ∃ hv, Walk.copy p✝¹ (_ : v✝¹ = v✝¹) hv = p'
h : Adj G w✝ w
v✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : cons h✝¹ (concat p✝¹ h) = concat (cons h✝ p✝) h'
⊢ ∃ hv, Walk.copy (cons h✝¹ p✝¹) (_ : u✝ = u✝) hv = cons h✝ p✝

tactic: obtain ⟨rfl, he⟩ := he
state_before: case cons.cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝¹ w✝ : V
h✝¹ : Adj G u✝ v✝¹
p✝¹ : Walk G v✝¹ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝¹ v'}, concat p✝¹ h = concat p' h' → ∃ hv, Walk.copy p✝¹ (_ : v✝¹ = v✝¹) hv = p'
h : Adj G w✝ w
v✝ : V
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : v✝¹ = v✝ ∧ HEq (concat p✝¹ h) (concat p✝ h')
⊢ ∃ hv, Walk.copy (cons h✝¹ p✝¹) (_ : u✝ = u✝) hv = cons h✝ p✝

tactic: rw [heq_iff_eq] at he
state_before: case cons.cons.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝ w✝ : V
h✝¹ : Adj G u✝ v✝
p✝¹ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝¹ h = concat p' h' → ∃ hv, Walk.copy p✝¹ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : HEq (concat p✝¹ h) (concat p✝ h')
⊢ ∃ hv, Walk.copy (cons h✝¹ p✝¹) (_ : u✝ = u✝) hv = cons h✝ p✝

tactic: obtain ⟨rfl, rfl⟩ := ih he
state_before: case cons.cons.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v v' w : V
h' : Adj G v' w
u✝ v✝ w✝ : V
h✝¹ : Adj G u✝ v✝
p✝¹ : Walk G v✝ w✝
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ v'}, concat p✝¹ h = concat p' h' → ∃ hv, Walk.copy p✝¹ (_ : v✝ = v✝) hv = p'
h : Adj G w✝ w
h✝ : Adj G u✝ v✝
p✝ : Walk G v✝ v'
he : concat p✝¹ h = concat p✝ h'
⊢ ∃ hv, Walk.copy (cons h✝¹ p✝¹) (_ : u✝ = u✝) hv = cons h✝ p✝

tactic: exact ⟨rfl, rfl⟩
state_before: case cons.cons.intro.intro
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w u✝ v✝ w✝ : V
h✝¹ : Adj G u✝ v✝
p✝ : Walk G v✝ w✝
h : Adj G w✝ w
h✝ : Adj G u✝ v✝
h' : Adj G w✝ w
ih : ∀ {h : Adj G w✝ w} {p' : Walk G v✝ w✝}, concat p✝ h = concat p' h' → ∃ hv, Walk.copy p✝ (_ : v✝ = v✝) hv = p'
he : concat p✝ h = concat (Walk.copy p✝ (_ : v✝ = v✝) (_ : w✝ = w✝)) h'
⊢ ∃ hv, Walk.copy (cons h✝¹ p✝) (_ : u✝ = u✝) hv = cons h✝ (Walk.copy p✝ (_ : v✝ = v✝) (_ : w✝ = w✝))