Theorem: SimpleGraph.Walk.IsHamiltonianCycle.map
File: Mathlib/Combinatorics/SimpleGraph/Hamiltonian.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
p : G.Walk a a
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
hp : p.IsHamiltonianCycle
⊢ ((Walk.map f p).tail ⋯).IsHamiltonian
state_after: α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
p : G.Walk a a
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
hp : p.IsHamiltonianCycle
⊢ ∀ (x : α), (List.count x p.support - if f x = (List.map (⇑f) p.support).head ⋯ then 1 else 0) = 1
tactic: simp only [IsHamiltonian, support_tail, support_map, ne_eq, List.map_eq_nil, support_ne_nil,
      not_false_eq_true, List.count_tail, hf.surjective.forall, hf.injective,
      List.count_map_of_injective]
state_before: α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
p : G.Walk a a
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
hp : p.IsHamiltonianCycle
⊢ ∀ (x : α), (List.count x p.support - if f x = (List.map (⇑f) p.support).head ⋯ then 1 else 0) = 1
state_after: α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
p : G.Walk a a
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
hp : p.IsHamiltonianCycle
x : α
⊢ (List.count x p.support - if f x = (List.map (⇑f) p.support).head ⋯ then 1 else 0) = 1
tactic: intro x
state_before: α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
p : G.Walk a a
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
hp : p.IsHamiltonianCycle
x : α
⊢ (List.count x p.support - if f x = (List.map (⇑f) p.support).head ⋯ then 1 else 0) = 1
state_after: case nil
α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p : G.Walk a b
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
x : α
hp : nil.IsHamiltonianCycle
⊢ (List.count x nil.support - if f x = (List.map (⇑f) nil.support).head ⋯ then 1 else 0) = 1

case cons
α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
x v✝ : α
y : G.Adj a v✝
p : G.Walk v✝ a
hp : (cons y p).IsHamiltonianCycle
⊢ (List.count x (cons y p).support - if f x = (List.map (⇑f) (cons y p).support).head ⋯ then 1 else 0) = 1
tactic: rcases p with (_ | ⟨y, p⟩)
state_before: case cons
α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
x v✝ : α
y : G.Adj a v✝
p : G.Walk v✝ a
hp : (cons y p).IsHamiltonianCycle
⊢ (List.count x (cons y p).support - if f x = (List.map (⇑f) (cons y p).support).head ⋯ then 1 else 0) = 1
state_after: case cons
α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
x v✝ : α
y : G.Adj a v✝
p : G.Walk v✝ a
hp : (cons y p).IsHamiltonianCycle
⊢ List.count x p.support = 1
tactic: simp only [support_cons, List.count_cons, List.map_cons, List.head_cons, hf.injective.eq_iff,
      add_tsub_cancel_right]
state_before: case cons
α : Type u_1
β : Type u_2
inst✝³ : Fintype α
inst✝² : Fintype β
inst✝¹ : DecidableEq α
inst✝ : DecidableEq β
G : SimpleGraph α
a b : α
p✝ : G.Walk a b
H : SimpleGraph β
f : G →g H
hf : Bijective ⇑f
x v✝ : α
y : G.Adj a v✝
p : G.Walk v✝ a
hp : (cons y p).IsHamiltonianCycle
⊢ List.count x p.support = 1
state_after: no goals
tactic: exact hp.isHamiltonian_tail _