\ No newline at end of file
diff --git a/rustdoc/arrabiata/columns/enum.ChallengeTerm.html b/rustdoc/arrabiata/columns/enum.ChallengeTerm.html
index 640b5ec3a5..8386d097f0 100644
--- a/rustdoc/arrabiata/columns/enum.ChallengeTerm.html
+++ b/rustdoc/arrabiata/columns/enum.ChallengeTerm.html
@@ -1,4 +1,4 @@
-ChallengeTerm in arrabiata::columns - Rust
This enum represents the different gadgets that can be used in the circuit.
The selectors are defined at setup time, can take only the values 0 or
1 and are public.
This gadget implement the Poseidon hash instance described in the
-top-level documentation. The implementation does not use the “next row”
-and is unsafe at the moment as no permutation argument is implemented.
This gadget implement the Poseidon hash instance described in the
-top-level documentation. Compared to the previous one (that might be
-deprecated in the future), this implementation does use the “next row”
+
This gadget implement the Poseidon hash instance described in the
+top-level documentation. This implementation does use the “next row”
to allow the computation of one additional round per row. In the current
setup, with crate::NUMBER_OF_COLUMNS columns, we can compute 5 full
rounds per row.
This enum represents the different gadgets that can be used in the circuit.
The selectors are defined at setup time, can take only the values 0 or
1 and are public.
\ No newline at end of file
diff --git a/rustdoc/arrabiata/columns/struct.Challenges.html b/rustdoc/arrabiata/columns/struct.Challenges.html
index 3c84483488..431936d7aa 100644
--- a/rustdoc/arrabiata/columns/struct.Challenges.html
+++ b/rustdoc/arrabiata/columns/struct.Challenges.html
@@ -1,4 +1,4 @@
-Challenges in arrabiata::columns - Rust
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK.html b/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK.html
deleted file mode 100644
index 53945c6122..0000000000
--- a/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK.html
+++ /dev/null
@@ -1,4 +0,0 @@
-BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK in arrabiata - Rust
The number of bits per chunk in the bit decomposition.
-It is used to decompose the field elements of 255 bits into single bit.
-We use 17 rows of 15 bits decomposition.
-
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_CHUNKS.html b/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_CHUNKS.html
deleted file mode 100644
index 0531c05d8a..0000000000
--- a/rustdoc/arrabiata/constant.BIT_DECOMPOSITION_NUMBER_OF_CHUNKS.html
+++ /dev/null
@@ -1 +0,0 @@
-BIT_DECOMPOSITION_NUMBER_OF_CHUNKS in arrabiata - Rust
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.NUMBER_OF_COLUMNS.html b/rustdoc/arrabiata/constant.NUMBER_OF_COLUMNS.html
index f1db868a82..e0c19623d3 100644
--- a/rustdoc/arrabiata/constant.NUMBER_OF_COLUMNS.html
+++ b/rustdoc/arrabiata/constant.NUMBER_OF_COLUMNS.html
@@ -1,2 +1,2 @@
-NUMBER_OF_COLUMNS in arrabiata - Rust
The maximum number of columns that can be used in the circuit.
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.NUMBER_OF_PUBLIC_INPUTS.html b/rustdoc/arrabiata/constant.NUMBER_OF_PUBLIC_INPUTS.html
index 1d36a73a2d..a9ffcafc19 100644
--- a/rustdoc/arrabiata/constant.NUMBER_OF_PUBLIC_INPUTS.html
+++ b/rustdoc/arrabiata/constant.NUMBER_OF_PUBLIC_INPUTS.html
@@ -1,6 +1,6 @@
-NUMBER_OF_PUBLIC_INPUTS in arrabiata - Rust
The maximum number of public inputs the circuit can use per row
We do have 15 for now as we want to compute 5 rounds of poseidon per row
-using the gadget crate::columns::Gadget::PoseidonNextRow. In addition to
+using the gadget crate::columns::Gadget::Poseidon. In addition to
the 12 public inputs required for the rounds, we add 2 more for the values
to absorb.
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.NUMBER_OF_SELECTORS.html b/rustdoc/arrabiata/constant.NUMBER_OF_SELECTORS.html
index 537cfa4e52..ec751d6635 100644
--- a/rustdoc/arrabiata/constant.NUMBER_OF_SELECTORS.html
+++ b/rustdoc/arrabiata/constant.NUMBER_OF_SELECTORS.html
@@ -1,2 +1,2 @@
-NUMBER_OF_SELECTORS in arrabiata - Rust
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constant.NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO.html b/rustdoc/arrabiata/constant.NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO.html
index 5b8672cbe3..01494e56e1 100644
--- a/rustdoc/arrabiata/constant.NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO.html
+++ b/rustdoc/arrabiata/constant.NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO.html
@@ -1,4 +1,4 @@
-NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO in arrabiata - Rust
Define the number of values we must absorb when computating the hash to the
public IO.
FIXME:
For now, it is the number of columns as we are only absorbing the
diff --git a/rustdoc/arrabiata/constraints/index.html b/rustdoc/arrabiata/constraints/index.html
index cbd4f62dc0..c883612191 100644
--- a/rustdoc/arrabiata/constraints/index.html
+++ b/rustdoc/arrabiata/constraints/index.html
@@ -1 +1 @@
-
\ No newline at end of file
diff --git a/rustdoc/arrabiata/constraints/struct.Env.html b/rustdoc/arrabiata/constraints/struct.Env.html
index 100bdbabe8..f0080541ea 100644
--- a/rustdoc/arrabiata/constraints/struct.Env.html
+++ b/rustdoc/arrabiata/constraints/struct.Env.html
@@ -1,44 +1,45 @@
-Env in arrabiata::constraints - Rust
An environment to build constraints.
The constraint environment is mostly useful when we want to perform a Nova
proof.
The constraint environment must be instantiated only once, at the last step
of the computation.
The variable should be seen as a certain object that can be built by
multiplying and adding, i.e. the variable can be seen as a solution
to a polynomial.
When instantiating as expressions - “constraints” - it defines
-multivariate polynomials.
Load the affine coordinates of the elliptic curve point currently saved
in the temporary accumulators. Temporary accumulators could be seen as
a CPU cache, an intermediate storage between the RAM (random access
-memory) and the CPU registers (memory cells that are constrained). Read more
This module contains the implementation of the IVC scheme in addition to
running an arbitrary function that can use up to crate::NUMBER_OF_COLUMNS
columns.
At the moment, all constraints must be of maximum degree
-crate::MAX_DEGREE, but it might change in the future.
The number of bits per chunk in the bit decomposition.
-It is used to decompose the field elements of 255 bits into single bit.
-We use 17 rows of 15 bits decomposition.
The maximum number of public inputs the circuit can use per row
We do have 15 for now as we want to compute 5 rounds of poseidon per row
-using the gadget crate::columns::Gadget::PoseidonNextRow. In addition to
+using the gadget crate::columns::Gadget::Poseidon. In addition to
the 12 public inputs required for the rounds, we add 2 more for the values
to absorb.
The low-exponentiation value used by the Poseidon hash function for the
diff --git a/rustdoc/arrabiata/interpreter/enum.Instruction.html b/rustdoc/arrabiata/interpreter/enum.Instruction.html
index 30292f0330..1a0e3d251c 100644
--- a/rustdoc/arrabiata/interpreter/enum.Instruction.html
+++ b/rustdoc/arrabiata/interpreter/enum.Instruction.html
@@ -1,9 +1,5 @@
-Instruction in arrabiata::interpreter - Rust
For the moment, the type is not parametrized, on purpose, to keep it simple
(KISS method). However, IO could be encoded in the type, and encode a
typed control-flow. We leave this for future work.
Decompose a 16bits chunk into individual bits. The constructor parameter
-is the index of the chunk (it is supposed to be less than 16, as there
-are 16 chunks of 16 bits for a 255 bits scalar).
This gadget implement the Poseidon hash instance described in the
-top-level documentation. The implementation does not use the “next row”
-and is unsafe at the moment as no permutation argument is implemented.
This gadget implement the Poseidon hash instance described in the
top-level documentation. Compared to the previous one (that might be
deprecated in the future), this implementation does use the “next row”
to allow the computation of one additional round per row. In the current
setup, with NUMBER_OF_COLUMNS columns, we can compute 5 full rounds
per row.
Define the side of the temporary accumulator.
diff --git a/rustdoc/arrabiata/interpreter/fn.run_app.html b/rustdoc/arrabiata/interpreter/fn.run_app.html
index 4ee3f86587..79eec9f817 100644
--- a/rustdoc/arrabiata/interpreter/fn.run_app.html
+++ b/rustdoc/arrabiata/interpreter/fn.run_app.html
@@ -1,2 +1,2 @@
-
\ No newline at end of file
diff --git a/rustdoc/arrabiata/interpreter/fn.run_ivc.html b/rustdoc/arrabiata/interpreter/fn.run_ivc.html
index fdad79090c..598db5b9a9 100644
--- a/rustdoc/arrabiata/interpreter/fn.run_ivc.html
+++ b/rustdoc/arrabiata/interpreter/fn.run_ivc.html
@@ -1,4 +1,4 @@
-run_ivc in arrabiata::interpreter - Rust
This module contains the implementation of the IVC scheme in addition to
running an arbitrary function that can use up to crate::NUMBER_OF_COLUMNS
columns.
At the moment, all constraints must be of maximum degree
@@ -32,7 +32,6 @@
The prover will have to combine the constraints to generate the
full circuit at the end. The constraints will be combined using a
diff --git a/rustdoc/arrabiata/interpreter/trait.InterpreterEnv.html b/rustdoc/arrabiata/interpreter/trait.InterpreterEnv.html
index 6f4cb54596..28e924fd06 100644
--- a/rustdoc/arrabiata/interpreter/trait.InterpreterEnv.html
+++ b/rustdoc/arrabiata/interpreter/trait.InterpreterEnv.html
@@ -1,4 +1,4 @@
-
pub trait InterpreterEnv {
type Position: Clone + Copy;
type Variable: Clone + Add<Self::Variable, Output = Self::Variable> + Sub<Self::Variable, Output = Self::Variable> + Mul<Self::Variable, Output = Self::Variable> + Debug + Zero + One;
@@ -117,28 +117,28 @@
interpreter should be seen as a state machine with some built-in
functionality whose state is a matrix, and whose transitions are described
by polynomial functions.
-
The variable should be seen as a certain object that can be built by
multiplying and adding, i.e. the variable can be seen as a solution
to a polynomial.
When instantiating as expressions - “constraints” - it defines
multivariate polynomials.
There are no constraints on the returned value; callers must assert the relationship with
the source variable x and that the returned value fits in highest_bit - lowest_bit
bits.
There are no constraints saying that it is actually the previous
computed value. We should do something like a runtime lookup/permutation
check. It is left for when the lookup is implemented.
impl<Fp: PrimeField> InterpreterEnv for arrabiata::constraints::Env<Fp>
An environment to build constraints.
The constraint environment is mostly useful when we want to perform a Nova
proof.
The constraint environment must be instantiated only once, at the last step
of the computation.
\ No newline at end of file
diff --git a/rustdoc/arrabiata/sidebar-items.js b/rustdoc/arrabiata/sidebar-items.js
index 82f4596611..bacc8d2a6d 100644
--- a/rustdoc/arrabiata/sidebar-items.js
+++ b/rustdoc/arrabiata/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"constant":["BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK","BIT_DECOMPOSITION_NUMBER_OF_CHUNKS","IVC_CIRCUIT_SIZE","MAXIMUM_FIELD_SIZE_IN_BITS","MAX_DEGREE","MIN_SRS_LOG2_SIZE","NUMBER_OF_COLUMNS","NUMBER_OF_PUBLIC_INPUTS","NUMBER_OF_SELECTORS","NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO","POSEIDON_ALPHA","POSEIDON_ROUNDS_FULL","POSEIDON_STATE_SIZE"],"mod":["column_env","columns","constraints","interpreter","logup","poseidon_3_60_0_5_5_fp","poseidon_3_60_0_5_5_fq","proof","prover","verifier","witness"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"constant":["IVC_CIRCUIT_SIZE","MAXIMUM_FIELD_SIZE_IN_BITS","MAX_DEGREE","MIN_SRS_LOG2_SIZE","NUMBER_OF_COLUMNS","NUMBER_OF_PUBLIC_INPUTS","NUMBER_OF_SELECTORS","NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO","POSEIDON_ALPHA","POSEIDON_ROUNDS_FULL","POSEIDON_STATE_SIZE"],"mod":["column_env","columns","constraints","interpreter","logup","poseidon_3_60_0_5_5_fp","poseidon_3_60_0_5_5_fq","proof","prover","verifier","witness"]};
\ No newline at end of file
diff --git a/rustdoc/arrabiata/witness/constant.IVC_STARTING_INSTRUCTION.html b/rustdoc/arrabiata/witness/constant.IVC_STARTING_INSTRUCTION.html
index 339d59a86c..ea8482f589 100644
--- a/rustdoc/arrabiata/witness/constant.IVC_STARTING_INSTRUCTION.html
+++ b/rustdoc/arrabiata/witness/constant.IVC_STARTING_INSTRUCTION.html
@@ -1 +1 @@
-IVC_STARTING_INSTRUCTION in arrabiata::witness - Rust
\ No newline at end of file
diff --git a/rustdoc/arrabiata/witness/index.html b/rustdoc/arrabiata/witness/index.html
index 93009dd065..bebc19dd76 100644
--- a/rustdoc/arrabiata/witness/index.html
+++ b/rustdoc/arrabiata/witness/index.html
@@ -1 +1 @@
-arrabiata::witness - Rust
\ No newline at end of file
diff --git a/rustdoc/arrabiata/witness/struct.Env.html b/rustdoc/arrabiata/witness/struct.Env.html
index c1ed561f15..43f8086380 100644
--- a/rustdoc/arrabiata/witness/struct.Env.html
+++ b/rustdoc/arrabiata/witness/struct.Env.html
@@ -1,6 +1,6 @@
-Env in arrabiata::witness - Rust
The environment is run over big integers to avoid performing
reduction at all step. Instead the user implementing the interpreter can
reduce in the corresponding field when they want.
Next row in the execution trace. It is useful when we deal with
polynomials accessing “the next row”, i.e. witness columns where we do
evaluate at ζ and ζω.
For efficiency, and for having a single interpreter, we do not use one
of the fields. We use a generic BigInt to represent the values.
When building the witness, we will reduce into the corresponding field.
Load the affine coordinates of the elliptic curve point currently saved
in the temporary accumulators. Temporary accumulators could be seen as
a CPU cache, an intermediate storage between the RAM (random access
-memory) and the CPU registers (memory cells that are constrained). Read more
An extended instance is an instance that has been extended with extra
columns by quadraticization.
The original instance is stored in the instance field.
@@ -9,15 +9,15 @@
described by a degree 3 polynomial, an additional column will be added, and
extended will contain 1 commitment.
The commitments to the additional columns created by quadriticization
are appended to the existing commitments of the initial instance
to be absorbed. The scalars are unchanged.
This method takes an Instance and a commitment to zero and extends the
instance, returning a relaxed instance which is composed by the extended
instance, the scalar one, and the error commitment which is set to the
diff --git a/rustdoc/folding/instance_witness/struct.ExtendedWitness.html b/rustdoc/folding/instance_witness/struct.ExtendedWitness.html
index 1b6d77b870..3199efaf31 100644
--- a/rustdoc/folding/instance_witness/struct.ExtendedWitness.html
+++ b/rustdoc/folding/instance_witness/struct.ExtendedWitness.html
@@ -1,4 +1,4 @@
-
ExtendedWitness in folding::instance_witness - Rust
A relaxed instance is an instance that has been relaxed by the folding scheme.
It contains the original instance, extended with the columns added by
@@ -11,23 +11,23 @@
\ No newline at end of file
diff --git a/rustdoc/folding/instance_witness/trait.Instance.html b/rustdoc/folding/instance_witness/trait.Instance.html
index 82b6207f25..2040f5ca6e 100644
--- a/rustdoc/folding/instance_witness/trait.Instance.html
+++ b/rustdoc/folding/instance_witness/trait.Instance.html
@@ -1,4 +1,4 @@
-Instance in folding::instance_witness - Rust
\ No newline at end of file
diff --git a/rustdoc/folding/instance_witness/trait.RelaxableInstance.html b/rustdoc/folding/instance_witness/trait.RelaxableInstance.html
index adaa5d34d4..1502fdfe1b 100644
--- a/rustdoc/folding/instance_witness/trait.RelaxableInstance.html
+++ b/rustdoc/folding/instance_witness/trait.RelaxableInstance.html
@@ -1,5 +1,5 @@
-RelaxableInstance in folding::instance_witness - Rust
\ No newline at end of file
diff --git a/rustdoc/folding/instance_witness/trait.RelaxablePair.html b/rustdoc/folding/instance_witness/trait.RelaxablePair.html
index 832b2cd657..6dd60f6206 100644
--- a/rustdoc/folding/instance_witness/trait.RelaxablePair.html
+++ b/rustdoc/folding/instance_witness/trait.RelaxablePair.html
@@ -1,4 +1,4 @@
-RelaxablePair in folding::instance_witness - Rust
\ No newline at end of file
diff --git a/rustdoc/folding/instance_witness/trait.Witness.html b/rustdoc/folding/instance_witness/trait.Witness.html
index 2f1f3010e6..df7874827e 100644
--- a/rustdoc/folding/instance_witness/trait.Witness.html
+++ b/rustdoc/folding/instance_witness/trait.Witness.html
@@ -1 +1 @@
-Witness in folding::instance_witness - Rust
\ No newline at end of file
diff --git a/rustdoc/folding/standard_config/struct.Env.html b/rustdoc/folding/standard_config/struct.Env.html
index d7da25e9d4..5f99676910 100644
--- a/rustdoc/folding/standard_config/struct.Env.html
+++ b/rustdoc/folding/standard_config/struct.Env.html
@@ -1,10 +1,10 @@
Env in folding::standard_config - Rust
For PlonK, it will be the polynomials in evaluation form that we commit
@@ -19,10 +19,10 @@
In the generic prover/verifier, it would be kimchi_msm::witness::Witness.
\ No newline at end of file
diff --git a/rustdoc/search-index.js b/rustdoc/search-index.js
index 6c4efd6fd6..fce9cc73fd 100644
--- a/rustdoc/search-index.js
+++ b/rustdoc/search-index.js
@@ -1,5 +1,5 @@
var searchIndex = JSON.parse('{\
-"arrabiata":{"doc":"","t":"RRRRRRRRRRRRRAAAAAAAAAAANNNNNEDEGNNEDNNNNNNNNNNMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDMLLLLLLLLLLLLLLLLMLLLLLLLLLLLLMMMLLLLLLLLMLLLLLLLLLLLLLLLLNNNNEINNNNQNENQKKKKKKKKLLLLLLKKLKKLLLLKLLKKLLLKKLLLLKKKKKKKKKKFFKKKLLLLLLLLLKKKFFDLLLLLLLLLLLLFDRMLLLLLLLLLLLMLLLLLLMMMLLMMLLLLLLLLLMMMMLLLLMMLLLMLMMMMMLLLLLLLLMMMLMMMMLLLLMLLMLM","n":["BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK","BIT_DECOMPOSITION_NUMBER_OF_CHUNKS","IVC_CIRCUIT_SIZE","MAXIMUM_FIELD_SIZE_IN_BITS","MAX_DEGREE","MIN_SRS_LOG2_SIZE","NUMBER_OF_COLUMNS","NUMBER_OF_PUBLIC_INPUTS","NUMBER_OF_SELECTORS","NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO","POSEIDON_ALPHA","POSEIDON_ROUNDS_FULL","POSEIDON_STATE_SIZE","column_env","columns","constraints","interpreter","logup","poseidon_3_60_0_5_5_fp","poseidon_3_60_0_5_5_fq","proof","prover","verifier","witness","Alpha","App","Beta","BitDecomposition","BitDecompositionFrom16Bits","ChallengeTerm","Challenges","Column","E","EllipticCurveAddition","EllipticCurveScaling","Gadget","GadgetIter","Gamma","HomogenousChallenge","PermutationArgument","Poseidon","PoseidonNextRow","PublicInput","R","Selector","SixteenBitsDecomposition","X","alpha","beta","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","drop","drop","drop","drop","drop","eq","eq","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","gamma","homogenous_challenge","index","init","init","init","init","init","into","into","into","into","into","into_iter","is_alpha","is_alpha","iter","latex","latex","len","next","next_back","nth","ocaml","ocaml","par_bridge","r","serialize","size_hint","text","text","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","Env","a","activate_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow_mut","clone","clone_into","coin_folding_combiner","compute_lambda","constant","constrain_boolean","constraints","deref","deref_mut","double_ec_point","drop","fetch_input","fetch_value_to_absorb","fmt","from","get_all_constraints","get_all_constraints_for_ivc","get_poseidon_mds_matrix","get_poseidon_round_constant","idx_var","idx_var_next_row","idx_var_pi","init","into","inverse","is_same_ec_point","load_poseidon_state","load_temporary_accumulators","new","one","poseidon_mds","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","save_poseidon_state","save_temporary_accumulators","square","to_owned","try_from","try_into","type_id","vzip","write_column","write_public_input","zero","BitDecomposition","BitDecompositionFrom16Bits","EllipticCurveAddition","EllipticCurveScaling","Instruction","InterpreterEnv","Left","NoOp","Poseidon","PoseidonNextRow","Position","Right","Side","SixteenBitsDecomposition","Variable","activate_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","coin_folding_combiner","compute_lambda","compute_x5","constant","constrain_boolean","deref","deref","deref_mut","deref_mut","double_ec_point","drop","drop","fetch_input","fetch_value_to_absorb","fmt","from","from","get_poseidon_mds_matrix","get_poseidon_round_constant","init","init","into","into","inverse","is_same_ec_point","load_poseidon_state","load_temporary_accumulators","one","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","run_app","run_ivc","save_poseidon_state","save_temporary_accumulators","square","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write_column","write_public_input","zero","static_params","static_params","Proof","borrow","borrow_mut","deref","deref_mut","drop","from","init","into","try_from","try_into","type_id","vzip","prove","Env","IVC_STARTING_INSTRUCTION","_marker","accumulate_commitment_blinder","activate_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow_mut","challenges","coin_folding_combiner","compute_and_update_previous_commitments","compute_lambda","compute_output","constant","constrain_boolean","current_instruction","current_iteration","current_row","deref","deref_mut","domain_fp","domain_fq","double_ec_point","drop","fetch_input","fetch_instruction","fetch_next_instruction","fetch_value_to_absorb","from","get_poseidon_mds_matrix","get_poseidon_round_constant","idx_values_to_absorb","idx_var","idx_var_next_row","idx_var_pi","init","into","inverse","is_same_ec_point","ivc_accumulator_e1","ivc_accumulator_e2","load_poseidon_state","load_temporary_accumulators","new","next_state","one","previous_commitments_e1","previous_commitments_e2","previous_hash","public_state","r","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","reset_for_next_iteration","save_poseidon_state","save_temporary_accumulators","selectors","sponge_e1","sponge_e2","square","srs_e1","srs_e2","state","temporary_accumulators","try_from","try_into","type_id","vzip","witness","write_column","write_public_input","z0","zero","zi"],"q":[[0,"arrabiata"],[24,"arrabiata::columns"],[154,"arrabiata::constraints"],[213,"arrabiata::interpreter"],[292,"arrabiata::poseidon_3_60_0_5_5_fp"],[293,"arrabiata::poseidon_3_60_0_5_5_fq"],[294,"arrabiata::proof"],[307,"arrabiata::prover"],[308,"arrabiata::witness"]],"d":["The number of bits per chunk in the bit decomposition. It …","","The number of rows the IVC circuit requires.","The maximum number of bits the fields can be. It is …","The maximum degree of the polynomial that can be …","The minimum SRS size required to use Nova, in base 2. …","The maximum number of columns that can be used in the …","The maximum number of public inputs the circuit can use …","The number of selectors used in the circuit.","Define the number of values we must absorb when …","The low-exponentiation value used by the Poseidon hash …","The number of full rounds in the Poseidon hash function.","The number of elements in the state of the Poseidon hash …","This module will be used by the prover to evaluate at a …","","","This module contains the implementation of the IVC scheme …","This file will implement a logup argument to allow users …","","","","A prover for the folding/accumulation scheme","A verifier for the folding/accumulation scheme","","Challenge used to aggregate the constraints","","Both challenges used in the permutation argument","This gadget decomposes a 255 bits value into bits using 17 …","Decompose a 16bits chunk into individual bits.","","","","","","","This enum represents the different gadgets that can be …","An iterator over the variants of Gadget","","Challenge to homogenize the constraints","","This gadget implement the Poseidon hash instance described …","This gadget implement the Poseidon hash instance described …","","Random coin used to aggregate witnesses while folding","","Decompose a 255 bits scalar into 16 chunks of 16 bits.","","Challenge used to aggregate the constraints","Both challenges used in the permutation argument","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Challenge to homogenize the constraints","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Random coin used to aggregate witnesses while folding","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The parameter a is the coefficients of the elliptic curve …","","","","","","","","","","","","","","","","","","","","Double the elliptic curve point given by the affine …","","","","","Returns the argument unchanged.","Get all the constraints for the IVC circuit and the …","Get all the constraints for the IVC circuit, only.","","","","","","","Calls U::from(self).","Inverse of a variable","","","","","","","","","","","","","","","","","","","","Return the corresponding expression regarding the selected …","Return the corresponding expression regarding the selected …","","This gadget decomposes a 255 bits value into bits using 17 …","Decompose a 16bits chunk into individual bits. The …","","","A list of instruction/gadget implemented in the …","An abstract interpreter that provides some functionality …","","","This gadget implement the Poseidon hash instance described …","This gadget implement the Poseidon hash instance described …","","","Define the side of the temporary accumulator. When …","Decompose a 255 bits scalar into 16 chunks of 16 bits.","The variable should be seen as a certain object that can …","Activate the gadget for the row.","","Allocate a new variable in the circuit for the current row","Allocate a new variable in the circuit for the next row","","Assert that the two variables are equal","Assert that the variable is zero","Flagged as unsafe as it does require an additional range …","","","","","","","Return the folding combiner","Compute the coefficient λ used in the elliptic curve …","Compute the x^5 of the given variable","","","","","","","Double the elliptic curve point given by the affine …","","","Fetch an input of the application","Load the public value to absorb at the current step. The …","","Returns the argument unchanged.","Returns the argument unchanged.","Return the requested MDS matrix coefficient","","","","Calls U::from(self).","Calls U::from(self).","Inverse of a variable","Check if the points given by (x1, y1) and (x2, y2) are …","Load the state of the Poseidon hash function into the …","Load the affine coordinates of the elliptic curve point …","Build the constant one","Check if the variable is between [0, 2^16 - 1]","Read the i-th bit of the folding combiner, in little …","Return the corresponding variable at the given position","Get the 16bits chunks of the folding combiner, and save it …","Reset the environment to build the next row","Run the application","Run an iteration of the IVC scheme","Save the state of poseidon into the environment","Save temporary accumulators into the environment","Compute the square a field element","","","","","","","","","","Set the value of the variable at the given position for …","Write the corresponding public inputs.","Build the constant zero","","","FIXME: a proof for the Nova recursive SNARK","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","Generate a proof for the IVC circuit. All the information …","An environment that can be shared between IVC instances.","","","The blinder used to commit, to avoid committing to the …","Activate the gadget for the current row","","","","","","","Flagged as unsafe as it does require an additional range …","","","While folding, we must keep track of the challenges the …","FIXME: check if we need to pick the left or right sponge","Compute the commitments to the current witness, and update …","","Compute the output of the application on the previous …","","","Keep the current executed instruction This can be used to …","The current iteration of the IVC","Current processing row. Used to build the witness.","","","Domain for Fp","Domain for Fq","Double the elliptic curve point given by the affine …","","","","Describe the control-flow for the IVC circuit.","","Returns the argument unchanged.","","","Index of the values to absorb in the sponge","The index of the latest allocated variable in the circuit. …","","The index of the latest allocated public inputs in the …","","Calls U::from(self).","Inverse of a variable","","","","","","","Next row in the execution trace. It is useful when we deal …","","Commitments to the previous instances","","A previous hash, encoded in 2 chunks of 128 bits.","Contain the public state","The coin folding combiner will be used to generate the …","","","","","Reset the environment to build the next row","Reset the environment to build the next iteration","","","Selectors to activate the gadgets. The size of the outer …","The sponges will be used to simulate the verifier …","","","SRS for the first curve","SRS for the second curve","State of the current row in the execution trace","Temporary registers for elliptic curve points in affine …","","","","","The witness of the current instance of the circuit. The …","","","Initial input","","Current input"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,4,1,1,0,0,0,0,1,1,0,0,4,4,1,1,1,3,4,3,1,3,12,12,12,1,2,3,4,12,1,2,3,4,1,2,3,4,1,2,3,4,12,1,2,3,4,12,1,2,3,4,4,12,1,2,3,4,1,3,4,4,4,1,2,3,4,4,12,1,2,3,4,12,12,12,12,1,2,3,4,12,1,2,3,4,2,3,4,1,3,4,2,2,2,2,3,4,2,12,4,2,3,4,1,2,3,4,4,12,1,2,3,4,12,1,2,3,4,12,1,2,3,4,12,1,2,3,4,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,31,31,31,31,0,0,29,31,31,31,32,29,0,31,32,32,32,32,32,32,32,32,32,29,31,29,31,31,31,32,32,32,32,32,29,31,29,31,32,29,31,32,32,31,29,31,32,32,29,31,29,31,32,32,32,32,32,32,32,32,32,32,0,0,32,32,32,31,29,31,29,31,29,31,29,31,32,32,32,0,0,0,38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[[]],[[]],[[]],[[]],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[6,[[7,[4]]]],[5],[5],[5],[5],[5],[[1,1],8],[[3,3],8],[[4,4],8],[[],8],[[],8],[[1,9],10],[[2,9],10],[[3,9],10],[[4,9],10],[[4,9],10],[[]],[[]],[[]],[[]],[[]],0,0,[[[12,[11]],4]],[[],5],[[],5],[[],5],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[3,8],[[],8],[[],2],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[2,5],[2,17],[2,17],[[2,5],17],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[[],18],0,[[4,19],7],[2],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[[]],[[]],[[]],[[]],[[],15],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],20],[[],20],[[],20],[[],20],[[],20],[[]],[[]],[[]],[[]],[[]],0,0,[[[22,[21]],1]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],23,23]],[[]],[[]],[[[22,[[0,[24,11]]]]],[[22,[[0,[24,11]]]]]],[[]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],25]],[[[22,[21]]]],0,[5],[5],[[[22,[21]]]],[5],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[[0,[26,11]]]],9],10],[[]],[[[22,[21]]],[[28,[[27,[21]]]]]],[[[22,[21]]],[[28,[[27,[21]]]]]],[[[22,[21]],5,5]],[[[22,[21]],5,5]],0,0,0,[[],5],[[]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[21]],29]],[[[28,[[28,[21]]]],25],[[22,[21]]]],[[[22,[21]]]],0,[[[22,[21]]]],[[[22,[21]],30]],[[[22,[21]]]],[[[22,[21]],23]],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[21]],29]],[[[22,[21]]]],[[]],[[],7],[[],7],[[],20],[[]],[[[22,[21]]]],[[[22,[21]],25]],[[[22,[21]]]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[[]],[[]],[[]],[[]],[[]],[[]],[[23,23]],[[]],[[]],[[]],[[]],[31,31],[[]],[[]],[[]],[[]],[25],[[]],[5],[5],[5],[5],[[]],[5],[5],[[]],[5],[[31,9],10],[[]],[[]],[[5,5]],[[5,5]],[[],5],[[],5],[[]],[[]],[[]],[[]],[5],[29],[[]],[[]],[30],[[]],[23],[[]],[32],[[32,31]],[5],[29],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],20],[[],20],[[]],[[]],[[]],[25],[[]],[[],[[34,[33]]]],[[],[[34,[35]]]],0,[[]],[[]],[5],[5],[5],[[]],[[],5],[[]],[[],7],[[],7],[[],20],[[]],[[[37,[21,21,36,36]]],[[7,[38,15]]]],0,0,0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],1]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],23,23]],[[]],[[]],0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],25]],[[[37,[21,21,39,39]]]],0,0,0,[5],[5],0,0,[[[37,[21,21,39,39]]]],[5],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]],31],[[[37,[21,21,39,39]]],31],[[[37,[21,21,39,39]],5]],[[]],[[[37,[21,21,39,39]],5,5]],[[[37,[21,21,39,39]],5,5]],0,0,0,0,[[],5],[[]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],0,0,[[[37,[21,21,39,39]],5]],[[[37,[21,21,39,39]],29]],[[5,25,[40,[25]],[40,[25]]],[[37,[21,21,39,39]]]],0,[[[37,[21,21,39,39]]]],0,0,0,0,0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],30]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],23]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],5]],[[[37,[21,21,39,39]],29]],0,0,0,[[[37,[21,21,39,39]]]],0,0,0,0,[[],7],[[],7],[[],20],[[]],0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],25]],0,[[[37,[21,21,39,39]]]],0],"c":[],"p":[[4,"Gadget"],[3,"GadgetIter"],[4,"Column"],[4,"ChallengeTerm"],[15,"usize"],[8,"Deserializer"],[4,"Result"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"Field"],[3,"Challenges"],[3,"CacheId"],[3,"HashMap"],[3,"String"],[3,"RandomState"],[4,"Option"],[3,"IterBridge"],[8,"Serializer"],[3,"TypeId"],[8,"PrimeField"],[3,"Env"],[15,"u32"],[8,"Clone"],[3,"BigInt"],[8,"Debug"],[6,"E"],[3,"Vec"],[4,"Side"],[15,"u64"],[4,"Instruction"],[8,"InterpreterEnv"],[6,"Fp"],[3,"ArithmeticSpongeParams"],[6,"Fq"],[8,"AffineRepr"],[3,"Env"],[3,"Proof"],[8,"CommitmentCurve"],[15,"array"]]},\
+"arrabiata":{"doc":"","t":"RRRRRRRRRRRAAAAAAAAAAANNNEDEGNNEDNNNNNNNMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDMLMLLLLLLLLLLLLLLLMLLLLLLLLLLLLMMMLLLLLLLLMLLLLLLLLLLLLLLLLNNEINNNQNEQKKKKKKKKLLLLLLKKLKKLLLLKLLKKLLLKKLLLLKKKKKKKKKKFFKKKLLLLLLLLLKKKFFDLLLLLLLLLLLLFDRMLLLLLLLLLLLMLLLLLLMMMLLMMLLLLLLLLLMMMMLLLLMMLLLMLMMMMMLLLLLLLLMMMLMMMMLLLLMLLMLM","n":["IVC_CIRCUIT_SIZE","MAXIMUM_FIELD_SIZE_IN_BITS","MAX_DEGREE","MIN_SRS_LOG2_SIZE","NUMBER_OF_COLUMNS","NUMBER_OF_PUBLIC_INPUTS","NUMBER_OF_SELECTORS","NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO","POSEIDON_ALPHA","POSEIDON_ROUNDS_FULL","POSEIDON_STATE_SIZE","column_env","columns","constraints","interpreter","logup","poseidon_3_60_0_5_5_fp","poseidon_3_60_0_5_5_fq","proof","prover","verifier","witness","Alpha","App","Beta","ChallengeTerm","Challenges","Column","E","EllipticCurveAddition","EllipticCurveScaling","Gadget","GadgetIter","Gamma","HomogenousChallenge","Poseidon","PublicInput","R","Selector","X","alpha","beta","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deserialize","drop","drop","drop","drop","drop","eq","eq","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","gamma","homogenous_challenge","index","init","init","init","init","init","into","into","into","into","into","into_iter","is_alpha","is_alpha","iter","latex","latex","len","next","next_back","nth","ocaml","ocaml","par_bridge","r","serialize","size_hint","text","text","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","Env","a","activate_gadget","activated_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow_mut","clone","clone_into","coin_folding_combiner","compute_lambda","constant","constrain_boolean","constraints","deref","deref_mut","double_ec_point","drop","fetch_input","fetch_value_to_absorb","fmt","from","get_all_constraints","get_all_constraints_for_ivc","get_poseidon_mds_matrix","get_poseidon_round_constant","idx_var","idx_var_next_row","idx_var_pi","init","into","inverse","is_same_ec_point","load_poseidon_state","load_temporary_accumulators","new","one","poseidon_mds","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","save_poseidon_state","save_temporary_accumulators","square","to_owned","try_from","try_into","type_id","vzip","write_column","write_public_input","zero","EllipticCurveAddition","EllipticCurveScaling","Instruction","InterpreterEnv","Left","NoOp","Poseidon","Position","Right","Side","Variable","activate_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","coin_folding_combiner","compute_lambda","compute_x5","constant","constrain_boolean","deref","deref","deref_mut","deref_mut","double_ec_point","drop","drop","fetch_input","fetch_value_to_absorb","fmt","from","from","get_poseidon_mds_matrix","get_poseidon_round_constant","init","init","into","into","inverse","is_same_ec_point","load_poseidon_state","load_temporary_accumulators","one","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","run_app","run_ivc","save_poseidon_state","save_temporary_accumulators","square","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write_column","write_public_input","zero","static_params","static_params","Proof","borrow","borrow_mut","deref","deref_mut","drop","from","init","into","try_from","try_into","type_id","vzip","prove","Env","IVC_STARTING_INSTRUCTION","_marker","accumulate_commitment_blinder","activate_gadget","add_constraint","allocate","allocate_next_row","allocate_public_input","assert_equal","assert_zero","bitmask_be","borrow","borrow_mut","challenges","coin_folding_combiner","compute_and_update_previous_commitments","compute_lambda","compute_output","constant","constrain_boolean","current_instruction","current_iteration","current_row","deref","deref_mut","domain_fp","domain_fq","double_ec_point","drop","fetch_input","fetch_instruction","fetch_next_instruction","fetch_value_to_absorb","from","get_poseidon_mds_matrix","get_poseidon_round_constant","idx_values_to_absorb","idx_var","idx_var_next_row","idx_var_pi","init","into","inverse","is_same_ec_point","ivc_accumulator_e1","ivc_accumulator_e2","load_poseidon_state","load_temporary_accumulators","new","next_state","one","previous_commitments_e1","previous_commitments_e2","previous_hash","public_state","r","range_check16","read_bit_of_folding_combiner","read_position","read_sixteen_bits_chunks_folding_combiner","reset","reset_for_next_iteration","save_poseidon_state","save_temporary_accumulators","selectors","sponge_e1","sponge_e2","square","srs_e1","srs_e2","state","temporary_accumulators","try_from","try_into","type_id","vzip","witness","write_column","write_public_input","z0","zero","zi"],"q":[[0,"arrabiata"],[22,"arrabiata::columns"],[147,"arrabiata::constraints"],[207,"arrabiata::interpreter"],[282,"arrabiata::poseidon_3_60_0_5_5_fp"],[283,"arrabiata::poseidon_3_60_0_5_5_fq"],[284,"arrabiata::proof"],[297,"arrabiata::prover"],[298,"arrabiata::witness"]],"d":["The number of rows the IVC circuit requires.","The maximum number of bits the fields can be. It is …","The maximum degree of the polynomial that can be …","The minimum SRS size required to use Nova, in base 2. …","The maximum number of columns that can be used in the …","The maximum number of public inputs the circuit can use …","The number of selectors used in the circuit.","Define the number of values we must absorb when …","The low-exponentiation value used by the Poseidon hash …","The number of full rounds in the Poseidon hash function.","The number of elements in the state of the Poseidon hash …","This module will be used by the prover to evaluate at a …","","","This module contains the implementation of the IVC scheme …","This file will implement a logup argument to allow users …","","","","A prover for the folding/accumulation scheme","A verifier for the folding/accumulation scheme","","Challenge used to aggregate the constraints","","Both challenges used in the permutation argument","","","","","","","This enum represents the different gadgets that can be …","An iterator over the variants of Gadget","","Challenge to homogenize the constraints","This gadget implement the Poseidon hash instance described …","","Random coin used to aggregate witnesses while folding","","","Challenge used to aggregate the constraints","Both challenges used in the permutation argument","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Challenge to homogenize the constraints","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","Random coin used to aggregate witnesses while folding","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The parameter a is the coefficients of the elliptic curve …","","","","","","","","","","","","","","","","","","","","","Double the elliptic curve point given by the affine …","","","","","Returns the argument unchanged.","Get all the constraints for the IVC circuit and the …","Get all the constraints for the IVC circuit, only.","","","","","","","Calls U::from(self).","Inverse of a variable","","","","","","","","","","","","","","","","","","","","Return the corresponding expression regarding the selected …","Return the corresponding expression regarding the selected …","","","","A list of instruction/gadget implemented in the …","An abstract interpreter that provides some functionality …","","","This gadget implement the Poseidon hash instance described …","","","Define the side of the temporary accumulator. When …","The variable should be seen as a certain object that can …","Activate the gadget for the row.","","Allocate a new variable in the circuit for the current row","Allocate a new variable in the circuit for the next row","","Assert that the two variables are equal","Assert that the variable is zero","Flagged as unsafe as it does require an additional range …","","","","","","","Return the folding combiner","Compute the coefficient λ used in the elliptic curve …","Compute the x^5 of the given variable","","","","","","","Double the elliptic curve point given by the affine …","","","Fetch an input of the application","Load the public value to absorb at the current step. The …","","Returns the argument unchanged.","Returns the argument unchanged.","Return the requested MDS matrix coefficient","","","","Calls U::from(self).","Calls U::from(self).","Inverse of a variable","Check if the points given by (x1, y1) and (x2, y2) are …","Load the state of the Poseidon hash function into the …","Load the affine coordinates of the elliptic curve point …","Build the constant one","Check if the variable is between [0, 2^16 - 1]","Read the i-th bit of the folding combiner, in little …","Return the corresponding variable at the given position","Get the 16bits chunks of the folding combiner, and save it …","Reset the environment to build the next row","Run the application","Run an iteration of the IVC scheme","Save the state of poseidon into the environment","Save temporary accumulators into the environment","Compute the square a field element","","","","","","","","","","Set the value of the variable at the given position for …","Write the corresponding public inputs.","Build the constant zero","","","FIXME: a proof for the Nova recursive SNARK","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","Generate a proof for the IVC circuit. All the information …","An environment that can be shared between IVC instances.","","","The blinder used to commit, to avoid committing to the …","Activate the gadget for the current row","","","","","","","Flagged as unsafe as it does require an additional range …","","","While folding, we must keep track of the challenges the …","FIXME: check if we need to pick the left or right sponge","Compute the commitments to the current witness, and update …","","Compute the output of the application on the previous …","","","Keep the current executed instruction This can be used to …","The current iteration of the IVC","Current processing row. Used to build the witness.","","","Domain for Fp","Domain for Fq","Double the elliptic curve point given by the affine …","","","","Describe the control-flow for the IVC circuit.","","Returns the argument unchanged.","","","Index of the values to absorb in the sponge","The index of the latest allocated variable in the circuit. …","","The index of the latest allocated public inputs in the …","","Calls U::from(self).","Inverse of a variable","","","","","","","Next row in the execution trace. It is useful when we deal …","","Commitments to the previous instances","","A previous hash, encoded in 2 chunks of 128 bits.","Contain the public state","The coin folding combiner will be used to generate the …","","","","","Reset the environment to build the next row","Reset the environment to build the next iteration","","","Selectors to activate the gadgets. The size of the outer …","The sponges will be used to simulate the verifier …","","","SRS for the first curve","SRS for the second curve","State of the current row in the execution trace","Temporary registers for elliptic curve points in affine …","","","","","The witness of the current instance of the circuit. The …","","","Initial input","","Current input"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,4,0,0,0,0,1,1,0,0,4,4,1,3,4,3,3,12,12,12,1,2,3,4,12,1,2,3,4,1,2,3,4,1,2,3,4,12,1,2,3,4,12,1,2,3,4,4,12,1,2,3,4,1,3,4,4,4,1,2,3,4,4,12,1,2,3,4,12,12,12,12,1,2,3,4,12,1,2,3,4,2,3,4,1,3,4,2,2,2,2,3,4,2,12,4,2,3,4,1,2,3,4,4,12,1,2,3,4,12,1,2,3,4,12,1,2,3,4,12,1,2,3,4,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,31,31,0,0,29,31,31,32,29,0,32,32,32,32,32,32,32,32,32,29,31,29,31,31,31,32,32,32,32,32,29,31,29,31,32,29,31,32,32,31,29,31,32,32,29,31,29,31,32,32,32,32,32,32,32,32,32,32,0,0,32,32,32,31,29,31,29,31,29,31,29,31,32,32,32,0,0,0,38,38,38,38,38,38,38,38,38,38,38,38,0,0,0,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[[]],[[]],[[]],[[]],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[6,[[7,[4]]]],[5],[5],[5],[5],[5],[[1,1],8],[[3,3],8],[[4,4],8],[[],8],[[],8],[[1,9],10],[[2,9],10],[[3,9],10],[[4,9],10],[[4,9],10],[[]],[[]],[[]],[[]],[[]],0,0,[[[12,[11]],4]],[[],5],[[],5],[[],5],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[3,8],[[],8],[[],2],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[2,5],[2,17],[2,17],[[2,5],17],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[[],18],0,[[4,19],7],[2],[[3,[14,[13,3]]],15],[[[14,[13,16]]],15],[[]],[[]],[[]],[[]],[[],15],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],20],[[],20],[[],20],[[],20],[[],20],[[]],[[]],[[]],[[]],[[]],0,0,[[[22,[21]],1]],0,[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],23,23]],[[]],[[]],[[[22,[[0,[24,11]]]]],[[22,[[0,[24,11]]]]]],[[]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],25]],[[[22,[21]]]],0,[5],[5],[[[22,[21]]]],[5],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[[0,[26,11]]]],9],10],[[]],[[[22,[21]]],[[28,[[27,[21]]]]]],[[[22,[21]]],[[28,[[27,[21]]]]]],[[[22,[21]],5,5]],[[[22,[21]],5,5]],0,0,0,[[],5],[[]],[[[22,[21]]]],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[21]],29]],[[[28,[[28,[21]]]],25],[[22,[21]]]],[[[22,[21]]]],0,[[[22,[21]]]],[[[22,[21]],30]],[[[22,[21]]]],[[[22,[21]],23]],[[[22,[21]]]],[[[22,[21]],5]],[[[22,[21]],29]],[[[22,[21]]]],[[]],[[],7],[[],7],[[],20],[[]],[[[22,[21]]]],[[[22,[21]],25]],[[[22,[21]]]],0,0,0,0,0,0,0,0,0,0,0,[1],[[]],[[]],[[]],[[]],[[]],[[]],[[23,23]],[[]],[[]],[[]],[[]],[31,31],[[]],[[]],[[]],[[]],[25],[[]],[5],[5],[5],[5],[[]],[5],[5],[[]],[5],[[31,9],10],[[]],[[]],[[5,5]],[[5,5]],[[],5],[[],5],[[]],[[]],[[]],[[]],[5],[29],[[]],[[]],[30],[[]],[23],[[]],[32],[[32,31]],[5],[29],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],20],[[],20],[[]],[[]],[[]],[25],[[]],[[],[[34,[33]]]],[[],[[34,[35]]]],0,[[]],[[]],[5],[5],[5],[[]],[[],5],[[]],[[],7],[[],7],[[],20],[[]],[[[37,[21,21,36,36]]],[[7,[38,15]]]],0,0,0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],1]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],23,23]],[[]],[[]],0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],25]],[[[37,[21,21,39,39]]]],0,0,0,[5],[5],0,0,[[[37,[21,21,39,39]]]],[5],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]],31],[[[37,[21,21,39,39]]],31],[[[37,[21,21,39,39]],5]],[[]],[[[37,[21,21,39,39]],5,5]],[[[37,[21,21,39,39]],5,5]],0,0,0,0,[[],5],[[]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],0,0,[[[37,[21,21,39,39]],5]],[[[37,[21,21,39,39]],29]],[[5,25,[40,[25]],[40,[25]]],[[37,[21,21,39,39]]]],0,[[[37,[21,21,39,39]]]],0,0,0,0,0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],30]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],23]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],5]],[[[37,[21,21,39,39]],29]],0,0,0,[[[37,[21,21,39,39]]]],0,0,0,0,[[],7],[[],7],[[],20],[[]],0,[[[37,[21,21,39,39]]]],[[[37,[21,21,39,39]],25]],0,[[[37,[21,21,39,39]]]],0],"c":[],"p":[[4,"Gadget"],[3,"GadgetIter"],[4,"Column"],[4,"ChallengeTerm"],[15,"usize"],[8,"Deserializer"],[4,"Result"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"Field"],[3,"Challenges"],[3,"CacheId"],[3,"HashMap"],[3,"String"],[3,"RandomState"],[4,"Option"],[3,"IterBridge"],[8,"Serializer"],[3,"TypeId"],[8,"PrimeField"],[3,"Env"],[15,"u32"],[8,"Clone"],[3,"BigInt"],[8,"Debug"],[6,"E"],[3,"Vec"],[4,"Side"],[15,"u64"],[4,"Instruction"],[8,"InterpreterEnv"],[6,"Fp"],[3,"ArithmeticSpongeParams"],[6,"Fq"],[8,"AffineRepr"],[3,"Env"],[3,"Proof"],[8,"CommitmentCurve"],[15,"array"]]},\
"export_test_vectors":{"doc":"","t":"AFANNNNEELLLLLLLLLLLLLLLLLLLLFLLLLLLLLDDLLLLLLLLLLLLLLFLLMLLMMFFLLMLLLLLLLL","n":["inner","main","vectors","B10","Hex","Kimchi","Legacy","Mode","ParamType","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","from_str","from_str","init","init","into","into","main","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","TestVector","TestVectors","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","generate","init","init","input","into","into","name","output","poseidon","rand_fields","serialize","serialize","test_vectors","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":[[0,"export_test_vectors"],[3,"export_test_vectors::inner"],[38,"export_test_vectors::vectors"]],"d":["","“Usage: cargo run –all-features –bin …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","creates a set of test vectors","","","","Calls U::from(self).","Calls U::from(self).","","","Computes the poseidon hash of several field elements. Uses …","generates a vector of length field elements","","","","","","","","","","",""],"i":[0,0,0,2,2,5,5,0,0,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,2,5,0,2,5,2,5,2,5,2,5,0,0,9,10,9,10,9,10,9,10,9,10,9,10,9,10,0,9,10,10,9,10,9,10,0,0,9,10,9,9,10,9,10,9,10,9,10],"f":[0,[[]],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[1],[1],[1],[1],[1],[1],[[2,3],4],[[5,3],4],[[]],[[]],[6,[[7,[2]]]],[6,[[7,[5]]]],[[],1],[[],1],[[]],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],8],[[],8],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[1],[1],[1],[1],[1],[1],[[9,3],4],[[10,3],4],[[]],[[]],[[2,5],9],[[],1],[[],1],0,[[]],[[]],0,0,[[[12,[11]],[13,[11]]],11],[[14,15],[[16,[11]]]],[[9,17],7],[[10,17],7],0,[[],7],[[],7],[[],7],[[],7],[[],8],[[],8],[[]],[[]]],"c":[],"p":[[15,"usize"],[4,"Mode"],[3,"Formatter"],[6,"Result"],[4,"ParamType"],[15,"str"],[4,"Result"],[3,"TypeId"],[3,"TestVectors"],[3,"TestVector"],[6,"Fp"],[15,"slice"],[3,"ArithmeticSpongeParams"],[8,"Rng"],[15,"u8"],[3,"Vec"],[8,"Serializer"]]},\
"flamegraph":{"doc":"","t":"FF","n":["black_box","main"],"q":[[0,"flamegraph"]],"d":["function to avoid optimizations by the compiler taken from …",""],"i":[0,0],"f":[[[]],[[]]],"c":[],"p":[]},\
"folding":{"doc":"This library implements basic components to fold …","t":"EQQNQQCCIIDDCQNNCCNQEQQQCQLLLLLLLLKALLLLKALALLLLLLLLMLLLLLLLAMAMLLLMMLLLLLLLLLLALLLLKLLLLLLAMMKMAMMMMLLLLLLLLLLLLLLLLLLLMIEDIDNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLKLLLLLLLLLLLLLLLMMNNNNENNNLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLNNENLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNENNNENNIEEEDNNNNNNNNENNNNDNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMFLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDIIIIIDDIMLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLKLKLLLLLLLMLLLLLKKKLLLLKLLLLLLLLLLLLLLLLLLMLLLLMDDLLLLLLLLLLMMLLLLLLMFLLLLLLLLDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Alphas","Challenge","Column","Combinations","Curve","Env","ExpExtension","FoldingCompatibleExpr","FoldingConfig","FoldingEnv","FoldingOutput","FoldingScheme","Instance","Instance","Left","Powers","RelaxedInstance","RelaxedWitness","Right","Selector","Side","Srs","Structure","Structure","Witness","Witness","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","challenge","checker","clone","clone","clone_into","clone_into","col","columns","combine","decomposable_folding","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","domain","drop","drop","drop","drop","eq","equivalent","equivalent","eval_leaf","expression","expressions","extended_witness_generator","fmt","fold_instance_pair","fold_instance_witness_pair","folded_instance","folded_witness","from","from","from","from","get","get_number_of_additional_columns","init","init","init","init","instance_witness","into","into","into","into","new","new","new","new_sized","other","pair","powers","quadraticization","relaxed_extended_left_instance","relaxed_extended_right_instance","selector","srs","standard_config","structure","t_0","t_1","to_absorb","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","verify_fold","vzip","vzip","vzip","vzip","zero_vec","Checker","Column","ExtendedProvider","Provide","Provider","Selector","X","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","check","check_rec","clone","clone_into","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","equivalent","equivalent","fmt","from","from","from","hash","init","init","init","inner_provider","instance","instance","into","into","into","is_witness","new","new","resolve","resolve","resolve","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","witness","witness","Alpha","Challenge","Constant","Error","ExtendedFoldingColumn","Inner","Selector","WitnessExtended","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","equivalent","equivalent","fmt","from","hash","init","into","to_owned","try_from","try_into","type_id","vzip","DecomposableFoldingScheme","borrow","borrow_mut","deref","deref_mut","drop","fold_instance_pair","fold_instance_witness_pair","from","get_number_of_additional_columns","init","into","new","try_from","try_into","type_id","vzip","Col","Const","EvalLeaf","Result","add","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","fmt","fmt","from","init","into","map","mul","mul","sub","to_owned","to_string","try_from","try_into","type_id","unwrap","vzip","Add","Add","Alpha","Atom","Atom","Cell","Challenge","Constant","Degree","Double","Double","Error","ExpExtension","ExtendedWitness","Extensions","FoldingColumnTrait","FoldingCompatibleExpr","FoldingCompatibleExprInner","FoldingExp","IntegratedFoldingExpr","Mul","Mul","Neg","One","Pos","Pow","Pow","Selector","Sign","Square","Square","Sub","Sub","Term","Two","U","Zero","add","add","add","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","default","degree","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","double","drop","drop","drop","drop","drop","drop","drop","drop","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","exp","extract_terms","final_expression","flatten_quad_columns","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","folding_expression","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","hash","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","is_witness","map_variable","mul","mul","mul","mul","neg","neg","partial_cmp","sign","simplify","sub","sub","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","ExtendedInstance","ExtendedWitness","Foldable","Instance","RelaxableInstance","RelaxablePair","RelaxableWitness","RelaxedInstance","RelaxedWitness","Witness","blinder","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","combine","combine","combine","combine","combine","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","eq","eq","equivalent","equivalent","equivalent","equivalent","error_commitment","error_vec","extended","extended","extended_instance","extended_witness","fmt","fmt","from","from","from","from","get_alphas","get_alphas","get_blinder","get_blinder","get_extended_column","get_extended_column_commitment","init","init","init","init","instance","into","into","into","into","is_extended","relax","relax","relax","relax","relax","relax","relax","to_absorb","to_absorb","to_absorb","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","u","vzip","vzip","vzip","vzip","witness","ExtendedWitnessGenerator","Quadraticized","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","extended_witness_generator","extra_constraints","from","from","init","init","into","into","original_constraints","quadraticize","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","EmptyStructure","Env","StandardConfig","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","challenge","clone","clone_into","col","default","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","equivalent","equivalent","fmt","from","from","from","hash","index","init","init","init","into","into","into","new","selector","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip"],"q":[[0,"folding"],[121,"folding::checker"],[185,"folding::columns"],[213,"folding::decomposable_folding"],[230,"folding::eval_leaf"],[258,"folding::expressions"],[468,"folding::instance_witness"],[578,"folding::quadraticization"],[608,"folding::standard_config"]],"d":["Combinators that will be used to fold the constraints, …","The type of an abstract challenge that can be found in the …","","","The target curve used by the polynomial commitment","","","","","Describe a folding environment. The type parameters are:","Output of the folding prover","","","For Plonk, it will be the commitments to the polynomials …","","","","","","","This type refers to the two instances to be folded","The SRS used by the polynomial commitment. The SRS is used …","","Structure which could be storing useful information like …","","For PlonK, it will be the polynomials in evaluation form …","","","","","","","","","Obtains a given challenge from the expanded instance for …","Define the different structures required for the examples …","","","","","Returns the evaluations of a given column witness at omega …","This module contains description of the additional columns …","","This variant of folding is designed to efficiently handle …","","","","","","","","","","","","","","","","","","","Implement a library to represent expressions/multivariate …","","","Fold two relaxable instances into a relaxed instance. It …","This is the main entry point to fold two instances and …","The folded instance, containing, in particular, the result …","Folded witness, containing, in particular, the result of …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Return the number of additional columns added by …","","","","","This module defines a list of traits and structures that …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Creates a new environment storing the structure, instances …","","","","","","","A library to reduce constraints into degree 2.","The left relaxed instance, including the potential …","The right relaxed instance, including the potential …","similar to Self::col, but folding may ask for a dynamic …","","This module offers a standard implementation of …","","The error terms of degree 1, see the top-level …","The error terms of degree 2, see the top-level …","Elements to absorbed in IVC, in the same order as done in …","","","","","","","","","","","","","","","Verifier of the folding scheme; returns a new folded …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","A list of randomizer to combine expressions","A challenge used by the PIOP or the folding scheme.","A constant value in our expression","The error term introduced in the “relaxed” instance.","Describes the additional columns. It is parametrized by a …","The variables of the initial circuit, without …","A “virtual” selector that can be used to …","For the extra columns added by the module quadraticization.","","","","","","","","","","","","Returns the argument unchanged.","","","Calls U::from(self).","","","","","","","","","","","","Fold two relaxable instances into a relaxed instance. It …","folding with a selector will assume that only the selector …","Returns the argument unchanged.","Return the number of additional columns added by …","","Calls U::from(self).","Creates a new folding scheme for decomposable circuits. It …","","","","","","","Result of a folding expression evaluation.","","","","","","","","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","","","","","","","The random values α_{i} used to aggregate constraints","","","","","","Describe the degree of a constraint. As described in the …","","","The error term","Extra expressions that can be created by folding","Additional columns created by quadraticization","extra nodes created by folding, should not be passed to …","","Compatible folding expressions that can be used with …","Components to be used to convert multivariate polynomials …","Internal expression used for folding. A “folding” …","A value of type IntegratedFoldingExpr is the result of the …","","","","","","","","Represent a dynamic selector, in the case of using …","Used to encode the sign of a term in a polynomial.","","","","","A term of a polynomial For instance, in the polynomial …","","The variable u used to make the polynomial homogenous","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Return the degree of the column","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Combines constraints into single expression","Map all quad columns into regular witness columns.","","","","","","","","","Convert a list of folding compatible expression into the …","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Maps variable (column index) in expression using the mapper","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","An extended instance is an instance that has been extended …","This structure represents a witness extended with extra …","","","","","Trait to make a witness relaxable/homogenizable","A relaxed instance is an instance that has been relaxed by …","","","Blinder used for the commitments to the cross terms","","","","","","","","","","","","","","","","","Combine two objects ‘a’ and ‘b’ into a new object …","","","Combine two relaxed instances into a new relaxed instance.","","","","","","","","","","","","","","","","","","","","The commitment to the error term, introduced when …","The error vector, introduced when homogenizing the …","Extra columns added by quadraticization to lower the …","Commitments to the extra columns added by quadraticization","The original instance, extended with the columns added by …","The original witness, extended with the columns added by …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the alphas values for the instance","","Return the blinder that can be used while committing to …","Returns the blinder value. It is the same as the one of …","Provides access to the extra columns added by …","Provides access to commitments to the extra columns added …","","","","","The original instance.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Return true if the no extra columns are added by …","","","","This method takes a witness and a vector of evaluations to …","This method takes an Instance and a commitment to zero and …","","","This method returns the scalars and commitments that must …","Return the elements to be absorbed by the sponge","Returns the elements to be absorbed by the sponge","","","","","","","","","","","","","","","","","The scalar u that is used to homogenize the polynomials","","","","","This is the original witness, without quadraticization","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","","Calls U::from(self).","Calls U::from(self).","","Returns the constraints converted into degree 2 or less …","","","","","","","","","Default type for when you don’t need structure","A generic Index based environment","A standard folding config that supports: G: any curve Col: …","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","",""],"i":[0,12,12,4,12,12,0,0,0,0,0,0,0,12,1,4,0,0,1,12,0,12,12,73,0,12,13,20,1,4,13,20,1,4,73,0,1,4,1,4,73,0,4,0,13,20,1,4,13,20,1,4,13,13,20,1,4,4,4,4,0,13,0,13,4,13,13,20,20,13,20,1,4,4,13,13,20,1,4,0,13,20,1,4,73,13,4,4,1,20,4,0,20,20,73,13,0,13,20,20,20,1,4,13,20,1,4,13,20,1,4,13,20,1,4,13,13,20,1,4,13,0,0,0,0,0,27,27,29,31,27,29,31,27,74,74,27,27,29,31,27,29,31,27,29,31,27,27,27,27,27,29,31,27,27,29,31,27,31,29,31,29,31,27,27,29,31,75,29,31,27,29,31,27,29,31,27,29,31,27,29,31,27,29,31,33,33,33,33,0,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,0,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,37,37,0,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,22,44,45,22,44,32,32,32,0,22,44,45,0,45,32,0,0,0,0,0,22,44,46,43,46,22,44,45,0,22,44,22,44,0,43,45,43,43,22,44,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,43,48,63,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,44,43,45,32,22,44,46,47,48,43,45,32,22,44,46,43,43,44,44,46,46,47,0,48,22,43,45,32,22,44,46,47,48,0,43,45,32,32,32,22,22,22,22,44,46,47,48,43,44,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,63,22,43,22,44,47,46,47,43,47,22,22,44,43,45,32,22,44,46,47,48,22,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,43,45,32,22,44,46,47,48,0,0,0,0,0,0,0,0,0,0,18,58,60,18,30,58,60,18,30,58,60,18,30,58,60,18,30,76,58,60,18,30,58,60,18,30,58,60,18,30,58,60,18,30,60,18,60,60,18,18,18,30,58,60,18,30,58,30,58,60,18,30,59,60,59,60,30,18,58,60,18,30,60,58,60,18,30,58,14,77,19,58,60,18,30,59,60,18,58,60,18,30,58,60,18,30,58,60,18,30,58,60,18,30,18,58,60,18,30,58,0,0,78,79,78,79,78,79,78,79,78,79,78,78,78,79,78,79,78,79,78,0,78,79,78,79,78,79,78,79,0,0,0,68,70,72,68,70,72,68,70,70,68,70,68,70,72,68,70,72,68,70,72,72,72,72,72,68,70,72,72,70,68,70,72,68,70,72,68,68,70,68,70,72,68,70,72,68,70,72,68,70,72],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1],0,[1,1],[[[4,[[0,[2,3]]]]],[[4,[[0,[2,3]]]]]],[[]],[[]],[[5,1],6],0,[[[4,[3]],[4,[3]],3],[[4,[3]]]],0,[7],[7],[7],[7],[7],[7],[7],[7],0,[7],[7],[7],[7],[[[4,[3]],[4,[3]]],8],[[],8],[[],8],0,0,0,0,[[[4,[[0,[9,3]]]],10],11],[[[13,[12]],14,14,[16,[15]],17],18],[[[13,[12]],19,19,17],[[20,[12]]]],0,0,[[]],[[]],[[]],[[]],[[[4,[3]],7],[[21,[3]]]],[[[13,[12]]],7],[[],7],[[],7],[[],7],[[],7],0,[[]],[[]],[[]],[[]],[[16,16]],[[[23,[[22,[12]]]],24]],[3,[[4,[3]]]],[[3,7],[[4,[3]]]],[1,1],[[[20,[12]]]],[[[4,[3]]],[[23,[3]]]],0,0,0,[1,6],0,0,0,0,0,0,[[]],[[]],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[],26],[[],26],[[[13,[12]],18,18,15,15,17],18],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[22,24]],[[22,24],23],[27,27],[[]],[7],[7],[7],[7],[7],[7],[7],[7],[7],[[27,27],8],[[],8],[[],8],[[27,10],11],[[]],[[]],[[]],[[27,28]],[[],7],[[],7],[[],7],0,0,0,[[]],[[]],[[]],[27,8],[[],[[29,[12]]]],[[18,30],[[31,[12]]]],[[32,24],23],[[[29,[12]],[32,[12]],24],23],[[[31,[12]],[32,[12]],24],23],[[]],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[],26],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[[33,[12]]],[[33,[12]]]],[[]],[7],[7],[7],[[[33,[12]],[33,[12]]],8],[[],8],[[],8],[[[33,[12]],10],11],[[]],[[[33,[12]],28]],[[],7],[[]],[[]],[[],25],[[],25],[[],26],[[]],0,[[]],[[]],[7],[7],[7],[[[34,[12]],14,14,[16,[15]],17],18],[[[34,[12]],19,19,21,17],[[20,[12]]]],[[]],[[[34,[12]]],7],[[],7],[[]],[[[35,[[23,[[22,[12]]]]]],[23,[[22,[12]]]],24]],[[],25],[[],25],[[],26],[[]],0,0,0,0,[[[37,[[0,[36,2]]]],[37,[[0,[36,2]]]]],[[37,[[0,[36,2]]]]]],[[]],[[]],[[[37,[2]]],[[37,[2]]]],[[]],[7],[7],[7],[[[37,[9]],10],11],[[[37,[38]],10],11],[[]],[[],7],[[]],[[[37,[2]],39,39],[[37,[2]]]],[[[37,[[0,[40,2]]]],[0,[40,2]]],[[37,[[0,[40,2]]]]]],[[[37,[[0,[40,2]]]],[37,[[0,[40,2]]]]],[[37,[[0,[40,2]]]]]],[[[37,[[0,[41,2]]]],[37,[[0,[41,2]]]]],[[37,[[0,[41,2]]]]]],[[]],[[],42],[[],25],[[],25],[[],26],[[[37,[2,2]]],[[23,[2,2]]]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[43,43]],[[[22,[12]],[22,[12]]],[[22,[12]]]],[[[44,[12]],[44,[12]]],[[44,[12]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[43,43],[[[45,[12]]],[[45,[12]]]],[[[32,[12]]],[[32,[12]]]],[[[22,[12]]],[[22,[12]]]],[[[44,[12]]],[[44,[12]]]],[46,46],[[[47,[12]]],[[47,[12]]]],[[[48,[12]]],[[48,[12]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,43],49],[[],[[48,[12]]]],[[],43],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[[[44,[12]]],[[44,[12]]]],[7],[7],[7],[7],[7],[7],[7],[7],[[43,43],8],[[[45,[12]],[45,[12]]],8],[[[32,[12]],[32,[12]]],8],[[[22,[12]],[22,[12]]],8],[[[44,[12]],[44,[12]]],8],[[46,46],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],0,[[[44,[12]]],[[51,[50]]]],[[[48,[12]]],[[22,[12]]]],[[[22,[12]],39],[[22,[12]]]],[[43,10],11],[[[45,[12]],10],11],[[[32,[12]],10],11],[[[22,[12]],10],11],[[[44,[12]],10],11],[[46,10],11],[[[47,[[0,[9,12]]]],10],11],[[[48,[12]],10],11],[[[23,[[22,[12]]]]]],[[]],[[]],[[[54,[[53,[52]]]]],[[32,[12]]]],[[]],[[[53,[52]]],[[32,[12]]]],[[]],[[[55,[[54,[[55,[[53,[52]]]]]]]]],[[22,[12]]]],[[[55,[[53,[52]]]]],[[22,[12]]]],[[[55,[[54,[[53,[52]]]]]]],[[22,[12]]]],[[]],[[]],[[]],[[]],[[43,28]],[[[44,[12]],28]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[[22,[12]],39],[[22,[12]]]],[[43,43]],[[[22,[12]],[22,[12]]],[[22,[12]]]],[[[44,[12]],[44,[12]]],[[44,[12]]]],[[[47,[12]],[47,[12]]]],[46,46],[[[47,[12]]]],[[43,43],[[21,[49]]]],0,[[[22,[12]]],[[44,[12]]]],[[[22,[12]],[22,[12]]],[[22,[12]]]],[[[44,[12]],[44,[12]]],[[44,[12]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[22,[12]]],42],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[],26],[[],26],[[],26],[[],26],[[],26],[[],26],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[58,[[0,[2,56]],[0,[2,[57,[[0,[2,56]]]]]]]]],[[58,[[0,[2,56]],[0,[2,[57,[[0,[2,56]]]]]]]]]],[[[60,[[0,[2,56]],[0,[2,[59,[[0,[2,56]]]]]]]]],[[60,[[0,[2,56]],[0,[2,[59,[[0,[2,56]]]]]]]]]],[[[18,[[0,[2,56]],[0,[2,[59,[[0,[2,56]]]]]]]]],[[18,[[0,[2,56]],[0,[2,[59,[[0,[2,56]]]]]]]]]],[[[30,[[0,[2,56]],[0,[2,[57,[[0,[2,56]]]]]]]]],[[30,[[0,[2,56]],[0,[2,[57,[[0,[2,56]]]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[[58,[56,[57,[56]]]],[58,[56,[57,[56]]]]],[[58,[56,[57,[56]]]]]],[[[60,[56,[59,[56]]]],[60,[56,[59,[56]]]]],[[60,[56,[59,[56]]]]]],[[[18,[56,[59,[56]]]],[18,[56,[59,[56]]]]],[[18,[56,[59,[56]]]]]],[[[30,[56,[57,[56]]]],[30,[56,[57,[56]]]]],[[30,[56,[57,[56]]]]]],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[7],[[[60,[[0,[61,56]],[0,[61,[59,[[0,[61,56]]]]]]]],[60,[[0,[61,56]],[0,[61,[59,[[0,[61,56]]]]]]]]],8],[[[18,[[0,[61,56]],[0,[61,[59,[[0,[61,56]]]]]]]],[18,[[0,[61,56]],[0,[61,[59,[[0,[61,56]]]]]]]]],8],[[],8],[[],8],[[],8],[[],8],0,0,0,0,0,0,[[[58,[[0,[9,56]],[0,[9,[57,[[0,[9,56]]]]]]]],10],11],[[[30,[[0,[9,56]],[0,[9,[57,[[0,[9,56]]]]]]]],10],11],[[]],[[]],[[]],[[]],[[],4],[[[60,[56,[59,[56]]]]],4],[[]],[[[60,[56,[59,[56]]]]]],[[[30,[56,[57,[56]]]],7],[[21,[[62,[24]]]]]],[[[18,[56,[59,[56]]]],7],[[21,[[15,[56]]]]]],[[],7],[[],7],[[],7],[[],7],0,[[]],[[]],[[]],[[]],[[[58,[56,[57,[56]]]]],8],[[],18],[[[62,[24]]],30],[[[62,[24]]]],[[[62,[24]]],30],[[],18],[[[18,[56,[59,[56]]]]],[[18,[56,[59,[56]]]]]],[[[30,[56,[57,[56]]]],[62,[24]]],[[30,[56,[57,[56]]]]]],[[]],[[[60,[56,[59,[56]]]]]],[[[18,[56,[59,[56]]]]]],[[]],[[]],[[]],[[]],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[],26],[[],26],0,[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[7],[7],[7],[7],[7],[7],0,0,[[]],[[]],[[],7],[[],7],[[]],[[]],0,[[[23,[[44,[12]]]]]],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[[68,[56,[0,[63,64,65]],66,[0,[2,[67,[[0,[63,64,65]]]]]],[0,[[59,[56]],67,2]],[0,[[57,[56]],2,[67,[[0,[63,64,65]]]],[67,[66]]]]]],1]],[[[70,[[0,[2,69]]]]],[[70,[[0,[2,69]]]]]],[[]],[[[68,[56,[0,[63,64,65]],66,[0,[2,[67,[[0,[63,64,65]]]]]],[0,[[59,[56]],67,2]],[0,[[57,[56]],2,[67,[[0,[63,64,65]]]],[67,[66]]]]]],[0,[63,64,65]],5,1],6],[[],[[70,[[0,[71,69]]]]]],[7],[7],[7],[7],[7],[7],[7],[7],[7],[[72,72],8],[[],8],[[],8],[[72,10],11],[[]],[[]],[[]],[[72,28]],[[[70,[69]]]],[[],7],[[],7],[[],7],[[]],[[]],[[]],[[[16,[[0,[[59,[56]],67,2]]]],[16,[[0,[[57,[56]],2,[67,[[0,[63,64,65]]]],[67,[66]]]]]]],[[68,[56,[0,[63,64,65]],66,[0,[2,[67,[[0,[63,64,65]]]]]],[0,[[59,[56]],67,2]],[0,[[57,[56]],2,[67,[[0,[63,64,65]]]],[67,[66]]]]]]]],[[[68,[56,[0,[63,64,65]],66,[0,[2,[67,[[0,[63,64,65]]]]]],[0,[[59,[56]],67,2]],[0,[[57,[56]],2,[67,[[0,[63,64,65]]]],[67,[66]]]]]],66,1],6],[[]],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],26],[[],26],[[],26],[[]],[[]],[[]]],"c":[],"p":[[4,"Side"],[8,"Clone"],[8,"Field"],[4,"Alphas"],[4,"CurrOrNext"],[15,"slice"],[15,"usize"],[15,"bool"],[8,"Debug"],[3,"Formatter"],[6,"Result"],[8,"FoldingConfig"],[3,"FoldingScheme"],[8,"RelaxableInstance"],[3,"PolyComm"],[15,"array"],[8,"FqSponge"],[3,"RelaxedInstance"],[8,"RelaxablePair"],[3,"FoldingOutput"],[4,"Option"],[4,"FoldingCompatibleExpr"],[3,"Vec"],[3,"Radix2EvaluationDomain"],[4,"Result"],[3,"TypeId"],[4,"Column"],[8,"Hasher"],[3,"Provider"],[3,"RelaxedWitness"],[3,"ExtendedProvider"],[4,"FoldingCompatibleExprInner"],[4,"ExtendedFoldingColumn"],[3,"DecomposableFoldingScheme"],[3,"BTreeMap"],[8,"Add"],[4,"EvalLeaf"],[8,"Display"],[8,"Fn"],[8,"Mul"],[8,"Sub"],[3,"String"],[4,"Degree"],[4,"FoldingExp"],[4,"ExpExtension"],[4,"Sign"],[3,"Term"],[3,"IntegratedFoldingExpr"],[4,"Ordering"],[8,"Iterator"],[3,"Box"],[4,"BerkeleyChallengeTerm"],[4,"ConstantExprInner"],[4,"ExprInner"],[4,"Operations"],[8,"CommitmentCurve"],[8,"Witness"],[3,"ExtendedWitness"],[8,"Instance"],[3,"ExtendedInstance"],[8,"PartialEq"],[3,"Evaluations"],[8,"FoldingColumnTrait"],[8,"Eq"],[8,"Hash"],[8,"Copy"],[8,"Index"],[3,"Env"],[8,"KimchiCurve"],[3,"EmptyStructure"],[8,"Default"],[3,"StandardConfig"],[8,"FoldingEnv"],[8,"Checker"],[8,"Provide"],[8,"Foldable"],[8,"RelaxableWitness"],[3,"Quadraticized"],[3,"ExtendedWitnessGenerator"]]},\
diff --git a/rustdoc/settings.html b/rustdoc/settings.html
index 78856e0fed..042ebee940 100644
--- a/rustdoc/settings.html
+++ b/rustdoc/settings.html
@@ -1 +1 @@
-Rustdoc settings
\ No newline at end of file
diff --git a/rustdoc/src/arrabiata/columns.rs.html b/rustdoc/src/arrabiata/columns.rs.html
index ade5617be7..71aeb76322 100644
--- a/rustdoc/src/arrabiata/columns.rs.html
+++ b/rustdoc/src/arrabiata/columns.rs.html
@@ -133,31 +133,6 @@
133134135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
use ark_ff::Field;
use kimchi::circuits::expr::{AlphaChallengeTerm, CacheId, ConstantExpr, Expr, FormattedOutput};
use serde::{Deserialize, Serialize};
@@ -178,30 +153,15 @@
#[derive(Debug, Clone, Copy, PartialEq, EnumCountMacro, EnumIter)]
pub enum Gadget {
App,
- // Permutation argument
- PermutationArgument,
- // Two old gadgets
- /// Decompose a 255 bits scalar into 16 chunks of 16 bits.
- SixteenBitsDecomposition,
- /// Decompose a 16bits chunk into individual bits.
- BitDecompositionFrom16Bits,
- /// This gadget decomposes a 255 bits value into bits using 17 lines and 17
- /// columns.
- BitDecomposition,
// Elliptic curve related gadgets
EllipticCurveAddition,
EllipticCurveScaling,
/// This gadget implement the Poseidon hash instance described in the
- /// top-level documentation. The implementation does not use the "next row"
- /// and is unsafe at the moment as no permutation argument is implemented.
- Poseidon,
- /// This gadget implement the Poseidon hash instance described in the
- /// top-level documentation. Compared to the previous one (that might be
- /// deprecated in the future), this implementation does use the "next row"
+ /// top-level documentation. This implementation does use the "next row"
/// to allow the computation of one additional round per row. In the current
/// setup, with [crate::NUMBER_OF_COLUMNS] columns, we can compute 5 full
/// rounds per row.
- PoseidonNextRow,
+ Poseidon,
}
#[derive(Debug, Clone, Copy, PartialEq)]
@@ -276,14 +236,9 @@
match self {
Column::Selector(sel) => match sel {
Gadget::App => "q_app".to_string(),
- Gadget::PermutationArgument => "q_perm".to_string(),
- Gadget::SixteenBitsDecomposition => "q_16bits".to_string(),
- Gadget::BitDecompositionFrom16Bits => "q_bit_from_16bits".to_string(),
- Gadget::BitDecomposition => "q_bits".to_string(),
Gadget::EllipticCurveAddition => "q_ec_add".to_string(),
Gadget::EllipticCurveScaling => "q_ec_mul".to_string(),
Gadget::Poseidon => "q_pos".to_string(),
- Gadget::PoseidonNextRow => "q_pos_next_row".to_string(),
},
Column::PublicInput(i) => format!("pi_{{{i}}}").to_string(),
Column::X(i) => format!("x_{{{i}}}").to_string(),
@@ -294,14 +249,9 @@
match self {
Column::Selector(sel) => match sel {
Gadget::App => "q_app".to_string(),
- Gadget::PermutationArgument => "q_perm".to_string(),
- Gadget::SixteenBitsDecomposition => "q_16bits".to_string(),
- Gadget::BitDecompositionFrom16Bits => "q_bit_from_16bits".to_string(),
- Gadget::BitDecomposition => "q_bits".to_string(),
Gadget::EllipticCurveAddition => "q_ec_add".to_string(),
Gadget::EllipticCurveScaling => "q_ec_mul".to_string(),
- Gadget::Poseidon => "q_pos".to_string(),
- Gadget::PoseidonNextRow => "q_pos_next_row".to_string(),
+ Gadget::Poseidon => "q_pos_next_row".to_string(),
},
Column::PublicInput(i) => format!("pi[{i}]"),
Column::X(i) => format!("x[{i}]"),
diff --git a/rustdoc/src/arrabiata/constraints.rs.html b/rustdoc/src/arrabiata/constraints.rs.html
index ee80edf7f3..1562a6ff89 100644
--- a/rustdoc/src/arrabiata/constraints.rs.html
+++ b/rustdoc/src/arrabiata/constraints.rs.html
@@ -386,6 +386,10 @@
386387388
+389
+390
+391
+392
use super::{columns::Column, interpreter::InterpreterEnv};
use crate::{
columns::{Gadget, E},
@@ -412,6 +416,7 @@
pub idx_var_next_row: usize,
pub idx_var_pi: usize,
pub constraints: Vec<E<Fp>>,
+ pub activated_gadget: Option<Gadget>,
}
impl<Fp: PrimeField> Env<Fp> {
@@ -425,6 +430,7 @@
idx_var_next_row: 0,
idx_var_pi: 0,
constraints: Vec::new(),
+ activated_gadget: None,
}
}
}
@@ -485,9 +491,9 @@
res
}
- fn activate_gadget(&mut self, _gadget: Gadget) {
- // Nothing to do. It is only useful for the witness.
- }
+ fn activate_gadget(&mut self, gadget: Gadget) {
+ self.activated_gadget = Some(gadget);
+ }
fn add_constraint(&mut self, constraint: Self::Variable) {
let degree = constraint.degree(1, 0);
@@ -540,6 +546,7 @@
self.idx_var_next_row = 0;
self.idx_var_pi = 0;
self.constraints.clear();
+ self.activated_gadget = None;
}
fn coin_folding_combiner(&mut self, pos: Self::Position) -> Self::Variable {
@@ -713,7 +720,7 @@
/// Get all the constraints for the IVC circuit, only.
///
/// The following gadgets are used in the IVC circuit:
- /// - [Instruction::PoseidonNextRow] to verify the challenges and the public
+ /// - [Instruction::Poseidon] to verify the challenges and the public
/// IO
/// - [Instruction::EllipticCurveScaling] and
/// [Instruction::EllipticCurveAddition] to accumulate the commitments
@@ -734,7 +741,7 @@
// Poseidon constraints
// The constraints are the same for all the value given in parameter,
// therefore picking 0
- interpreter::run_ivc(&mut env, Instruction::PoseidonNextRow(0));
+ interpreter::run_ivc(&mut env, Instruction::Poseidon(0));
constraints.extend(env.constraints.clone());
env.reset();
@@ -758,6 +765,7 @@
/// Get all the constraints for the IVC circuit and the application.
// FIXME: the application should be given as an argument to handle Rust
// zkApp. It is only for the PoC.
+ // FIXME: the selectors are not added for now.
pub fn get_all_constraints(&self) -> Vec<E<F>> {
let mut constraints = self.get_all_constraints_for_ivc();
diff --git a/rustdoc/src/arrabiata/interpreter.rs.html b/rustdoc/src/arrabiata/interpreter.rs.html
index 524efab0ea..9094d5b921 100644
--- a/rustdoc/src/arrabiata/interpreter.rs.html
+++ b/rustdoc/src/arrabiata/interpreter.rs.html
@@ -961,234 +961,6 @@
961962963
-964
-965
-966
-967
-968
-969
-970
-971
-972
-973
-974
-975
-976
-977
-978
-979
-980
-981
-982
-983
-984
-985
-986
-987
-988
-989
-990
-991
-992
-993
-994
-995
-996
-997
-998
-999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
//! This module contains the implementation of the IVC scheme in addition to
//! running an arbitrary function that can use up to [crate::NUMBER_OF_COLUMNS]
//! columns.
@@ -1216,7 +988,6 @@
//! - [Gadget layout](#gadget-layout-1)
//! - [Elliptic curve scalar multiplication](#elliptic-curve-scalar-multiplication)
//! - [Gadget layout](#gadget-layout-2)
-//! - [Bit composition instruction](#bit-composition-instruction)
//! - [Handle the combinaison of constraints](#handle-the-combinaison-of-constraints)
//! - [Permutation argument](#permutation-argument)
//! - [Fiat-Shamir challenges](#fiat-shamir-challenges)
@@ -1401,28 +1172,6 @@
//! Circuits](https://github.com/o1-labs/rfcs/blob/main/0013-efficient-msms-for-non-native-pickles-verification.md).
//! We leave this for future work.
//!
-//! ### Bit composition instruction (deprecated)
-//!
-//! Decomposing a 255 bits value into bits can also be done using
-//! [NUMBER_OF_COLUMNS] columns and [BIT_DECOMPOSITION_NUMBER_OF_CHUNKS] rows
-//! without lookups using the following layout:
-//!
-//! ```text
-//! | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 | C11 | C12 | C13 | C14 | C15 | C16 | C17 |
-//! | y | x | b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8 | b9 | b10 | b11 | b12 | b13 | b14 |
-//! | -- | -- | -- | -- | -- | -- | -- | -- | -- | --- | --- | --- | --- | --- | --- | --- | --- |
-//! | x0 | x | .. | .. | .. | .. | .. | .. | .. | ... | ... | ... | ... | ... | ... | ... | ... |
-//! | x1 | x0 | .. | .. | .. | .. | .. | .. | .. | ... | ... | ... | ... | ... | ... | ... | ... |
-//! | x2 | x1 | .. | .. | .. | .. | .. | .. | .. | ... | ... | ... | ... | ... | ... | ... | ... |
-//! | .. | .. | .. | .. | .. | .. | .. | .. | .. | ... | ... | ... | ... | ... | ... | ... | ... |
-//! | x16| x15| .. | .. | .. | .. | .. | .. | .. | ... | ... | ... | ... | ... | ... | ... | ... |
-//! ```
-//!
-//! where:
-//! - `x` is the input value 14
-//! - for each row `i`, we have `x_i = x_{i - 1} << 15 - Σ 2^j b_{i * 15 + j}`
-//! - `b_i` is the i-th bit of the input value j=0
-//!
//! ## Handle the combinaison of constraints
//!
//! The prover will have to combine the constraints to generate the
@@ -1552,12 +1301,11 @@
//! there.
use crate::{
- columns::Gadget, BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK,
- BIT_DECOMPOSITION_NUMBER_OF_CHUNKS, MAXIMUM_FIELD_SIZE_IN_BITS, NUMBER_OF_COLUMNS,
- POSEIDON_ROUNDS_FULL, POSEIDON_STATE_SIZE,
+ columns::Gadget, MAXIMUM_FIELD_SIZE_IN_BITS, NUMBER_OF_COLUMNS, POSEIDON_ROUNDS_FULL,
+ POSEIDON_STATE_SIZE,
};
use ark_ff::{One, Zero};
-use log::{debug, error};
+use log::debug;
use num_bigint::BigInt;
/// A list of instruction/gadget implemented in the interpreter.
@@ -1578,31 +1326,13 @@
/// typed control-flow. We leave this for future work.
#[derive(Copy, Clone, Debug)]
pub enum Instruction {
- /// This gadget decomposes a 255 bits value into bits using 17 lines and 17
- /// columns. The constructor parameter is the line number.
- BitDecomposition(usize),
- /// Decompose a 255 bits scalar into 16 chunks of 16 bits.
- // FIXME: use the permutation argument, the "next row" or deprecate it.
- // For now, the gadget is deprecated and should not be used.
- SixteenBitsDecomposition,
- /// Decompose a 16bits chunk into individual bits. The constructor parameter
- /// is the index of the chunk (it is supposed to be less than 16, as there
- /// are 16 chunks of 16 bits for a 255 bits scalar).
- // FIXME: use the permutation argument, the "next row" or deprecate it.
- // For now, the gadget is deprecated and should not be used.
- BitDecompositionFrom16Bits(usize),
- /// This gadget implement the Poseidon hash instance described in the
- /// top-level documentation. The implementation does not use the "next row"
- /// and is unsafe at the moment as no permutation argument is implemented.
- // FIXME: use the permutation argument or deprecate it.
- Poseidon(usize),
/// This gadget implement the Poseidon hash instance described in the
/// top-level documentation. Compared to the previous one (that might be
/// deprecated in the future), this implementation does use the "next row"
/// to allow the computation of one additional round per row. In the current
/// setup, with [NUMBER_OF_COLUMNS] columns, we can compute 5 full rounds
/// per row.
- PoseidonNextRow(usize),
+ Poseidon(usize),
EllipticCurveScaling(usize, u64),
EllipticCurveAddition(usize),
// The NoOp will simply do nothing
@@ -1898,124 +1628,6 @@
/// resulting constraints must be multiplied by the corresponding selectors.
pub fn run_ivc<E: InterpreterEnv>(env: &mut E, instr: Instruction) {
match instr {
- Instruction::SixteenBitsDecomposition => {
- error!("This gadget is outdated. You should not use it");
- env.activate_gadget(Gadget::SixteenBitsDecomposition);
- // Decompositing the random coin in chunks of 16 bits. One row.
- // FIXME: verify the combiner is correctly returned from the sponge.
- let r = {
- let pos = env.allocate();
- env.coin_folding_combiner(pos)
- };
- let decomposition_16bits: Vec<E::Variable> = (0..16)
- .map(|i| {
- let pos = env.allocate();
- env.range_check16(pos);
- unsafe { env.bitmask_be(&r, (i + 1) * 16, i * 16, pos) }
- })
- .collect();
-
- let cstr = decomposition_16bits
- .iter()
- .enumerate()
- .fold(r, |acc, (i, x)| {
- acc - env.constant(BigInt::from(1_usize) << (i * 16)) * x.clone()
- });
- env.assert_zero(cstr);
- }
- Instruction::BitDecompositionFrom16Bits(i) => {
- error!("This gadget is outdated. You should not use it");
- env.activate_gadget(Gadget::BitDecompositionFrom16Bits);
- if i < 16 {
- // FIXME: simulate a RW into a memory cell. Not necessarily
- // constrained?
- let sixteen_i = {
- let pos = env.allocate();
- unsafe { env.read_sixteen_bits_chunks_folding_combiner(pos, i as u32) }
- };
- let bit_decompo: Vec<E::Variable> = (0..16)
- .map(|j| {
- let pos = env.allocate();
- unsafe { env.bitmask_be(&sixteen_i, (j + 1) as u32, j as u32, pos) }
- })
- .collect();
-
- // Contrain to be one or zero
- bit_decompo
- .iter()
- .for_each(|x| env.constrain_boolean(x.clone()));
-
- let cstr = bit_decompo
- .iter()
- .enumerate()
- .fold(sixteen_i, |acc, (i, x)| {
- acc - env.constant(BigInt::from(1_usize) << i) * x.clone()
- });
- env.assert_zero(cstr);
- } else {
- panic!("Invalid index: it is supposed to be less than 16 as we fetch 16 chunks of 16bits.");
- }
- }
- Instruction::BitDecomposition(i) => {
- env.activate_gadget(Gadget::BitDecomposition);
- assert!(
- i < BIT_DECOMPOSITION_NUMBER_OF_CHUNKS,
- "Bit decomposition is on {BIT_DECOMPOSITION_NUMBER_OF_CHUNKS} rows"
- );
- // Decompositing the random coin in chunks of 15 bits.
- // Step i is the decomposition of the bits between 15 * i and 15 * (i + 1).
- // We make a constraint for each bit and we check that the sum of the
- // bits is equal to the previous value.
- let pos_x0 = env.allocate();
- let pos_x1 = env.allocate();
- // Temporary variable
- // FIXME: use `load/save` to fetch the previous value
- let r = env.coin_folding_combiner(pos_x0);
- // previous value
- let x0 = unsafe {
- env.bitmask_be(
- &r,
- MAXIMUM_FIELD_SIZE_IN_BITS.try_into().unwrap(),
- (BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK * i)
- .try_into()
- .unwrap(),
- pos_x0,
- )
- };
- // new value
- let x1 = unsafe {
- env.bitmask_be(
- &r,
- MAXIMUM_FIELD_SIZE_IN_BITS.try_into().unwrap(),
- (BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK * (i + 1))
- .try_into()
- .unwrap(),
- pos_x1,
- )
- };
- let bits: Vec<E::Variable> = (0..BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK)
- .map(|j| {
- let pos = env.allocate();
- let bit = unsafe {
- env.bitmask_be(&x0, (j + 1).try_into().unwrap(), j.try_into().unwrap(), pos)
- };
- env.constrain_boolean(bit.clone());
- bit
- })
- .collect();
- let rhs = bits.iter().enumerate().fold(env.zero(), |acc, (j, b)| {
- acc + env.constant(BigInt::from(1_usize) << j) * b.clone()
- });
- // x0 = x1 + \sum_{j=0}^{14} 2^j b_j
- env.assert_equal(
- x0,
- x1.clone()
- * env.constant(
- BigInt::from(1_usize) << BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK,
- )
- + rhs,
- );
- }
Instruction::EllipticCurveScaling(i_comm, processing_bit) => {
assert!(processing_bit < MAXIMUM_FIELD_SIZE_IN_BITS, "Invalid bit index. The fields are maximum on {MAXIMUM_FIELD_SIZE_IN_BITS} bits, therefore we cannot process the bit {processing_bit}");
assert!(i_comm < NUMBER_OF_COLUMNS, "Invalid index. We do only support the scaling of the commitments to the columns, for now. We must additionally support the scaling of cross-terms and error terms");
@@ -2023,10 +1635,7 @@
env.activate_gadget(Gadget::EllipticCurveScaling);
// When processing the first bit, we must load the scalar, and it
// comes from previous computation.
- if processing_bit == 0 {
- env.activate_gadget(Gadget::PermutationArgument);
- }
- // The two first columns are supposed to be used for the output.
+ // The two first columns are supposed to be used for the output.
// It will be used to write the result of the scalar multiplication
// in the next row.
let res_col_x = env.allocate();
@@ -2167,7 +1776,6 @@
};
}
Instruction::EllipticCurveAddition(i_comm) => {
- env.activate_gadget(Gadget::PermutationArgument);
env.activate_gadget(Gadget::EllipticCurveAddition);
assert!(i_comm < NUMBER_OF_COLUMNS, "Invalid index. We do only support the addition of the commitments to the columns, for now. We must additionally support the scaling of cross-terms and error terms");
let (x1, y1) = {
@@ -2211,67 +1819,8 @@
};
}
Instruction::Poseidon(curr_round) => {
- env.activate_gadget(Gadget::PermutationArgument);
env.activate_gadget(Gadget::Poseidon);
debug!("Executing instruction Poseidon({curr_round})");
- if curr_round < POSEIDON_ROUNDS_FULL {
- let values_to_absorb: Vec<E::Variable> = (0..POSEIDON_STATE_SIZE - 1)
- .map(|_i| {
- let pos = env.allocate_public_input();
- unsafe { env.fetch_value_to_absorb(pos, curr_round) }
- })
- .collect();
- let state: Vec<E::Variable> = (0..POSEIDON_STATE_SIZE)
- .map(|i| {
- let pos = env.allocate();
- let res = env.load_poseidon_state(pos, i);
- // Absorb value
- if i < POSEIDON_STATE_SIZE - 1 {
- res + values_to_absorb[i].clone()
- } else {
- res
- }
- })
- .collect();
-
- let state = (0..4).fold(state, |state, i| {
- let state: Vec<E::Variable> =
- state.iter().map(|x| env.compute_x5(x.clone())).collect();
-
- let round = curr_round + i;
-
- let rcs: Vec<E::Variable> = (0..POSEIDON_STATE_SIZE)
- .map(|i| {
- let pos = env.allocate_public_input();
- env.get_poseidon_round_constant(pos, round, i)
- })
- .collect();
-
- let state: Vec<E::Variable> = rcs
- .iter()
- .enumerate()
- .map(|(i, rc)| {
- let pos = env.allocate();
- let acc: E::Variable =
- state.iter().enumerate().fold(env.zero(), |acc, (j, x)| {
- acc + env.get_poseidon_mds_matrix(i, j) * x.clone()
- });
- env.write_column(pos, acc + rc.clone())
- })
- .collect();
- state
- });
-
- state.iter().enumerate().for_each(|(i, x)| {
- unsafe { env.save_poseidon_state(x.clone(), i) };
- })
- } else {
- panic!("Invalid index: it is supposed to be less than {POSEIDON_ROUNDS_FULL}");
- }
- }
- Instruction::PoseidonNextRow(curr_round) => {
- env.activate_gadget(Gadget::PoseidonNextRow);
- debug!("Executing instruction PoseidonNextRow({curr_round})");
if curr_round < POSEIDON_ROUNDS_FULL {
// Values to be absorbed are 0 when when the round is not zero,
// i.e. when we are processing the rounds.
@@ -2293,7 +1842,6 @@
// calls, like when we need to hash the public inputs, and the
// state might be from a previous place in the execution trace.
let state: Vec<E::Variable> = if curr_round == 0 {
- env.activate_gadget(Gadget::PermutationArgument);
round_input_positions
.iter()
.enumerate()
@@ -2353,16 +1901,12 @@
.collect();
// If we are at the last round, we save the state in the
// environment.
- // It does require the permutation argument to be activated.
- // FIXME: activating the permutation argument has no effect
- // for now.
// FIXME/IMPROVEME: we might want to execute more Poseidon
// full hash in sequentially, and then save one row. For
// now, we will save the state at the end of the last round
// and reload it at the beginning of the next Poseidon full
// hash.
if round == POSEIDON_ROUNDS_FULL - 1 {
- env.activate_gadget(Gadget::PermutationArgument);
state.iter().enumerate().for_each(|(i, x)| {
unsafe { env.save_poseidon_state(x.clone(), i) };
});
diff --git a/rustdoc/src/arrabiata/lib.rs.html b/rustdoc/src/arrabiata/lib.rs.html
index 4271526b75..5195c14e70 100644
--- a/rustdoc/src/arrabiata/lib.rs.html
+++ b/rustdoc/src/arrabiata/lib.rs.html
@@ -65,12 +65,6 @@
656667
-68
-69
-70
-71
-72
-73
use strum::EnumCount as _;
pub mod column_env;
@@ -98,11 +92,11 @@
pub const IVC_CIRCUIT_SIZE: usize = 1 << 13;
/// The maximum number of columns that can be used in the circuit.
-pub const NUMBER_OF_COLUMNS: usize = 17;
+pub const NUMBER_OF_COLUMNS: usize = 15;
/// The maximum number of public inputs the circuit can use per row
/// We do have 15 for now as we want to compute 5 rounds of poseidon per row
-/// using the gadget [crate::columns::Gadget::PoseidonNextRow]. In addition to
+/// using the gadget [crate::columns::Gadget::Poseidon]. In addition to
/// the 12 public inputs required for the rounds, we add 2 more for the values
/// to absorb.
pub const NUMBER_OF_PUBLIC_INPUTS: usize = 15 + 2;
@@ -136,12 +130,6 @@
/// circuit.
pub const NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO: usize = NUMBER_OF_COLUMNS * 2;
-/// The number of bits per chunk in the bit decomposition.
-/// It is used to decompose the field elements of 255 bits into single bit.
-/// We use 17 rows of 15 bits decomposition.
-pub const BIT_DECOMPOSITION_NUMBER_OF_BITS_PER_CHUNK: usize = 15;
-pub const BIT_DECOMPOSITION_NUMBER_OF_CHUNKS: usize = 17;
-
/// The number of selectors used in the circuit.
pub const NUMBER_OF_SELECTORS: usize = columns::Gadget::COUNT;
use ark_ec::{models::short_weierstrass::SWCurveConfig, AffineRepr};
use ark_ff::PrimeField;
use ark_poly::Evaluations;
@@ -1160,10 +1099,9 @@
use crate::{
columns::{Column, Gadget},
interpreter::{Instruction, InterpreterEnv, Side},
- poseidon_3_60_0_5_5_fp, poseidon_3_60_0_5_5_fq, BIT_DECOMPOSITION_NUMBER_OF_CHUNKS,
- MAXIMUM_FIELD_SIZE_IN_BITS, NUMBER_OF_COLUMNS, NUMBER_OF_PUBLIC_INPUTS, NUMBER_OF_SELECTORS,
- NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO, POSEIDON_ALPHA, POSEIDON_ROUNDS_FULL,
- POSEIDON_STATE_SIZE,
+ poseidon_3_60_0_5_5_fp, poseidon_3_60_0_5_5_fq, MAXIMUM_FIELD_SIZE_IN_BITS, NUMBER_OF_COLUMNS,
+ NUMBER_OF_PUBLIC_INPUTS, NUMBER_OF_SELECTORS, NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO,
+ POSEIDON_ALPHA, POSEIDON_ROUNDS_FULL, POSEIDON_STATE_SIZE,
};
pub const IVC_STARTING_INSTRUCTION: Instruction = Instruction::Poseidon(0);
@@ -1558,10 +1496,6 @@
}
fn load_poseidon_state(&mut self, pos: Self::Position, i: usize) -> Self::Variable {
- assert!(
- self.selectors[Gadget::PermutationArgument as usize][self.current_row],
- "The permutation argument should be activated"
- );
let state = if self.current_iteration % 2 == 0 {
self.sponge_e1[i].clone()
} else {
@@ -1601,10 +1535,6 @@
}
unsafe fn save_poseidon_state(&mut self, x: Self::Variable, i: usize) {
- assert!(
- self.selectors[Gadget::PermutationArgument as usize][self.current_row],
- "The permutation argument should be activated"
- );
if self.current_iteration % 2 == 0 {
let modulus: BigInt = Fp::modulus_biguint().into();
self.sponge_e1[i] = x.mod_floor(&modulus)
@@ -1679,10 +1609,6 @@
pos_y: Self::Position,
side: Side,
) -> (Self::Variable, Self::Variable) {
- assert!(
- self.selectors[Gadget::PermutationArgument as usize][self.current_row],
- "The permutation argument should be activated"
- );
match self.current_instruction {
Instruction::EllipticCurveScaling(i_comm, bit) => {
// If we're processing the leftmost bit (i.e. bit == 0), we must load
@@ -1787,10 +1713,6 @@
y: Self::Variable,
side: Side,
) {
- assert!(
- self.selectors[Gadget::PermutationArgument as usize][self.current_row],
- "The permutation argument should be activated"
- );
match side {
Side::Left => {
self.temporary_accumulators.0 = (x, y);
@@ -2212,56 +2134,12 @@
/// ```
pub fn fetch_next_instruction(&mut self) -> Instruction {
match self.current_instruction {
- Instruction::SixteenBitsDecomposition => Instruction::BitDecompositionFrom16Bits(0),
- Instruction::BitDecomposition(i) => {
- if i < BIT_DECOMPOSITION_NUMBER_OF_CHUNKS - 1 {
- Instruction::BitDecomposition(i + 1)
- } else {
- Instruction::EllipticCurveScaling(0, 0)
- }
- }
Instruction::Poseidon(i) => {
- if i < POSEIDON_ROUNDS_FULL - 4 {
- // We perform 4 rounds per row
- // FIXME: we can do 5 by using the "next row", see
- // PoseidonNextRow
- Instruction::Poseidon(i + 4)
- } else {
- // If we absorbed all the elements, we go to the next instruction
- // In this case, it is the decomposition of the folding combiner
- // FIXME: it is not the correct next instruction.
- // We must check the computed value is the one given as a
- // public input.
- if self.idx_values_to_absorb >= NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO {
- Instruction::BitDecomposition(0)
- } else {
- // Otherwise, we continue absorbing
- Instruction::Poseidon(0)
- }
- }
- }
- Instruction::PoseidonNextRow(i) => {
if i < POSEIDON_ROUNDS_FULL - 5 {
- Instruction::PoseidonNextRow(i + 5)
- } else {
- // If we absorbed all the elements, we go to the next instruction
- // In this case, it is the decomposition of the folding combiner
- // FIXME: it is not the correct next instruction.
- // We must check the computed value is the one given as a
- // public input.
- if self.idx_values_to_absorb >= NUMBER_OF_VALUES_TO_ABSORB_PUBLIC_IO {
- Instruction::BitDecomposition(0)
- } else {
- // Otherwise, we continue absorbing
- Instruction::PoseidonNextRow(0)
- }
- }
- }
- Instruction::BitDecompositionFrom16Bits(i) => {
- if i < 15 {
- Instruction::BitDecompositionFrom16Bits(i + 1)
+ Instruction::Poseidon(i + 5)
} else {
- Instruction::Poseidon(0)
+ // FIXME: we continue absorbing
+ Instruction::Poseidon(0)
}
}
Instruction::EllipticCurveScaling(i_comm, bit) => {