Sweeping a program with a ledger #
Let the special gates of a program p have a ledger in M, and let p accept the inputs whose
value at a wire o lies in a set Acc. Erase the special gates. A wire is live
(Frontier.Live) if it is an input or an ordinary gate of positive arity; the others are
constants of the erased program, among them the constants replacing the special gates. The
live circuit (Frontier.liveCircuit) is the erased program with every live wire as an output.
For a guess m ∈ M, the constraint network of the live circuit accepting every value
(Frontier.Ledger.network) is satisfied exactly by the run with guess m. Its graph and its
sites do not depend on m: they make up the live network (Frontier.liveNetwork), which has no
constraints and serves for the frontiers, components and inputs read of every guess.
The ledger sweep (Frontier.Ledger.sweep) is the sweep along a layout of the live network
(Frontier.Network.frontierSweep) whose extra message has two parts: the product m of the
contributions of the true run (its consistent guess) and the product of the contributions of the
wires whose vertices come first (the ledger so far). Two inputs with the same message can be
spliced (Frontier.Ledger.mem_of_splice): the network with guess m splices their runs (the
separator lemma); the two parts of the ledger multiply back to m, because the constant wires
contribute the same for every input; and a consistent guess yields the true run.
Transitions. The extra messages take at most |M| ^ 3 pairs of values at each step
(Frontier.Ledger.ncard_extra_le). Inside a closed set of vertices W, the values of the run on
the edges at W depend only on the guess and the inputs read in W
(Frontier.Ledger.run_eq_of_eqOn_readIn), so the transitions inside W are bounded by the
inputs that W reads, however wide the layout is there. Along a layout of the components one
after another, some step therefore bounds the accepted set both by its width and by the inputs of
its component (Frontier.Ledger.exists_ncard_le).
Main definitions #
Cslib.Circuits.Frontier.Live: the live wires of a program with erased special gates.Cslib.Circuits.Frontier.liveCircuit: the erased program with every live wire as an output.Cslib.Circuits.Frontier.liveNetwork: its graph and sites, as a network without constraints.Cslib.Circuits.Frontier.Ledger.network: its constraint network on a guess.Cslib.Circuits.Frontier.Ledger.sweep: the sweep of a program with a ledger.
Main results #
Cslib.Circuits.Frontier.Ledger.mem_of_splice: splicing two inputs with the same message.Cslib.Circuits.Frontier.Ledger.run_eq_of_eqOn_readIn: locality inside a closed set.Cslib.Circuits.Frontier.Ledger.ncard_transition_le_width,Cslib.Circuits.Frontier.Ledger.ncard_transition_le_readIn: transitions by width and by the inputs read in a closed set.Cslib.Circuits.Frontier.Ledger.exists_ncard_le: counting along a layout of the components.
The live circuit #
A wire is live, once the special gates of p are erased, when it is an input or an
ordinary gate of positive arity. The other wires are constants of the erased program: the
constants replacing the special gates and the gates of arity zero.
Instances For
The live circuit: the program p with its special gates erased, and with every live wire
as an output.
Instances For
The live network: the graph of the live circuit and the sites of its inputs, without
constraints. It does not depend on a ledger or a guess; its frontiers, components and inputs read
are those of the network of the live circuit on every guess (Frontier.Ledger.network).
Instances For
The live wires are signals of the live circuit.
The inputs are signals of the live circuit.
The inner gates of the live circuit are the ordinary inner gates.
There are at most n + s' live wires, where s' counts the ordinary inner gates.
The live network reads every input.
When there are inputs, the graph of the live circuit has a vertex.
The wires whose vertices lie in P.
Instances For
The constraint network of the live circuit on the guess m, accepting every value. Its
satisfying assignments are the runs with guess m. Its graph and its sites are those of the live
network, whatever the guess.
Instances For
The run with guess m satisfies the network on the guess m.
A satisfying assignment of the network on the guess m is the run with guess m.
A wire that is not a signal of the live circuit is a constant of the erased program, so its value in a run depends only on the guess.
Splicing #
Splicing two inputs with the same message. Let x and y be inputs whose value at the
wire o lies in Acc. If their runs have the same consistent guess, the same ledger on the
wires of a set of vertices P, and the same values on the edge cut of P, then every input z
that reads like x at P and like y elsewhere has its value at o in Acc as well.
Locality inside a closed set. For a fixed guess, the values of the run on the edges at a
closed set of vertices W depend only on the inputs read in W.
The sweep #
The extra message at time t: the consistent guess and the ledger of the first t
vertices. After the last vertex it is trivial.
Instances For
The sweep of a program with a ledger, along a layout of its live network: the frontier sweep of the values of the run, whose extra message is the guess and the ledger so far.
Instances For
The extra messages take at most |M| ^ 3 pairs of values at each step.
Transitions by width. A transition is determined by the guess, the two ledgers, the values on the two frontiers, and the input read at the vertex processed.
Transitions inside a closed set. If the vertex processed at step t lies in a closed
set W whose edges contain both frontiers of the step, a transition is determined by the guess,
the two ledgers, and the inputs read in W.
At the last step the transition is determined by the guess and the two ledgers, since every input is read.
Counting along a layout of the components. Suppose that, at each step of a layout, the
frontiers lie among the edges of the component of the vertex processed. Then some step t
bounds the set accepted by p by (K - 1) ^ 2 (|V| + 1) |M| ^ 3 q ^ e, where q = |U| and the
exponent e is the smaller of the width of the step (the two frontiers and the input read) and
the number of inputs read in the component of the vertex processed.