pub struct IdealCollector<I: Ideal, IFq: Ideal> {
pub ideals: Vec<IdealOrZero<I>>,
pub fq_ideals: Vec<Vec<IdealOrZero<IFq>>>,
}Expand description
A ConstraintBuilder that collects ideals used in a Uair.
Both $Q[X]$-only-ideals (from ConstraintBuilder::assert_in_ideal /
ConstraintBuilder::assert_zero) and new $F_{q_i}[X]$-ideals (from
ConstraintBuilder::assert_in_fq_ideal) are kept in separate vectors, so
downstream consumers (the PIOP layer) can dispatch them independently. The
$F_q[X]$ ideals are wrapped in IdealOrZero to reuse the unconditional
IdealCheck (over DummySemiring) proxy impl used during the collection;
the Zero variant is never produced by the collection (there is no
assert_fq_zero) but downstream consumers may construct it.
Fields§
§ideals: Vec<IdealOrZero<I>>§fq_ideals: Vec<Vec<IdealOrZero<IFq>>>$F_{q_i}[X]$-ideals indexed by their prime_idx into the
owning UAIR’s crate::UairSignature::primes tuple. Empty for
UAIRs with $Q[X]$-only constraints.
Implementations§
Trait Implementations§
Source§impl<I, IFq> ConstraintBuilder for IdealCollector<I, IFq>
impl<I, IFq> ConstraintBuilder for IdealCollector<I, IFq>
Source§type Expr = DummySemiring
type Expr = DummySemiring
Uair::constrain_general alongside the builder.Source§type Ideal = IdealOrZero<I>
type Ideal = IdealOrZero<I>
Source§type FqIdeal = IdealOrZero<IFq>
type FqIdeal = IdealOrZero<IFq>
UairSignature::primes. A single
ConstraintBuilder shares one runtime type for all primes; the prime
index is passed at the call site via
ConstraintBuilder::assert_in_fq_ideal. Builders that don’t care
about $F_q[X]$-constraints (counters, collectors, etc.) set
this to ImpossibleIdeal.Source§fn assert_in_ideal(&mut self, _expr: Self::Expr, ideal: &Self::Ideal)
fn assert_in_ideal(&mut self, _expr: Self::Expr, ideal: &Self::Ideal)
expr belongs to the ideal ideal.Source§fn assert_zero(&mut self, _expr: Self::Expr)
fn assert_zero(&mut self, _expr: Self::Expr)
expr is equal to zero which is
the same as saying that expr belongs to the zero ideal.Auto Trait Implementations§
impl<I, IFq> Freeze for IdealCollector<I, IFq>
impl<I, IFq> RefUnwindSafe for IdealCollector<I, IFq>where
I: RefUnwindSafe,
IFq: RefUnwindSafe,
impl<I, IFq> Send for IdealCollector<I, IFq>
impl<I, IFq> Sync for IdealCollector<I, IFq>
impl<I, IFq> Unpin for IdealCollector<I, IFq>
impl<I, IFq> UnsafeUnpin for IdealCollector<I, IFq>
impl<I, IFq> UnwindSafe for IdealCollector<I, IFq>where
I: UnwindSafe,
IFq: UnwindSafe,
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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