Theorem: SimpleGraph.farFromTriangleFree_of_disjoint_triangles
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Basic.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
⊢ G.FarFromTriangleFree ε
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
⊢ ∀ ⦃H : SimpleGraph α⦄ [inst : DecidableRel H.Adj],
    H ≤ G → H.CliqueFree 3 → ε * ↑(Fintype.card α ^ 2) ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
tactic: rw [farFromTriangleFree_iff]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁴ : LinearOrderedField 𝕜
G H : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝³ : Fintype α
inst✝² : DecidableRel G.Adj
inst✝¹ : DecidableRel H.Adj
inst✝ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
⊢ ∀ ⦃H : SimpleGraph α⦄ [inst : DecidableRel H.Adj],
    H ≤ G → H.CliqueFree 3 → ε * ↑(Fintype.card α ^ 2) ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H✝ : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableRel G.Adj
inst✝² : DecidableRel H✝.Adj
inst✝¹ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
H : SimpleGraph α
inst✝ : DecidableRel H.Adj
hG : H ≤ G
hH : H.CliqueFree 3
⊢ ε * ↑(Fintype.card α ^ 2) ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
tactic: intros H _ hG hH
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H✝ : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableRel G.Adj
inst✝² : DecidableRel H✝.Adj
inst✝¹ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
H : SimpleGraph α
inst✝ : DecidableRel H.Adj
hG : H ≤ G
hH : H.CliqueFree 3
⊢ ε * ↑(Fintype.card α ^ 2) ≤ ↑G.edgeFinset.card - ↑H.edgeFinset.card
state_after: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H✝ : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableRel G.Adj
inst✝² : DecidableRel H✝.Adj
inst✝¹ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
H : SimpleGraph α
inst✝ : DecidableRel H.Adj
hG : H ≤ G
hH : H.CliqueFree 3
⊢ ε * ↑(Fintype.card α ^ 2) ≤ ↑(G.edgeFinset.card - H.edgeFinset.card)
tactic: rw [← Nat.cast_sub (card_le_card $ edgeFinset_mono hG)]
state_before: α : Type u_1
β : Type u_2
𝕜 : Type u_3
inst✝⁵ : LinearOrderedField 𝕜
G H✝ : SimpleGraph α
ε δ : 𝕜
n : ℕ
s : Finset α
inst✝⁴ : Fintype α
inst✝³ : DecidableRel G.Adj
inst✝² : DecidableRel H✝.Adj
inst✝¹ : DecidableEq α
tris : Finset (Finset α)
htris : tris ⊆ G.cliqueFinset 3
pd : (↑tris).Pairwise fun x y => (↑x ∩ ↑y).Subsingleton
tris_big : ε * ↑(Fintype.card α ^ 2) ≤ ↑tris.card
H : SimpleGraph α
inst✝ : DecidableRel H.Adj
hG : H ≤ G
hH : H.CliqueFree 3
⊢ ε * ↑(Fintype.card α ^ 2) ≤ ↑(G.edgeFinset.card - H.edgeFinset.card)
state_after: no goals
tactic: exact tris_big.trans
    (Nat.cast_le.2 $ farFromTriangleFree_of_disjoint_triangles_aux htris pd hG hH)