27 const AllEntities& in,
29 const FF& scaling_factor)
31 static const FF minus_one =
FF(-1);
32 static const FF minus_two =
FF(-2);
33 static const FF minus_three =
FF(-3);
34 static const size_t micro_limb_bits = 14;
35 static const auto maximum_sort_value = -
FF((1 << micro_limb_bits) - 1);
39 using View =
typename Accumulator::View;
40 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
41 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
42 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
43 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
44 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
45 auto ordered_range_constraints_0_shift = View(in.ordered_range_constraints_0_shift);
46 auto ordered_range_constraints_1_shift = View(in.ordered_range_constraints_1_shift);
47 auto ordered_range_constraints_2_shift = View(in.ordered_range_constraints_2_shift);
48 auto ordered_range_constraints_3_shift = View(in.ordered_range_constraints_3_shift);
49 auto ordered_range_constraints_4_shift = View(in.ordered_range_constraints_4_shift);
51 auto lagrange_real_last = View(in.lagrange_real_last);
52 auto lagrange_masking = View(in.lagrange_masking);
54 auto is_last_witness_or_masking = (lagrange_real_last + minus_one) * (lagrange_masking + minus_one);
57 auto delta_1 = ordered_range_constraints_0_shift - ordered_range_constraints_0;
58 auto delta_2 = ordered_range_constraints_1_shift - ordered_range_constraints_1;
59 auto delta_3 = ordered_range_constraints_2_shift - ordered_range_constraints_2;
60 auto delta_4 = ordered_range_constraints_3_shift - ordered_range_constraints_3;
61 auto delta_5 = ordered_range_constraints_4_shift - ordered_range_constraints_4;
65 tmp_1 *= (delta_1 + minus_one);
66 tmp_1 *= (delta_1 + minus_two);
67 tmp_1 *= (delta_1 + minus_three);
68 tmp_1 *= is_last_witness_or_masking;
69 tmp_1 *= scaling_factor;
74 tmp_2 *= (delta_2 + minus_one);
75 tmp_2 *= (delta_2 + minus_two);
76 tmp_2 *= (delta_2 + minus_three);
77 tmp_2 *= is_last_witness_or_masking;
78 tmp_2 *= scaling_factor;
84 tmp_3 *= (delta_3 + minus_one);
85 tmp_3 *= (delta_3 + minus_two);
86 tmp_3 *= (delta_3 + minus_three);
87 tmp_3 *= is_last_witness_or_masking;
88 tmp_3 *= scaling_factor;
93 tmp_4 *= (delta_4 + minus_one);
94 tmp_4 *= (delta_4 + minus_two);
95 tmp_4 *= (delta_4 + minus_three);
96 tmp_4 *= is_last_witness_or_masking;
97 tmp_4 *= scaling_factor;
101 auto tmp_5 = delta_5;
102 tmp_5 *= (delta_5 + minus_one);
103 tmp_5 *= (delta_5 + minus_two);
104 tmp_5 *= (delta_5 + minus_three);
105 tmp_5 *= is_last_witness_or_masking;
106 tmp_5 *= scaling_factor;
112 using View =
typename Accumulator::View;
113 auto ordered_range_constraints_0 = View(in.ordered_range_constraints_0);
114 auto ordered_range_constraints_1 = View(in.ordered_range_constraints_1);
115 auto ordered_range_constraints_2 = View(in.ordered_range_constraints_2);
116 auto ordered_range_constraints_3 = View(in.ordered_range_constraints_3);
117 auto ordered_range_constraints_4 = View(in.ordered_range_constraints_4);
118 auto lagrange_real_last = View(in.lagrange_real_last);
123 lagrange_real_last * (ordered_range_constraints_0 + maximum_sort_value) * scaling_factor;
126 lagrange_real_last * (ordered_range_constraints_1 + maximum_sort_value) * scaling_factor;
129 lagrange_real_last * (ordered_range_constraints_2 + maximum_sort_value) * scaling_factor;
132 lagrange_real_last * (ordered_range_constraints_3 + maximum_sort_value) * scaling_factor;
135 lagrange_real_last * (ordered_range_constraints_4 + maximum_sort_value) * scaling_factor;