pub enum ConstraintSystemRef<F: Field> {
None,
CS(Rc<RefCell<ConstraintSystem<F>>>),
}Expand description
A shared reference to a constraint system that can be stored in high level variables.
Variants§
None
Represents the case where we don’t need to allocate variables or enforce constraints. Encountered when operating over constant values.
CS(Rc<RefCell<ConstraintSystem<F>>>)
Represents the case where we do allocate variables or enforce constraints.
Implementations§
Source§impl<F: Field> ConstraintSystemRef<F>
impl<F: Field> ConstraintSystemRef<F>
Sourcepub fn new(inner: ConstraintSystem<F>) -> Self
pub fn new(inner: ConstraintSystem<F>) -> Self
Construct a ConstraintSystemRef from a ConstraintSystem.
Sourcepub fn get_all_predicates_num_constraints(&self) -> IndexMap<Label, usize>
pub fn get_all_predicates_num_constraints(&self) -> IndexMap<Label, usize>
Returns the number of constraints in each predicate
Sourcepub fn get_predicates_num_constraints(
&self,
predicate_label: &str,
) -> Option<usize>
pub fn get_predicates_num_constraints( &self, predicate_label: &str, ) -> Option<usize>
Returns the number of constraints in the predicate with the given label
Sourcepub fn get_all_predicate_arities(&self) -> IndexMap<Label, usize>
pub fn get_all_predicate_arities(&self) -> IndexMap<Label, usize>
Returns the arity of each predicate
Sourcepub fn get_predicate_arity(&self, predicate_label: &str) -> Option<usize>
pub fn get_predicate_arity(&self, predicate_label: &str) -> Option<usize>
Returns the predicate type of the predicate with the given label
Sourcepub fn get_all_predicate_types(&self) -> BTreeMap<Label, Predicate<F>>
pub fn get_all_predicate_types(&self) -> BTreeMap<Label, Predicate<F>>
Returns the predicate types of each predicate
Sourcepub fn get_predicate_type(&self, predicate_label: &str) -> Option<Predicate<F>>
pub fn get_predicate_type(&self, predicate_label: &str) -> Option<Predicate<F>>
Returns the predicate type of the predicate with the given label
Sourcepub fn num_constraints(&self) -> usize
pub fn num_constraints(&self) -> usize
Returns the number of constraints which is the sum of the number of constraints in each predicate. #[inline]
Sourcepub fn num_instance_variables(&self) -> usize
pub fn num_instance_variables(&self) -> usize
Returns the number of instance variables.
Sourcepub fn instance_assignment(&self) -> Result<Vec<F>>
pub fn instance_assignment(&self) -> Result<Vec<F>>
Returns the number of instance variables.
Sourcepub fn witness_assignment(&self) -> Result<Vec<F>>
pub fn witness_assignment(&self) -> Result<Vec<F>>
Returns the number of instance variables.
Sourcepub fn num_variables(&self) -> usize
pub fn num_variables(&self) -> usize
Returns the number of instance variables.
Sourcepub fn num_predicates(&self) -> usize
pub fn num_predicates(&self) -> usize
Returns the number of predicates.
Sourcepub fn num_witness_variables(&self) -> usize
pub fn num_witness_variables(&self) -> usize
Returns the number of witness variables.
Sourcepub fn enforce_constraint(
&self,
predicate_label: &str,
lc_vec: impl IntoIterator<Item = Box<dyn FnOnce() -> LinearCombination<F>>, IntoIter: ExactSizeIterator>,
) -> Result<()>
pub fn enforce_constraint( &self, predicate_label: &str, lc_vec: impl IntoIterator<Item = Box<dyn FnOnce() -> LinearCombination<F>>, IntoIter: ExactSizeIterator>, ) -> Result<()>
Enforce a constraint in the constraint system. It takes a predicate name and enforces a vector of linear combinations of the length of the arity of the predicate enforces the constraint.
Sourcepub fn enforce_constraint_arity_2(
&self,
predicate_label: &str,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_constraint_arity_2( &self, predicate_label: &str, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce a constraint with arity 2.
Sourcepub fn enforce_constraint_arity_3(
&self,
predicate_label: &str,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
c: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_constraint_arity_3( &self, predicate_label: &str, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, c: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce a constraint with arity 3.
Sourcepub fn enforce_constraint_arity_4(
&self,
predicate_label: &str,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
c: impl FnOnce() -> LinearCombination<F>,
d: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_constraint_arity_4( &self, predicate_label: &str, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, c: impl FnOnce() -> LinearCombination<F>, d: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce a constraint with arity 4.
Sourcepub fn enforce_constraint_arity_5(
&self,
predicate_label: &str,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
c: impl FnOnce() -> LinearCombination<F>,
d: impl FnOnce() -> LinearCombination<F>,
e: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_constraint_arity_5( &self, predicate_label: &str, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, c: impl FnOnce() -> LinearCombination<F>, d: impl FnOnce() -> LinearCombination<F>, e: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce a constraint with arity 5.
Sourcepub fn enforce_r1cs_constraint(
&self,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
c: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_r1cs_constraint( &self, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, c: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce an R1CS constraint in the constraint system.
On input a, b, and c, this method enforces that a * b = c.
If the R1CS predicate has not been already added, this method will add it.
This method is a special case
of enforce_constraint and is used to provide a low-effort way to port prior
code that assumed that R1CS is the only kind of predicate.
Sourcepub fn enforce_sr1cs_constraint(
&self,
a: impl FnOnce() -> LinearCombination<F>,
b: impl FnOnce() -> LinearCombination<F>,
) -> Result<()>
pub fn enforce_sr1cs_constraint( &self, a: impl FnOnce() -> LinearCombination<F>, b: impl FnOnce() -> LinearCombination<F>, ) -> Result<()>
Enforce a SquareR1CS constraint in the constraint system.
On input a and b, this method enforces that a^2 = b.
If the SquareR1CS predicate has not been added to the constraint system,
this method will add it.
This method is a special case of enforce_constraint.
Sourcepub fn new_lc(
&self,
lc: impl FnOnce() -> LinearCombination<F>,
) -> Result<Variable>
pub fn new_lc( &self, lc: impl FnOnce() -> LinearCombination<F>, ) -> Result<Variable>
Obtain a new variable representing the linear combination lc.
Sourcepub fn set_mode(&self, mode: SynthesisMode)
pub fn set_mode(&self, mode: SynthesisMode)
Set self.mode to mode.
Sets the mode if there exists an underlying ConstraintSystem.
Sourcepub fn is_in_setup_mode(&self) -> bool
pub fn is_in_setup_mode(&self) -> bool
Check whether self.mode == SynthesisMode::Setup.
Returns true if
- There is an underlying
ConstraintSystemand, - It is in setup mode.
Sourcepub fn optimization_goal(&self) -> OptimizationGoal
pub fn optimization_goal(&self) -> OptimizationGoal
Check whether this constraint system aims to optimize weight, number of constraints, or neither.
Sourcepub fn set_optimization_goal(&self, goal: OptimizationGoal)
pub fn set_optimization_goal(&self, goal: OptimizationGoal)
Specify whether this constraint system should aim to optimize weight, number of constraints, or neither.
Sourcepub fn should_outline_instances(&self) -> bool
pub fn should_outline_instances(&self) -> bool
Should we outline instances according to the optimization specified in
Section 3, Page 11 of Polymath
By default, this flag is false.
Sourcepub fn set_instance_outliner(&self, outliner: InstanceOutliner<F>)
pub fn set_instance_outliner(&self, outliner: InstanceOutliner<F>)
Specify the strategy for how the instance should be outlined. This should be compatible with the predicates in the constraint system.
Sourcepub fn should_construct_matrices(&self) -> bool
pub fn should_construct_matrices(&self) -> bool
Check whether or not self will construct matrices.
Sourcepub fn new_input_variable<Func>(&self, f: Func) -> Result<Variable>
pub fn new_input_variable<Func>(&self, f: Func) -> Result<Variable>
Obtain a variable representing a new public instance input.
Sourcepub fn new_witness_variable<Func>(&self, f: Func) -> Result<Variable>
pub fn new_witness_variable<Func>(&self, f: Func) -> Result<Variable>
Obtain a new variable representing a new private witness variable.
Sourcepub fn register_predicate(
&self,
label: &str,
predicate: PredicateConstraintSystem<F>,
) -> Result<()>
pub fn register_predicate( &self, label: &str, predicate: PredicateConstraintSystem<F>, ) -> Result<()>
Register a predicate in the constraint system with a given label.
Sourcepub fn remove_predicate(&self, label: &str)
pub fn remove_predicate(&self, label: &str)
Remove a predicate with the given label from the constraint system.
Sourcepub fn has_predicate(&self, predicate_label: &str) -> bool
pub fn has_predicate(&self, predicate_label: &str) -> bool
Checks if there is a predicate with the given label in the constraint
Sourcepub fn assigned_value(&self, v: Variable) -> Option<F>
pub fn assigned_value(&self, v: Variable) -> Option<F>
Obtain the assignment corresponding to the Variable v.
Sourcepub fn is_satisfied(&self) -> Result<bool>
pub fn is_satisfied(&self) -> Result<bool>
If self is satisfied, outputs Ok(true).
If self is unsatisfied, outputs Ok(false).
If self.is_in_setup_mode() or if self == None, outputs Err(()).
Sourcepub fn which_is_unsatisfied(&self) -> Result<Option<String>>
pub fn which_is_unsatisfied(&self) -> Result<Option<String>>
If self is satisfied, outputs Ok(None).
If self is unsatisfied, outputs Some(s,i), where s is the label of
the unsatisfied prediacate and i is the index of
the first unsatisfied constraint in that predicate.
If self.is_in_setup_mode() or self == None, outputs Err(()).
Sourcepub fn finalize(&self)
pub fn finalize(&self)
Finalize the constraint system (either by outlining or inlining, if an optimization goal is set).
Sourcepub fn inline_all_lcs(&self)
pub fn inline_all_lcs(&self)
Naively inlines symbolic linear combinations into the linear combinations that use them.
Useful for standard pairing-based SNARKs where addition gates are cheap. For example, in the SNARKs such as [Groth16] and [Groth-Maller17], addition gates do not contribute to the size of the multi-scalar multiplication, which is the dominating cost.
Sourcepub fn into_inner(self) -> Option<ConstraintSystem<F>>
pub fn into_inner(self) -> Option<ConstraintSystem<F>>
Consumes self to return the inner ConstraintSystem<F>. Returns
None if Self::CS is None or if any other references to
Self::CS exist.
Sourcepub fn to_matrices(&self) -> Result<BTreeMap<Label, Vec<Matrix<F>>>>
pub fn to_matrices(&self) -> Result<BTreeMap<Label, Vec<Matrix<F>>>>
Get the matrices corresponding to the predicates.and the corresponding set of matrices
Sourcepub fn get_lc(&self, var: Variable) -> Option<LinearCombination<F>>
pub fn get_lc(&self, var: Variable) -> Option<LinearCombination<F>>
Get the linear combination corresponding to the given lc_index.
TODO: This function should ideally return a reference to the linear
combination and not clone it.
Sourcepub fn make_row(&self, lc: LinearCombination<F>) -> Result<Vec<(F, usize)>>
pub fn make_row(&self, lc: LinearCombination<F>) -> Result<Vec<(F, usize)>>
Given a linear combination, create a row in the matrix
Sourcepub fn borrow(&self) -> Option<Ref<'_, ConstraintSystem<F>>>
pub fn borrow(&self) -> Option<Ref<'_, ConstraintSystem<F>>>
Obtain an immutable reference to the underlying ConstraintSystem.
§Panics
This method panics if self is already mutably borrowed.
Sourcepub fn borrow_mut(&self) -> Option<RefMut<'_, ConstraintSystem<F>>>
pub fn borrow_mut(&self) -> Option<RefMut<'_, ConstraintSystem<F>>>
Obtain a mutable reference to the underlying ConstraintSystem.
§Panics
This method panics if self is already mutably borrowed.
Sourcepub fn constraint_names(&self) -> Option<Vec<String>>
pub fn constraint_names(&self) -> Option<Vec<String>>
Get trace information about all constraints in the system
Trait Implementations§
Source§impl<F: Clone + Field> Clone for ConstraintSystemRef<F>
impl<F: Clone + Field> Clone for ConstraintSystemRef<F>
Source§fn clone(&self) -> ConstraintSystemRef<F>
fn clone(&self) -> ConstraintSystemRef<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F: Field> From<ConstraintSystemRef<F>> for Namespace<F>
impl<F: Field> From<ConstraintSystemRef<F>> for Namespace<F>
Source§fn from(other: ConstraintSystemRef<F>) -> Self
fn from(other: ConstraintSystemRef<F>) -> Self
Source§impl<F: Field> PartialEq for ConstraintSystemRef<F>
impl<F: Field> PartialEq for ConstraintSystemRef<F>
impl<F: Field> Eq for ConstraintSystemRef<F>
Auto Trait Implementations§
impl<F> Freeze for ConstraintSystemRef<F>
impl<F> !RefUnwindSafe for ConstraintSystemRef<F>
impl<F> !Send for ConstraintSystemRef<F>
impl<F> !Sync for ConstraintSystemRef<F>
impl<F> Unpin for ConstraintSystemRef<F>
impl<F> UnsafeUnpin for ConstraintSystemRef<F>
impl<F> !UnwindSafe for ConstraintSystemRef<F>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.