Theorem: SimpleGraph.FarFromTriangleFree.lt_half
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

tactic: by_contra! hε
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
⊢ ε < 2⁻¹
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
⊢ False

tactic: refine lt_irrefl (ε * card α ^ 2) ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
⊢ False
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2

tactic: have hε₀ : 0 < ε := hε.trans_lt' (by norm_num)
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
hε₀ : 0 < ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2

tactic: rw [inv_pos_le_iff_one_le_mul (zero_lt_two' 𝕜)] at hε
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
hε₀ : 0 < ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2

tactic: calc
  _ ≤ (G.edgeFinset.card : 𝕜) := by
    simpa using hG.le_card_sub_card bot_le (cliqueFree_bot (le_succ _))
  _ ≤ ε * 2 * (edgeFinset G).card := le_mul_of_one_le_left (by positivity) (by assumption)
  _ < ε * card α ^ 2 := ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ ε * ↑(Fintype.card α) ^ 2 < ε * ↑(Fintype.card α) ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ ε * 2 * ↑G.edgeFinset.card < ε * ↑(Fintype.card α) ^ 2

tactic: rw [mul_assoc, mul_lt_mul_left hε₀]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ ε * 2 * ↑G.edgeFinset.card < ε * ↑(Fintype.card α) ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * ↑G.edgeFinset.card < ↑(Fintype.card α) ^ 2

tactic: norm_cast
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * ↑G.edgeFinset.card < ↑(Fintype.card α) ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * G.edgeFinset.card < Fintype.card α ^ 2

tactic: calc
  _ ≤ 2 * (⊤ : SimpleGraph α).edgeFinset.card := by gcongr; exact le_top
  _ < card α ^ 2 := ?_
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * G.edgeFinset.card < Fintype.card α ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * ⊤.edgeFinset.card < Fintype.card α ^ 2

tactic: rw [edgeFinset_top, filter_not, card_sdiff (subset_univ _), card_univ, Sym2.card,]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * ⊤.edgeFinset.card < Fintype.card α ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * ((Fintype.card α + 1).choose 2 - (filter Sym2.IsDiag univ).card) < Fintype.card α ^ 2

tactic: rw [card_image_of_injective _ Sym2.diag_injective, card_univ, mul_add_one (α := ℕ), two_mul, sq,
  add_tsub_add_eq_tsub_right]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ Fintype.card α * (Fintype.card α + 1) - 2 * (image Sym2.diag univ).card < Fintype.card α ^ 2
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ Fintype.card α * Fintype.card α - Fintype.card α < Fintype.card α * Fintype.card α

tactic: apply tsub_lt_self <;> positivity
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ Fintype.card α * Fintype.card α - Fintype.card α < Fintype.card α * Fintype.card α
state_after: no goals

tactic: norm_num
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 2⁻¹ ≤ ε
⊢ 0 < 2⁻¹
state_after: no goals

tactic: simpa using hG.le_card_sub_card bot_le (cliqueFree_bot (le_succ _))
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ ε * ↑(Fintype.card α) ^ 2 ≤ ↑G.edgeFinset.card
state_after: no goals

tactic: positivity
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 0 ≤ ↑G.edgeFinset.card
state_after: no goals

tactic: assumption
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 1 ≤ ε * 2
state_after: no goals

tactic: gcongr
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ 2 * G.edgeFinset.card ≤ 2 * ⊤.edgeFinset.card
state_after: case bc.a.a
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ G ≤ ⊤

tactic: exact le_top
state_before: case bc.a.a
α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableEq α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : Nonempty α
hG : G.FarFromTriangleFree ε
hε : 1 ≤ ε * 2
hε₀ : 0 < ε
⊢ G ≤ ⊤
state_after: no goals