ConstraintSystem

Trait ConstraintSystem 

Source
pub trait ConstraintSystem<Scalar: PrimeField>: Sized {
    type Root: ConstraintSystem<Scalar>;

    // Required methods
    fn alloc<F, A, AR>(
        &mut self,
        annotation: A,
        f: F,
    ) -> Result<Variable, SynthesisError>
       where F: FnOnce() -> Result<Scalar, SynthesisError>,
             A: FnOnce() -> AR,
             AR: Into<String>;
    fn alloc_input<F, A, AR>(
        &mut self,
        annotation: A,
        f: F,
    ) -> Result<Variable, SynthesisError>
       where F: FnOnce() -> Result<Scalar, SynthesisError>,
             A: FnOnce() -> AR,
             AR: Into<String>;
    fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
       where A: FnOnce() -> AR,
             AR: Into<String>,
             LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,
             LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,
             LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>;
    fn push_namespace<NR, N>(&mut self, name_fn: N)
       where NR: Into<String>,
             N: FnOnce() -> NR;
    fn pop_namespace(&mut self);
    fn get_root(&mut self) -> &mut Self::Root;

    // Provided methods
    fn one() -> Variable { ... }
    fn namespace<NR, N>(
        &mut self,
        name_fn: N,
    ) -> Namespace<'_, Scalar, Self::Root>
       where NR: Into<String>,
             N: FnOnce() -> NR { ... }
}
Expand description

Represents a constraint system which can have new variables allocated and constrains between them formed.

Required Associated Types§

Source

type Root: ConstraintSystem<Scalar>

Represents the type of the “root” of this constraint system so that nested namespaces can minimize indirection.

Required Methods§

Source

fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Allocate a private variable in the constraint system. The provided function is used to determine the assignment of the variable. The given annotation function is invoked in testing contexts in order to derive a unique name for this variable in the current namespace.

Source

fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Allocate a public variable in the constraint system. The provided function is used to determine the assignment of the variable.

Source

fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
where A: FnOnce() -> AR, AR: Into<String>, LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,

Enforce that A * B = C. The annotation function is invoked in testing contexts in order to derive a unique name for the constraint in the current namespace.

Source

fn push_namespace<NR, N>(&mut self, name_fn: N)
where NR: Into<String>, N: FnOnce() -> NR,

Create a new (sub)namespace and enter into it. Not intended for downstream use; use namespace instead.

Source

fn pop_namespace(&mut self)

Exit out of the existing namespace. Not intended for downstream use; use namespace instead.

Source

fn get_root(&mut self) -> &mut Self::Root

Gets the “root” constraint system, bypassing the namespacing. Not intended for downstream use; use namespace instead.

Provided Methods§

Source

fn one() -> Variable

Return the “one” input variable

Source

fn namespace<NR, N>(&mut self, name_fn: N) -> Namespace<'_, Scalar, Self::Root>
where NR: Into<String>, N: FnOnce() -> NR,

Begin a namespace for this constraint system.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<'cs, Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for &'cs mut CS

Convenience implementation of ConstraintSystem for mutable references to constraint systems.

Source§

type Root = <CS as ConstraintSystem<Scalar>>::Root

Source§

fn one() -> Variable

Source§

fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Source§

fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
where F: FnOnce() -> Result<Scalar, SynthesisError>, A: FnOnce() -> AR, AR: Into<String>,

Source§

fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
where A: FnOnce() -> AR, AR: Into<String>, LA: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LB: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>, LC: FnOnce(LinearCombination<Scalar>) -> LinearCombination<Scalar>,

Source§

fn push_namespace<NR, N>(&mut self, name_fn: N)
where NR: Into<String>, N: FnOnce() -> NR,

Source§

fn pop_namespace(&mut self)

Source§

fn get_root(&mut self) -> &mut Self::Root

Implementors§

Source§

impl<'cs, Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for Namespace<'cs, Scalar, CS>

Source§

type Root = <CS as ConstraintSystem<Scalar>>::Root

Source§

impl<Scalar: PrimeField> ConstraintSystem<Scalar> for TestConstraintSystem<Scalar>

Source§

impl<Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for MultiEq<Scalar, CS>

Source§

type Root = MultiEq<Scalar, CS>