mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-03 22:33:06 +00:00
More eval_unfiltered_recursively tweaks (#156)
This commit is contained in:
parent
6aaebfcac9
commit
7b20f342df
@ -110,7 +110,8 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
|||||||
let zero = self.zero();
|
let zero = self.zero();
|
||||||
let gate = ExponentiationGate::new(self.config.clone());
|
let gate = ExponentiationGate::new(self.config.clone());
|
||||||
let num_power_bits = gate.num_power_bits;
|
let num_power_bits = gate.num_power_bits;
|
||||||
let mut exp_bits_vec: Vec<Target> = exponent_bits.into_iter().map(|b| *b.borrow()).collect();
|
let mut exp_bits_vec: Vec<Target> =
|
||||||
|
exponent_bits.into_iter().map(|b| *b.borrow()).collect();
|
||||||
while exp_bits_vec.len() < num_power_bits {
|
while exp_bits_vec.len() < num_power_bits {
|
||||||
exp_bits_vec.push(zero);
|
exp_bits_vec.push(zero);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,10 +159,8 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for ExponentiationGate<F, D> {
|
|||||||
// power_bits is in LE order, but we accumulate in BE order.
|
// power_bits is in LE order, but we accumulate in BE order.
|
||||||
let cur_bit = power_bits[self.num_power_bits - i - 1];
|
let cur_bit = power_bits[self.num_power_bits - i - 1];
|
||||||
let mul_by = builder.select_ext(cur_bit, base, one);
|
let mul_by = builder.select_ext(cur_bit, base, one);
|
||||||
let computed_intermediate_value =
|
|
||||||
builder.mul_extension(prev_intermediate_value, mul_by);
|
|
||||||
let intermediate_value_diff =
|
let intermediate_value_diff =
|
||||||
builder.sub_extension(computed_intermediate_value, intermediate_values[i]);
|
builder.mul_sub_extension(prev_intermediate_value, mul_by, intermediate_values[i]);
|
||||||
constraints.push(intermediate_value_diff);
|
constraints.push(intermediate_value_diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -191,11 +191,10 @@ impl<F: Extendable<D>, const D: usize, const R: usize> Gate<F, D> for GMiMCGate<
|
|||||||
|
|
||||||
let constant = builder.constant_extension(self.constants[r].into());
|
let constant = builder.constant_extension(self.constants[r].into());
|
||||||
let cubing_input =
|
let cubing_input =
|
||||||
builder.add_many_extension(&[state[active], addition_buffer, constant]);
|
builder.add_three_extension(state[active], addition_buffer, constant);
|
||||||
let cubing_input_wire = vars.local_wires[Self::wire_cubing_input(r)];
|
let cubing_input_wire = vars.local_wires[Self::wire_cubing_input(r)];
|
||||||
constraints.push(builder.sub_extension(cubing_input, cubing_input_wire));
|
constraints.push(builder.sub_extension(cubing_input, cubing_input_wire));
|
||||||
let square = builder.mul_extension(cubing_input_wire, cubing_input_wire);
|
let f = builder.cube_extension(cubing_input_wire);
|
||||||
let f = builder.mul_extension(square, cubing_input_wire);
|
|
||||||
addition_buffer = builder.add_extension(addition_buffer, f);
|
addition_buffer = builder.add_extension(addition_buffer, f);
|
||||||
state[active] = builder.sub_extension(state[active], f);
|
state[active] = builder.sub_extension(state[active], f);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -140,10 +140,10 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for RandomAccessGate<F, D> {
|
|||||||
let index_matches = vars.local_wires[self.wire_index_matches_for_index(i)];
|
let index_matches = vars.local_wires[self.wire_index_matches_for_index(i)];
|
||||||
|
|
||||||
// The two equality constraints.
|
// The two equality constraints.
|
||||||
let prod = builder.mul_extension(difference, equality_dummy);
|
let one = builder.one_extension();
|
||||||
let one = builder.constant_extension(F::Extension::ONE);
|
|
||||||
let not_index_matches = builder.sub_extension(one, index_matches);
|
let not_index_matches = builder.sub_extension(one, index_matches);
|
||||||
let first_equality_constraint = builder.sub_extension(prod, not_index_matches);
|
let first_equality_constraint =
|
||||||
|
builder.mul_sub_extension(difference, equality_dummy, not_index_matches);
|
||||||
constraints.push(first_equality_constraint);
|
constraints.push(first_equality_constraint);
|
||||||
|
|
||||||
let second_equality_constraint = builder.mul_extension(index_matches, difference);
|
let second_equality_constraint = builder.mul_extension(index_matches, difference);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user