pub trait ConstraintSystem<F: Field>: Sized {
    type Root: ConstraintSystem<F>;

    // Required methods
    fn alloc<FN, A, AR>(
        &mut self,
        annotation: A,
        f: FN
    ) -> Result<Variable, SynthesisError>
       where FN: FnOnce() -> Result<F, SynthesisError>,
             A: FnOnce() -> AR,
             AR: AsRef<str>;
    fn alloc_input<FN, A, AR>(
        &mut self,
        annotation: A,
        f: FN
    ) -> Result<Variable, SynthesisError>
       where FN: FnOnce() -> Result<F, SynthesisError>,
             A: FnOnce() -> AR,
             AR: AsRef<str>;
    fn enforce<A, AR, LA, LB, LC>(&mut self, annotation: A, a: LA, b: LB, c: LC)
       where A: FnOnce() -> AR,
             AR: AsRef<str>,
             LA: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
             LB: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
             LC: FnOnce(LinearCombination<F>) -> LinearCombination<F>;
    fn push_namespace<NR, N>(&mut self, name_fn: N)
       where NR: AsRef<str>,
             N: FnOnce() -> NR;
    fn pop_namespace(&mut self);
    fn get_root(&mut self) -> &mut Self::Root;
    fn num_constraints(&self) -> usize;
    fn num_public_variables(&self) -> usize;
    fn num_private_variables(&self) -> usize;
    fn is_in_setup_mode(&self) -> bool;

    // Provided methods
    fn one() -> Variable { ... }
    fn ns<NR, N>(&mut self, name_fn: N) -> Namespace<'_, F, Self::Root>
       where NR: AsRef<str>,
             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<F>

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

Required Methods§

source

fn alloc<FN, A, AR>( &mut self, annotation: A, f: FN ) -> Result<Variable, SynthesisError>where FN: FnOnce() -> Result<F, SynthesisError>, A: FnOnce() -> AR, AR: AsRef<str>,

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<FN, A, AR>( &mut self, annotation: A, f: FN ) -> Result<Variable, SynthesisError>where FN: FnOnce() -> Result<F, SynthesisError>, A: FnOnce() -> AR, AR: AsRef<str>,

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: AsRef<str>, LA: FnOnce(LinearCombination<F>) -> LinearCombination<F>, LB: FnOnce(LinearCombination<F>) -> LinearCombination<F>, LC: FnOnce(LinearCombination<F>) -> LinearCombination<F>,

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: AsRef<str>, 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.

source

fn num_constraints(&self) -> usize

Output the number of constraints in the system.

source

fn num_public_variables(&self) -> usize

Output the number of public input variables to the system.

source

fn num_private_variables(&self) -> usize

Output the number of private input variables to the system.

source

fn is_in_setup_mode(&self) -> bool

Output whether the constraint system is in the setup mode.

Provided Methods§

source

fn one() -> Variable

Return the “one” input variable

source

fn ns<NR, N>(&mut self, name_fn: N) -> Namespace<'_, F, Self::Root>where NR: AsRef<str>, N: FnOnce() -> NR,

Begin a namespace for this constraint system.

Implementations on Foreign Types§

source§

impl<F: Field, CS: ConstraintSystem<F>> ConstraintSystem<F> for &mut CS

Convenience implementation of ConstraintSystem for mutable references to constraint systems.

§

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

source§

fn one() -> Variable

source§

fn alloc<FN, A, AR>( &mut self, annotation: A, f: FN ) -> Result<Variable, SynthesisError>where FN: FnOnce() -> Result<F, SynthesisError>, A: FnOnce() -> AR, AR: AsRef<str>,

source§

fn alloc_input<FN, A, AR>( &mut self, annotation: A, f: FN ) -> Result<Variable, SynthesisError>where FN: FnOnce() -> Result<F, SynthesisError>, A: FnOnce() -> AR, AR: AsRef<str>,

source§

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

source§

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

source§

fn pop_namespace(&mut self)

source§

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

source§

fn num_constraints(&self) -> usize

source§

fn num_public_variables(&self) -> usize

source§

fn num_private_variables(&self) -> usize

source§

fn is_in_setup_mode(&self) -> bool

Implementors§