mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-02-20 13:53:12 +00:00
All tests pass
This commit is contained in:
parent
9617c22173
commit
7cf965ded5
@ -396,20 +396,39 @@ pub(crate) fn eval_vanishing_poly_recursively<F: RichField + Extendable<D>, cons
|
||||
);
|
||||
// The first checks are of the form `q - n/d` which is a rational function not a polynomial.
|
||||
// We multiply them by `d` to get checks of the form `q*d - n` which low-degree polynomials.
|
||||
denominator_values
|
||||
.chunks(max_degree)
|
||||
.zip(partial_product_check.iter_mut())
|
||||
.for_each(|(d, q)| {
|
||||
let mut v = d.to_vec();
|
||||
// denominator_values
|
||||
// .chunks(max_degree)
|
||||
// .zip(partial_product_check.iter_mut())
|
||||
// .for_each(|(d, q)| {
|
||||
// let mut v = d.to_vec();
|
||||
// v.push(*q);
|
||||
// *q = builder.mul_many_extension(&v);
|
||||
// });
|
||||
for (j, q) in partial_product_check.iter_mut().enumerate() {
|
||||
let range = j * max_degree..(j + 1) * max_degree;
|
||||
*q = builder.mul_many_extension(&{
|
||||
let mut v = denominator_values[range].to_vec();
|
||||
v.push(*q);
|
||||
*q = builder.mul_many_extension(&v);
|
||||
v
|
||||
});
|
||||
}
|
||||
vanishing_partial_products_terms.extend(partial_product_check);
|
||||
|
||||
// The quotient final product is the product of the last `final_num_prod` elements.
|
||||
let quotient =
|
||||
builder.mul_many_extension(¤t_partial_products[num_prods - final_num_prod..]);
|
||||
vanishing_v_shift_terms.push(builder.mul_sub_extension(quotient, z_x, z_gz));
|
||||
// let quotient =
|
||||
// builder.mul_many_extension(¤t_partial_products[num_prods - final_num_prod..]);
|
||||
let quotient = builder.mul_many_extension(&{
|
||||
let mut v = quotient_values[final_num_prod..].to_vec();
|
||||
v.push(*current_partial_products.last().unwrap());
|
||||
v
|
||||
});
|
||||
let mut wanted = builder.mul_sub_extension(quotient, z_x, z_gz);
|
||||
wanted = builder.mul_many_extension(&{
|
||||
let mut v = denominator_values[final_num_prod..].to_vec();
|
||||
v.push(wanted);
|
||||
v
|
||||
});
|
||||
vanishing_v_shift_terms.push(wanted);
|
||||
}
|
||||
|
||||
let vanishing_terms = [
|
||||
|
||||
@ -14,7 +14,7 @@ pub fn partial_products<F: Field>(v: &[F], max_degree: usize) -> Vec<F> {
|
||||
let mut res = Vec::new();
|
||||
let mut acc = F::ONE;
|
||||
let chunk_size = max_degree;
|
||||
let num_chunks = ceil_div_usize(v.len(), chunk_size) - 1;
|
||||
let num_chunks = v.len() / chunk_size;
|
||||
for i in 0..num_chunks {
|
||||
acc *= v[i * chunk_size..(i + 1) * chunk_size]
|
||||
.iter()
|
||||
@ -31,7 +31,7 @@ pub fn partial_products<F: Field>(v: &[F], max_degree: usize) -> Vec<F> {
|
||||
pub fn num_partial_products(n: usize, max_degree: usize) -> (usize, usize) {
|
||||
debug_assert!(max_degree > 1);
|
||||
let chunk_size = max_degree;
|
||||
let num_chunks = ceil_div_usize(n, chunk_size) - 1;
|
||||
let num_chunks = n / chunk_size;
|
||||
|
||||
(num_chunks, num_chunks * chunk_size)
|
||||
}
|
||||
@ -44,15 +44,15 @@ pub fn check_partial_products<F: Field>(v: &[F], mut partials: &[F], max_degree:
|
||||
let mut res = Vec::new();
|
||||
let mut acc = F::ONE;
|
||||
let chunk_size = max_degree;
|
||||
let num_chunks = ceil_div_usize(v.len(), chunk_size) - 1;
|
||||
let num_chunks = v.len() / chunk_size;
|
||||
for i in 0..num_chunks {
|
||||
acc *= v[i * chunk_size..(i + 1) * chunk_size]
|
||||
.iter()
|
||||
.copied()
|
||||
.product();
|
||||
let bacc = *partials.next().unwrap();
|
||||
res.push(acc - bacc);
|
||||
acc = bacc;
|
||||
let new_acc = *partials.next().unwrap();
|
||||
res.push(acc - new_acc);
|
||||
acc = new_acc;
|
||||
}
|
||||
debug_assert!(partials.next().is_none());
|
||||
|
||||
@ -68,15 +68,16 @@ pub fn check_partial_products_recursively<F: RichField + Extendable<D>, const D:
|
||||
debug_assert!(max_degree > 1);
|
||||
let mut partials = partials.iter();
|
||||
let mut res = Vec::new();
|
||||
let mut acc = v[0];
|
||||
let chunk_size = max_degree - 1;
|
||||
let num_chunks = ceil_div_usize(v.len() - 1, chunk_size) - 1;
|
||||
let mut acc = builder.one_extension();
|
||||
let chunk_size = max_degree;
|
||||
let num_chunks = v.len() / chunk_size;
|
||||
for i in 0..num_chunks {
|
||||
let mut chunk = v[1 + i * chunk_size..1 + (i + 1) * chunk_size].to_vec();
|
||||
let mut chunk = v[i * chunk_size..(i + 1) * chunk_size].to_vec();
|
||||
chunk.push(acc);
|
||||
acc = builder.mul_many_extension(&chunk);
|
||||
|
||||
res.push(builder.sub_extension(acc, *partials.next().unwrap()));
|
||||
let new_acc = *partials.next().unwrap();
|
||||
res.push(builder.sub_extension(acc, new_acc));
|
||||
acc = new_acc;
|
||||
}
|
||||
debug_assert!(partials.next().is_none());
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user