The starting graph, written out #
BaseAlg reads the starting graph's numbers straight off a formula, which is
all a verifier needs. Amplification needs more: the graph itself, as a string
the round function can consume. This module writes it, reusing that module's
readers.
An edge's constraint depends on the formula only through the three signs of its
clause and which of the three positions the edge checks — twelve bits in all.
That is what baseCodeKey extracts and relOfSigns turns back into a
constraint, so the constraint's code is written by a table lookup.
Main definitions #
Complexity.relOfSigns— an edge's constraint, as a function of the signsComplexity.baseCodeKey— the bounded data an edge's constraint depends onComplexity.baseGraphFn— the starting graph, as a string
Main results #
Complexity.rel_baseCSP— the constraint depends only on the signsComplexity.baseGraphFn_mem_FP— writing the graph is polynomial-timeComplexity.baseGraphFn_eq— it writes the right graph
The constraint, from the signs alone #
The constraint of an edge that checks position p of a clause whose three
literals have signs s: both endpoints name triples in the image of the
alphabet embedding, the first satisfies the clause, and the two agree on the
checked position.
Equations
Instances For
The key #
The data an edge's constraint depends on: the clause's three signs and which of them the edge reads.
Equations
Instances For
The constraint's code, from the key #
The constraint an edge's key stands for.
Equations
- Complexity.baseRelOfKey k = Complexity.relOfSigns (fun (q : Fin 3) => (Complexity.pairFst k).getD (↑q) false) ⟨(Complexity.pairSnd k).length % 3, ⋯⟩
Instances For
The constraint's code, in unary, from the key.
Equations
Instances For
The counts #
The number of vertices, in unary: one per variable, one per clause.
Equations
- Complexity.baseVertsU E z = Complexity.marks (Complexity.baseMaxU E z) ++ [true] ++ Complexity.divC 3 (Complexity.baseEdgesU E z)
Instances For
The endpoints #
The graph #
Padded to a fixed size #
The code of the constraint that is always true, in unary.
Equations
- Complexity.trivCode = List.replicate (Complexity.codeOfRel fun (x x_1 : Complexity.GapAlpha) => true) true
Instances For
The starting graph, padded: the edge count is whatever padU says, so it
can be made to depend on the input's length alone.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The rule writes the padded starting graph.