Proofs for multiplication in coordinates #
Write X(u) = ∑ j, u j • b j for the element with coordinates u, and split the 2 n inputs
into the coordinates x of the first factor (xCoords) and y of the second (yCoords).
- Fixing one factor. With the second factor fixed to
Y = X(y₀), the product changes byshiftLeft b y₀ d = b.repr (X(d_x) * Y)when the input changes byd(fieldMul_sub_left), and symmetrically with the first factor fixed (fieldMul_sub_right). So the kernel form of the restricted rank-cut bound (card_pow_le_supportedKernel_of_trace) applies on these slices. - Averaging the fixed factor. For
Pwithin the first factor and rowsQ, summing the kernelsupportedKernel (shiftLeft b y₀) P Qover ally₀counts the pairs(d, y₀). The vectord = 0lies in every kernel; ford ≠ 0the elementX(d_x)is nonzero, soY ↦ X(d_x) * Yis a bijection and exactly|F| ^ (n - |Q|)valuesy₀putdin the kernel (card_filter_shiftLeft_eq). The sum is at most|F| ^ n + |F| ^ (|P| + n - |Q|)(sum_card_supportedKernel_le), at most2 |F| ^ nwhen|P| ≤ |Q|; with two blocks, somey₀makes both kernels number at most4together (exists_card_add_card_le_four). - The cut bound (
le_add_two_of_trace). A split holdingainputs of the first factor andn - aoutputs has two blocks with|P| = |Q|, so|F| ^ n ≤ |F| ^ (|A| + |B|) · 4andn ≤ |A| + |B| + 2. - One component (
mem_component_of_trace). The component of an output is closed, so both kernels are full on it (apply_eq_zero_of_closed_of_trace). Sinceb j * ((b j)⁻¹ * b i) = b i, a suitable fixed factor makes any block with a column and a row nonzero; so the component holds every input of either factor and every output. - Distinct terminals (
terminal_injective). The outputs are distinct wires (fixy = 1), and none is an input of the first factor (fixy = 0). So the number of first-factor inputs and outputs in a prefix grows by at most one per wire, and a prefix ending at one of them holds exactlyn. Charging it to the component holding all2 ninputs givesn - 2 ≤ (A + η) (s - 2 n)⁺ + 3 log₂ (2 n + 3 s) + C(sub_two_le_of_trace), and the asymptotic(2 + 1/A - ε) nbound follows as for totally regular maps.
The two factors #
The inputs holding the coordinates of the first factor.
Equations
Instances For
The inputs holding the coordinates of the second factor.
Equations
Instances For
The first-factor inputs placed in S, as coordinates of all inputs.
Fixing one factor #
Multiplication in coordinates multiplies.
The change of the product when the input changes by d and the second factor has the
coordinates y₀.
Equations
- Algebraic.Cutwidth.MultiOutput.Internal.shiftLeft b y₀ d = b.equivFun ((b.equivFun.symm fun (j : Fin n) => d (Fin.castAdd n j)) * b.equivFun.symm y₀)
Instances For
The change of the product when the input changes by d and the first factor has the
coordinates x₀.
Equations
- Algebraic.Cutwidth.MultiOutput.Internal.shiftRight b x₀ d = b.equivFun (b.equivFun.symm x₀ * b.equivFun.symm fun (j : Fin n) => d (Fin.natAdd n j))
Instances For
With the second factor fixed, the product changes by shiftLeft.
With the first factor fixed, the product changes by shiftRight.
Every block entry can be made nonzero: with the second factor (b j)⁻¹ * b i, the unit
vector on the first-factor input j shifts output i by one.
With the first factor b i * (b j)⁻¹, the unit vector on the second-factor input j
shifts output i by one.
Averaging the fixed factor #
For a vector d whose first-factor part is a nonzero element, exactly |F| ^ |Qᶜ| second
factors put it in the kernel on the rows Q.
Averaging over the fixed factor. For P within the first factor, the kernels on P
and Q number at most |F| ^ n + |F| ^ |P| · |F| ^ |Qᶜ| in total over all second factors.
When |P| ≤ |Q|, the kernels number at most 2 |F| ^ n in total.
Some fixed factor makes two kernels small. If |P₁| ≤ |Q₁| and |P₂| ≤ |Q₂|, some
second factor makes the two kernels number at most 4 together.
The cut bound #
The cut bound for multiplication. If the wires out of a program carry fieldMul b,
every split holding a inputs of the first factor and n - a outputs is crossed by at least
n - 2 signals.
One component and distinct terminals #
All inputs and outputs lie in one component. If the wires out of a program carry
fieldMul b and n ≥ 1, the component of the first output contains every input and every
output.
A program carrying fieldMul b carries distinct outputs on distinct wires: with the second
factor 1, the outputs are the coordinates of the first factor.
No output of a program carrying fieldMul b is an input of the first factor: with the
second factor 0, every output is zero.
The terminals: the inputs of the first factor, then the outputs.
Equations
- Algebraic.Cutwidth.MultiOutput.Internal.terminal out = Sum.elim (fun (j : Fin n) => Cslib.Circuits.Wire.input (Fin.castAdd n j)) out
Instances For
Distinct terminals lie on distinct wires.
Counting terminals splits into first-factor inputs and outputs.
The finite bound #
The finite bound for multiplication. A fan-in-two program over any signature whose
wires out carry fieldMul b has n - 2 ≤ (A + η) (s - 2 n)⁺ + 3 log₂ (2 n + 3 s) + C.
Asymptotics #
The asymptotic bound for multiplication with a general ordering coefficient.