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§
Sourcetype Root: ConstraintSystem<Scalar>
type Root: ConstraintSystem<Scalar>
Represents the type of the “root” of this constraint system so that nested namespaces can minimize indirection.
Required Methods§
Sourcefn alloc<F, A, AR>(
&mut self,
annotation: A,
f: F,
) -> Result<Variable, SynthesisError>
fn alloc<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
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.
Sourcefn alloc_input<F, A, AR>(
&mut self,
annotation: A,
f: F,
) -> Result<Variable, SynthesisError>
fn alloc_input<F, A, AR>( &mut self, annotation: A, f: F, ) -> Result<Variable, SynthesisError>
Allocate a public variable in the constraint system. The provided function is used to determine the assignment of the variable.
Sourcefn 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 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.
Sourcefn push_namespace<NR, N>(&mut self, name_fn: N)
fn push_namespace<NR, N>(&mut self, name_fn: N)
Create a new (sub)namespace and enter into it. Not intended
for downstream use; use namespace instead.
Sourcefn pop_namespace(&mut self)
fn pop_namespace(&mut self)
Exit out of the existing namespace. Not intended for
downstream use; use namespace instead.
Provided Methods§
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.
impl<'cs, Scalar: PrimeField, CS: ConstraintSystem<Scalar>> ConstraintSystem<Scalar> for &'cs mut CS
Convenience implementation of ConstraintSystem