Skip to content

Commit 934f30e

Browse files
committed
Bump, now division works properly
1 parent f9d8cb9 commit 934f30e

File tree

1 file changed

+11
-30
lines changed

1 file changed

+11
-30
lines changed

saffron/src/vid.rs

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ pub fn divide_by_sub_vanishing_poly(
3434
poly: &DensePolynomial<ScalarField>,
3535
domain_size: usize,
3636
coeff: ScalarField,
37-
) -> (DensePolynomial<ScalarField>, DensePolynomial<ScalarField>) {
37+
) -> DensePolynomial<ScalarField> {
3838
if poly.coeffs.len() < domain_size {
3939
// If degree(poly) < len(Domain), then the quotient is zero, and the entire polynomial is the remainder
40-
(DensePolynomial::<ScalarField>::zero(), poly.clone())
40+
DensePolynomial::<ScalarField>::zero()
4141
} else {
4242
// Compute the quotient
4343
//
@@ -50,35 +50,16 @@ pub fn divide_by_sub_vanishing_poly(
5050

5151
let mut quotient_vec = poly.coeffs[domain_size..].to_vec();
5252
//println!("poly.len(): {:?}", poly.len());
53-
assert!(poly.len() / domain_size <= 2);
53+
//assert!(poly.len() / domain_size <= 2);
5454
for i in 1..(poly.len() / domain_size) {
5555
quotient_vec
5656
.iter_mut()
5757
.zip(&poly.coeffs[domain_size * (i + 1)..])
58-
.for_each(|(s, c)| *s += c * &coeff);
58+
.for_each(|(s, c)| *s += c * &(coeff.pow([i as u64])));
5959
}
6060

61-
// Compute the remainder
62-
//
63-
// `remainder = poly - quotient_vec * (x^domain_size - 1)`
64-
//
65-
// Note that remainder must be smaller than `domain_size`.
66-
// So we can look at only the first `domain_size` terms.
67-
//
68-
// Therefore,
69-
// `remainder = poly.coeffs[0..domain_size] - quotient_vec * (-1)`
70-
// i.e.,
71-
// `remainder = poly.coeffs[0..domain_size] + quotient_vec`
72-
//
73-
let mut remainder_vec = poly.coeffs[0..domain_size].to_vec();
74-
remainder_vec
75-
.iter_mut()
76-
.zip(&quotient_vec)
77-
.for_each(|(s, c)| *s += c * &coeff);
78-
7961
let quotient = DensePolynomial::from_coefficients_vec(quotient_vec);
80-
let remainder = DensePolynomial::from_coefficients_vec(remainder_vec);
81-
(quotient, remainder)
62+
quotient
8263
}
8364
}
8465

@@ -633,8 +614,9 @@ mod tests {
633614
Evaluations::from_vec_and_domain(data, domain.d2);
634615

635616
let verifier_ix = 1;
636-
//let per_node_size = 256;
637-
let per_node_size = domain.d1.size();
617+
//let per_node_size = domain.d1.size();
618+
//let per_node_size = domain.d1.size() / 2;
619+
let per_node_size = 1024;
638620
let proofs_number = domain.d2.size() / per_node_size;
639621

640622
let indices: Vec<usize> = (0..per_node_size)
@@ -669,6 +651,8 @@ mod tests {
669651
let numerator_eval_interpolated = numerator_eval.interpolate();
670652

671653
// sanity checking numerator_eval
654+
if numerator_eval_interpolated.len() >= 2 * per_node_size
655+
&& numerator_eval_interpolated.len() < 3 * per_node_size
672656
{
673657
let numerator_1 = DensePolynomial {
674658
coeffs: numerator_eval_interpolated[..per_node_size].to_vec(),
@@ -694,7 +678,7 @@ mod tests {
694678
}
695679

696680
println!("Division");
697-
let (quot, rem) =
681+
let quot =
698682
divide_by_sub_vanishing_poly(&numerator_eval_interpolated, per_node_size, coset_omega);
699683

700684
println!(
@@ -709,8 +693,5 @@ mod tests {
709693
println!("error degree: {:?}", error.degree());
710694

711695
assert!(&quot * &divisor == numerator_eval_interpolated);
712-
assert!(&quot * &divisor + &rem == numerator_eval_interpolated);
713-
println!("rem degree: {:?}", rem.degree());
714-
assert!(rem.is_zero());
715696
}
716697
}

0 commit comments

Comments
 (0)