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

tactic: intro p p' h
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✝
f : G →g G'
hinj : Injective ⇑f
u v : V
⊢ Injective (Walk.map f)
state_after: 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✝
f : G →g G'
hinj : Injective ⇑f
u v : V
p p' : G.Walk u v
h : Walk.map f p = Walk.map f p'
⊢ p = p'

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''
f✝ : G →g G'
f' : G' →g G''
u✝¹ v✝ u' v' : V
p : G.Walk u✝¹ v✝
f : G →g G'
hinj : Injective ⇑f
u v u✝ : V
p' : G.Walk u✝ u✝
h : Walk.map f nil = Walk.map f p'
⊢ nil = p'
state_after: case nil.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✝
f : G →g G'
hinj : Injective ⇑f
u v u✝ : V
h : Walk.map f nil = Walk.map f nil
⊢ nil = nil

case nil.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ u✝
h : Walk.map f nil = Walk.map f (cons h✝ p✝)
⊢ nil = cons h✝ p✝

tactic: rfl
state_before: case nil.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✝
f : G →g G'
hinj : Injective ⇑f
u v u✝ : V
h : Walk.map f nil = Walk.map f nil
⊢ nil = nil
state_after: no goals

tactic: simp at h
state_before: case nil.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ u✝
h : Walk.map f nil = Walk.map f (cons h✝ p✝)
⊢ nil = cons h✝ p✝
state_after: no goals

tactic: cases p' with
| nil => simp at h
| cons _ _ =>
  simp only [map_cons, cons.injEq] at h
  cases hinj h.1
  simp only [cons.injEq, heq_iff_eq, true_and_iff]
  apply ih
  simpa using h.2
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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝ = Walk.map f p' → p✝ = p'
p' : G.Walk u✝ w✝
h : Walk.map f (cons h✝ p✝) = Walk.map f p'
⊢ cons h✝ p✝ = p'
state_after: no goals

tactic: simp at h
state_before: case cons.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ u✝
ih : ∀ ⦃p' : G.Walk v✝ u✝⦄, Walk.map f p✝ = Walk.map f p' → p✝ = p'
h : Walk.map f (cons h✝ p✝) = Walk.map f nil
⊢ cons h✝ p✝ = nil
state_after: no goals

tactic: simp only [map_cons, cons.injEq] at h
state_before: case cons.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✝²
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝¹ w✝ : V
h✝¹ : G.Adj u✝ v✝¹
p✝¹ : G.Walk v✝¹ w✝
ih : ∀ ⦃p' : G.Walk v✝¹ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : Walk.map f (cons h✝¹ p✝¹) = Walk.map f (cons h✝ p✝)
⊢ cons h✝¹ p✝¹ = cons h✝ p✝
state_after: case cons.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✝²
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝¹ w✝ : V
h✝¹ : G.Adj u✝ v✝¹
p✝¹ : G.Walk v✝¹ w✝
ih : ∀ ⦃p' : G.Walk v✝¹ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝¹ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ cons h✝¹ p✝¹ = cons h✝ p✝

tactic: cases hinj h.1
state_before: case cons.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✝²
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝¹ w✝ : V
h✝¹ : G.Adj u✝ v✝¹
p✝¹ : G.Walk v✝¹ w✝
ih : ∀ ⦃p' : G.Walk v✝¹ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
v✝ : V
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝¹ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ cons h✝¹ p✝¹ = cons h✝ p✝
state_after: case cons.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ cons h✝¹ p✝¹ = cons h✝ p✝

tactic: simp only [cons.injEq, heq_iff_eq, true_and_iff]
state_before: case cons.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ cons h✝¹ p✝¹ = cons h✝ p✝
state_after: case cons.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ p✝¹ = p✝

tactic: apply ih
state_before: case cons.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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ p✝¹ = p✝
state_after: case cons.cons.refl.h
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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ Walk.map f p✝¹ = Walk.map f p✝

tactic: simpa using h.2
state_before: case cons.cons.refl.h
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✝¹
f : G →g G'
hinj : Injective ⇑f
u v u✝ v✝ w✝ : V
h✝¹ : G.Adj u✝ v✝
p✝¹ : G.Walk v✝ w✝
ih : ∀ ⦃p' : G.Walk v✝ w✝⦄, Walk.map f p✝¹ = Walk.map f p' → p✝¹ = p'
h✝ : G.Adj u✝ v✝
p✝ : G.Walk v✝ w✝
h : f v✝ = f v✝ ∧ HEq (Walk.map f p✝¹) (Walk.map f p✝)
⊢ Walk.map f p✝¹ = Walk.map f p✝
state_after: no goals