From 6c41c72e663b3b7f0da10d7505f6624cfa267554 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Fri, 9 Jul 2021 22:03:26 +0800 Subject: [PATCH] utilities::range_check: Correct range_check expression Previously, we were multiplying the expression by 0, which led it to always evaluate to true. --- src/circuit/gadget/utilities.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/circuit/gadget/utilities.rs b/src/circuit/gadget/utilities.rs index 36e75aa5..59962230 100644 --- a/src/circuit/gadget/utilities.rs +++ b/src/circuit/gadget/utilities.rs @@ -123,10 +123,9 @@ pub fn bitrange_subset(field_elem: F, bitrange: Ra /// Check that an expression is in the small range [0..range), /// i.e. 0 ≤ word < range. pub fn range_check(word: Expression, range: usize) -> Expression { - (0..range) - .map(|i| Expression::Constant(F::from_u64(i as u64))) - .reduce(|acc, i| acc * (word.clone() - i)) - .expect("range > 0") + (1..range).fold(word.clone(), |acc, i| { + acc * (word.clone() - Expression::Constant(F::from_u64(i as u64))) + }) } #[cfg(test)]