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 #
ConstraintGraph.preprocess— the compositeConstraintGraph.preprocessLoops— its self-loopsConstraintGraph.preprocessConst— the constant factor it costs
Main results #
ConstraintGraph.deg_preprocess,order_preprocessConstraintGraph.satisfiable_preprocess_of_satisfiable— completenessConstraintGraph.le_unsatVal_preprocess— soundness, with a constant factorConstraintGraph.spectralBound_preprocess— the result is an expander, with a bound strictly below one
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.
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.
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.
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
- G.preprocessLoops E = ((G.reduce E).expanderize E).graph.addLoopsLoops
Instances For
Completeness.
The constant factor preprocessing costs.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The value after the two trivial-constraint steps, as a multiple of the value after degree reduction.
Soundness of preprocessing.
The spectral bound #
The spectral bound preprocessing achieves.
Equations
Instances For
The preprocessed system is an expander.