mirror of
https://github.com/arnaucube/hyperplonk.git
synced 2026-01-10 16:11:29 +01:00
refactor permcheck
This commit is contained in:
committed by
chancharles92
parent
d6674351c1
commit
5e782910d4
@@ -7,8 +7,9 @@ mod virtual_polynomial;
|
||||
pub use errors::ArithErrors;
|
||||
pub use multilinear_polynomial::{
|
||||
evaluate_no_par, evaluate_opt, fix_last_variables, fix_last_variables_no_par, fix_variables,
|
||||
identity_permutation_mle, merge_polynomials, random_mle_list, random_permutation_mle,
|
||||
random_zero_mle_list, DenseMultilinearExtension,
|
||||
identity_permutation_mle, identity_permutation_mles, merge_polynomials, random_mle_list,
|
||||
random_permutation_mle, random_permutation_mles, random_zero_mle_list,
|
||||
DenseMultilinearExtension,
|
||||
};
|
||||
pub use univariate_polynomial::{build_l, get_uni_domain};
|
||||
pub use util::{bit_decompose, gen_eval_point, get_batched_nv, get_index};
|
||||
|
||||
@@ -73,6 +73,7 @@ pub fn random_zero_mle_list<F: PrimeField, R: RngCore>(
|
||||
}
|
||||
|
||||
/// An MLE that represent an identity permutation: `f(index) \mapto index`
|
||||
/// TODO(binyi): remove
|
||||
pub fn identity_permutation_mle<F: PrimeField>(
|
||||
num_vars: usize,
|
||||
) -> Rc<DenseMultilinearExtension<F>> {
|
||||
@@ -83,6 +84,7 @@ pub fn identity_permutation_mle<F: PrimeField>(
|
||||
}
|
||||
|
||||
/// An MLE that represent a random permutation
|
||||
/// TODO(binyi): remove
|
||||
pub fn random_permutation_mle<F: PrimeField, R: RngCore>(
|
||||
num_vars: usize,
|
||||
rng: &mut R,
|
||||
@@ -99,6 +101,46 @@ pub fn random_permutation_mle<F: PrimeField, R: RngCore>(
|
||||
))
|
||||
}
|
||||
|
||||
/// A list of MLEs that represents an identity permutation
|
||||
pub fn identity_permutation_mles<F: PrimeField>(
|
||||
num_vars: usize,
|
||||
num_chunks: usize,
|
||||
) -> Vec<Rc<DenseMultilinearExtension<F>>> {
|
||||
let mut res = vec![];
|
||||
for i in 0..num_chunks {
|
||||
let shift = (i * (1 << num_vars)) as u64;
|
||||
let s_id_vec = (shift..shift + (1u64 << num_vars)).map(F::from).collect();
|
||||
res.push(Rc::new(DenseMultilinearExtension::from_evaluations_vec(
|
||||
num_vars, s_id_vec,
|
||||
)));
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
/// A list of MLEs that represent a random permutation
|
||||
pub fn random_permutation_mles<F: PrimeField, R: RngCore>(
|
||||
num_vars: usize,
|
||||
num_chunks: usize,
|
||||
rng: &mut R,
|
||||
) -> Vec<Rc<DenseMultilinearExtension<F>>> {
|
||||
let len = (num_chunks as u64) * (1u64 << num_vars);
|
||||
let mut s_id_vec: Vec<F> = (0..len).map(F::from).collect();
|
||||
let mut s_perm_vec = vec![];
|
||||
for _ in 0..len {
|
||||
let index = rng.next_u64() as usize % s_id_vec.len();
|
||||
s_perm_vec.push(s_id_vec.remove(index));
|
||||
}
|
||||
let mut res = vec![];
|
||||
let n = 1 << num_vars;
|
||||
for i in 0..num_chunks {
|
||||
res.push(Rc::new(DenseMultilinearExtension::from_evaluations_vec(
|
||||
num_vars,
|
||||
s_perm_vec[i * n..i * n + n].to_vec(),
|
||||
)));
|
||||
}
|
||||
res
|
||||
}
|
||||
|
||||
pub fn evaluate_opt<F: Field>(poly: &DenseMultilinearExtension<F>, point: &[F]) -> F {
|
||||
assert_eq!(poly.num_vars, point.len());
|
||||
fix_variables(poly, point).evaluations[0]
|
||||
|
||||
Reference in New Issue
Block a user