Native multiplication columns #
The contributing rows of column j are encoded by the bits x[t] ∧ y[j-t]. This word is
always at most x, so it fits in every canonical universe containing x, not only universes
whose size is a power of two. Native Bit Sum counts the rows, and PLUS checks the exact carry
equation without modular overflow.
Main definitions #
Cslib.Logic.FO.Ordered.Multiplication.columnWord: the bitwise column formula.Cslib.Logic.FO.Ordered.Multiplication.columnCount: the exact column count.Cslib.Logic.FO.Ordered.Multiplication.carryStep: one nonmodular carry equation.
Main results #
Cslib.Logic.FO.Ordered.Multiplication.realize_columnCount: exact column-count semantics.Cslib.Logic.FO.Ordered.Multiplication.realize_carryStep: exact bounded carry semantics.
References #
- N. Immerman, Descriptive Complexity, Theorem 1.17(1) and Lemma 1.18. The Bit Sum Lemma is due to Barrington, Immerman and Straubing [BIS90]. The carry equation is a variant of the source's short sums.
A word marking the input bits contributing to one multiplication column.
Instances For
Native Bit Sum counts the contributing rows of a column.
Instances For
One exact carry equation. All addition and doubling witnesses must fit in the universe.
Instances For
columnCount L x y j a holds exactly when a is the number of rows contributing to column
j of the product of x and y (BitString.mulColumn).
carryStep L x y z i c c' holds exactly when the carry c into column i plus its column
count is bit i of z plus twice the outgoing carry c', and that sum fits in the universe.