pub struct ConstraintSystem<F: Field> { /* private fields */ }
Expand description

This is a description of the circuit environment, such as the gate, column and permutation arrangements.

Implementations§

source§

impl<F: Field> ConstraintSystem<F>

source

pub fn enable_constant(&mut self, column: Column<Fixed>)

Enables this fixed column to be used for global constant assignments.

§Side-effects

The column will be equality-enabled.

source

pub fn enable_equality<C: Into<Column<Any>>>(&mut self, column: C)

Enable the ability to enforce equality over cells in this column

source

pub fn lookup<S: AsRef<str>>( &mut self, name: S, table_map: impl FnOnce(&mut VirtualCells<'_, F>) -> Vec<(Expression<F>, TableColumn)> ) -> usize

Add a lookup argument for some input expressions and table columns.

table_map returns a map between input expressions and the table columns they need to match.

source

pub fn lookup_any<S: AsRef<str>>( &mut self, name: S, table_map: impl FnOnce(&mut VirtualCells<'_, F>) -> Vec<(Expression<F>, Expression<F>)> ) -> usize

Add a lookup argument for some input expressions and table expressions.

table_map returns a map between input expressions and the table expressions they need to match.

NOTE:
We should use extra Fixed column or Selector for tagging the table rows.
Also, it is needed to include a pair of tagging expressions([lookup_activator, table_activator]) in the table_map. Otherwise, we have soundness error.(See here)
For correct use, please reference here and here.

source

pub fn shuffle<S: AsRef<str>>( &mut self, name: S, shuffle_map: impl FnOnce(&mut VirtualCells<'_, F>) -> Vec<(Expression<F>, Expression<F>)> ) -> usize

Add a shuffle argument for some input expressions and table expressions.

source

pub fn get_any_query_index(&self, column: Column<Any>, at: Rotation) -> usize

source

pub fn set_minimum_degree(&mut self, degree: usize)

Sets the minimum degree required by the circuit, which can be set to a larger amount than actually needed. This can be used, for example, to force the permutation argument to involve more columns in the same set.

source

pub fn create_gate<C: Into<Constraint<F>>, Iter: IntoIterator<Item = C>, S: AsRef<str>>( &mut self, name: S, constraints: impl FnOnce(&mut VirtualCells<'_, F>) -> Iter )

Creates a new gate.

§Panics

A gate is required to contain polynomial constraints. This method will panic if constraints returns an empty iterator.

source

pub fn compress_selectors( self, selectors: Vec<Vec<bool>> ) -> (Self, Vec<Vec<F>>)

This will compress selectors together depending on their provided assignments. This ConstraintSystem will then be modified to add new fixed columns (representing the actual selectors) and will return the polynomials for those columns. Finally, an internal map is updated to find which fixed column corresponds with a given Selector.

Do not call this twice. Yes, this should be a builder pattern instead.

source

pub fn directly_convert_selectors_to_fixed( self, selectors: Vec<Vec<bool>> ) -> (Self, Vec<Vec<F>>)

Does not combine selectors and directly replaces them everywhere with fixed columns.

source

pub fn selector(&mut self) -> Selector

Allocate a new (simple) selector. Simple selectors cannot be added to expressions nor multiplied by other expressions containing simple selectors. Also, simple selectors may not appear in lookup argument inputs.

source

pub fn complex_selector(&mut self) -> Selector

Allocate a new complex selector that can appear anywhere within expressions.

source

pub fn lookup_table_column(&mut self) -> TableColumn

Allocates a new fixed column that can be used in a lookup table.

source

pub fn annotate_lookup_column<A, AR>( &mut self, column: TableColumn, annotation: A )
where A: Fn() -> AR, AR: Into<String>,

Annotate a Lookup column.

source

pub fn annotate_lookup_any_column<A, AR, T>(&mut self, column: T, annotation: A)
where A: Fn() -> AR, AR: Into<String>, T: Into<Column<Any>>,

Annotate an Instance column.

source

pub fn annotate_column<A, AR, T>(&mut self, column: T, annotation: A)
where A: Fn() -> AR, AR: Into<String>, T: Into<Column<Any>>,

Annotate a column.

source

pub fn fixed_column(&mut self) -> Column<Fixed>

Allocate a new fixed column

source

pub fn unblinded_advice_column(&mut self) -> Column<Advice>

Allocate a new unblinded advice column at FirstPhase

source

pub fn advice_column(&mut self) -> Column<Advice>

Allocate a new advice column at FirstPhase

source

pub fn unblinded_advice_column_in<P: Phase>( &mut self, phase: P ) -> Column<Advice>

Allocate a new unblinded advice column in given phase. This allows for the generation of deterministic commitments to advice columns which can be used to split large circuits into smaller ones, whose proofs can then be “joined” together by their common witness commitments.

source

pub fn advice_column_in<P: Phase>(&mut self, phase: P) -> Column<Advice>

Allocate a new advice column in given phase

§Panics

It panics if previous phase before the given one doesn’t have advice column allocated.

source

pub fn instance_column(&mut self) -> Column<Instance>

Allocate a new instance column

source

pub fn challenge_usable_after<P: Phase>(&mut self, phase: P) -> Challenge

Requests a challenge that is usable after the given phase.

§Panics

It panics if the given phase doesn’t have advice column allocated.

source

pub fn phases(&self) -> impl Iterator<Item = Phase>

Returns the list of phases

source

pub fn degree(&self) -> usize

Compute the degree of the constraint system (the maximum degree of all constraints).

source

pub fn blinding_factors(&self) -> usize

Compute the number of blinding factors necessary to perfectly blind each of the prover’s witness polynomials.

source

pub fn minimum_rows(&self) -> usize

Returns the minimum necessary rows that need to exist in order to account for e.g. blinding factors.

source

pub fn num_fixed_columns(&self) -> usize

Returns number of fixed columns

source

pub fn num_advice_columns(&self) -> usize

Returns number of advice columns

source

pub fn num_instance_columns(&self) -> usize

Returns number of instance columns

source

pub fn num_selectors(&self) -> usize

Returns number of selectors

source

pub fn num_challenges(&self) -> usize

Returns number of challenges

source

pub fn advice_column_phase(&self) -> Vec<u8>

Returns phase of advice columns

source

pub fn challenge_phase(&self) -> Vec<u8>

Returns phase of challenges

source

pub fn gates(&self) -> &Vec<Gate<F>>

Returns gates

source

pub fn general_column_annotations(&self) -> &HashMap<ColumnMid, String>

Returns general column annotations

source

pub fn advice_queries(&self) -> &Vec<(Column<Advice>, Rotation)>

Returns advice queries

source

pub fn instance_queries(&self) -> &Vec<(Column<Instance>, Rotation)>

Returns instance queries

source

pub fn fixed_queries(&self) -> &Vec<(Column<Fixed>, Rotation)>

Returns fixed queries

source

pub fn permutation(&self) -> &Argument

Returns permutation argument

source

pub fn lookups(&self) -> &Vec<Argument<F>>

Returns lookup arguments

source

pub fn shuffles(&self) -> &Vec<Argument<F>>

Returns shuffle arguments

source

pub fn constants(&self) -> &Vec<Column<Fixed>>

Returns constants

Trait Implementations§

source§

impl<F: Clone + Field> Clone for ConstraintSystem<F>

source§

fn clone(&self) -> ConstraintSystem<F>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<F: Debug + Field> Debug for ConstraintSystem<F>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<F: Field> Default for ConstraintSystem<F>

source§

fn default() -> ConstraintSystem<F>

Returns the “default value” for a type. Read more
source§

impl<F: Field> From<ConstraintSystem<F>> for ConstraintSystemMid<F>

source§

fn from(cs: ConstraintSystem<F>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<F> Freeze for ConstraintSystem<F>

§

impl<F> RefUnwindSafe for ConstraintSystem<F>
where F: RefUnwindSafe,

§

impl<F> Send for ConstraintSystem<F>

§

impl<F> Sync for ConstraintSystem<F>

§

impl<F> Unpin for ConstraintSystem<F>
where F: Unpin,

§

impl<F> UnwindSafe for ConstraintSystem<F>
where F: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> SyncDeps for T
where T: Send + Sync,