Theorem: SimpleGraph.exists_isTuranMaximal
File: Mathlib/Combinatorics/SimpleGraph/Turan.lean

tactic: let c := {H : SimpleGraph V | H.CliqueFree (r + 1)}
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
⊢ ∃ H x, H.IsTuranMaximal r
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ ∃ H x, H.IsTuranMaximal r

tactic: have cn : c.toFinset.Nonempty := ⟨⊥, by
  simp only [Set.toFinset_setOf, mem_filter, mem_univ, true_and, c]
  exact cliqueFree_bot (by omega)⟩
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ ∃ H x, H.IsTuranMaximal r
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
⊢ ∃ H x, H.IsTuranMaximal r

tactic: use S, inferInstance
state_before: case intro.intro
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c.toFinset
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
⊢ ∃ H x, H.IsTuranMaximal r
state_after: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c.toFinset
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
⊢ S.IsTuranMaximal r

tactic: rw [Set.mem_toFinset] at Sm
state_before: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c.toFinset
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
⊢ S.IsTuranMaximal r
state_after: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
⊢ S.IsTuranMaximal r

tactic: refine ⟨Sm, fun I _ cf ↦ ?_⟩
state_before: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
⊢ S.IsTuranMaximal r
state_after: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
⊢ I.edgeFinset.card ≤ S.edgeFinset.card

tactic: by_cases Im : I ∈ c.toFinset
state_before: case h
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
⊢ I.edgeFinset.card ≤ S.edgeFinset.card
state_after: case pos
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∈ c.toFinset
⊢ I.edgeFinset.card ≤ S.edgeFinset.card

case neg
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∉ c.toFinset
⊢ I.edgeFinset.card ≤ S.edgeFinset.card

tactic: simp only [Set.toFinset_setOf, mem_filter, mem_univ, true_and, c]
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ ⊥ ∈ c.toFinset
state_after: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ ⊥.CliqueFree (r + 1)

tactic: exact cliqueFree_bot (by omega)
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ ⊥.CliqueFree (r + 1)
state_after: no goals

tactic: omega
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
⊢ 2 ≤ r + 1
state_after: no goals

tactic: convert Sl I Im
state_before: case pos
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∈ c.toFinset
⊢ I.edgeFinset.card ≤ S.edgeFinset.card
state_after: no goals

tactic: rw [Set.mem_toFinset] at Im
state_before: case neg
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∉ c.toFinset
⊢ I.edgeFinset.card ≤ S.edgeFinset.card
state_after: case neg
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∉ c
⊢ I.edgeFinset.card ≤ S.edgeFinset.card

tactic: contradiction
state_before: case neg
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
hr : 0 < r
c : Set (SimpleGraph V) := {H | H.CliqueFree (r + 1)}
cn : c.toFinset.Nonempty
S : SimpleGraph V
Sm : S ∈ c
Sl : ∀ x' ∈ c.toFinset, x'.edgeFinset.card ≤ S.edgeFinset.card
I : SimpleGraph V
x✝ : DecidableRel I.Adj
cf : I.CliqueFree (r + 1)
Im : I ∉ c
⊢ I.edgeFinset.card ≤ S.edgeFinset.card
state_after: no goals