Skip to main content

tensor_prod_eq_ind

Function tensor_prod_eq_ind 

Source
pub fn tensor_prod_eq_ind<Cube: Hypercube, P: PackedField>(
    values: FieldBuffer<P, Vec<P>>,
    extra_query_coordinates: &[P::Scalar],
) -> FieldBuffer<P, Vec<P>>
Expand description

Tensor of values with the equality indicator evaluated at extra coordinates.

Take n values and the k coordinates r = (r_0, ..., r_{k-1}). The result is the tensor product of those values with the basis at every coordinate:

v (x) b(r_0) (x) ... (x) b(r_{k-1})

It holds 2^(n + k) coefficients, one variable added per coordinate.

Read as polynomials, the input holds an n-variate multilinear f. The output then holds the (n + k)-variate multilinear

g(X_0, ..., X_{n+k-1}) = f(X_0, ..., X_{n-1}) * eq(X_n, ..., X_{n+k-1}, r)

Appending the coordinate r doubles the length, turning every value v into a pair:

before   [ v_0            v_1            ]
after    [ v_0 * b_0(r)   v_1 * b_0(r)   |   v_0 * b_1(r)   v_1 * b_1(r) ]

The two halves sit one after the other, so the appended variable is the highest indexed one.