The evaluation's width is polynomial #
The clock of the wide machines compares a product: the evaluation is charged
a * b with a a width and b a number of rounds, and
DescriptiveComplexity.Draw.Data.nexTotal_lt_two_pow' asks for each factor
below 2 ^ (k * m). The rounds are bounded elsewhere: the VAL loop is an
increment chain, injective into the subsets of the registers it is supported
on. This file bounds the other factor, the width
DescriptiveComplexity.Draw.Data.ixLegWidth times the number of spine
positions.
Every layer's cost – an atom's, a matrix's, a gate block's, a round's, a
variable's machinery's, a leg's – is built from the widths the legs are charged
against and from the file's own numbers by addition and multiplication alone. So
each is polynomial in a single bound q on all of them, and the bound proved
here is q ^ 25: crude, and deliberately so, since what an instantiation has to
show is q ^ 25 ≤ 2 ^ (k * m) with q polynomial in the drawn universe and m
its size – room the exponent does not eat into.
The three combinators (add_le_pow, mul_le_pow, le_pow_of_le) are the whole
method: a sum of two things below q ^ i is below q ^ (i + 1) because q is
at least two, and a product adds the exponents. Written that way, each layer's
bound is one line per node of its defining expression. The target exponent of a
raised or constant bound is written explicitly, since neither the goal nor the
argument determines it.
Bounding a polynomial by a power #
A sum costs one exponent, both summands being below a power of a q
that is at least two.
Dependency graph
A product adds the exponents.
Dependency graph
A bound is a first power.
Dependency graph
Raising the exponent of a bound.
Dependency graph
A constant of the program is below every positive power, the bound being at least sixteen and every constant written in these costs at most that.
Dependency graph
The three shapes a layer of the tower is assembled in, stated over fresh naturals: the arithmetic is proved away from the machine's terms, as everything else in this budget pass is.
The shape of a round of the VAL loop: two loops and five dispatches.
Dependency graph
The shape of a gates' leg: one loop between two dispatches.
Dependency graph
The shape of a variable's machinery as one width: what it pays once, and what it pays per round of the VAL loop.
Dependency graph
One bound for every number a leg's cost is built from #
Every number the tower's costs are built from, below one bound. The four
widths the legs are charged against (w for a walk to a named register, wP
for a sweep of the file, wR for a reset, wK for a seek), the two
enumerations an atom loops over, and the dimensions and arities of the data. The
bound is asked to be at least sixteen so that the constants written into the
costs – the thirteen dispatches of a stage atom, the largest of them – are below
it too.
The bound dominates the constants the costs are written with.
A walk to a named register.
A sweep of the file.
A reset.
A seek.
The tuples an atom's comparison loops over.
The tuples an expansion's leaf loops over.
The width of an expansion's tag walk.
The width of an expansion's leaf walk.
The number of atoms of a variable's matrix.
The number of inner gates of a variable.
The number of outer gates of a variable.
The arity of a stage relation.
The number of positions of the spine.
Instances For
Dependency graph
The layers, bottom-up #
The read of an expansion is polynomial: the walk down the tags, then the
loop over the leaf's tuples. It is the body of an exp atom and of a gate
block alike.
Dependency graph
An atom's cost is polynomial, whatever its kind: a comparison, an expansion's read, or a stage atom's random access.
Dependency graph
A matrix's cost is polynomial: it is the largest of its atoms'.
Dependency graph
A gate block's cost is polynomial: a sweep of the file and an expansion's read.
Dependency graph
A loop over a gate block is polynomial: what a variable's gates leg and a round of the VAL loop both pay, at their own number of gates.
Dependency graph
A round of the VAL loop is polynomial: the inner gates and the matrix, each looped over once.
Dependency graph
The gates' leg of a variable is polynomial.
Dependency graph
A variable's machinery, as one width, is polynomial.
Dependency graph
The width the clock is handed is polynomial in the file's own numbers:
the spine's width, times its number of positions, is below q ^ 25 whenever q
bounds the four walk widths, the two enumerations, and the data's dimensions and
arities.
This is the first of the two factors the clocked evaluation is charged
(DescriptiveComplexity.Draw.Data.ixSpineCost_le_mul); the second is the
number of VAL rounds.
Dependency graph
The clocked evaluation's whole width is polynomial too: the spine's,
the output machinery's and the four joining steps, all below q ^ 26. What an
instantiation owes of the clock's first factor is therefore
q ^ 26 ≤ 2 ^ (k · m), and of the second the number of VAL rounds.