Expand description
Constraint circuits are a way to represent constraint polynomials in a way
that is amenable to optimizations. The constraint circuit is a directed
acyclic graph (DAG) of CircuitExpressions, where each
CircuitExpression is a node in the graph. The edges of the graph are
labeled with BinOps. The leafs of the graph are the inputs to the
constraint polynomial, and the (multiple) roots of the graph are the outputs
of all the constraint polynomials, with each root corresponding to a
different constraint polynomial. Because the graph has multiple roots, it is
called a “multitree.”
Structs§
- Constraint
Circuit - A wrapper around a
CircuitExpressionthat manages additional bookkeeping information, such as node id and visited counter. - Constraint
Circuit Builder - Helper struct to construct new leaf nodes (i.e., input or challenge or constant) in the circuit multitree. Ensures that newly created nodes, even non-leaf nodes created through joining two other nodes using an arithmetic operation, get a unique ID.
- Constraint
Circuit Monad ConstraintCircuitwith extra context pertaining to the whole multicircuit.- Degree
Lowering Info
Enums§
- BinOp
- Circuit
Expression - A circuit expression is the recursive data structure that represents the constraint circuit. It is a directed, acyclic graph of binary operations on a) the variables corresponding to columns in the AET, b) constants, and c) challenges. It has multiple roots, making it a “multitree.” Each root corresponds to one constraint.
- Dual
RowIndicator - The position of a variable in a constraint polynomial that operates on two rows (current and next) of the execution trace.
- Single
RowIndicator - The position of a variable in a constraint polynomial that operates on a single row of the execution trace.
Traits§
- Input
Indicator - Describes the position of a variable in a constraint polynomial in the row layout applicable for a certain kind of constraint polynomial.