Read-once branching programs and the rectangle bound #
A layered read-once nondeterministic branching program reads the coordinates of an input
x : ι → U a few at a time: ∅ = X 0 ⊆ X 1 ⊆ ... ⊆ X T = ι. Its nodes at each layer are
states. An edge of step t joins a state at layer t to a state at layer t + 1 and is
labelled by an assignment to the coordinates X (t + 1) \ X t read during the step. An input is
accepted when some path from the start state at layer 0 to the accepting state at layer T
follows edges whose labels agree with the input. Each coordinate is read at exactly one step.
The program is unambiguous when every input has at most one accepting path; the rectangle
bound below does not need this.
Concatenation (IsAcceptingPath.splice). If accepting paths for x and y are in the same
state at layer t, following the first up to layer t and the second afterwards is an
accepting path for the input that agrees with x on X t and with y elsewhere. So the
chosen accepting paths form a sweep of the accepted set (ReadOnceNBP.sweep): the inputs whose
paths pass through a fixed state at layer t span a rectangle, for the cut X t, inside the
accepted set.
The rectangle bound (ncard_accepted_le_of_smallSides). Suppose that at every layer, the
inputs whose paths share a state have fewer than K distinct parts on one side of the cut, as
when the accepted set is K-rectangle-free (ncard_accepted_le). Then the program has at least
|accepted| / (K - 1) ^ 2 edges. This is the charging argument for the sweep of the program
(Sweep.ncard_le_mul_transitionCount): the transition an input takes at a step is read off the
edge its path takes there.
Peeling (abs_signedCount_accepted_le). In an unambiguous program the inputs whose paths
pass through a state are exactly a rectangle (Unambiguous.peers_eq_rectangle), and deleting
the state removes exactly them, leaving an unambiguous program (accepted_eraseNode). So while
some state has at least K distinct parts on both sides of its cut, its rectangle can be peeled
off; what remains has small sides and is counted by the rectangle bound. If S has bias at most
b on rectangles with both sides of size at least K, the accepted inputs in S and those
outside it then differ in number by at most 2 b |accepted| + (K - 1) ^ 2 · size. The peeling
argument is due to Sam McGuire.
Constraint networks laid out along a vertex ordering give such programs, whose states are the
values on the edges of a frontier (Cslib.Circuits.Frontier.Network.branchingProgram).
Main definitions #
Cslib.Circuits.Frontier.ReadOnceNBP ι U M: a layered read-once nondeterministic branching program with states inM.Cslib.Circuits.Frontier.ReadOnceNBP.accepted: its accepted inputs.Cslib.Circuits.Frontier.ReadOnceNBP.Unambiguous: every input has at most one accepting path.Cslib.Circuits.Frontier.ReadOnceNBP.size: its number of edges.Cslib.Circuits.Frontier.ReadOnceNBP.sweep: its chosen accepting paths, as a sweep of the accepted set.
Main results #
Cslib.Circuits.Frontier.ReadOnceNBP.IsAcceptingPath.splice: concatenation of accepting paths.Cslib.Circuits.Frontier.ReadOnceNBP.ncard_accepted_le_of_smallSides,Cslib.Circuits.Frontier.ReadOnceNBP.ncard_accepted_le: the rectangle bound.Cslib.Circuits.Frontier.ReadOnceNBP.abs_signedCount_accepted_le: peeling.
References #
A layered read-once nondeterministic branching program over inputs ι → U, with states
in M. Step t reads the coordinates in revealed (t + 1) \ revealed t.
- length : ℕ
The number of steps.
The coordinates read before layer
t.Nothing is read before the first layer.
Everything is read before the last layer.
A coordinate once read stays read.
- start : M
The start state, at layer
0. - accept : M
The accepting state, at the last layer.
Edge t m a m': an edge of steptjoins the statemat layertto the statem'at layert + 1, labelled by the valuesaof the coordinates read during the step.
Instances For
The coordinates read during step t, between layers t and t + 1.
Instances For
γ is an accepting path for the input x: it starts at the start state, ends at the
accepting state, and at each step follows an edge labelled by the values of x.
The path starts at the start state.
The path ends at the accepting state.
Each step follows an edge labelled by the values of
x.
Instances For
The accepted inputs: those with an accepting path.
Instances For
The program is unambiguous when every input has at most one accepting path: two accepting paths for the same input agree up to the last layer.
Instances For
The size of the program: its number of edges.
Instances For
A coordinate read at step s < t was read before layer t.
Concatenation. Let the accepting paths γ for x and δ for y be in the same state
at layer t. Following γ up to layer t and δ afterwards is an accepting path for any
input that agrees with x on the coordinates read before layer t and with y on the
others.
An accepting path for each accepted input, chosen once and for all.
Instances For
The chosen path of an accepted input is an accepting path.
The edge that the chosen path of x takes at step t.
Instances For
The sweep of a program: the message of an accepted input at time t is the state of
its chosen accepting path at layer t. Inputs in the same state splice by concatenation of
their paths, and all paths end in the accepting state.
Instances For
The peers of x at layer t are the accepted inputs whose chosen paths are in the same
state as that of x.
The rectangle bound #
At every layer, the inputs sharing the state of an accepted input have fewer than K
distinct parts on one side of the cut.
Instances For
A rectangle-free accepted set has small sides.
Small sides force K > 1 once some input is accepted: at the first layer both sides of an
accepted input are nonempty.
The transitions of the sweep of a program are read off the edges taken by the chosen paths, so there are no more of them than edges.
The rectangle bound. If at every layer the inputs sharing the state of an accepted
input have fewer than K distinct parts on one side of the cut, the program has at least
|accepted| / (K - 1) ^ 2 edges.
The rectangle bound for rectangle-free sets. A read-once branching program whose
accepted set is K-rectangle-free has at least |accepted| / (K - 1) ^ 2 edges.
Peeling large rectangles #
The program with the state m deleted from layer t: no edge enters or leaves it.
Instances For
The accepting paths of the program with a state deleted are those avoiding it.
In an unambiguous program, deleting a state removes exactly the inputs whose paths pass through it.
In an unambiguous program, the inputs whose paths share a state are exactly the rectangle spanned by their parts.
Peeling. Let S have bias at most b ≥ 0 on rectangles with both sides of size at
least K. Then the accepted inputs of an unambiguous program that lie in S and those that do
not differ in number by at most 2 b |accepted| + (K - 1) ^ 2 · size.
While the inputs sharing some state have at least K distinct parts on both sides of its cut,
they form such a rectangle, and deleting the state removes exactly them and leaves an
unambiguous program. When no such state is left, the rectangle bound counts the remaining
inputs. The argument is due to Sam McGuire.