mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-11 18:23:09 +00:00
Add wide_arithmetic
This commit is contained in:
parent
08e457458d
commit
702eab1583
@ -152,6 +152,18 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
||||
None
|
||||
}
|
||||
|
||||
/// Returns `a*b + c*d + e`.
|
||||
pub fn wide_arithmetic_extension(
|
||||
&mut self,
|
||||
a: ExtensionTarget<D>,
|
||||
b: ExtensionTarget<D>,
|
||||
c: ExtensionTarget<D>,
|
||||
d: ExtensionTarget<D>,
|
||||
e: ExtensionTarget<D>,
|
||||
) -> ExtensionTarget<D> {
|
||||
self.inner_product_extension(F::ONE, e, vec![(a, b), (c, d)])
|
||||
}
|
||||
|
||||
/// Returns `sum_{(a,b) in vecs} constant * a * b`.
|
||||
pub fn inner_product_extension(
|
||||
&mut self,
|
||||
@ -230,11 +242,7 @@ impl<F: Extendable<D>, const D: usize> CircuitBuilder<F, D> {
|
||||
c: ExtensionTarget<D>,
|
||||
) -> ExtensionTarget<D> {
|
||||
let one = self.one_extension();
|
||||
let gate = self.num_gates();
|
||||
let first_out =
|
||||
ExtensionTarget::from_range(gate, ArithmeticExtensionGate::<D>::wires_first_output());
|
||||
self.double_arithmetic_extension(F::ONE, F::ONE, one, a, b, one, c, first_out)
|
||||
.1
|
||||
self.wide_arithmetic_extension(one, a, one, b, c)
|
||||
}
|
||||
|
||||
/// Add `n` `ExtensionTarget`s with `n/2` `ArithmeticExtensionGate`s.
|
||||
|
||||
@ -328,50 +328,17 @@ pub(crate) fn eval_vanishing_poly_recursively<F: Extendable<D>, const D: usize>(
|
||||
let wire_value = vars.local_wires[j];
|
||||
let beta_ext = builder.convert_to_ext(betas[i]);
|
||||
let gamma_ext = builder.convert_to_ext(gammas[i]);
|
||||
let gate = builder.num_gates();
|
||||
let first_out = ExtensionTarget::from_range(
|
||||
gate,
|
||||
ArithmeticExtensionGate::<D>::wires_first_output(),
|
||||
);
|
||||
// `beta * s_ids[j] + wire_value + gamma`
|
||||
builder
|
||||
.double_arithmetic_extension(
|
||||
F::ONE,
|
||||
F::ONE,
|
||||
beta_ext,
|
||||
s_ids[j],
|
||||
wire_value,
|
||||
one,
|
||||
first_out,
|
||||
gamma_ext,
|
||||
)
|
||||
.1
|
||||
// `beta * s_id + wire_value + gamma`
|
||||
builder.wide_arithmetic_extension(beta_ext, s_ids[j], one, wire_value, gamma_ext)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let denominator_values = (0..common_data.config.num_routed_wires)
|
||||
.map(|j| {
|
||||
let wire_value = vars.local_wires[j];
|
||||
let s_sigma = s_sigmas[j];
|
||||
let beta_ext = builder.convert_to_ext(betas[i]);
|
||||
let gamma_ext = builder.convert_to_ext(gammas[i]);
|
||||
let gate = builder.num_gates();
|
||||
let first_out = ExtensionTarget::from_range(
|
||||
gate,
|
||||
ArithmeticExtensionGate::<D>::wires_first_output(),
|
||||
);
|
||||
// `beta * s_sigma + wire_value + gamma`
|
||||
builder
|
||||
.double_arithmetic_extension(
|
||||
F::ONE,
|
||||
F::ONE,
|
||||
beta_ext,
|
||||
s_sigma,
|
||||
wire_value,
|
||||
one,
|
||||
first_out,
|
||||
gamma_ext,
|
||||
)
|
||||
.1
|
||||
builder.wide_arithmetic_extension(beta_ext, s_sigmas[j], one, wire_value, gamma_ext)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
let quotient_values = (0..common_data.config.num_routed_wires)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user