unnormalized_lagrange_evals

Function unnormalized_lagrange_evals 

Source
fn unnormalized_lagrange_evals<'a, F: FftField, ChallengeTerm, Challenge: Index<ChallengeTerm, Output = F>, Environment: ColumnEnvironment<'a, F, ChallengeTerm, Challenge>>(
    l0_1: F,
    i: i32,
    res_domain: Domain,
    env: &Environment,
) -> Evaluations<F, Radix2EvaluationDomain<F>>
Expand description

Compute the evaluations of the unnormalized lagrange polynomial on H_8 or H_4. Taking H_8 as an example, we show how to compute this polynomial on the expanded domain.

Let H = < omega >, |H| = n.

Let l_i(x) be the unnormalized lagrange polynomial, (x^n - 1) / (x - omega^i) = prod_{j != i} (x - omega^j)

For h in H, h != omega^i, l_i(h) = 0. l_i(omega^i) = prod_{j != i} (omega^i - omega^j) = omega^{i (n - 1)} * prod_{j != i} (1 - omega^{j - i}) = omega^{i (n - 1)} * prod_{j != 0} (1 - omega^j) = omega^{i (n - 1)} * l_0(1) = omega^{i n} * omega^{-i} * l_0(1) = omega^{-i} * l_0(1)

So it is easy to compute l_i(omega^i) from just l_0(1).

Also, consider the expanded domain H_8 generated by an 8nth root of unity omega_8 (where H_8^8 = H).

Let omega_8^k in H_8. Write k = 8 * q + r with r < 8. Then omega_8^k = (omega_8^8)^q * omega_8^r = omega^q * omega_8^r

l_i(omega_8^k) = (omega_8^{k n} - 1) / (omega_8^k - omega^i) = (omega^{q n} omega_8^{r n} - 1) / (omega_8^k - omega^i) = ((omega_8^n)^r - 1) / (omega_8^k - omega^i) = ((omega_8^n)^r - 1) / (omega^q omega_8^r - omega^i)