Theorem: SimpleGraph.card_le_chromaticNumber_iff_forall_surjective
File: Mathlib/Combinatorics/SimpleGraph/Coloring.lean

tactic: refine ⟨fun h C ↦ ?_, fun h ↦ ?_⟩
state_before: V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
inst✝ : Fintype α
⊢ ↑(card α) ≤ G.chromaticNumber ↔ ∀ (C : G.Coloring α), Surjective ⇑C
state_after: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : ↑(card α) ≤ G.chromaticNumber
C : G.Coloring α
⊢ Surjective ⇑C

case refine_2
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
⊢ ↑(card α) ≤ G.chromaticNumber

tactic: rw [C.colorable.chromaticNumber_eq_sInf, Nat.cast_le] at h
state_before: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : ↑(card α) ≤ G.chromaticNumber
C : G.Coloring α
⊢ Surjective ⇑C
state_after: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
⊢ Surjective ⇑C

tactic: intro i
state_before: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
⊢ Surjective ⇑C
state_after: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
⊢ ∃ a, C a = i

tactic: by_contra! hi
state_before: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
⊢ ∃ a, C a = i
state_after: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
hi : ∀ (a : V), C a ≠ i
⊢ False

tactic: classical
exact Nat.not_mem_of_lt_sInf ((Nat.sub_one_lt_of_lt <| card_pos_iff.2 ⟨i⟩).trans_le h)
  ⟨G.recolorOfEquiv (equivOfCardEq <| by simp [Nat.pred_eq_sub_one]) D⟩
state_before: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
hi : ∀ (a : V), C a ≠ i
D : G.Coloring { a // a ≠ i } := { toFun := fun v => ⟨C v, ⋯⟩, map_rel' := ⋯ }
⊢ False
state_after: no goals

tactic: exact Nat.not_mem_of_lt_sInf ((Nat.sub_one_lt_of_lt <| card_pos_iff.2 ⟨i⟩).trans_le h)
  ⟨G.recolorOfEquiv (equivOfCardEq <| by simp [Nat.pred_eq_sub_one]) D⟩
state_before: case refine_1
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
hi : ∀ (a : V), C a ≠ i
D : G.Coloring { a // a ≠ i } := { toFun := fun v => ⟨C v, ⋯⟩, map_rel' := ⋯ }
⊢ False
state_after: no goals

tactic: simp [Nat.pred_eq_sub_one]
state_before: V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : card α ≤ sInf {n' | G.Colorable n'}
C : G.Coloring α
i : α
hi : ∀ (a : V), C a ≠ i
D : G.Coloring { a // a ≠ i } := { toFun := fun v => ⟨C v, ⋯⟩, map_rel' := ⋯ }
⊢ card { a // a ≠ i } = card (Fin (card α - 1))
state_after: no goals

tactic: simp only [chromaticNumber, Set.mem_setOf_eq, le_iInf_iff, Nat.cast_le, exists_prop]
state_before: case refine_2
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
⊢ ↑(card α) ≤ G.chromaticNumber
state_after: case refine_2
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
⊢ ∀ (i : ℕ), G.Colorable i → card α ≤ i

tactic: rintro i ⟨C⟩
state_before: case refine_2
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
⊢ ∀ (i : ℕ), G.Colorable i → card α ≤ i
state_after: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
i : ℕ
C : G.Coloring (Fin i)
⊢ card α ≤ i

tactic: contrapose! h
state_before: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
h : ∀ (C : G.Coloring α), Surjective ⇑C
i : ℕ
C : G.Coloring (Fin i)
⊢ card α ≤ i
state_after: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
⊢ ∃ C, ¬Surjective ⇑C

tactic: refine ⟨G.recolorOfCardLE (by simpa using h.le) C, fun hC ↦ ?_⟩
state_before: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
⊢ ∃ C, ¬Surjective ⇑C
state_after: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
hC : Surjective ⇑((G.recolorOfCardLE ⋯) C)
⊢ False

tactic: dsimp at hC
state_before: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
hC : Surjective ⇑((G.recolorOfCardLE ⋯) C)
⊢ False
state_after: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
hC : Surjective (⇑⋯.some ∘ ⇑C)
⊢ False

tactic: simpa [h.not_le] using Fintype.card_le_of_surjective _ hC.of_comp
state_before: case refine_2.intro
V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
hC : Surjective (⇑⋯.some ∘ ⇑C)
⊢ False
state_after: no goals

tactic: simpa using h.le
state_before: V : Type u
G : SimpleGraph V
n : ℕ
α : Type u_1
β : Type u_2
C✝ : G.Coloring α
inst✝ : Fintype α
i : ℕ
C : G.Coloring (Fin i)
h : i < card α
⊢ card (Fin i) ≤ card α
state_after: no goals