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

tactic: induction p with
| nil => simp
| cons _ _ ih =>
  rw [Walk.cons_isPath_iff] at hp
  simp only [map_cons, cons_isPath_iff, ih hp.1, support_map, List.mem_map, not_exists, not_and,
    true_and]
  intro x hx hf
  cases hinj hf
  exact hp.2 hx
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
hp : p.IsPath
⊢ (Walk.map f p).IsPath
state_after: no goals

tactic: simp
state_before: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ : V
hp : nil.IsPath
⊢ (Walk.map f nil).IsPath
state_after: no goals

tactic: rw [Walk.cons_isPath_iff] at hp
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : (cons h✝ p✝).IsPath
⊢ (Walk.map f (cons h✝ p✝)).IsPath
state_after: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
⊢ (Walk.map f (cons h✝ p✝)).IsPath

tactic: simp only [map_cons, cons_isPath_iff, ih hp.1, support_map, List.mem_map, not_exists, not_and,
  true_and]
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
⊢ (Walk.map f (cons h✝ p✝)).IsPath
state_after: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
⊢ ∀ x ∈ p✝.support, ¬f x = f u✝

tactic: intro x hx hf
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
⊢ ∀ x ∈ p✝.support, ¬f x = f u✝
state_after: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
x : V
hx : x ∈ p✝.support
hf : f x = f u✝
⊢ False

tactic: cases hinj hf
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
x : V
hx : x ∈ p✝.support
hf : f x = f u✝
⊢ False
state_after: case cons.refl
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
hx : u✝ ∈ p✝.support
hf : f u✝ = f u✝
⊢ False

tactic: exact hp.2 hx
state_before: case cons.refl
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
f : G →g G'
f' : G' →g G''
u v u' v' : V
p : G.Walk u v
hinj : Injective ⇑f
u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : p✝.IsPath → (Walk.map f p✝).IsPath
hp : p✝.IsPath ∧ u✝ ∉ p✝.support
hx : u✝ ∈ p✝.support
hf : f u✝ = f u✝
⊢ False
state_after: no goals