pub trait SubAir<AB: AirBuilder> {
type AirContext<'a>
where Self: 'a,
AB: 'a,
AB::Var: 'a,
AB::Expr: 'a;
// Required method
fn eval<'a>(&'a self, builder: &'a mut AB, ctx: Self::AirContext<'a>)
where AB::Var: 'a,
AB::Expr: 'a;
}
Expand description
Trait with associated types intended to allow re-use of constraint logic inside other AIRs.
A SubAir
is not an Air
itself.
A SubAir
is a struct that holds the means to generate a particular set of constraints,
meant to be re-usable within other AIRs.
The trait is designed to be maximally flexible, but typical implementations will separate
the AirContext
into two parts: Io
and AuxCols
. The Io
part will consist of
expressions (built using AB::Expr
) that the SubAir
does not own, while the AuxCols
are any internal columns that the SubAir
requires to generate its constraints. The
AuxCols
are columns that the SubAir
fully owns and should be internally determined by
the SubAir
from the Io
part. These AuxCols
are typically just slices of AB::Var
.
This trait only owns the constraints, but it is expected that the TraceSubRowGenerator trait
or some analogous functionality is also implemented so that the trace generation of the AuxCols
of each row can be done purely in terms of the Io
part.
Required Associated Types§
Sourcetype AirContext<'a>
where
Self: 'a,
AB: 'a,
AB::Var: 'a,
AB::Expr: 'a
type AirContext<'a> where Self: 'a, AB: 'a, AB::Var: 'a, AB::Expr: 'a
Type to define the context, typically in terms of AB::Expr
that are needed
to define the SubAir’s constraints.
Required Methods§
fn eval<'a>(&'a self, builder: &'a mut AB, ctx: Self::AirContext<'a>)
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.