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 #
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.
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.