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

Proof steps:
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
⊢ (turanGraph n r).CliqueFree (r + 1)
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
⊢ IsEmpty (⊤ ↪g turanGraph n r)
tactic: rw [cliqueFree_iff]
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
⊢ IsEmpty (⊤ ↪g turanGraph n 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
h : ¬IsEmpty (⊤ ↪g turanGraph n r)
⊢ False
tactic: by_contra h
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 : ¬IsEmpty (⊤ ↪g turanGraph n r)
⊢ False
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
h : Nonempty (⊤ ↪g turanGraph n r)
⊢ False
tactic: rw [not_isEmpty_iff] at h
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 : Nonempty (⊤ ↪g turanGraph n r)
⊢ False
state_after: case intro.mk
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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, (turanGraph n r).Adj (f a) (f b) ↔ ⊤.Adj a b
⊢ False
tactic: obtain ⟨f, ha⟩ := h
state_before: case intro.mk
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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, (turanGraph n r).Adj (f a) (f b) ↔ ⊤.Adj a b
⊢ False
state_after: case intro.mk
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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
⊢ False
tactic: simp only [turanGraph, top_adj] at ha
state_before: case intro.mk
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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
⊢ False
state_after: case intro.mk.intro.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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
x y : Fin (r + 1)
d : x ≠ y
c : ⟨↑(f x) % r, ⋯⟩ = ⟨↑(f y) % r, ⋯⟩
⊢ False
tactic: obtain ⟨x, y, d, c⟩ := Fintype.exists_ne_map_eq_of_card_lt (fun x ↦
    (⟨(f x).1 % r, Nat.mod_lt _ hr⟩ : Fin r)) (by simp)
state_before: case intro.mk.intro.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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
x y : Fin (r + 1)
d : x ≠ y
c : ⟨↑(f x) % r, ⋯⟩ = ⟨↑(f y) % r, ⋯⟩
⊢ False
state_after: case intro.mk.intro.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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
x y : Fin (r + 1)
d : x ≠ y
c : ↑(f x) % r = ↑(f y) % r
⊢ False
tactic: simp only [Fin.mk.injEq] at c
state_before: case intro.mk.intro.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
f : Fin (r + 1) ↪ Fin n
ha : ∀ {a b : Fin (r + 1)}, ↑(f a) % r ≠ ↑(f b) % r ↔ a ≠ b
x y : Fin (r + 1)
d : x ≠ y
c : ↑(f x) % r = ↑(f y) % r
⊢ False
state_after: no goals
tactic: exact absurd c ((@ha x y).mpr d)