TIMES from BSUM: multiplication of ranks, in the bit logic #
The last step of Immerman 1999 Thm 1.17(1), and the
one the textbook leaves entirely to the reader: with the Bit Sum Lemma in hand
(DescriptiveComplexity.BitSum.PopAll), define orank x * orank y = orank z
in FO(≤, BIT). The design gap it closes is recorded in the module docstring
of DescriptiveComplexity.LogTime.BitSum.Columns; the certificate here has
three layers, each guessed and pinned locally, none ever computing a product:
- A column (
DescriptiveComplexity.BitSum.ColCount): the word whose ones are the pairs of set bits ofxandymeeting at one column – a sub-mask ofy, read off bit by bit – counted by the Bit Sum Lemma. - A range of columns (
DescriptiveComplexity.BitSum.RangeSum): the weighted sumΣ_t c_{a+t} 2 ^ tof the columns[a, e), certified by a carry chain: the remainders of the column-by-column addition, packed one field per column into a single element, walked with the boundary set and the counter ofLogTime/BitSum/BlocksandCounter, each step oneDescriptiveComplexity.BitSum.StepEq– an addition and a bit of the result. - The product (
DescriptiveComplexity.BitSum.TimesCert): cut the columns into blocks ofgwith2 ^ g > P, so a block sum has2 gbits and the fields of the even (resp. odd) blocks tile an element exactly; one guessed element per parity, their windows certified byRangeSum, a tail from the last boundary to the top of the tape, and two additions put the product together. A no-overflow clause makes the columns end below the top, which is what confines the whole sum to the tape.
Soundness holds for whatever is guessed
(DescriptiveComplexity.BitSum.rangeSum_sound takes no size hypothesis), the
sizes are paid once in the completeness half
(DescriptiveComplexity.BitSum.timesCert_of_eq, above the threshold of
LogTime/BitSum/Sizes), and DescriptiveComplexity.BitSum.bitDef_times
discharges the threshold with DescriptiveComplexity.BitDef.of_large. The
result, DescriptiveComplexity.timesBitDef, is consumed in
LogTime/Translate.lean, where it closes AC⁰ = FO(≤, BIT) – the machine
model is AC⁰.
Two more sizes #
The carry chains fit on the tape: a chain has at most 4 · lvl1Block
fields (a block, or the tail, which is at most two blocks and change) of
lvl1Block bits each, and that is far below the top position.
Dependency graph
Two positions' worth of sums fit in the universe: what lets the local additions of a carry chain always name their result.
Dependency graph
The universe is not bigger than its positions can address.
Dependency graph
One column #
The word of one column: the bit of w at i says that y has a one
at i and x a one at the index completing i to j. Stated bit by bit,
with the complement named by an addition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What the column word is worth: exactly
DescriptiveComplexity.BitSum.colWordN of the ranks.
Dependency graph
The column word exists: it is a sub-mask of y, hence a rank.
Dependency graph
The count of one column: the column word, counted by the Bit Sum Lemma.
Equations
- DescriptiveComplexity.BitSum.ColCount x y j n = ∃ (w : A), DescriptiveComplexity.BitSum.ColWord x y j w ∧ DescriptiveComplexity.BitSum.PopAll w n
Instances For
Dependency graph
What the column count is worth – with no condition at all, the Bit Sum Lemma's soundness being unconditional.
Dependency graph
Every column can be counted, above the threshold of the Bit Sum Lemma.
Dependency graph
One step of a carry chain #
One step of the carry chain: the incoming remainder plus the column
count equals twice the outgoing remainder plus the bit of V at t – stated
with the sum and the double as guessed elements, so that it is two additions,
a bit read and a successor.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
What a step says, read on the ranks.
Dependency graph
A true step is a certificate step, as soon as the two intermediate sums are small enough to be ranks.
Dependency graph
A range of columns, by a guessed carry chain #
The sum of the columns [a, e), certified: a gap, its boundary set and
counter, and one element R carrying the remainders of the column-by-column
addition, one field per column. The base pins the first column against the
lowest bit of V; the step, guarded by the room it needs, pins each next
column against the next bit, the counter naming the column; and the top names
the field of the last column and reads it as the bits of V above the range –
with nothing beyond them.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The certificate is sound, whatever was guessed: the chain equations,
walked from the first column, force V to be the weighted sum of the columns
of the range – with no size hypothesis at all.
Dependency graph
The certificate exists, for the true sum: with any gap wide enough to
hold a column count in one field and short enough for the chain to fit on the
tape, the remainders of DescriptiveComplexity.BitSum.carryChain are packed
into one element and every condition holds by the corresponding chain
equation.
Dependency graph
The product #
The whole certificate for orank x * orank y = orank z: the columns of
the schoolbook product, cut into blocks at a guessed gap; the block sums of the
even blocks written in the tiling fields of one element, those of the odd
blocks in another, each field certified by a carry chain; the columns from the
last boundary to the top of the tape as one more range; and two additions
putting the three parts together. The no-overflow clause keeps every column on
the tape, which is what makes the three parts everything there is.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dependency graph
The certificate is sound: above the threshold, whatever was guessed, the three parts assemble to the product of the ranks.
Dependency graph
The certificate exists for the product: the gap of
LogTime/BitSum/Sizes, the boundaries of the even/odd split at twice that gap,
a last boundary two blocks and change below the top, the block sums packed by
DescriptiveComplexity.BitSum.packVal, and the tail; every window is a field
of a packing and every range is DescriptiveComplexity.BitSum.rangeSum_of_eq.
Dependency graph
The multiplication of ranks, characterized: above the threshold, the certificate holds exactly for the products.
Dependency graph
Definability #
The successor of a rank is first-order in the bit logic: one guessed element of rank one.
Dependency graph
The column word is a formula: one universal index, one addition, three bit reads.
Dependency graph
The column count is a formula: the column word, handed to the Bit Sum Lemma.
Dependency graph
A chain step is a formula: two additions, a successor, a bit read and an equality, under two guessed intermediate sums.
Dependency graph
A range of columns is a formula: the boundary set, the counter, the
packed chain, and the three conditions – each a block of quantified indices
over windows, the counts entering through
DescriptiveComplexity.BitSum.bitDef_colCount.
Dependency graph
The whole certificate is a formula: eleven guessed elements and the conditions, every one of them built from the pieces above.
Dependency graph
Multiplication of ranks is bit-definable – the missing half of
Immerman 1999 Thm 1.17(1), assembled: the
certificate is a formula, it characterizes the products above the threshold,
and DescriptiveComplexity.BitDef.of_large absorbs the threshold, the
relation being numeric. Stated first on three named variables, then relabeled
to any layout.