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

tactic: simp_rw [SimpleGraph.ext_iff, Function.funext_iff, turanGraph, top_adj, eq_iff_iff, not_iff_not]
state_before: V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
⊢ turanGraph n r = ⊤ ↔ r = 0 ∨ 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
⊢ (∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1) ↔ r = 0 ∨ n ≤ r

tactic: refine ⟨fun 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
⊢ (∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1) ↔ r = 0 ∨ n ≤ r
state_after: case refine_1
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : ∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1
⊢ r = 0 ∨ n ≤ r

case refine_2
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
⊢ r = 0 ∨ n ≤ r → ∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1

tactic: contrapose! h
state_before: case refine_1
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : ∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1
⊢ r = 0 ∨ n ≤ r
state_after: case refine_1
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : r ≠ 0 ∧ r < n
⊢ ∃ a a_1, ↑a % r = ↑a_1 % r ∧ a ≠ a_1 ∨ ↑a % r ≠ ↑a_1 % r ∧ a = a_1

tactic: use ⟨0, (Nat.pos_of_ne_zero h.1).trans h.2⟩, ⟨r, h.2⟩
state_before: case refine_1
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : r ≠ 0 ∧ r < n
⊢ ∃ a a_1, ↑a % r = ↑a_1 % r ∧ a ≠ a_1 ∨ ↑a % r ≠ ↑a_1 % r ∧ a = a_1
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
h : r ≠ 0 ∧ r < n
⊢ ↑⟨0, ⋯⟩ % r = ↑⟨r, ⋯⟩ % r ∧ ⟨0, ⋯⟩ ≠ ⟨r, ⋯⟩ ∨ ↑⟨0, ⋯⟩ % r ≠ ↑⟨r, ⋯⟩ % r ∧ ⟨0, ⋯⟩ = ⟨r, ⋯⟩

tactic: simp [h.1.symm]
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
h : r ≠ 0 ∧ r < n
⊢ ↑⟨0, ⋯⟩ % r = ↑⟨r, ⋯⟩ % r ∧ ⟨0, ⋯⟩ ≠ ⟨r, ⋯⟩ ∨ ↑⟨0, ⋯⟩ % r ≠ ↑⟨r, ⋯⟩ % r ∧ ⟨0, ⋯⟩ = ⟨r, ⋯⟩
state_after: no goals

tactic: rintro (rfl | h) a b
state_before: case refine_2
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
⊢ r = 0 ∨ n ≤ r → ∀ (a a_1 : Fin n), ↑a % r = ↑a_1 % r ↔ a = a_1
state_after: case refine_2.inl
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n : ℕ
H : SimpleGraph V
a b : Fin n
⊢ ↑a % 0 = ↑b % 0 ↔ a = b

case refine_2.inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : n ≤ r
a b : Fin n
⊢ ↑a % r = ↑b % r ↔ a = b

tactic: simp [Fin.val_inj]
state_before: case refine_2.inl
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n : ℕ
H : SimpleGraph V
a b : Fin n
⊢ ↑a % 0 = ↑b % 0 ↔ a = b
state_after: no goals

tactic: rw [Nat.mod_eq_of_lt (a.2.trans_le h), Nat.mod_eq_of_lt (b.2.trans_le h), Fin.val_inj]
state_before: case refine_2.inr
V : Type u_1
inst✝² : Fintype V
inst✝¹ : DecidableEq V
G : SimpleGraph V
inst✝ : DecidableRel G.Adj
n r : ℕ
H : SimpleGraph V
h : n ≤ r
a b : Fin n
⊢ ↑a % r = ↑b % r ↔ a = b
state_after: no goals