[−][src]Trait snarkvm_models::gadgets::r1cs::ConstraintSystem
Represents a constraint system which can have new variables allocated and constrains between them formed.
Associated Types
type Root: ConstraintSystem<F>[src]
Represents the type of the "root" of this constraint system so that nested namespaces can minimize indirection.
Required methods
pub 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>, [src]
&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.
pub 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>, [src]
&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.
pub 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>, [src]
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.
pub fn push_namespace<NR, N>(&mut self, name_fn: N) where
NR: AsRef<str>,
N: FnOnce() -> NR, [src]
NR: AsRef<str>,
N: FnOnce() -> NR,
Create a new (sub)namespace and enter into it. Not intended
for downstream use; use namespace instead.
pub fn pop_namespace(&mut self)[src]
Exit out of the existing namespace. Not intended for
downstream use; use namespace instead.
pub fn get_root(&mut self) -> &mut Self::Root[src]
Gets the "root" constraint system, bypassing the namespacing.
Not intended for downstream use; use namespace instead.
pub fn num_constraints(&self) -> usize[src]
Output the number of constraints in the system.
Provided methods
pub fn one() -> Variable[src]
Return the "one" input variable
pub fn ns<NR, N>(&mut self, name_fn: N) -> Namespace<'_, F, Self::Root> where
NR: AsRef<str>,
N: FnOnce() -> NR, [src]
NR: AsRef<str>,
N: FnOnce() -> NR,
Begin a namespace for this constraint system.
Implementations on Foreign Types
impl<F: Field, CS: ConstraintSystem<F>> ConstraintSystem<F> for &mut CS[src]
Convenience implementation of ConstraintSystem
type Root = CS::Root
pub fn one() -> Variable[src]
pub 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>, [src]
&mut self,
annotation: A,
f: FN
) -> Result<Variable, SynthesisError> where
FN: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
&mut self,
annotation: A,
f: FN
) -> Result<Variable, SynthesisError> where
FN: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
A: FnOnce() -> AR,
AR: AsRef<str>,
LA: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LB: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LC: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
pub fn push_namespace<NR, N>(&mut self, name_fn: N) where
NR: AsRef<str>,
N: FnOnce() -> NR, [src]
NR: AsRef<str>,
N: FnOnce() -> NR,
pub fn pop_namespace(&mut self)[src]
pub fn get_root(&mut self) -> &mut Self::Root[src]
pub fn num_constraints(&self) -> usize[src]
Implementors
impl<ConstraintF: Field> ConstraintSystem<ConstraintF> for ConstraintCounter[src]
type Root = Self
pub fn alloc<F, A, AR>(
&mut self,
_: A,
_: F
) -> Result<Variable, SynthesisError> where
F: FnOnce() -> Result<ConstraintF, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>, [src]
&mut self,
_: A,
_: F
) -> Result<Variable, SynthesisError> where
F: FnOnce() -> Result<ConstraintF, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub fn alloc_input<F, A, AR>(
&mut self,
_: A,
_: F
) -> Result<Variable, SynthesisError> where
F: FnOnce() -> Result<ConstraintF, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>, [src]
&mut self,
_: A,
_: F
) -> Result<Variable, SynthesisError> where
F: FnOnce() -> Result<ConstraintF, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub fn enforce<A, AR, LA, LB, LC>(&mut self, _: A, _: LA, _: LB, _: LC) where
A: FnOnce() -> AR,
AR: AsRef<str>,
LA: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>,
LB: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>,
LC: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>, [src]
A: FnOnce() -> AR,
AR: AsRef<str>,
LA: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>,
LB: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>,
LC: FnOnce(LinearCombination<ConstraintF>) -> LinearCombination<ConstraintF>,
pub fn push_namespace<NR, N>(&mut self, _: N) where
NR: AsRef<str>,
N: FnOnce() -> NR, [src]
NR: AsRef<str>,
N: FnOnce() -> NR,
pub fn pop_namespace(&mut self)[src]
pub fn get_root(&mut self) -> &mut Self::Root[src]
pub fn num_constraints(&self) -> usize[src]
impl<F: Field> ConstraintSystem<F> for TestConstraintSystem<F>[src]
type Root = Self
pub 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>, [src]
&mut self,
annotation: A,
f: Fn
) -> Result<Variable, SynthesisError> where
Fn: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
&mut self,
annotation: A,
f: Fn
) -> Result<Variable, SynthesisError> where
Fn: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
A: FnOnce() -> AR,
AR: AsRef<str>,
LA: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LB: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LC: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
pub fn push_namespace<NR: AsRef<str>, N: FnOnce() -> NR>(&mut self, name_fn: N)[src]
pub fn pop_namespace(&mut self)[src]
pub fn get_root(&mut self) -> &mut Self::Root[src]
pub fn num_constraints(&self) -> usize[src]
impl<F: Field, CS: ConstraintSystem<F>> ConstraintSystem<F> for Namespace<'_, F, CS>[src]
type Root = CS::Root
pub fn one() -> Variable[src]
pub 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>, [src]
&mut self,
annotation: A,
f: FN
) -> Result<Variable, SynthesisError> where
FN: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
&mut self,
annotation: A,
f: FN
) -> Result<Variable, SynthesisError> where
FN: FnOnce() -> Result<F, SynthesisError>,
A: FnOnce() -> AR,
AR: AsRef<str>,
pub 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>, [src]
A: FnOnce() -> AR,
AR: AsRef<str>,
LA: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LB: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
LC: FnOnce(LinearCombination<F>) -> LinearCombination<F>,
pub fn push_namespace<NR, N>(&mut self, _: N) where
NR: AsRef<str>,
N: FnOnce() -> NR, [src]
NR: AsRef<str>,
N: FnOnce() -> NR,