@@ -28,8 +28,9 @@ This file defines the **Turán density** of a simple graph.
2828* `SimpleGraph.isEquivalent_extremalNumber` is the proof that `extremalNumber n H` is
2929 asymptotically equivalent to `turanDensity H * n.choose 2` as `n` approaches `∞`.
3030
31- * `SimpleGraph.isContained_of_card_edgeFinset` is the proof that `n`-vertex simple graphs having
32- at least `(turanDensity H + o(1)) * n ^ 2` edges contain `H`, for sufficently large `n`.
31+ * `SimpleGraph.isContained_of_card_edgeFinset` is the proof that `card V`-vertex simple graphs
32+ having at least `(turanDensity H + o(1)) * (card V) ^ 2` edges contain `H`, for sufficently large
33+ `card V`.
3334 -/
3435
3536@[expose] public section
@@ -39,7 +40,7 @@ open Asymptotics Filter Finset Fintype Topology
3940
4041namespace SimpleGraph
4142
42- variable {V W : Type *} {G : SimpleGraph V} {H : SimpleGraph W }
43+ variable {W : Type *}
4344
4445lemma antitoneOn_extremalNumber_div_choose_two (H : SimpleGraph W) :
4546 AntitoneOn (fun n ↦ (extremalNumber n H / n.choose 2 : ℝ)) (Set.Ici 2 ) := by
@@ -104,7 +105,7 @@ theorem tendsto_turanDensity (H : SimpleGraph W) :
104105
105106/-- `extremalNumber n H` is asymptotically equivalent to `turanDensity H * n.choose 2` as `n`
106107approaches `∞`. -/
107- theorem isEquivalent_extremalNumber (h : turanDensity H ≠ 0 ) :
108+ theorem isEquivalent_extremalNumber {H : SimpleGraph W} (h : turanDensity H ≠ 0 ) :
108109 (fun n ↦ (extremalNumber n H : ℝ)) ~[atTop] (fun n ↦ (turanDensity H * n.choose 2 : ℝ)) := by
109110 have hπ := tendsto_turanDensity H
110111 apply Tendsto.const_mul (1 / turanDensity H : ℝ) at hπ
@@ -138,4 +139,29 @@ theorem eventually_isContained_of_card_edgeFinset (H : SimpleGraph W) {ε : ℝ}
138139 exact hcard_edges.trans (mod_cast card_edgeFinset_le_extremalNumber h_free)
139140 · exact antitoneOn_extremalNumber_div_choose_two H hm (hm.trans hn) hn
140141
142+ open Classical in
143+ /-- The edge density of `H`-free simple graphs on `turanDensityConst H ε` vertices
144+ is at most `turanDensity H + ε`.
145+
146+ Contrapositively, `turanDensity H + ε` is the density at which `H` is always contained in simple
147+ graphs on `turanDensityConst H ε` vertices.
148+
149+ Note that this value is only defined for positive `ε` and `turanDensityConst H ε = 0` for non
150+ positive `ε`. -/
151+ noncomputable abbrev turanDensityConst (H : SimpleGraph W) (ε : ℝ) :=
152+ if h : ε > 0 then
153+ Nat.find <| eventually_atTop.mp <| eventually_isContained_of_card_edgeFinset H h
154+ else 0
155+
156+ open Classical in
157+ /-- Simple graphs on `card V` vertices having at least `(turanDensity H + o(1)) * (card V) ^ 2`
158+ edges contain `H`, for sufficiently large `card V`. -/
159+ theorem isContained_of_card_edgeFinset (H : SimpleGraph W) {ε : ℝ} (hε_pos : 0 < ε)
160+ {V : Type *} [Fintype V] (h_verts : card V ≥ turanDensityConst H ε)
161+ (G : SimpleGraph V) [DecidableRel G.Adj] :
162+ #G.edgeFinset ≥ (turanDensity H + ε) * (card V).choose 2 → H ⊑ G := by
163+ rw [Iso.card_edgeFinset_eq (G.overFinIso rfl), isContained_congr Iso.refl (G.overFinIso rfl)]
164+ apply Nat.find_spec <| eventually_atTop.mp <| eventually_isContained_of_card_edgeFinset H hε_pos
165+ simpa only [turanDensityConst, hε_pos, ↓reduceDIte] using h_verts
166+
141167end SimpleGraph
0 commit comments