mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-08 08:43:06 +00:00
PR feedback and add reduce_with_powers_circuit fn
This commit is contained in:
parent
bd738399dd
commit
fd7eb9e915
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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>],
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user