mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-08 00:33:06 +00:00
fixes to nonnative
This commit is contained in:
parent
f41c8ee16f
commit
f639dd3359
@ -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;
|
||||
|
||||
@ -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)]
|
||||
|
||||
@ -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!()
|
||||
}
|
||||
}
|
||||
|
||||
@ -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),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user