Documentation

Complexitylib.Classes.PCP.Internal.ZigZagTower

The zig-zag tower #

One graph of constant size generates an infinite family. Square a member — the degree becomes the fourth power of the base's, exactly the number of the base's vertices — and zig-zag with the base: the vertex count is multiplied by that same number while the degree drops back to the base's squared.

The spectral bookkeeping is what makes the recursion close. If the base has bound lam ≤ 1/5 and a member has bound 2/5, squaring gives 4/25 and the zig-zag estimate λ(G ⓩ H) ≤ λ(G) + λ(H) + λ(H)² gives at most 4/25 + 1/5 + 1/25 = 2/5, the invariant again.

Only the base is non-constructive; the recursion itself is an algorithm, which is why this yields an expander family a machine can build.

Main definitions #

Main results #

The seed of the tower: a graph whose vertices number the fourth power of its degree, with a spectral bound of at most a fifth.

  • base : RegGraph

    The graph itself.

  • card_eq : Fintype.card self.base.V = self.base.deg ^ 4

    Its vertices number the fourth power of its degree.

  • lam :

    Its spectral bound.

  • lam_nonneg : 0 self.lam

    The bound is nonnegative.

  • lam_le : self.lam 1 / 5

    And at most a fifth, which is what makes the recursion close.

  • spectral : self.base.SpectralBound self.lam

    The bound holds.

Instances For

    A member of the family: its degree is the base's squared, and its spectral bound is two fifths.

    Instances For

      Squaring a member makes its degree match the base's vertex count.

      noncomputable def Complexity.ZigZagBase.stepEquiv (B : ZigZagBase) (T : B.TowerStep) :
      B.base.V (T.graph.power 2).D

      So the base's vertices name the squared member's darts.

      Equations
      Instances For
        noncomputable def Complexity.ZigZagBase.towerSuccOf (B : ZigZagBase) (T : B.TowerStep) (e : B.base.V (T.graph.power 2).D) :

        One round of the tower, against a chosen naming of the base's vertices by the squared member's darts. The tower itself takes the arbitrary naming stepEquiv; an explicitly encoded tower supplies its own.

        Equations
        Instances For

          One round of the tower.

          Equations
          Instances For

            The first member: the base, squared.

            Equations
            Instances For
              noncomputable def Complexity.ZigZagBase.tower (B : ZigZagBase) :

              The tower.

              Equations
              Instances For
                theorem Complexity.ZigZagBase.order_tower (B : ZigZagBase) (k : ) :
                (B.tower k).graph.order = (B.base.deg ^ 4) ^ (k + 1)

                The sizes of the tower. Each round multiplies the vertex count by the base's vertex count, so the k-th member has (deg ^ 4) ^ (k + 1) vertices.

                theorem Complexity.ZigZagBase.exists_order_ge (B : ZigZagBase) (hd : 1 < B.base.deg) (n : ) :
                ∃ (k : ), n (B.tower k).graph.order

                The sizes grow, so every vertex count is eventually passed.