Remove mul_extension_naive

This commit is contained in:
wborgeaud 2021-06-09 21:12:15 +02:00
parent 3db6e38d26
commit bb551092a0
7 changed files with 12 additions and 31 deletions

View File

@ -171,25 +171,6 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
self.mul_extension_with_const(F::ONE, multiplicand_0, multiplicand_1)
}
pub fn mul_extension_naive(
&mut self,
a: ExtensionTarget<D>,
b: ExtensionTarget<D>,
) -> ExtensionTarget<D> {
let mut res = [self.zero(); D];
for i in 0..D {
for j in 0..D {
res[(i + j) % D] = if i + j < D {
self.mul_add(a.0[i], b.0[j], res[(i + j) % D])
} else {
// W * a[i] * b[i] + res[(i + j) % D]
self.arithmetic(F::Extension::W, a.0[i], b.0[i], F::ONE, res[(i + j) % D])
}
}
}
ExtensionTarget(res)
}
pub fn mul_ext_algebra(
&mut self,
a: ExtensionAlgebraTarget<D>,
@ -199,7 +180,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let w = self.constant(F::Extension::W);
for i in 0..D {
for j in 0..D {
let ai_bi = self.mul_extension_naive(a.0[i], b.0[j]);
let ai_bi = self.mul_extension(a.0[i], b.0[j]);
res[(i + j) % D] = if i + j < D {
self.add_extension(ai_bi, res[(i + j) % D])
} else {
@ -247,7 +228,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
mut b: ExtensionAlgebraTarget<D>,
) -> ExtensionAlgebraTarget<D> {
for i in 0..D {
b.0[i] = self.mul_extension_naive(a, b.0[i]);
b.0[i] = self.mul_extension(a, b.0[i]);
}
b
}

View File

@ -194,7 +194,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
}
let g = self.constant_extension(F::Extension::primitive_root_of_unity(degree_log));
let zeta_right = self.mul_extension_naive(g, zeta);
let zeta_right = self.mul_extension(g, zeta);
let mut ev_zeta = self.zero_extension();
for &t in &os.plonk_zs {
let a = alpha_powers.next(self);
@ -210,7 +210,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let numerator = self.sub_extension(ev, interpol_val);
let vanish = self.sub_extension(subgroup_x, zeta);
let vanish_right = self.sub_extension(subgroup_x, zeta_right);
let denominator = self.mul_extension_naive(vanish, vanish_right);
let denominator = self.mul_extension(vanish, vanish_right);
let quotient = self.div_unsafe_extension(numerator, denominator);
let sum = self.add_extension(sum, quotient);
@ -244,7 +244,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let interpol_val = wires_interpol.eval(self, subgroup_x);
let numerator = self.sub_extension(ev, interpol_val);
let vanish_frob = self.sub_extension(subgroup_x, zeta_frob);
let denominator = self.mul_extension_naive(vanish, vanish_frob);
let denominator = self.mul_extension(vanish, vanish_frob);
let quotient = self.div_unsafe_extension(numerator, denominator);
let sum = self.add_extension(sum, quotient);

View File

@ -335,7 +335,7 @@ impl<const D: usize> PowersTarget<D> {
builder: &mut CircuitBuilder<F, D>,
) -> ExtensionTarget<D> {
let result = self.current;
self.current = builder.mul_extension_naive(self.base, self.current);
self.current = builder.mul_extension(self.base, self.current);
result
}
}

View File

@ -26,7 +26,7 @@ impl<const D: usize> PolynomialCoeffsExtTarget<D> {
) -> ExtensionTarget<D> {
let mut acc = builder.zero_extension();
for &c in self.0.iter().rev() {
let tmp = builder.mul_extension_naive(point, acc);
let tmp = builder.mul_extension(point, acc);
acc = builder.add_extension(tmp, c);
}
acc

View File

@ -57,7 +57,7 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for ArithmeticGate {
let output = vars.local_wires[Self::WIRE_OUTPUT];
let product_term = builder.mul_many_extension(&[const_0, multiplicand_0, multiplicand_1]);
let addend_term = builder.mul_extension_naive(const_1, addend);
let addend_term = builder.mul_extension(const_1, addend);
let computed_output = builder.add_many_extension(&[product_term, addend_term]);
vec![builder.sub_extension(computed_output, output)]
}

View File

@ -79,7 +79,7 @@ impl<F: Extendable<D>, const D: usize, const B: usize> Gate<F, D> for BaseSumGat
(0..B).for_each(|i| {
let it = builder.constant_extension(F::from_canonical_usize(i).into());
let diff = builder.sub_extension(limb, it);
acc = builder.mul_extension_naive(acc, diff);
acc = builder.mul_extension(acc, diff);
});
acc
});

View File

@ -131,7 +131,7 @@ impl<F: Extendable<D>, const D: usize, const R: usize> Gate<F, D> for GMiMCGate<
let swap = vars.local_wires[Self::WIRE_SWAP];
let one_ext = builder.one_extension();
let not_swap = builder.sub_extension(swap, one_ext);
constraints.push(builder.mul_extension_naive(swap, not_swap));
constraints.push(builder.mul_extension(swap, not_swap));
let old_index_acc = vars.local_wires[Self::WIRE_INDEX_ACCUMULATOR_OLD];
let new_index_acc = vars.local_wires[Self::WIRE_INDEX_ACCUMULATOR_NEW];
@ -168,8 +168,8 @@ impl<F: Extendable<D>, const D: usize, const R: usize> Gate<F, D> for GMiMCGate<
let constant = builder.constant_extension(self.constants[r].into());
let cubing_input =
builder.add_many_extension(&[state[active], addition_buffer, constant]);
let square = builder.mul_extension_naive(cubing_input, cubing_input);
let f = builder.mul_extension_naive(square, cubing_input);
let square = builder.mul_extension(cubing_input, cubing_input);
let f = builder.mul_extension(square, cubing_input);
addition_buffer = builder.add_extension(addition_buffer, f);
state[active] = builder.sub_extension(state[active], f);
}