mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-06 07:43:10 +00:00
added output constraint
This commit is contained in:
parent
bec189b598
commit
66e4f7c3cf
@ -5,7 +5,7 @@ use std::marker::PhantomData;
|
||||
use crate::circuit_builder::CircuitBuilder;
|
||||
use crate::field::extension_field::algebra::ExtensionAlgebra;
|
||||
use crate::field::extension_field::target::ExtensionTarget;
|
||||
use crate::field::extension_field::Extendable;
|
||||
use crate::field::extension_field::{FieldExtension, Extendable};
|
||||
use crate::field::field::Field;
|
||||
use crate::gates::gate::{Gate, GateRef};
|
||||
use crate::generator::{SimpleGenerator, WitnessGenerator};
|
||||
@ -70,17 +70,25 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for InsertionGate<F, D> {
|
||||
|
||||
fn eval_unfiltered(&self, vars: EvaluationVars<F, D>) -> Vec<F::Extension> {
|
||||
let insertion_index = vars.local_wires[Self::wires_insertion_index()];
|
||||
|
||||
let mut list_items = Vec::new();
|
||||
for i in 0..self.vec_size {
|
||||
list_items.push(vars.get_local_ext_algebra(Self::wires_list_item(i)));
|
||||
}
|
||||
let dummy_value : ExtensionAlgebra<F::Extension, D> = F::Extension::ZERO.into(); // will never be reached
|
||||
list_items.push(dummy_value);
|
||||
|
||||
let mut output_list_items = Vec::new();
|
||||
for i in 0..self.vec_size+1 {
|
||||
output_list_items.push(vars.get_local_ext_algebra(self.wires_output_list_item(i)));
|
||||
}
|
||||
|
||||
let element_to_insert = vars.get_local_ext_algebra(Self::wires_element_to_insert());
|
||||
|
||||
let mut constraints = Vec::new();
|
||||
|
||||
let mut already_inserted : ExtensionAlgebra<F::Extension, D> = F::Extension::ZERO.into();
|
||||
for r in 0..self.vec_size {
|
||||
for r in 0..self.vec_size + 1 {
|
||||
let cur_index = F::Extension::from_canonical_usize(r);
|
||||
|
||||
let equality_dummy = vars.get_local_ext_algebra(self.equality_dummy_for_round_r(r));
|
||||
@ -93,7 +101,8 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for InsertionGate<F, D> {
|
||||
};
|
||||
|
||||
// The two equality constraints:
|
||||
let equality_dummy_constraint : ExtensionAlgebra<F::Extension, D> = difference.into() * equality_dummy - insert_here;
|
||||
let difference_algebra : ExtensionAlgebra<F::Extension, D> = difference.into();
|
||||
let equality_dummy_constraint : ExtensionAlgebra<F::Extension, D> = difference_algebra * equality_dummy - insert_here;
|
||||
constraints.extend(equality_dummy_constraint.to_basefield_array());
|
||||
let mul_to_zero_constraint : ExtensionAlgebra<F::Extension, D> = (F::Extension::ONE.into() - insert_here) * difference;
|
||||
constraints.extend(mul_to_zero_constraint.to_basefield_array());
|
||||
@ -105,6 +114,8 @@ impl<F: Extendable<D>, const D: usize> Gate<F, D> for InsertionGate<F, D> {
|
||||
already_inserted += insert_here;
|
||||
|
||||
new_item += (F::Extension::ONE.into() - already_inserted) * list_items[r];
|
||||
|
||||
constraints.extend((new_item - output_list_items[r]).to_basefield_array());
|
||||
}
|
||||
|
||||
constraints
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user