15LimbsComparisonWitness limb_gt_or_gte_witness_(
const U256Decomposition&
a,
const U256Decomposition&
b,
bool allow_eq)
17 bool borrow = allow_eq ? (
a.lo <
b.lo) : (
a.lo <=
b.lo);
21 return { x_lo, x_hi, borrow };
25inline LimbsComparisonWitness limb_gt_witness(
const U256Decomposition&
a,
const U256Decomposition&
b)
27 return limb_gt_or_gte_witness_(
a,
b,
false);
31inline LimbsComparisonWitness limb_gte_witness(
const U256Decomposition&
a,
const U256Decomposition&
b)
33 return limb_gt_or_gte_witness_(
a,
b,
true);
43LimbsComparisonWitness canonical_decomposition(
const U256Decomposition& x_limbs, RangeCheckInterface& range_check)
49 const LimbsComparisonWitness p_sub_x_witness = limb_gt_witness(p_limbs, x_limbs);
54 return p_sub_x_witness;
72 const bool result_a_gt_b = a_integer > b_integer;
83 result_a_gt_b ? limb_gt_witness(a_limbs, b_limbs) : limb_gte_witness(b_limbs, a_limbs);
92 .p_sub_a_witness = p_sub_a_witness,
94 .p_sub_b_witness = p_sub_b_witness,
95 .res_witness = res_witness,
96 .gt_result = result_a_gt_b,
117 .p_sub_a_witness = p_sub_a_witness,
U256Decomposition canon_dec(const FF &a) override
Decomposes the provided field element into 128-bit limbs (in a constrained way).
EventEmitterInterface< FieldGreaterThanEvent > & events
bool ff_gt(const FF &a, const FF &b) override
Computes the result of a > b (in a constrained way).
void assert_range(uint128_t value, uint8_t num_bits) override
Assert that a value fits within a given bit-width.
AVM range check gadget for witness generation.
@ CANONICAL_DECOMPOSITION
U256Decomposition decompose_256(const uint256_t &x)
unsigned __int128 uint128_t
static constexpr uint256_t modulus