Trait ark_poly::evaluations::multivariate::multilinear::MultilinearExtension[][src]

pub trait MultilinearExtension<F: Field>: Sized + Clone + Debug + Hash + PartialEq + Eq + Add + Neg + Zero + CanonicalSerialize + CanonicalDeserialize + for<'a> AddAssign<&'a Self> + for<'a> AddAssign<(F, &'a Self)> + for<'a> SubAssign<&'a Self> + Index<usize> {
    fn num_vars(&self) -> usize;
fn evaluate(&self, point: &[F]) -> Option<F>;
fn rand<R: Rng>(num_vars: usize, rng: &mut R) -> Self;
fn relabel(&self, a: usize, b: usize, k: usize) -> Self;
fn fix_variables(&self, partial_point: &[F]) -> Self;
fn to_evaluations(&self) -> Vec<F>; }

This trait describes an interface for the multilinear extension of an array. The latter is a multilinear polynomial represented in terms of its evaluations over the domain {0,1}^num_vars (i.e. the Boolean hypercube).

Index represents a point, which is a vector in {0,1}^num_vars in little endian form. For example, 0b1011 represents P(1,1,0,1)

Required methods

fn num_vars(&self) -> usize[src]

Returns the number of variables in self

fn evaluate(&self, point: &[F]) -> Option<F>[src]

Evaluates self at the given the vector point in slice. If the number of variables does not match, return None.

fn rand<R: Rng>(num_vars: usize, rng: &mut R) -> Self[src]

Outputs an l-variate multilinear extension where value of evaluations are sampled uniformly at random.

fn relabel(&self, a: usize, b: usize, k: usize) -> Self[src]

Relabel the point by swapping k scalars from positions a..a+k to positions b..b+k, and from position b..b+k to position a..a+k in vector.

This function turns P(x_1,...,x_a,...,x_{a+k - 1},...,x_b,...,x_{b+k - 1},...,x_n) to P(x_1,...,x_b,...,x_{b+k - 1},...,x_a,...,x_{a+k - 1},...,x_n)

fn fix_variables(&self, partial_point: &[F]) -> Self[src]

Reduce the number of variables of self by fixing the partial_point.len() variables at partial_point.

fn to_evaluations(&self) -> Vec<F>[src]

Returns a list of evaluations over the domain, which is the boolean hypercube.

Loading content...

Implementors

impl<F: Field> MultilinearExtension<F> for DenseMultilinearExtension<F>[src]

impl<F: Field> MultilinearExtension<F> for SparseMultilinearExtension<F>[src]

fn rand<R: Rng>(num_vars: usize, rng: &mut R) -> Self[src]

Outputs an l-variate multilinear extension where value of evaluations are sampled uniformly at random. The number of nonzero entries is sqrt(2^num_vars) and indices of those nonzero entries are distributed uniformly at random.

Loading content...