Documentation

Complexitylib.Classes.PCP.Internal.Preprocess

Preprocessing, assembled #

Dinur's powering step needs its input to be regular, to be an expander, and to carry a self-loop at every vertex. preprocess produces all three from an arbitrary constraint graph, by composing the three steps already built:

preprocess G E = ((G.reduce E).expanderize E).addLoops

Each step costs only a constant factor of the value and none of them can turn an unsatisfiable system satisfiable, so the composite is a gap-preserving reduction with a constant of its own, preprocessConst.

Degrees compose transparently: degree reduction gives 1 + E.degree, expanderizing adds E.degree, and the loops add one, for a final degree of 2 + 2 · E.degree — a constant, as the amplification bookkeeping requires. The size is a constant multiple of the original too: the vertex set is fixed by the last two steps, so it stays the 2 · numEdges half-edges of the first.

Main definitions #

Main results #

@[reducible, inline]

The darts of a preprocessed system: the self-loop, the edge-link, the cloud's and the expander's. Naming the type outright — rather than leaving it as the composite the construction produces — keeps it independent of the graph.

Equations
Instances For

    Degree reduction, then expanderizing, then adding self-loops, with the dart type named.

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

      It is the composite it is built from.

      @[instance_reducible]

      The preprocessed system's vertices are the half-edges, which are numbered by their edge and their side.

      Equations
      • One or more equations did not get rendered due to their size.
      @[instance_reducible]

      Its darts are the self-loop, the edge-link, the cloud-links and the expander's edges, in that order.

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

      The self-loops of the preprocessed system.

      Equations
      Instances For

        The constant factor preprocessing costs.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem Complexity.ConstraintGraph.unsatVal_preprocess_eq {α : Type} [DecidableEq α] (G : ConstraintGraph α) (E : ExpanderFamily) [Fintype α] [Nonempty α] :
          (G.preprocess E).unsatVal = (G.reduce E).unsatVal * ↑(1 + E.degree) / (↑(1 + E.degree) + E.degree) * ↑(1 + 2 * E.degree) / (↑(1 + 2 * E.degree) + 1)

          The value after the two trivial-constraint steps, as a multiple of the value after degree reduction.

          The spectral bound #

          The spectral bound preprocessing achieves.

          Equations
          Instances For