PR feedback and add reduce_with_powers_circuit fn

This commit is contained in:
wborgeaud 2022-05-30 20:13:25 +02:00
parent bd738399dd
commit fd7eb9e915
2 changed files with 28 additions and 11 deletions

View File

@ -12,7 +12,9 @@ use plonky2::iop::ext_target::ExtensionTarget;
use plonky2::iop::target::Target;
use plonky2::plonk::circuit_builder::CircuitBuilder;
use plonky2::plonk::config::{AlgebraicHasher, GenericConfig, Hasher};
use plonky2::plonk::plonk_common::reduce_with_powers;
use plonky2::plonk::plonk_common::{
reduce_with_powers, reduce_with_powers_circuit, reduce_with_powers_ext_circuit,
};
use plonky2::util::reducing::{ReducingFactor, ReducingFactorTarget};
use rayon::prelude::*;
@ -74,10 +76,9 @@ impl GrandProductChallenge<Target> {
builder: &mut CircuitBuilder<F, D>,
terms: &[ExtensionTarget<D>],
) -> ExtensionTarget<D> {
let zero = builder.zero();
let mut factor = ReducingFactorTarget::new(self.beta.to_ext_target(zero));
let reduced = factor.reduce(terms, builder);
builder.add_extension(reduced, self.gamma.to_ext_target(zero))
let reduced = reduce_with_powers_ext_circuit(builder, terms, self.beta);
let gamma = builder.convert_to_ext(self.gamma);
builder.add_extension(reduced, gamma)
}
pub(crate) fn combine_base_circuit<F: RichField + Extendable<D>, const D: usize>(
@ -85,12 +86,8 @@ impl GrandProductChallenge<Target> {
builder: &mut CircuitBuilder<F, D>,
terms: &[Target],
) -> Target {
let zero = builder.zero();
let combination = terms
.iter()
.rev()
.fold(zero, |acc, &t| builder.mul_add(self.beta, acc, t));
builder.add(combination, self.gamma)
let reduced = reduce_with_powers_circuit(builder, terms, self.beta);
builder.add(reduced, self.gamma)
}
}

View File

@ -4,6 +4,7 @@ use plonky2_field::packed_field::PackedField;
use crate::fri::oracle::SALT_SIZE;
use crate::fri::structure::FriOracleInfo;
use crate::gates::arithmetic_base::ArithmeticGate;
use crate::hash::hash_types::RichField;
use crate::iop::ext_target::ExtensionTarget;
use crate::iop::target::Target;
@ -138,6 +139,25 @@ where
sum
}
pub fn reduce_with_powers_circuit<F: RichField + Extendable<D>, const D: usize>(
builder: &mut CircuitBuilder<F, D>,
terms: &[Target],
alpha: Target,
) -> Target {
if terms.len() <= ArithmeticGate::new_from_config(&builder.config).num_ops + 1 {
terms
.iter()
.rev()
.fold(builder.zero(), |acc, &t| builder.mul_add(alpha, acc, t))
} else {
let terms_ext = terms
.iter()
.map(|&t| builder.convert_to_ext(t))
.collect::<Vec<_>>();
reduce_with_powers_ext_circuit(builder, &terms_ext, alpha).0[0]
}
}
pub fn reduce_with_powers_ext_circuit<F: RichField + Extendable<D>, const D: usize>(
builder: &mut CircuitBuilder<F, D>,
terms: &[ExtensionTarget<D>],