diff --git a/src/field/extension_field/algebra.rs b/src/field/extension_field/algebra.rs index 1cddb4c1..004e8dc1 100644 --- a/src/field/extension_field/algebra.rs +++ b/src/field/extension_field/algebra.rs @@ -3,7 +3,7 @@ use std::fmt::{Debug, Display, Formatter}; use std::iter::{Product, Sum}; use std::ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign}; -/// Let `F_D` be the extension `F[X]/(X^D-W)`. Then `ExtensionAlgebra` is the quotient `F_D[X]/(X^D-W)`. +/// Let `F_D` be the optimal extension field `F[X]/(X^D-W)`. Then `ExtensionAlgebra` is the quotient `F_D[X]/(X^D-W)`. /// It's a `D`-dimensional algebra over `F_D` useful to lift the multiplication over `F_D` to a multiplication over `(F_D)^D`. #[derive(Copy, Clone)] pub struct ExtensionAlgebra, const D: usize>([F; D]); diff --git a/src/field/extension_field/target.rs b/src/field/extension_field/target.rs index d4603cbb..71e04360 100644 --- a/src/field/extension_field/target.rs +++ b/src/field/extension_field/target.rs @@ -1,4 +1,5 @@ use crate::circuit_builder::CircuitBuilder; +use crate::field::extension_field::algebra::ExtensionAlgebra; use crate::field::extension_field::{Extendable, FieldExtension, OEF}; use crate::field::field::Field; use crate::target::Target; @@ -35,11 +36,8 @@ impl, const D: usize> CircuitBuilder { pub fn constant_ext_algebra( &mut self, - c: <>::Extension as Extendable>::Extension, - ) -> ExtensionAlgebraTarget - where - F::Extension: Extendable, - { + c: ExtensionAlgebra, + ) -> ExtensionAlgebraTarget { let c_parts = c.to_basefield_array(); let mut parts = [self.zero_extension(); D]; for i in 0..D { @@ -60,13 +58,8 @@ impl, const D: usize> CircuitBuilder { self.constant_extension(F::Extension::TWO) } - pub fn zero_ext_algebra(&mut self) -> ExtensionAlgebraTarget - where - F::Extension: Extendable, - { - self.constant_ext_algebra( - <>::Extension as Extendable>::Extension::ZERO, - ) + pub fn zero_ext_algebra(&mut self) -> ExtensionAlgebraTarget { + self.constant_ext_algebra(ExtensionAlgebra::ZERO) } pub fn add_extension( @@ -142,7 +135,7 @@ impl, const D: usize> CircuitBuilder { pub fn mul_ext_algebra( &mut self, - mut a: ExtensionAlgebraTarget, + a: ExtensionAlgebraTarget, b: ExtensionAlgebraTarget, ) -> ExtensionAlgebraTarget { let mut res = [self.zero_extension(); D]; @@ -195,10 +188,7 @@ impl, const D: usize> CircuitBuilder { &mut self, a: ExtensionTarget, mut b: ExtensionAlgebraTarget, - ) -> ExtensionAlgebraTarget - where - F::Extension: Extendable, - { + ) -> ExtensionAlgebraTarget { for i in 0..D { b.0[i] = self.mul_extension(a, b.0[i]); } diff --git a/src/gadgets/polynomial.rs b/src/gadgets/polynomial.rs index 8037f287..1723a9bf 100644 --- a/src/gadgets/polynomial.rs +++ b/src/gadgets/polynomial.rs @@ -33,9 +33,9 @@ impl PolynomialCoeffsExtTarget { } } -pub struct PolynomialCoeffsExtExtTarget(pub Vec>); +pub struct PolynomialCoeffsExtAlgebraTarget(pub Vec>); -impl PolynomialCoeffsExtExtTarget { +impl PolynomialCoeffsExtAlgebraTarget { pub fn eval_scalar( &self, builder: &mut CircuitBuilder, diff --git a/src/gates/interpolation.rs b/src/gates/interpolation.rs index 0d3b8666..af7535f1 100644 --- a/src/gates/interpolation.rs +++ b/src/gates/interpolation.rs @@ -7,7 +7,7 @@ use crate::field::extension_field::algebra::PolynomialCoeffsAlgebra; use crate::field::extension_field::target::ExtensionTarget; use crate::field::extension_field::{Extendable, FieldExtension}; use crate::field::lagrange::interpolant; -use crate::gadgets::polynomial::PolynomialCoeffsExtExtTarget; +use crate::gadgets::polynomial::PolynomialCoeffsExtAlgebraTarget; use crate::gates::gate::{Gate, GateRef}; use crate::generator::{SimpleGenerator, WitnessGenerator}; use crate::target::Target; @@ -140,7 +140,7 @@ where let coeffs = (0..self.num_points) .map(|i| vars.get_local_ext_algebra(self.wires_coeff(i))) .collect(); - let interpolant = PolynomialCoeffsExtExtTarget(coeffs); + let interpolant = PolynomialCoeffsExtAlgebraTarget(coeffs); for i in 0..self.num_points { let point = vars.local_wires[self.wire_point(i)]; @@ -280,15 +280,21 @@ where mod tests { use std::marker::PhantomData; + use crate::circuit_builder::CircuitBuilder; + use crate::circuit_data::CircuitConfig; use crate::field::crandall_field::CrandallField; use crate::field::extension_field::quartic::QuarticCrandallField; use crate::field::extension_field::FieldExtension; use crate::field::field::Field; + use crate::fri::FriConfig; use crate::gates::gate::Gate; use crate::gates::gate_testing::test_low_degree; use crate::gates::interpolation::InterpolationGate; use crate::polynomial::polynomial::PolynomialCoeffs; + use crate::prover::PLONK_BLINDING; use crate::vars::EvaluationVars; + use crate::verifier::verify; + use crate::witness::PartialWitness; #[test] fn wire_indices() {