Documentation

LeanPool.AsymptoticTrianglePacking.Internal.AX1.CoreGapAX1

YusterNibbleApply #

theorem Nibble.YusterE.nibble_gives_triangleSub_matching {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheorem) {β : ℝ} (hβ : 0 < β) :
∃ (μ : ℝ), 0 < μ ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegular (triangleHypergraphSub G) d μ → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → ∃ (M : Finset (Finset (EdgeV G))), Hypergraph.IsMatching (triangleHypergraphSub G) M ∧ (1 - β) * (↑(G.cliqueFinset 2).card / 3) ≤ ↑M.card

Y5 (scaffold) — nibble ⇒ large triangle packing. Assuming NibbleTheorem, there is a near-regularity tolerance μ > 0 such that, whenever the edge-type triangle hypergraph is (1±μ)-nearly d-regular with codegree ≤ μd, it has a matching (edge-disjoint triangle packing) of size ≥ (1-β)·|E(G)|/3. Direct application of NibbleTheorem to triangleHypergraphSub G, using card_EdgeV to turn Fintype.card (EdgeV G) into |E(G)| = |cliqueFinset 2|.

theorem Nibble.YusterE.nibble_gives_triangleSub_matching_most {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMost) {β : ℝ} (hβ : 0 < β) :
∃ (μ : ℝ), 0 < μ ∧ ∃ (η : ℝ), 0 < η ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegularMost (triangleHypergraphSub G) d μ η → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → ∃ (M : Finset (Finset (EdgeV G))), Hypergraph.IsMatching (triangleHypergraphSub G) M ∧ (1 - β) * (↑(G.cliqueFinset 2).card / 3) ≤ ↑M.card

Y5 (majority) — nibble ⇒ large triangle packing, tolerating an exceptional edge set. The NibbleTheoremMost version of nibble_gives_triangleSub_matching: assuming the majority interface, there are tolerances μ, η > 0 such that whenever the edge-type triangle hypergraph is NearlyRegularMost d μ η (near-d-regular outside an η-fraction of edges) with codegree ≤ μd, it has an edge-disjoint triangle packing of size ≥ (1-β)·|E(G)|/3. This is the version the Szemerédi+counting reconstruction (which yields NearlyRegularMost, not strict) feeds.

YusterSubBridge #

Sub ↦ E bridge. A matching of the edge-vertex-type triangle hypergraph lower-bounds nu3: mapping each hyperedge T by the subtype embedding EdgeV G ↪ Finset V (T ↦ T.map emb) turns a matching of triangleHypergraphSub G into a matching of triangleHypergraphE G of the same cardinality (the embedding is injective — preserves card and disjointness — and recovers the original 2-subsets of each triangle since they are all 2-cliques). Then nu3_ge.

theorem Nibble.YusterE.nu3_ge_nibble {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheorem) {β : ℝ} (hβ : 0 < β) :
∃ (μ : ℝ), 0 < μ ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegular (triangleHypergraphSub G) d μ → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → (1 - β) * (↑(G.cliqueFinset 2).card / 3) ≤ ↑(nu3 G)

ν₃ lower bound from the nibble. Assuming NibbleTheorem and the Y3 near-regularity/codegree interface on triangleHypergraphSub G, the integral triangle-packing number satisfies (1-β)·|E(G)|/3 ≤ ν₃ G. Combines Y5 (nibble_gives_triangleSub_matching) with the Sub ↦ nu3 bridge. This is the quantitative half of Y6 (the other half is ν₃* ≤ an upper bound).

Reduction to duality and rounding #

PaperIII edgesIn: edges of G contained in a vertex set t.

Equations
Instances For

    PaperIII IsFracCover: nonneg edge weights, total ≥ 1 inside each triangle.

    Equations
    Instances For
      noncomputable def Nibble.AX1.tau3Star {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :

      PaperIII τ₃*: the fractional triangle-cover optimum (LP value).

      Equations
      Instances For

        AX1 statement (PaperIII Layer X, verbatim): the fractional–integral triangle-packing gap is o(n²), uniformly over graphs, read cover-side (τ₃* − ν₃).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          The strong-duality obligation (Aristotle core b3ee717f): τ₃* ≤ ν₃* for every graph (the reverse of the proven weak duality; together they give τ₃* = ν₃*).

          Equations
          Instances For

            The unconditional nibble-gap obligation (NibbleTheoremMost + second-stage near-regularity discharged for all large graphs): ν₃* − ν₃ ≤ ε n² uniformly.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              AX1 REDUCTION. AX1 follows from the two remaining obligations: cover-side strong duality (τ₃* ≤ ν₃*) and the unconditional nibble packing gap (ν₃* − ν₃ ≤ ε n²). The definitional bridges Nibble.{nu3,nu3star} ↔ PaperIII.{nu3,nu3Star} (already proven) make these the SAME ν₃, ν₃* as AX1's.

              Finite packing-cover LP duality #

              def LPDuality.IsPacking {O : Type u_1} {C : Type u_2} [Fintype O] [DecidableEq C] (inc : O → Finset C) (w : O → ℝ) :

              A fractional PACKING: nonneg object weights, total ≤ 1 across each constraint.

              Equations
              Instances For
                def LPDuality.IsCover {O : Type u_1} {C : Type u_2} (inc : O → Finset C) (y : C → ℝ) :

                A fractional COVER: nonneg constraint weights, total ≥ 1 inside each object.

                Equations
                Instances For
                  noncomputable def LPDuality.packOpt {O : Type u_1} {C : Type u_2} [Fintype O] [DecidableEq C] (inc : O → Finset C) :

                  Packing optimum (LP value).

                  Equations
                  Instances For
                    noncomputable def LPDuality.coverOpt {O : Type u_1} {C : Type u_2} [Fintype C] (inc : O → Finset C) :

                    Cover optimum (LP value).

                    Equations
                    Instances For
                      theorem LPDuality.lp_strong_duality {O : Type u_1} {C : Type u_2} [Fintype O] [Fintype C] [DecidableEq C] (inc : O → Finset C) :

                      THE ATOM — finite LP strong duality (packing = cover). Machinery-free: pure finite LP. This is the only genuinely hard step; everything downstream is instantiation.

                      theorem LPDuality.weak_duality {O : Type u_1} {C : Type u_2} [Fintype O] [Fintype C] [DecidableEq C] (inc : O → Finset C) {w : O → ℝ} {y : C → ℝ} (hw : IsPacking inc w) (hy : IsCover inc y) :
                      ∑ o : O, w o ≤ ∑ c : C, y c

                      Every feasible packing value is at most every feasible cover value.

                      theorem LPDuality.packOpt_le_coverOpt {O : Type u_1} {C : Type u_2} [Fintype O] [Fintype C] [DecidableEq C] (inc : O → Finset C) (hinc : ∀ (o : O), (inc o).Nonempty) :

                      Finite packing/cover weak duality at the optimum, when every object meets a constraint.

                      Strong duality for triangle packing and covering #

                      @[reducible, inline]

                      Object type: the triangles of G.

                      Equations
                      Instances For
                        @[reducible, inline]

                        Constraint type: the edges of G.

                        Equations
                        Instances For
                          noncomputable def Nibble.AX1.triInc {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (t : Tri G) :

                          Incidence: the edges contained in a triangle.

                          Equations
                          Instances For

                            Every triangle has an incident graph edge.

                            Bridge 1 (cover side). The abstract cover optimum over the triangle–edge incidence equals τ₃*.

                            Bridge 2 (packing side). The abstract packing optimum over the triangle–edge incidence equals ν₃*.

                            StrongDualityHyp — the instantiation. τ₃* ≤ ν₃* follows from the abstract finite LP strong duality applied to the triangle–edge incidence, via the two value bridges.

                            StrongDualityHyp DISCHARGED — the cover-side strong-duality obligation of the AX1 chain is now a theorem (via the abstract finite LP duality + the triangle–edge encoding bridges). One of the three AX1 obligations is closed, independently of the nibble.

                            Weak duality in the reverse direction for the triangle–edge incidence.

                            The cover-side AX1 statement yields the unconditional packing-gap formulation.

                            The remaining AX1 obligation is precisely the unconditional packing gap.

                            YusterGap #

                            theorem Nibble.YusterE.nu3star_sub_nu3_le {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheorem) {β : ℝ} (hβ : 0 < β) :
                            ∃ (μ : ℝ), 0 < μ ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegular (triangleHypergraphSub G) d μ → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → nu3star G - ↑(nu3 G) ≤ β * ↑(G.cliqueFinset 2).card / 3

                            Y6 capstone — integrality gap bound. Assuming NibbleTheorem and the Y3 near-regularity / codegree interface on triangleHypergraphSub G, the gap between the fractional and integral triangle packing numbers is at most β·|E(G)|/3. Combining nu3_ge_nibble and nu3star_le. As β → 0 this is o(n²) — AX1.

                            YusterAX1 #

                            Edge count bound |E(G)| ≤ |V(G)|². Each edge is a 2-subset of the vertex set, so |E| ≤ C(|V|,2) ≤ |V|².

                            theorem Nibble.YusterE.nu3star_sub_nu3_le_eps {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheorem) {ε : ℝ} (hε : 0 < ε) :
                            ∃ (μ : ℝ), 0 < μ ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegular (triangleHypergraphSub G) d μ → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → nu3star G - ↑(nu3 G) ≤ ε * ↑(Fintype.card V) ^ 2

                            AX1-form gap. Assuming NibbleTheorem and the edge-based Y3 interface, the integrality gap is ≤ ε·|V(G)|² — the shape AX1 states. Takes β = 3ε in nu3star_sub_nu3_le (so β·|E|/3 = ε·|E|) and bounds |E| ≤ |V|².

                            YusterMost #

                            theorem Nibble.YusterE.nu3_ge_nibble_most {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMost) {β : ℝ} (hβ : 0 < β) :
                            ∃ (μ : ℝ), 0 < μ ∧ ∃ (η : ℝ), 0 < η ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegularMost (triangleHypergraphSub G) d μ η → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → (1 - β) * (↑(G.cliqueFinset 2).card / 3) ≤ ↑(nu3 G)

                            Majority ν₃ lower bound. NibbleTheoremMost + the Y3-majority interface ⇒ ν₃ ≥ (1-β)|E|/3.

                            theorem Nibble.YusterE.nu3star_sub_nu3_le_most {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMost) {β : ℝ} (hβ : 0 < β) :
                            ∃ (μ : ℝ), 0 < μ ∧ ∃ (η : ℝ), 0 < η ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegularMost (triangleHypergraphSub G) d μ η → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → nu3star G - ↑(nu3 G) ≤ β * ↑(G.cliqueFinset 2).card / 3

                            Majority integrality-gap bound ν₃* − ν₃ ≤ β|E|/3.

                            theorem Nibble.YusterE.nu3star_sub_nu3_le_eps_most {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (hNibble : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMost) {ε : ℝ} (hε : 0 < ε) :
                            ∃ (μ : ℝ), 0 < μ ∧ ∃ (η : ℝ), 0 < η ∧ ∃ (d₀ : ℝ), 0 < d₀ ∧ ∀ {d : ℝ}, 0 < d → d₀ ≤ d → Hypergraph.NearlyRegularMost (triangleHypergraphSub G) d μ η → Hypergraph.CodegreeBounded (triangleHypergraphSub G) (μ * d) → nu3star G - ↑(nu3 G) ≤ ε * ↑(Fintype.card V) ^ 2

                            Majority AX1-form gap ν₃* − ν₃ ≤ ε|V|².

                            NibbleGapReduction #

                            Uniform nibble gap: tolerances μ, η depending only on ε (NOT on G) such that every graph that is near-d-regular (outside η-fraction) with bounded codegree has ν₃* − ν₃ ≤ ε n². This is the G-uniform form of the proven per-graph nu3star_sub_nu3_le_eps_most.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              Near-regularity obligation (the second-stage core): for tolerances μ, η, every sufficiently large graph admits a near-regularity witness d with the free codegree bound. This is exactly what a Szemerédi/Haxell–Rödl regularization must supply.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For

                                Sized near-regularity obligation. The corrected Freedman route also needs the triangle hypergraph vertex count (|E(G)|) to be polynomially bounded by the regular degree scale d.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For

                                  Dense-regime sized obligation in the natural graph-scale form: the base vertex count is linearly controlled by the regular degree scale.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    theorem Nibble.AX1.edgeV_card_le_sq_of_base_card_le {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {L d : ℝ} (hL : 0 ≤ L) (hd : 0 ≤ d) (hbase : ↑(Fintype.card V) ≤ L * d) :
                                    ↑(Fintype.card (YusterE.EdgeV G)) ≤ L ^ 2 * d ^ 2

                                    The triangle-hypergraph vertex count is quadratically controlled by any linear base-size bound |V(G)| ≤ L d.

                                    theorem Nibble.AX1.nearRegSized_of_linearSized {μ η d₀ L : ℝ} (hL : 0 ≤ L) (h : NearRegObligationLinearSized μ η d₀ L) :
                                    NearRegObligationSized μ η d₀ (L ^ 2)

                                    A linear base-size second-stage obligation implies the polynomial hypergraph-size obligation consumed by the sized nibble interface.

                                    theorem Nibble.AX1.nearRegSized_of_forall_linearSized {μ η d₀ K : ℝ} (hK : 0 < K) (h : ∀ (L : ℝ), 0 < L → NearRegObligationLinearSized μ η d₀ L) :

                                    Linear size control for every positive constant implies the exact sized obligation for every positive K, by taking L = sqrt K.

                                    theorem Nibble.AX1.nibbleGap_of_uniform_and_regularity (hU : UniformNibbleGap) (hReg : ∀ (μ η d₀ : ℝ), 0 < μ → 0 < η → 0 < d₀ → NearRegObligation μ η d₀) :

                                    NibbleGapHyp reduction. The unconditional packing gap follows from the G-uniform nibble gap plus the near-regularity obligation for its tolerances. Bottoms the AX1 chain out at NibbleTheoremMost (via UniformNibbleGap) and the second-stage regularization (via NearRegObligation).

                                    theorem Nibble.AX1.nibbleGap_of_nibbleTheorem (hNib : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMost) (hReg : ∀ (μ η d₀ : ℝ), 0 < μ → 0 < η → 0 < d₀ → NearRegObligation μ η d₀) :

                                    NibbleGapHyp directly from NibbleTheoremMost. Extracts the uniform tolerances μ, η from the nibble interface once (at r = 3, β = 3ε), consumes the near-regularity obligation, and inlines the packing-gap arithmetic (ν₃* ≤ |E|/3 and matching ≥ (1-3ε)|E|/3 ≤ ν₃, so ν₃*−ν₃ ≤ ε|E| ≤ ε n²). This bottoms the AX1 dependency chain out at exactly NibbleTheoremMost plus the second-stage regularization.

                                    theorem Nibble.AX1.nibbleGap_of_nibbleTheoremCeil (hNib : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMostCeil) (hReg : ∀ (μ η d₀ : ℝ), 0 < μ → 0 < η → 0 < d₀ → NearRegObligation μ η d₀) :

                                    NibbleGapHyp from the corrected ceiling-aware nibble theorem. This is the same accounting as nibbleGap_of_nibbleTheorem, but it keeps the second-stage global-degree ceiling supplied by NearRegObligation and passes it into the nibble interface.

                                    theorem Nibble.AX1.nibbleGap_of_nibbleTheoremCeilSized (hNib : LeanPool.AsymptoticTrianglePacking.Internal.NibbleTheoremMostCeilSized) (hReg : ∀ (μ η d₀ K : ℝ), 0 < μ → 0 < η → 0 < d₀ → 0 < K → NearRegObligationSized μ η d₀ K) :

                                    NibbleGapHyp from the sized corrected nibble theorem. This is the target shape for the Freedman parameter route: all probabilistic plumbing is abstract, while the triangle-specific regularization supplies both the global ceiling and the size-vs-degree bound.

                                    Version of nibbleGap_of_nibbleTheoremCeilSized consuming the dense-regime linear size obligation.

                                    The full AX1 reduction. AX1 sorry-free follows from the three irreducible obligations.

                                    The full AX1 reduction, ceiling-aware form. This is the corrected target for the Freedman route: the second-stage regularization supplies the global degree ceiling consumed by NibbleTheoremMostCeil.

                                    The full AX1 reduction, sized ceiling-aware form. This is the version aligned with the Freedman parameter atom after exposing the necessary size control.

                                    Sized Freedman AX1 reduction consuming the linear dense-regime regularity condition.

                                    TightNibble #

                                    The one-round covering oracle from the sharp round. Running the tight-band schedule Nibble.TightParams r β gives, for every majority near-regular input with a global degree ceiling and low codegree, a HasRoundOracle H (γ/(16r)) β.

                                    NibbleTheoremMostCeilSized, unconditionally. The size hypothesis |V| ≤ K d² is not needed by the tight-band route, so it is simply discarded.

                                    theorem Nibble.AX1.nibbleGap_holds (hReg : ∀ (μ η d₀ K : ℝ), 0 < μ → 0 < η → 0 < d₀ → 0 < K → NearRegObligationSized μ η d₀ K) :

                                    The nibble gap hypothesis, via Nibble.NibbleGapReduction.

                                    theorem Nibble.AX1.ax1_holds (hdual : StrongDualityHyp) (hReg : ∀ (μ η d₀ K : ℝ), 0 < μ → 0 < η → 0 < d₀ → 0 < K → NearRegObligationSized μ η d₀ K) :

                                    AX1, from strong duality and the sized near-regularity obligation.

                                    Legacy interfaces #

                                    The schedule now supplies the sharp round itself (Nibble.sharpRoundHyp_of_two_gamma_le_eps, whose regime 2γ ≤ ε is exactly the schedule's own ε = 4((r−1)/r)γ), so Nibble.SharpRoundHyp is no longer an input. The following wrappers keep the earlier _of_sharpRound interfaces available.

                                    theorem Nibble.AX1.nibbleGap_of_sharpRound (_hSharp : LeanPool.AsymptoticTrianglePacking.Internal.SharpRoundHyp) (hReg : ∀ (μ η d₀ K : ℝ), 0 < μ → 0 < η → 0 < d₀ → 0 < K → NearRegObligationSized μ η d₀ K) :

                                    The nibble gap hypothesis from the sharp round, via Nibble.NibbleGapReduction.

                                    theorem Nibble.AX1.ax1_of_sharpRound (_hSharp : LeanPool.AsymptoticTrianglePacking.Internal.SharpRoundHyp) (hdual : StrongDualityHyp) (hReg : ∀ (μ η d₀ K : ℝ), 0 < μ → 0 < η → 0 < d₀ → 0 < K → NearRegObligationSized μ η d₀ K) :

                                    AX1 from the sharp round, together with strong duality and the sized near-regularity obligation.

                                    YusterSubDegree #

                                    |triangleHypergraphSub| = #triangles. The powerset-subtype map is injective on 3-cliques (distinct triangles have distinct edge-sets), so the image has the same cardinality.

                                    Degree-sum (handshake) for the edge-based triangle hypergraph. As triangleHypergraphSub G is 3-uniform, ∑_{E} deg_E = 3·|triangleHypergraphSub| = 3·#triangles. The average edge triangle-degree is 3·#triangles / |E(G)|.

                                    YusterSubDegreeChar #

                                    theorem Nibble.YusterE.triangles_on_edge_eq_commonNbr {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (E : EdgeV G) :
                                    {t ∈ G.cliqueFinset 3 | ↑E ⊆ t}.card = {c : V | c ∉ ↑E ∧ G.IsNClique 3 (insert c ↑E)}.card

                                    The number of triangles containing edge E equals the number of common neighbours c of E's endpoints (those c ∉ E.val with insert c E.val a triangle).

                                    Second-stage bridge, graph form. The hypergraph-degree of edge E in triangleHypergraphSub G equals the number of common neighbours of its endpoints.

                                    theorem Nibble.YusterE.sum_commonNbr_eq_three_mul_triangles {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
                                    ∑ E : EdgeV G, {c : V | c ∉ ↑E ∧ G.IsNClique 3 (insert c ↑E)}.card = 3 * (G.cliqueFinset 3).card

                                    Second-stage mean codegree. Summing the per-edge codegree (common-neighbour count) over all edges gives 3·#triangles, so the average edge codegree is 3·#triangles / |E(G)| — the target d for the second-stage near-regularity window.

                                    YusterSubRegular #

                                    Codegree side (trivial). The edge-based triangle hypergraph has hypergraph-codegree ≤ 1, so it is CodegreeBounded C for any C ≥ 1 — in particular C = μd once μd ≥ 1.

                                    theorem Nibble.YusterE.triangleHypergraphSub_nearlyRegularMost_of_bounds {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {d μ η : ℝ} (Exc : Finset (EdgeV G)) (hExc : ↑Exc.card ≤ η * ↑(Fintype.card (EdgeV G))) (hlo : ∀ E ∉ Exc, (1 - μ) * d ≤ ↑(Hypergraph.degree (triangleHypergraphSub G) E)) (hhi : ∀ E ∉ Exc, ↑(Hypergraph.degree (triangleHypergraphSub G) E) ≤ (1 + μ) * d) :

                                    Majority near-regularity (packaging). Given a per-edge degree window on all but an exceptional set Exc of size ≤ η|E(G)|, the edge-based triangle hypergraph is NearlyRegularMost d μ η. The per-edge bounds and the exceptional count are supplied by the edge counting (edge-counting substep).

                                    DenseNearRegular #

                                    The triangle-hypergraph degree of an edge {u,v} is the number of common neighbours.

                                    second-stage ceiling (global upper bound). Every edge lies in at most |V| triangles.

                                    Second-stage floor (from a global min-degree bound). If every vertex of G has degree ≥ D, then every edge lies in at least 2D − |V| triangles by inclusion–exclusion.

                                    theorem Nibble.YusterE.triangleSub_degree_window {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (E : EdgeV G) (D : ℕ) (hD : ∀ (x : V), D ≤ G.degree x) (h2D : Fintype.card V ≤ 2 * D) {μ d : ℝ} (hlo : (1 - μ) * d ≤ 2 * ↑D - ↑(Fintype.card V)) (hhi : ↑(Fintype.card V) ≤ (1 + μ) * d) :

                                    Second-stage global near-regularity window (packaged). With a global min-degree D satisfying |V| ≤ 2D (dense regime), every edge's triangle-degree lies in the window [(1−μ)d, (1+μ)d] provided the window covers [2D−|V|, |V|]. This is the global (no exceptional set) near-regularity the corrected nibble consumes; at δ ≥ (9/10+ε)|V|, taking D = (9/10+ε)|V|, d = (9/10)|V|, μ = 1/9 satisfies the hypotheses.

                                    theorem Nibble.YusterE.triangleSub_linearSized_data_of_window {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {μ η d L : ℝ} (hη : 0 ≤ η) (hcodeg : 1 ≤ μ * d) (hbase : ↑(Fintype.card V) ≤ L * d) (hwindow : ∀ (E : EdgeV G), (1 - μ) * d ≤ ↑(Hypergraph.degree (triangleHypergraphSub G) E) ∧ ↑(Hypergraph.degree (triangleHypergraphSub G) E) ≤ (1 + μ) * d) :

                                    Dense-regime package for the corrected nibble input. A global degree window on every graph edge, the trivial edge-hypergraph codegree bound, and a linear base-size estimate assemble the exact local data required by NearRegObligationLinearSized.

                                    theorem Nibble.YusterE.triangleSub_linearSized_data_of_minDeg {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (D : ℕ) (hD : ∀ (x : V), D ≤ G.degree x) (h2D : Fintype.card V ≤ 2 * D) {μ η d L : ℝ} (hη : 0 ≤ η) (hcodeg : 1 ≤ μ * d) (hbase : ↑(Fintype.card V) ≤ L * d) (hlo : (1 - μ) * d ≤ 2 * ↑D - ↑(Fintype.card V)) (hhi : ↑(Fintype.card V) ≤ (1 + μ) * d) :

                                    Dense-regime package specialized to a minimum-degree floor D: the inclusion-exclusion window triangleSub_degree_window feeds the local linear-sized corrected nibble data.

                                    Tight.DenseRegDischarge #

                                    theorem Nibble.YusterE.triangleSub_dense_data {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (D : ℕ) (hD : ∀ (x : V), D ≤ G.degree x) (hDense : 9 * Fintype.card V ≤ 10 * D) (hn5 : 5 ≤ Fintype.card V) :

                                    Dense near-regularity, concrete window. For a graph whose minimum degree D satisfies 9n ≤ 10D (i.e. δ(G) ≥ (9/10)n) and n ≥ 5, the triangle hypergraph is nearly d-regular with d = n, μ = 1/5, EMPTY exceptional set, codegree ≤ μd, global ceiling ≤ (1+μ)d, and the linear size bound n ≤ 1·d. This is exactly the local data of NearRegObligationLinearSized with μ = 1/5, η = 0, L = 1, d = n.

                                    DenseGapAX1 #

                                    theorem Nibble.AX1.gap_le_of_sub_matching {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {ε : ℝ} (hε : 0 < ε) {M : Finset (Finset (YusterE.EdgeV G))} (hM : Hypergraph.IsMatching (YusterE.triangleHypergraphSub G) M) (hMcard : (1 - 3 * ε) * (↑(Fintype.card (YusterE.EdgeV G)) / 3) ≤ ↑M.card) :

                                    Packing-gap accounting. A matching of the triangle hypergraph of size at least (1 − 3ε)|E(G)|/3 forces ν₃* − ν₃ ≤ ε|V|², using ν₃* ≤ |E|/3 and |E| ≤ |V|².

                                    theorem Nibble.AX1.nibbleGap_dense (ε : ℝ) (hε : 0 < ε) :
                                    ∃ (θ : ℝ), 0 < θ ∧ θ < 1 ∧ ∃ (n₀ : ℕ), ∀ (V : Type) [inst : Fintype V] [inst_1 : DecidableEq V] (G : SimpleGraph V) [inst_2 : DecidableRel G.Adj], n₀ ≤ Fintype.card V → (∀ (x : V), θ * ↑(Fintype.card V) ≤ ↑(G.degree x)) → YusterE.nu3star G - ↑(YusterE.nu3 G) ≤ ε * ↑(Fintype.card V) ^ 2

                                    The dense branch, unconditionally. For every ε > 0 there is a density threshold θ < 1 and a size threshold n₀ such that every graph on at least n₀ vertices with minimum degree at least θ|V| satisfies ν₃* − ν₃ ≤ ε|V|².

                                    At minimum degree θ|V| = (1 − μ/2)|V| the common neighbourhood of every edge has size in [(1−μ)|V|, |V|], so the triangle hypergraph is near-|V|-regular with an empty exceptional set, bounded codegree and the global degree ceiling — precisely the hypotheses of the unconditional nibble theorem Nibble.nibbleTheoremMostCeil_holds.

                                    Every fractional triangle packing has total weight at most the number of triangles: each single weight is at most 1 by its own edge constraint.

                                    ν₃* is at most the number of triangles.

                                    theorem Nibble.AX1.nibbleGap_fewTriangles {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {ε : ℝ} (h : ↑(G.cliqueFinset 3).card ≤ ε * ↑(Fintype.card V) ^ 2) :

                                    The triangle-poor branch, unconditionally. If G has at most ε|V|² triangles then the packing gap is at most ε|V|², because ν₃* ≤ #triangles and ν₃ ≥ 0.

                                    The residual. The packing gap for the graphs that neither branch above covers: those that fail the density threshold (some vertex has degree below θ|V|) and are triangle-rich (more than ε|V|² triangles). Stated for every threshold θ ∈ (0,1) because the dense branch's threshold depends on ε.

                                    This is a true statement (a special case of the Haxell–Rödl theorem), unlike the previous blocker NearRegObligationSized, which asserts near-regularity of the triangle hypergraph of an arbitrary graph and is false.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For

                                      The reduction. NibbleGapHyp follows from the residual alone: the dense case is discharged unconditionally by nibbleGap_dense and the triangle-poor case by nibbleGap_fewTriangles.

                                      AX1 from the residual. Combines the reduction with the proved strong-duality input Nibble.AX1.strongDualityHyp_holds.

                                      CoreGapAX1 #

                                      Monotonicity of the packing numbers under edge deletion #

                                      The triangle hypergraph is monotone in the graph.

                                      ν₃ is monotone. Every edge-disjoint triangle packing of a spanning subgraph is one of the graph itself.

                                      A triangle of G that is not a triangle of the spanning subgraph G' has one of its three edges among the deleted ones.

                                      ν₃* is stable under edge deletion. Deleting a set D of edges decreases the fractional triangle packing number by at most |D|: the weight carried by the triangles that are destroyed is at most the total edge load of D, which is at most |D|.

                                      The packing gap is stable under edge deletion.

                                      The low-degree core #

                                      G with every edge at a vertex of K deleted.

                                      Equations
                                      Instances For
                                        @[instance_reducible]
                                        Equations
                                        theorem Nibble.AX1.restrictAway_mono {V : Type} (G : SimpleGraph V) {K K' : Finset V} (h : K ⊆ K') :
                                        theorem Nibble.AX1.restrictAway_degree_eq_zero {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {K : Finset V} {v : V} (hv : v ∈ K) :

                                        Isolating one more vertex destroys at most deg v edges.

                                        The support of G: its non-isolated vertices.

                                        Equations
                                        Instances For
                                          theorem Nibble.AX1.mem_posDeg_iff {V : Type} [Fintype V] (G : SimpleGraph V) [DecidableRel G.Adj] (x : V) :
                                          x ∈ posDeg G ↔ 0 < G.degree x
                                          theorem Nibble.AX1.exists_core_aux {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {t : ℝ} (ht : 0 ≤ t) (m : ℕ) (K : Finset V) :
                                          (posDeg (restrictAway G K)).card ≤ m → ∃ (K' : Finset V), K ⊆ K' ∧ (∀ (x : V), (restrictAway G K').degree x = 0 ∨ t ≤ ↑((restrictAway G K').degree x)) ∧ ↑((restrictAway G K).cliqueFinset 2 \ (restrictAway G K').cliqueFinset 2).card ≤ t * ↑m

                                          The core. Iteratively isolating the vertices of positive degree below t produces a spanning subgraph in which every vertex is isolated or has degree at least t, at a cost of at most t·m deleted edges, where m bounds the number of non-isolated vertices.

                                          theorem Nibble.AX1.exists_core {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {t : ℝ} (ht : 0 ≤ t) :
                                          ∃ (K : Finset V), (∀ (x : V), (restrictAway G K).degree x = 0 ∨ t ≤ ↑((restrictAway G K).degree x)) ∧ ↑(G.cliqueFinset 2 \ (restrictAway G K).cliqueFinset 2).card ≤ t * ↑(Fintype.card V)

                                          The core, unpacked. Every graph has a spanning subgraph in which every vertex is isolated or of degree at least t, obtained by deleting at most t·|V| edges.

                                          The dense branch in the presence of isolated vertices #

                                          theorem Nibble.AX1.edgeV_pair {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (E : YusterE.EdgeV G) :
                                          ∃ (u : V) (v : V), u ≠ v ∧ ↑E = {u, v}

                                          Support ceiling. Every edge lies in at most |support| triangles.

                                          theorem Nibble.AX1.triangleSub_degree_ge_support {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (E : YusterE.EdgeV G) {D : ℕ} (hD : ∀ (x : V), 0 < G.degree x → D ≤ G.degree x) :

                                          Support floor. If every non-isolated vertex has degree at least D, then every edge lies in at least 2D − |support| triangles: the two neighbourhoods live inside the support.

                                          theorem Nibble.AX1.gap_le_of_no_edges {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {c : ℝ} (hc : 0 ≤ c) (h : (posDeg G).card = 0) :

                                          A graph with no edges has zero packing gap.

                                          theorem Nibble.AX1.nibbleGap_denseCore (ε : ℝ) (hε : 0 < ε) :
                                          ∃ (θ : ℝ), 0 < θ ∧ θ < 1 ∧ ∃ (n₀ : ℕ), ∀ (V : Type) [inst : Fintype V] [inst_1 : DecidableEq V] (G : SimpleGraph V) [inst_2 : DecidableRel G.Adj], n₀ ≤ Fintype.card V → (∀ (x : V), G.degree x = 0 ∨ θ * ↑(Fintype.card V) ≤ ↑(G.degree x)) → YusterE.nu3star G - ↑(YusterE.nu3 G) ≤ ε * ↑(Fintype.card V) ^ 2

                                          The dense branch, tolerating isolated vertices. For every ε > 0 there is a density threshold θ < 1 and a size threshold n₀ such that every graph on at least n₀ vertices all of whose vertices are isolated or of degree at least θ|V| satisfies ν₃* − ν₃ ≤ ε|V|².

                                          The triangle hypergraph lives on the edges, so the isolated vertices are invisible to it: run the nibble at the scale d = |support|, at which the hypergraph is near-d-regular with an empty exceptional set.

                                          theorem Nibble.AX1.nibbleGap_of_dense_core (ε : ℝ) (hε : 0 < ε) :
                                          ∃ (θ : ℝ), 0 < θ ∧ θ < 1 ∧ ∃ (n₀ : ℕ), ∀ (V : Type) [inst : Fintype V] [inst_1 : DecidableEq V] (G : SimpleGraph V) [inst_2 : DecidableRel G.Adj], n₀ ≤ Fintype.card V → ∀ (G' : SimpleGraph V) (x : DecidableRel G'.Adj), G' ≤ G → ↑(G.cliqueFinset 2 \ G'.cliqueFinset 2).card ≤ ε / 4 * ↑(Fintype.card V) ^ 2 → (∀ (x_1 : V), G'.degree x_1 = 0 ∨ θ * ↑(Fintype.card V) ≤ ↑(G'.degree x_1)) → YusterE.nu3star G - ↑(YusterE.nu3 G) ≤ ε * ↑(Fintype.card V) ^ 2

                                          A new unconditional branch: graphs with a dense core. For every ε > 0 there are θ < 1 and n₀ such that every large graph which becomes (isolated-or-)θ|V|-dense after deleting at most (ε/4)|V|² edges has packing gap at most ε|V|².

                                          This strictly extends Nibble.AX1.nibbleGap_dense (take G' = G, no deletion): the graph itself may have arbitrarily many vertices of arbitrarily small positive degree, as long as the edges at them are few.

                                          The residual #

                                          The core packing-gap statement at parameters (ε, δ). The gap ν₃* − ν₃ ≤ ε|V|² for large graphs in which every vertex is isolated or has degree at least δ|V|, and whose fractional packing number exceeds ε|V|² (otherwise the conclusion is immediate from ν₃ ≥ 0).

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            The residual. The core packing gap at every pair of parameters.

                                            Equations
                                            Instances For
                                              theorem Nibble.AX1.CoreGapAt.mono_delta {ε δ δ' : ℝ} (h : CoreGapAt ε δ) (hδ : δ ≤ δ') :
                                              CoreGapAt ε δ'

                                              Raising the degree threshold weakens the statement.

                                              theorem Nibble.AX1.CoreGapAt.mono_eps {ε ε' δ : ℝ} (h : CoreGapAt ε δ) (hε : ε ≤ ε') :
                                              CoreGapAt ε' δ

                                              Raising the error term weakens the statement.

                                              theorem Nibble.AX1.coreGapAt_of_third {ε δ : ℝ} (hε : 1 / 3 ≤ ε) :
                                              CoreGapAt ε δ

                                              CoreGapAt is unconditionally true for ε ≥ 1/3, since ν₃* ≤ |E|/3 ≤ |V|²/3.

                                              theorem Nibble.AX1.coreGapAt_dense (ε : ℝ) (hε : 0 < ε) :
                                              ∃ (θ : ℝ), 0 < θ ∧ θ < 1 ∧ CoreGapAt ε θ

                                              CoreGapAt is unconditionally true near the top of the density range. For every ε > 0 there is θ < 1 with CoreGapAt ε θ — hence, by CoreGapAt.mono_delta, CoreGapAt ε δ for every δ ≥ θ. This is the satisfiability witness for the residual: it is a nonempty, non-circular family of true statements, proved from the nibble, not from the target.

                                              The reduction #

                                              The reduction. NibbleGapResidual follows from the core residual: delete the edges at all vertices of positive degree below (ε/4)|V| — this costs at most (ε/4)|V|² edges, hence at most that much of the packing gap — and apply the core residual to the resulting graph.

                                              AX1 from the core residual, combining with the proved strongDualityHyp_holds.

                                              The Haxell–Rödl packing gap for triangle hypergraphs: ν₃*(G) − ν₃(G) = o(|V|²) for every graph. This is the published theorem the whole AX1 chain is an instance of; it is recorded here only to certify that the residual below it is genuinely true, never used as an input to anything proved.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For

                                                The residual is a special case of Haxell–Rödl, hence true and not refutable.

                                                The converse reduction. NibbleGapResidual implies the core residual as well (the dense instances being supplied by nibbleGap_denseCore), so the reformulation is lossless: nothing has been strengthened, and the two residuals are equivalent.