Trait ark_r1cs_std::eq::EqGadget [−][src]
pub trait EqGadget<F: Field> { fn is_eq(&self, other: &Self) -> Result<Boolean<F>, SynthesisError>; fn is_neq(&self, other: &Self) -> Result<Boolean<F>, SynthesisError> { ... } fn conditional_enforce_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError> { ... } fn enforce_equal(&self, other: &Self) -> Result<(), SynthesisError> { ... } fn conditional_enforce_not_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError> { ... } fn enforce_not_equal(&self, other: &Self) -> Result<(), SynthesisError> { ... } }
Expand description
Specifies how to generate constraints that check for equality for two
variables of type Self
.
Required methods
Provided methods
Output a Boolean
value representing whether self.value() != other.value()
.
By default, this is defined as self.is_eq(other)?.not()
.
fn conditional_enforce_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError>
fn conditional_enforce_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError>
If should_enforce == true
, enforce that self
and other
are equal;
else, enforce a vacuously true statement.
A safe default implementation is provided that generates the following
constraints: self.is_eq(other)?.conditional_enforce_equal(&Boolean: :TRUE, should_enforce)
.
More efficient specialized implementation may be possible; implementors are encouraged to carefully analyze the efficiency and safety of these.
fn enforce_equal(&self, other: &Self) -> Result<(), SynthesisError>
fn enforce_equal(&self, other: &Self) -> Result<(), SynthesisError>
Enforce that self
and other
are equal.
A safe default implementation is provided that generates the following
constraints: self.conditional_enforce_equal(other, &Boolean::TRUE)
.
More efficient specialized implementation may be possible; implementors are encouraged to carefully analyze the efficiency and safety of these.
fn conditional_enforce_not_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError>
fn conditional_enforce_not_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError>
If should_enforce == true
, enforce that self
and other
are not
equal; else, enforce a vacuously true statement.
A safe default implementation is provided that generates the following
constraints: self.is_neq(other)?.conditional_enforce_equal(& Boolean::TRUE, should_enforce)
.
More efficient specialized implementation may be possible; implementors are encouraged to carefully analyze the efficiency and safety of these.
fn enforce_not_equal(&self, other: &Self) -> Result<(), SynthesisError>
fn enforce_not_equal(&self, other: &Self) -> Result<(), SynthesisError>
Enforce that self
and other
are not equal.
A safe default implementation is provided that generates the following
constraints: self.conditional_enforce_not_equal(other, &Boolean::TRUE)
.
More efficient specialized implementation may be possible; implementors are encouraged to carefully analyze the efficiency and safety of these.
Implementations on Foreign Types
fn conditional_enforce_equal(
&self,
other: &Self,
condition: &Boolean<F>
) -> Result<(), SynthesisError>
fn conditional_enforce_not_equal(
&self,
other: &Self,
should_enforce: &Boolean<F>
) -> Result<(), SynthesisError>
Implementors
impl<BF, P> EqGadget<<P as CubicExtParameters>::BasePrimeField> for CubicExtVar<BF, P> where
BF: FieldVar<P::BaseField, P::BasePrimeField>,
for<'a> &'a BF: FieldOpsBounds<'a, P::BaseField, BF>,
P: CubicExtVarParams<BF>,
impl<BF, P> EqGadget<<P as QuadExtParameters>::BasePrimeField> for QuadExtVar<BF, P> where
BF: FieldVar<P::BaseField, P::BasePrimeField>,
for<'b> &'b BF: FieldOpsBounds<'b, P::BaseField, BF>,
P: QuadExtVarParams<BF>,
impl<P, F> EqGadget<<<P as ModelParameters>::BaseField as Field>::BasePrimeField> for ProjectiveVar<P, F> where
P: SWModelParameters,
F: FieldVar<P::BaseField, <P::BaseField as Field>::BasePrimeField>,
for<'a> &'a F: FieldOpsBounds<'a, P::BaseField, F>,
impl<P, F> EqGadget<<<P as ModelParameters>::BaseField as Field>::BasePrimeField> for AffineVar<P, F> where
P: TEModelParameters,
F: FieldVar<P::BaseField, <P::BaseField as Field>::BasePrimeField>,
for<'b> &'b F: FieldOpsBounds<'b, P::BaseField, F>,