Binary multiplication columns and carries #
Each multiplication column is a bitwise subword of the first input. Its number of set bits is the column's unnormalized coefficient. The weighted coefficients sum to the ordinary product; bounded carries normalize them to the product bits.
Main definitions #
Cslib.BitString.mulColumnWord: the contributing rows of one multiplication column.Cslib.BitString.mulColumn: its number of contributing rows.Cslib.BitString.mulPrefix: the weighted sum∑ j < k, mulColumn x y j * 2 ^ jof the columns belowk.Cslib.BitString.mulCarry: the actual carry entering a column.
Main results #
Cslib.BitString.mulColumnWord_le: each column word fits wherever the first input fits.Cslib.BitString.mulCarry_add_column: the exact arithmetic carry equation.Cslib.BitString.mul_eq_of_columns: zero-ended exact carry equations determine multiplication.
References #
- N. Immerman, Descriptive Complexity, Theorem 1.17(1) and Lemma 1.18. This carry formulation supports a packed-block variant of the source's short-sum proof.
The set bits record exactly the rows contributing to column j.
Instances For
A column word is a subword of the first input, including in non-power-of-two universes.
The unnormalized coefficient of 2^j in binary multiplication.
Instances For
The weighted contribution of all columns strictly below k.
Instances For
The carry entering column k, constructed from the actual lower columns.
Instances For
No carry enters column 0.
Any exact zero-ended carry sequence determines ordinary multiplication.
Blocks sharing their endpoint carries determine multiplication. The boundary sequence is global, while the interior witnesses may be chosen separately for every block.