Documentation

LeanPool.MinimumDegreeMatching.BKLOSelection

Deterministic simultaneous matching selection #

A pessimistic-estimator sweep chooses perfect matchings in overlapping apex neighbourhoods while keeping all previously selected matching edges disjoint. This is the deterministic core used for the r = 2 specialization of BKLO Lemma 10.7.

The used-degree counter and the potential #

def BKLOK2.usedCnt {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (W : Finset V) (F : Finset (Sym2 V)) (x y : V) :

The number of edges of the used set F at y lying inside the apex neighbourhood N_H(x,W). This is exactly the amount by which the Dirac degree of y in H[N_H(x,W)] has been eroded.

Equations
Instances For
    noncomputable def BKLOK2.pot {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (W : Finset V) (q : ) (F : Finset (Sym2 V)) (R : Finset V) :

    The pessimistic-estimator potential. R is the set of apices not yet processed.

    Equations
    Instances For
      noncomputable def BKLOK2.wgt {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (W : Finset V) (q : ) (F : Finset (Sym2 V)) (R' R : Finset V) (y z : V) :

      The weight function fed to the spread clause at the apex being processed: the potential mass carried by the pair (y, z), i.e. the total over the remaining apices containing both.

      Equations
      Instances For
        theorem BKLOK2.wgt_nonneg {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } (hq : 0 q) (F : Finset (Sym2 V)) (R' R : Finset V) (y z : V) :
        0 wgt H W q F R' R y z
        theorem BKLOK2.pot_nonneg {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } (hq : 0 q) (F : Finset (Sym2 V)) (R : Finset V) :
        0 pot H W q F R
        theorem BKLOK2.pow_usedCnt_le_pot {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } (hq : 0 q) {F : Finset (Sym2 V)} {R : Finset V} {x y : V} (hx : x R) (hy : y nbhdIn H x W) :
        2 ^ usedCnt H W F x y pot H W q F R

        Every single term of the potential is at most the potential.

        theorem BKLOK2.usedCnt_le_of_pot {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } (hq : 0 q) {F : Finset (Sym2 V)} {R : Finset V} {s : } (hpot : pot H W q F R < 2 ^ (s + 1)) {x y : V} (hx : x R) (hy : y nbhdIn H x W) :
        usedCnt H W F x y s

        The potential controls the used degrees: if Φ < 2 ^ (s+1) then no counter exceeds s.

        The step inequality #

        theorem BKLOK2.usedCnt_union_le {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} (F : Finset (Sym2 V)) {N : Finset V} {f : VV} (hmap : aN, f a N) (hinv : aN, f (f a) = a) (x y : V) :
        usedCnt H W (F famEdges (involutionMatching N f)) x y usedCnt H W F x y + if y N y nbhdIn H x W f y nbhdIn H x W then 1 else 0

        The used degree inside N_H(x,W) grows by at most one, and only at vertices of the current neighbourhood matched into N_H(x,W).

        theorem BKLOK2.nbhdIn_erase {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (R : Finset V) (x₀ y : V) :
        nbhdIn H y (R.erase x₀) = (nbhdIn H y R).erase x₀

        Deleting an apex from the index set deletes it from every neighbourhood.

        theorem BKLOK2.degTo_erase_of_mem_nbhd {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W R : Finset V} {x₀ y : V} (hx₀ : x₀ R) (hy : y nbhdIn H x₀ W) :
        degTo H y R = degTo H y (R.erase x₀) + 1

        A vertex of the processed neighbourhood loses exactly one apex.

        theorem BKLOK2.degTo_erase_of_notMem_nbhd {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W R : Finset V} {x₀ y : V} (hyW : y W) (hy : ynbhdIn H x₀ W) :
        degTo H y (R.erase x₀) = degTo H y R

        A vertex outside the processed neighbourhood loses no apex.

        theorem BKLOK2.pot_step_mem_term {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } {F : Finset (Sym2 V)} {R : Finset V} {x₀ x y : V} {f : VV} (hx₀ : x₀ R) (hmap : anbhdIn H x₀ W, f a nbhdIn H x₀ W) (hinv : anbhdIn H x₀ W, f (f a) = a) (hq : 0 q) (hy : y nbhdIn H x W) (hy0 : y nbhdIn H x₀ W) :
        (1 + q) * (2 ^ usedCnt H W (F famEdges (involutionMatching (nbhdIn H x₀ W) f)) x y * (1 + q) ^ degTo H y (R.erase x₀)) 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R + if f y nbhdIn H x W then 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R else 0

        The term bound at a vertex of the neighbourhood being processed: one unit of used degree may be created, and the factor (1+q) released by deleting x₀ from the index set pays for it.

        theorem BKLOK2.pot_step_notMem_term {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {W : Finset V} {q : } {F : Finset (Sym2 V)} {R : Finset V} {x₀ x y : V} {f : VV} (hmap : anbhdIn H x₀ W, f a nbhdIn H x₀ W) (hinv : anbhdIn H x₀ W, f (f a) = a) (hq : 0 q) (hy : y nbhdIn H x W) (hy0 : ynbhdIn H x₀ W) :
        2 ^ usedCnt H W (F famEdges (involutionMatching (nbhdIn H x₀ W) f)) x y * (1 + q) ^ degTo H y (R.erase x₀) 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R

        The term bound away from the neighbourhood being processed: nothing changes there.

        theorem BKLOK2.sum_wgt_partner_eq {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (W : Finset V) (q : ) (F : Finset (Sym2 V)) (R' R : Finset V) (x₀ : V) (f : VV) :
        ynbhdIn H x₀ W, wgt H W q F R' R y (f y) = xR', ynbhdIn H x W with y nbhdIn H x₀ W, if f y nbhdIn H x W then 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R else 0

        Fubini for the partner weight. The mass the sweep pays at the processed apex is exactly the weight of the chosen involution.

        theorem BKLOK2.sum_sum_wgt_eq {V : Type u_1} [DecidableEq V] (H : Finset (Sym2 V)) (W : Finset V) (q : ) (F : Finset (Sym2 V)) (R' R : Finset V) (x₀ : V) :
        ynbhdIn H x₀ W, znbhdIn H x₀ W, wgt H W q F R' R y z = xR', (codegTo H x x₀ W) * ynbhdIn H x W with y nbhdIn H x₀ W, 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R

        The total weight, evaluated: each remaining apex contributes its codegree with x₀ times its own potential mass inside N_H(x₀, W).

        theorem BKLOK2.pot_step_mem_sum {V : Type u_1} [DecidableEq V] {β q : } (hq : 0 q) {H : Finset (Sym2 V)} {W R : Finset V} {x₀ : V} (hx₀ : x₀ R) {F : Finset (Sym2 V)} {f : VV} (hmap : anbhdIn H x₀ W, f a nbhdIn H x₀ W) (hinv : anbhdIn H x₀ W, f (f a) = a) (hbound : ynbhdIn H x₀ W, wgt H W q F (R.erase x₀) R y (f y) β * ynbhdIn H x₀ W, znbhdIn H x₀ W, wgt H W q F (R.erase x₀) R y z) (hcodeg : xR.erase x₀, β * (codegTo H x x₀ W) q) :
        xR.erase x₀, ynbhdIn H x W with y nbhdIn H x₀ W, 2 ^ usedCnt H W (F famEdges (involutionMatching (nbhdIn H x₀ W) f)) x y * (1 + q) ^ degTo H y (R.erase x₀) xR.erase x₀, ynbhdIn H x W with y nbhdIn H x₀ W, 2 ^ usedCnt H W F x y * (1 + q) ^ degTo H y R

        The half of the step inequality living inside the processed neighbourhood: this is where the spread clause and the codegree bound are consumed.

        theorem BKLOK2.pot_step {V : Type u_1} [DecidableEq V] {β q : } (hq : 0 q) {H : Finset (Sym2 V)} {W R : Finset V} {x₀ : V} (hx₀ : x₀ R) {F : Finset (Sym2 V)} {f : VV} (hmap : anbhdIn H x₀ W, f a nbhdIn H x₀ W) (hinv : anbhdIn H x₀ W, f (f a) = a) (hbound : ynbhdIn H x₀ W, wgt H W q F (R.erase x₀) R y (f y) β * ynbhdIn H x₀ W, znbhdIn H x₀ W, wgt H W q F (R.erase x₀) R y z) (hcodeg : xR.erase x₀, β * (codegTo H x x₀ W) q) :
        pot H W q (F famEdges (involutionMatching (nbhdIn H x₀ W) f)) (R.erase x₀) pot H W q F R

        The pessimistic estimator does not increase. Processing the apex x₀ with a matching chosen by the spread clause leaves the potential no larger.

        The sweep #

        theorem BKLOK2.spread_process {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {U W : Finset V} {q : } {s₁ s₂ : } (hq : 0 q) (hloop : eH, ¬e.IsDiag) (hUW : Disjoint U W) (hEven : xU, Even (nbhdIn H x W).card) (hmindeg : xU, vnbhdIn H x W, (nbhdIn H x W).card / 2 + s₂ + s₁ edeg (edgesIn H (nbhdIn H x W)) v) (hcodeg : xU, x'U, x x'(codegTo H x x' W) q * (s₂ + 1)) (R : Finset V) :
        RU∀ (F : Finset (Sym2 V)), pot H W q F R < 2 ^ (s₁ + 1) → ∃ (Mx : VFinset (Finset V)), (∀ xR, GoodMatching H W x (Mx x)) ((↑R).Pairwise fun (x y : V) => Disjoint (famEdges (Mx x)) (famEdges (Mx y))) xR, Disjoint (famEdges (Mx x)) F

        The sequential selection. The apices of R can be processed one at a time, each receiving a perfect matching of its neighbourhood avoiding all the edges used so far, as long as the potential stays below 2 ^ (s₁+1). The Dirac slack is split: s₁ absorbs the already used edges, and the remaining s₂ supplies the 1/(s₂+1)-spread matching of SimpleGraph.exists_spread_involution_of_edgeSet.

        theorem BKLOK2.exists_matchings_of_spread {V : Type u_1} [DecidableEq V] {H : Finset (Sym2 V)} {U W : Finset V} {q : } {s₁ s₂ : } (hq : 0 q) (hloop : eH, ¬e.IsDiag) (hUW : Disjoint U W) (hEven : xU, Even (nbhdIn H x W).card) (hmindeg : xU, vnbhdIn H x W, (nbhdIn H x W).card / 2 + s₂ + s₁ edeg (edgesIn H (nbhdIn H x W)) v) (hcodeg : xU, x'U, x x'(codegTo H x x' W) q * (s₂ + 1)) (hpot : pot H W q U < 2 ^ (s₁ + 1)) :
        ∃ (Mx : VFinset (Finset V)), (∀ xU, GoodMatching H W x (Mx x)) (↑U).Pairwise fun (x y : V) => Disjoint (famEdges (Mx x)) (famEdges (Mx y))

        Edge-disjoint perfect matchings of all the apex neighbourhoods, from the spread clause and a potential bound at the start of the sweep.