PR feedback fixes

This commit is contained in:
wborgeaud 2021-06-15 19:13:15 +02:00
parent 89c6a6b4e6
commit 89b25c528c
4 changed files with 16 additions and 11 deletions

View File

@ -196,6 +196,11 @@ fn fri_combine_initial<F: Field + Extendable<D>, const D: usize>(
let wire_composition_eval = reduce_with_iter(wire_evals, alpha_powers.clone());
let zeta_frob = zeta.frobenius();
let wire_eval = reduce_with_iter(&os.wires, alpha_powers.clone());
// We want to compute `sum a^i*phi(w_i)`, where `phi` denotes the Frobenius automorphism.
// Since `phi^D=id` and `phi` is a field automorphism, we have the following equalities:
// `sum a^i*phi(w_i) = sum phi(phi^(D-1)(a^i)*w_i) = phi(sum phi^(D-1)(a)^i*w_i)`
// So we can compute the original sum using only one call to the `D-1`-repeated Frobenius of alpha,
// and one call at the end of the sum.
let alpha_powers_frob = alpha_powers.repeated_frobenius(D - 1);
let wire_eval_frob = reduce_with_iter(&os.wires, alpha_powers_frob).frobenius();
let wires_interpol = interpolant(&[(zeta, wire_eval), (zeta_frob, wire_eval_frob)]);

View File

@ -18,7 +18,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
Target::wires_from_range(
gate,
BaseSumGate::<B>::WIRE_LIMBS_START..BaseSumGate::<B>::WIRE_LIMBS_START + num_limbs,
BaseSumGate::<B>::START_LIMBS..BaseSumGate::<B>::START_LIMBS + num_limbs,
)
}

View File

@ -29,7 +29,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
/// Verifies that the decomposition is correct by using `k` `BaseSum<2>` gates
/// with `k` such that `k*num_routed_wires>=num_bits`.
pub(crate) fn split_le(&mut self, integer: Target, num_bits: usize) -> Vec<Target> {
let num_limbs = self.config.num_routed_wires - BaseSumGate::<2>::WIRE_LIMBS_START;
let num_limbs = self.config.num_routed_wires - BaseSumGate::<2>::START_LIMBS;
let k = ceil_div_usize(num_bits, num_limbs);
let gates = (0..k)
.map(|_| self.add_gate_no_constants(BaseSumGate::<2>::new(num_limbs)))
@ -39,7 +39,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
for &gate in &gates {
bits.extend(Target::wires_from_range(
gate,
BaseSumGate::<2>::WIRE_LIMBS_START..BaseSumGate::<2>::WIRE_LIMBS_START + num_limbs,
BaseSumGate::<2>::START_LIMBS..BaseSumGate::<2>::START_LIMBS + num_limbs,
));
}
bits.drain(num_bits..);

View File

@ -1,3 +1,5 @@
use std::ops::Range;
use crate::circuit_builder::CircuitBuilder;
use crate::field::extension_field::target::ExtensionTarget;
use crate::field::extension_field::Extendable;
@ -8,9 +10,8 @@ use crate::plonk_common::{reduce_with_powers, reduce_with_powers_recursive};
use crate::target::Target;
use crate::vars::{EvaluationTargets, EvaluationVars};
use crate::witness::PartialWitness;
use std::ops::Range;
/// A gate which can sum base W limbs and the reversed limbs.
/// A gate which can sum base B limbs and the reversed limbs.
#[derive(Debug)]
pub struct BaseSumGate<const B: usize> {
num_limbs: usize,
@ -23,11 +24,11 @@ impl<const B: usize> BaseSumGate<B> {
pub const WIRE_SUM: usize = 0;
pub const WIRE_REVERSED_SUM: usize = 1;
pub const WIRE_LIMBS_START: usize = 2;
pub const START_LIMBS: usize = 2;
/// Returns the index of the `i`th limb wire.
pub fn limbs(&self) -> Range<usize> {
Self::WIRE_LIMBS_START..Self::WIRE_LIMBS_START + self.num_limbs
Self::START_LIMBS..Self::START_LIMBS + self.num_limbs
}
}
@ -66,10 +67,10 @@ impl<F: Extendable<D>, const D: usize, const B: usize> Gate<F, D> for BaseSumGat
let mut limbs = vars.local_wires[self.limbs()].to_vec();
let computed_sum = reduce_with_powers_recursive(builder, &limbs, base);
limbs.reverse();
let reversed_computed_sum = reduce_with_powers_recursive(builder, &limbs, base);
let computed_reversed_sum = reduce_with_powers_recursive(builder, &limbs, base);
let mut constraints = vec![
builder.sub_extension(computed_sum, sum),
builder.sub_extension(reversed_computed_sum, reversed_sum),
builder.sub_extension(computed_reversed_sum, reversed_sum),
];
for limb in limbs {
constraints.push({
@ -138,8 +139,7 @@ impl<F: Field, const B: usize> SimpleGenerator<F> for BaseSplitGenerator<B> {
"Integer too large to fit in given number of limbs"
);
let limbs = (BaseSumGate::<B>::WIRE_LIMBS_START
..BaseSumGate::<B>::WIRE_LIMBS_START + self.num_limbs)
let limbs = (BaseSumGate::<B>::START_LIMBS..BaseSumGate::<B>::START_LIMBS + self.num_limbs)
.map(|i| Target::wire(self.gate_index, i));
let limbs_value = (0..self.num_limbs)
.scan(sum_value, |acc, _| {