Documentation

Complexitylib.Classes.PCP.Internal.ExpanderPad

Relabelling darts and padding with loops #

Two bookkeeping operations on regular graphs, both preserving the spectral bound in an explicit way.

Main definitions #

Main results #

Relabelling #

def Complexity.RegGraph.relabel (G : RegGraph) {D' : Type} [DecidableEq D'] [Fintype D'] (e : G.D D') :

The same graph with its darts renamed along e.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem Complexity.RegGraph.order_relabel (G : RegGraph) {D' : Type} [DecidableEq D'] [Fintype D'] (e : G.D D') :
    theorem Complexity.RegGraph.deg_relabel (G : RegGraph) {D' : Type} [DecidableEq D'] [Fintype D'] (e : G.D D') :
    (G.relabel e).deg = G.deg
    theorem Complexity.RegGraph.step_relabel (G : RegGraph) {D' : Type} [DecidableEq D'] [Fintype D'] (e : G.D D') (f : G.V) (v : G.V) :
    (G.relabel e).step f v = G.step f v
    theorem Complexity.RegGraph.spectralBound_relabel (G : RegGraph) {D' : Type} [DecidableEq D'] [Fintype D'] (e : G.D D') {lam : } (h : G.SpectralBound lam) :

    Padding with loops #

    The graph with k self-loops added at every vertex.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Complexity.RegGraph.step_padLoops (G : RegGraph) (k : ) (f : G.V) (v : G.V) :
      (G.padLoops k).step f v = (G.deg * G.step f v + k * f v) / (G.deg + k)
      theorem Complexity.RegGraph.spectralBound_padLoops (G : RegGraph) (k : ) {lam : } (h : G.SpectralBound lam) :
      (G.padLoops k).SpectralBound ((G.deg * lam ^ 2 + k) / (G.deg + k))

      Padding keeps the bound, with μ² = α λ² + (1 - α) for α the fraction of real darts.

      Renaming vertices #

      The same graph with its vertices renamed along e. Constructions produce structured vertex types — products, sums — while a family wants Fin n.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem Complexity.RegGraph.deg_relabelV (G : RegGraph) {V' : Type} [DecidableEq V'] [Fintype V'] (e : G.V V') :
        (G.relabelV e).deg = G.deg
        theorem Complexity.RegGraph.step_relabelV (G : RegGraph) {V' : Type} [DecidableEq V'] [Fintype V'] (e : G.V V') (f : V') (v : V') :
        (G.relabelV e).step f v = G.step (fun (w : G.V) => f (e w)) (e.symm v)
        theorem Complexity.RegGraph.spectralBound_relabelV (G : RegGraph) {V' : Type} [DecidableEq V'] [Fintype V'] (e : G.V V') {lam : } (h : G.SpectralBound lam) :

        Numbering both types #

        The same graph with its vertices numbered Fin order and its darts Fin deg. Constructions build structured types; the merge and the expander families want numbered ones.

        Equations
        Instances For
          noncomputable def Complexity.RegGraph.toFinFormOf (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) :

          The same graph numbered at sizes supplied by the caller, so that the rotation map has the literal type Fin N × Fin d → Fin N × Fin d a numeric construction expects, with no transport at the use site.

          Equations
          Instances For
            theorem Complexity.RegGraph.toFinFormOf_V (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) :
            (G.toFinFormOf N d hN hd).V = Fin N
            theorem Complexity.RegGraph.toFinFormOf_D (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) :
            (G.toFinFormOf N d hN hd).D = Fin d
            @[simp]
            theorem Complexity.RegGraph.order_toFinFormOf (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) :
            (G.toFinFormOf N d hN hd).order = N
            @[simp]
            theorem Complexity.RegGraph.deg_toFinFormOf (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) :
            (G.toFinFormOf N d hN hd).deg = d
            theorem Complexity.RegGraph.spectralBound_toFinFormOf (G : RegGraph) (N d : ) (hN : Fintype.card G.V = N) (hd : Fintype.card G.D = d) {lam : } (h : G.SpectralBound lam) :
            (G.toFinFormOf N d hN hd).SpectralBound lam

            Its vertices are literally numbered.

            And so are its darts.