Theorem: SimpleGraph.maxDegree_le_of_forall_degree_le
File: Mathlib/Combinatorics/SimpleGraph/Finite.lean

tactic: by_cases hV : (univ : Finset V).Nonempty
state_before: V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
⊢ G.maxDegree ≤ k
state_after: case pos
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
⊢ G.maxDegree ≤ k

case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : ¬univ.Nonempty
⊢ G.maxDegree ≤ k

tactic: haveI : Nonempty V := univ_nonempty_iff.mp hV
state_before: case pos
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
⊢ G.maxDegree ≤ k
state_after: case pos
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
⊢ G.maxDegree ≤ k

tactic: obtain ⟨v, hv⟩ := G.exists_maximal_degree_vertex
state_before: case pos
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
⊢ G.maxDegree ≤ k
state_after: case pos.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
v : V
hv : G.maxDegree = G.degree v
⊢ G.maxDegree ≤ k

tactic: rw [hv]
state_before: case pos.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
v : V
hv : G.maxDegree = G.degree v
⊢ G.maxDegree ≤ k
state_after: case pos.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
v : V
hv : G.maxDegree = G.degree v
⊢ G.degree v ≤ k

tactic: apply h
state_before: case pos.intro
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ.Nonempty
this : Nonempty V
v : V
hv : G.maxDegree = G.degree v
⊢ G.degree v ≤ k
state_after: no goals

tactic: rw [not_nonempty_iff_eq_empty] at hV
state_before: case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : ¬univ.Nonempty
⊢ G.maxDegree ≤ k
state_after: case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ = ∅
⊢ G.maxDegree ≤ k

tactic: rw [maxDegree, hV, image_empty]
state_before: case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ = ∅
⊢ G.maxDegree ≤ k
state_after: case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ = ∅
⊢ Option.getD ∅.max 0 ≤ k

tactic: exact k.zero_le
state_before: case neg
V : Type u_1
G : SimpleGraph V
e : Sym2 V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
k : ℕ
h : ∀ (v : V), G.degree v ≤ k
hV : univ = ∅
⊢ Option.getD ∅.max 0 ≤ k
state_after: no goals