Documentation

LeanPool.AsymptoticTrianglePacking.Internal.AX1.CoreGapTripleDegrees

CoreGapUniformCodegree #

Counting edges fibrewise #

theorem Nibble.AX1.card_filter_product {α : Type u_1} {β : Type u_2} (s : Finset α) (t : Finset β) (P : α × β → Prop) [DecidablePred P] :
{e ∈ s ×ˢ t | P e}.card = ∑ x ∈ s, {y ∈ t | P (x, y)}.card

The number of pairs of a product satisfying a predicate, summed fibrewise.

theorem Nibble.AX1.card_interedges_eq_sum {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] (s t : Finset V) :
(G.interedges s t).card = ∑ x ∈ s, {z ∈ t | G.Adj x z}.card

The number of edges between two finsets is the sum over the first of the degrees into the second.

theorem Nibble.AX1.edgeDensity_real {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] (s t : Finset V) :
↑(G.edgeDensity s t) = ↑(G.interedges s t).card / (↑s.card * ↑t.card)

The edge density as a real number.

The one-sided degree lemmas #

theorem Nibble.AX1.card_filter_lt_le {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] {B C C' : Finset V} {ε θ : ℝ} (hε : 0 < ε) (hu : G.IsUniform ε B C) (hC'sub : C' ⊆ C) (hC'card : ↑C.card * ε ≤ ↑C'.card) (hθ : θ + ε ≤ ↑(G.edgeDensity B C)) :
↑{y ∈ B | ↑{z ∈ C' | G.Adj y z}.card < θ * ↑C'.card}.card ≤ ε * ↑B.card

Few vertices have small degree into a large subset. If (B, C) is ε-uniform and C' ⊆ C has |C'| ≥ ε|C|, then at most ε|B| vertices y ∈ B have fewer than θ|C'| neighbours in C', for any θ ≤ d(B,C) − ε.

theorem Nibble.AX1.card_filter_gt_le {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] {B C C' : Finset V} {ε θ : ℝ} (hε : 0 < ε) (hu : G.IsUniform ε B C) (hC'sub : C' ⊆ C) (hC'card : ↑C.card * ε ≤ ↑C'.card) (hθ : ↑(G.edgeDensity B C) + ε ≤ θ) :
↑{y ∈ B | θ * ↑C'.card < ↑{z ∈ C' | G.Adj y z}.card}.card ≤ ε * ↑B.card

Few vertices have large degree into a large subset. The mirror image of Nibble.AX1.card_filter_lt_le.

Ingredient 1: near-regular triangle degrees across a uniform triple #

def Nibble.AX1.codegreeIn {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] (C : Finset V) (x y : V) :

The number of common neighbours of x and y inside C.

Equations
Instances For
    theorem Nibble.AX1.codegreeIn_eq_card_filter {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] (C : Finset V) (x y : V) :
    codegreeIn G C x y = {z ∈ {z ∈ C | G.Adj x z} | G.Adj y z}.card
    theorem Nibble.AX1.uniform_triple_codegree {V : Type} (G : SimpleGraph V) [DecidableRel G.Adj] {A B C : Finset V} {ε : ℝ} (hε : 0 < ε) (hε1 : ε ≤ 1) (hAC : G.IsUniform ε A C) (hBC : G.IsUniform ε B C) (hdAC : 2 * ε ≤ ↑(G.edgeDensity A C)) (hdBC : 2 * ε ≤ ↑(G.edgeDensity B C)) :
    ↑{p ∈ A ×ˢ B | ¬((↑(G.edgeDensity A C) - ε) * (↑(G.edgeDensity B C) - 2 * ε) * ↑C.card ≤ ↑(codegreeIn G C p.1 p.2) ∧ ↑(codegreeIn G C p.1 p.2) ≤ (↑(G.edgeDensity A C) + ε) * (↑(G.edgeDensity B C) + 2 * ε) * ↑C.card)}.card ≤ 4 * ε * ↑A.card * ↑B.card

    Ingredient 1 — per-edge triangle counting in a uniform triple. If (A, C) and (B, C) are ε-uniform pairs of density at least 2ε, then all but at most 4ε|A||B| of the pairs (x, y) ∈ A × B have

    (d(A,C) − ε)(d(B,C) − 2ε)|C| ≤ |N(x) ∩ N(y) ∩ C| ≤ (d(A,C) + ε)(d(B,C) + 2ε)|C|,

    i.e. the triangle degree of an edge of the pair (A, B) into C is already near-regular, at the scale d(A,C)·d(B,C)·|C|.

    The proof is the standard two-sided count: all but 2ε|A| vertices x ∈ A have |N(x) ∩ C| = (d(A,C) ± ε)|C| (Nibble.AX1.card_filter_lt_le with C' = C), and for such an x the set N(x) ∩ C is large enough that uniformity of (B, C) applies to it, so all but 2ε|B| vertices y ∈ B have |N(y) ∩ N(x) ∩ C| = (d(B,C) ± 2ε)|N(x) ∩ C|.

    CoreGapTripleDegrees #

    The triangle degree of an edge is a codegree #

    theorem Nibble.AX1.card_triple {V : Type} [DecidableEq V] (x y z : V) (h1 : x ≠ y) (h2 : x ≠ z) (h3 : y ≠ z) :
    {x, y, z}.card = 3

    Three distinct vertices form a set of size three.

    theorem Nibble.AX1.edgeTriangleDegree_pair {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {x y : V} (hxy : G.Adj x y) :
    edgeTriangleDegree G {x, y} = {z : V | G.Adj x z ∧ G.Adj y z}.card

    The triangle degree of an edge is the number of common neighbours of its endpoints.

    The tripartite graph carried by a triple of parts #

    def Nibble.AX1.crossAdj {V : Type} (U W X : Finset V) (x y : V) :

    The (symmetric) predicate "x and y lie in two different parts of the triple".

    Equations
    Instances For
      theorem Nibble.AX1.crossAdj_symm {V : Type} {U W X : Finset V} {x y : V} (h : crossAdj U W X x y) :
      crossAdj U W X y x
      def Nibble.AX1.tripleGraph {V : Type} (G : SimpleGraph V) (U W X : Finset V) :

      The tripartite subgraph carried by a triple of parts: the edges of G joining two different parts of (U, W, X).

      Equations
      Instances For
        @[instance_reducible]
        noncomputable instance Nibble.AX1.instDecidableRelTripleGraph {V : Type} (G : SimpleGraph V) (U W X : Finset V) :
        Equations
        theorem Nibble.AX1.tripleGraph_le {V : Type} (G : SimpleGraph V) (U W X : Finset V) :
        tripleGraph G U W X ≤ G
        theorem Nibble.AX1.tripleGraph_adj {V : Type} (G : SimpleGraph V) (U W X : Finset V) (x y : V) :
        (tripleGraph G U W X).Adj x y ↔ G.Adj x y ∧ crossAdj U W X x y
        theorem Nibble.AX1.tripleGraph_comm₁ {V : Type} (G : SimpleGraph V) (U W X : Finset V) :
        tripleGraph G U W X = tripleGraph G W U X

        The tripartite graph does not depend on the order of the three parts.

        theorem Nibble.AX1.tripleGraph_comm₂ {V : Type} (G : SimpleGraph V) (U W X : Finset V) :
        tripleGraph G U W X = tripleGraph G U X W

        The tripartite graph does not depend on the order of the three parts.

        theorem Nibble.AX1.edgeTriangleDegree_tripleGraph {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {U W X : Finset V} (hUW : Disjoint U W) (hUX : Disjoint U X) (hWX : Disjoint W X) {x y : V} (hx : x ∈ U) (hy : y ∈ W) (hadj : (tripleGraph G U W X).Adj x y) :

        The triangle degree of a U–W edge of the triple is the codegree into X.

        Near-regular triangle degrees on one pair of the triple #

        theorem Nibble.AX1.tripleGraph_near_regular_pair {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {U W X : Finset V} (hUW : Disjoint U W) (hUX : Disjoint U X) (hWX : Disjoint W X) {ε : ℝ} (hε : 0 < ε) (hε1 : ε ≤ 1) (hUXu : G.IsUniform ε U X) (hWXu : G.IsUniform ε W X) (hdUX : 2 * ε ≤ ↑(G.edgeDensity U X)) (hdWX : 2 * ε ≤ ↑(G.edgeDensity W X)) :
        ∃ (Bad : Finset (Finset V)), ↑Bad.card ≤ 4 * ε * ↑U.card * ↑W.card ∧ ∀ x ∈ U, ∀ y ∈ W, (tripleGraph G U W X).Adj x y → {x, y} ∉ Bad → (↑(G.edgeDensity U X) - ε) * (↑(G.edgeDensity W X) - 2 * ε) * ↑X.card ≤ ↑(edgeTriangleDegree (tripleGraph G U W X) {x, y}) ∧ ↑(edgeTriangleDegree (tripleGraph G U W X) {x, y}) ≤ (↑(G.edgeDensity U X) + ε) * (↑(G.edgeDensity W X) + 2 * ε) * ↑X.card

        Ingredient 1, in triangle-degree form. If the pairs (U, X) and (W, X) are ε-uniform of density at least 2ε, then all but at most 4ε|U||W| of the edges of tripleGraph G U W X joining U to W have triangle degree (d(U,X) ± ε)(d(W,X) ± 2ε)|X|.

        The equalised triple #

        theorem Nibble.AX1.tripleGraph_near_regular {V : Type} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] {U W X : Finset V} (hUW : Disjoint U W) (hUX : Disjoint U X) (hWX : Disjoint W X) {ε μ d : ℝ} (hε : 0 < ε) (hε1 : ε ≤ 1) (hUWu : G.IsUniform ε U W) (hUXu : G.IsUniform ε U X) (hWXu : G.IsUniform ε W X) (hdUW : 2 * ε ≤ ↑(G.edgeDensity U W)) (hdUX : 2 * ε ≤ ↑(G.edgeDensity U X)) (hdWX : 2 * ε ≤ ↑(G.edgeDensity W X)) (hXlo : (1 - μ) * d ≤ (↑(G.edgeDensity U X) - ε) * (↑(G.edgeDensity W X) - 2 * ε) * ↑X.card) (hXhi : (↑(G.edgeDensity U X) + ε) * (↑(G.edgeDensity W X) + 2 * ε) * ↑X.card ≤ (1 + μ) * d) (hWlo : (1 - μ) * d ≤ (↑(G.edgeDensity U W) - ε) * (↑(G.edgeDensity W X) - 2 * ε) * ↑W.card) (hWhi : (↑(G.edgeDensity U W) + ε) * (↑(G.edgeDensity W X) + 2 * ε) * ↑W.card ≤ (1 + μ) * d) (hUlo : (1 - μ) * d ≤ (↑(G.edgeDensity U W) - ε) * (↑(G.edgeDensity U X) - 2 * ε) * ↑U.card) (hUhi : (↑(G.edgeDensity U W) + ε) * (↑(G.edgeDensity U X) + 2 * ε) * ↑U.card ≤ (1 + μ) * d) :
        ∃ (Bad : Finset (Finset V)), ↑Bad.card ≤ 4 * ε * (↑U.card * ↑W.card + ↑U.card * ↑X.card + ↑W.card * ↑X.card) ∧ ∀ e ∈ (tripleGraph G U W X).cliqueFinset 2, e ∉ Bad → (1 - μ) * d ≤ ↑(edgeTriangleDegree (tripleGraph G U W X) e) ∧ ↑(edgeTriangleDegree (tripleGraph G U W X) e) ≤ (1 + μ) * d

        Near-regular triangle degrees on a whole cluster triple. Suppose the three pairs of the triple (U, W, X) are ε-uniform of density at least 2ε, and that the three triangle-degree scales d(U,X)d(W,X)|X| (for the U–W edges), d(U,W)d(W,X)|W| (for the U–X edges) and d(U,W)d(U,X)|U| (for the W–X edges) all lie in [(1−μ)d, (1+μ)d], even after the ε-slack of Nibble.AX1.tripleGraph_near_regular_pair is taken into account. Then all but at most 4ε(|U||W| + |U||X| + |W||X|) of the edges of the tripartite graph tripleGraph G U W X have triangle degree in [(1−μ)d, (1+μ)d].

        This is the near-regular member the Haxell–Rödl construction attaches to a cluster triple, before the exceptional edges are deleted; the equalisation hypotheses are what the sparsification of the three pairs to a common density is for.