fixes to nonnative

This commit is contained in:
Nicholas Ward 2021-10-26 11:04:31 -07:00
parent f41c8ee16f
commit f639dd3359
4 changed files with 13 additions and 19 deletions

View File

@ -6,7 +6,7 @@ pub mod hash;
pub mod insert;
pub mod interpolation;
pub mod multiple_comparison;
//pub mod nonnative;
pub mod nonnative;
pub mod permutation;
pub mod polynomial;
pub mod random_access;

View File

@ -1,3 +1,4 @@
use super::arithmetic_u32::U32Target;
use crate::field::extension_field::Extendable;
use crate::field::field_types::RichField;
use crate::gates::comparison::ComparisonGate;
@ -52,6 +53,13 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
BoolTarget::new_unsafe(result)
}
/// Helper function for comparing, specifically, lists of `U32Target`s.
pub fn list_le_u32(&mut self, a: Vec<U32Target>, b: Vec<U32Target>) -> BoolTarget {
let a_targets = a.iter().map(|&t| t.0).collect();
let b_targets = b.iter().map(|&t| t.0).collect();
self.list_le(a_targets, b_targets, 32)
}
}
#[cfg(test)]

View File

@ -1,6 +1,5 @@
use std::marker::PhantomData;
use crate::field::field_types::RichField;
use crate::field::{extension_field::Extendable, field_types::Field};
use crate::gadgets::arithmetic_u32::U32Target;
@ -21,16 +20,6 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
.collect()
}
fn power_of_2_mod_order<FF: Field>(&mut self, i: usize) -> Vec<U32Target> {
}
pub fn powers_of_2_mod_order<FF: Field>(&mut self, max: usize) -> Vec<Vec<U32Target>> {
for i in 0..max {
}
}
// Add two `ForeignFieldTarget`s.
pub fn add_nonnative<FF: Field>(
&mut self,
@ -62,14 +51,14 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
let num_limbs = limbs.len();
let mut modulus_limbs = self.order_u32_limbs::<FF>();
modulus_limbs.append(self.zero_u32());
modulus_limbs.push(self.zero_u32());
let needs_reduce = self.list_le(modulus_limbs, limbs);
let needs_reduce = self.list_le_u32(modulus_limbs, limbs);
let mut to_subtract = vec![];
for i in 0..num_limbs {
let (low, _high) = self.mul_u32(modulus_limbs[i], needs_reduce);
to_subtract.append(low);
let (low, _high) = self.mul_u32(modulus_limbs[i], U32Target(needs_reduce.target));
to_subtract.push(low);
}
let mut reduced_limbs = vec![];
@ -110,7 +99,6 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
}
}
pub fn mul_nonnative<FF: Field>(
&mut self,
a: ForeignFieldTarget<FF>,
@ -148,7 +136,6 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
}
pub fn reduce_mul_result<FF: Field>(&mut self, limbs: Vec<U32Target>) -> Vec<U32Target> {
todo!()
}
}

View File

@ -35,7 +35,6 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
self.assert_permutation_2x2(a[0].clone(), a[1].clone(), b[0].clone(), b[1].clone())
}
// For larger lists, we recursively use two smaller permutation networks.
//_ => self.assert_permutation_recursive(a, b)
_ => self.assert_permutation_recursive(a, b),
}
}