diff --git a/libiop/CMakeLists.txt b/libiop/CMakeLists.txt index 003df21e..1de69ac4 100644 --- a/libiop/CMakeLists.txt +++ b/libiop/CMakeLists.txt @@ -9,6 +9,12 @@ add_library( algebra/fields/gf192.cpp algebra/fields/gf256.cpp snark/common/hashing.cpp + protocols/ldt/ldt_reducer.cpp + protocols/ldt/fri/fri_ldt.cpp + protocols/ldt/fri/fri_aux.cpp + relations/sparse_matrix.cpp + iop/utilities/batching.cpp + algebra/utils.cpp ) target_link_libraries( @@ -214,7 +220,7 @@ target_link_libraries(test_bcs_transformation iop gtest_main) add_executable(test_aurora_snark tests/snark/test_aurora_snark.cpp) target_link_libraries(test_aurora_snark iop gtest_main) -add_executable(test_fractal_snark tests/snark/test_fractal_snark.cpp) +add_executable(test_fractal_snark tests/snark/test_fractal_snark.cpp ) target_link_libraries(test_fractal_snark iop gtest_main) add_executable(test_ligero_snark tests/snark/test_ligero_snark.cpp) diff --git a/libiop/algebra/utils.cpp b/libiop/algebra/utils.cpp new file mode 100644 index 00000000..507702a0 --- /dev/null +++ b/libiop/algebra/utils.cpp @@ -0,0 +1,11 @@ +#include "libiop/algebra/utils.hpp" + + +namespace libiop { + +size_t gcd(const size_t a, const size_t b) +{ + return b == 0 ? a : gcd(b, a % b); +} + +} \ No newline at end of file diff --git a/libiop/algebra/utils.tcc b/libiop/algebra/utils.tcc index a458926b..ac8eb9c2 100644 --- a/libiop/algebra/utils.tcc +++ b/libiop/algebra/utils.tcc @@ -180,9 +180,6 @@ std::vector random_FieldT_vector(const std::size_t count) return result; } -size_t gcd(const size_t a, const size_t b) -{ - return b == 0 ? a : gcd(b, a % b); -} + } // namespace libiop diff --git a/libiop/common/common.cpp b/libiop/common/common.cpp index 9132eebd..f199af8b 100644 --- a/libiop/common/common.cpp +++ b/libiop/common/common.cpp @@ -48,26 +48,5 @@ long double add_soundness_error_bits(const long double bits1, const long double return -1 * log2l(result); } -template -void print_vector(std::vector &vec) -{ - printf("{ "); - for (auto const& elem : vec) - { - std::cout << elem << " "; - } - printf("}\n"); -} - -template -void print_vector(std::vector vec) -{ - printf("{ "); - for (auto const& elem : vec) - { - std::cout << elem << " "; - } - printf("}\n"); -} } // namespace libiop diff --git a/libiop/common/common.hpp b/libiop/common/common.hpp index a9e794d5..0916c9f9 100644 --- a/libiop/common/common.hpp +++ b/libiop/common/common.hpp @@ -33,11 +33,33 @@ long double add_soundness_error_bits(const long double bits1, const long double template void UNUSED(Types&&...) {} -/* Print a vector in the form { elem0 elem1 elem2 ... }, with a newline at the end*/ +/* Print a vector in the form { elem0 elem1 elem2 ... }, with a newline at the end template void print_vector(std::vector &vec); template -void print_vector(std::vector vec); +void print_vector(std::vector vec);*/ + +template +void print_vector(std::vector &vec) +{ + printf("{ "); + for (auto const& elem : vec) + { + std::cout << elem << " "; + } + printf("}\n"); +} + +template +void print_vector(std::vector vec) +{ + printf("{ "); + for (auto const& elem : vec) + { + std::cout << elem << " "; + } + printf("}\n"); +} } // namespace libiop diff --git a/libiop/iop/utilities/batching.cpp b/libiop/iop/utilities/batching.cpp new file mode 100644 index 00000000..fb38260e --- /dev/null +++ b/libiop/iop/utilities/batching.cpp @@ -0,0 +1,20 @@ +#include "batching.hpp" + +namespace libiop { + + + +std::vector virtual_oracle_handles_to_handle_ptrs( + const std::vector handles) +{ + std::vector oracles; + oracles.reserve(handles.size()); + for (size_t i = 0; i < handles.size(); i++) + { + oracles.emplace_back(std::make_shared(handles[i])); + } + return oracles; +} + + +} // namespace libiop diff --git a/libiop/iop/utilities/batching.tcc b/libiop/iop/utilities/batching.tcc index 90188656..7246df9d 100644 --- a/libiop/iop/utilities/batching.tcc +++ b/libiop/iop/utilities/batching.tcc @@ -57,17 +57,7 @@ std::vector register_n_oracles( return oracles; } -std::vector virtual_oracle_handles_to_handle_ptrs( - const std::vector handles) -{ - std::vector oracles; - oracles.reserve(handles.size()); - for (size_t i = 0; i < handles.size(); i++) - { - oracles.emplace_back(std::make_shared(handles[i])); - } - return oracles; -} + template std::vector register_queries_for_same_pos( diff --git a/libiop/protocols/ldt/fri/fri_aux.cpp b/libiop/protocols/ldt/fri/fri_aux.cpp new file mode 100644 index 00000000..d9ef5936 --- /dev/null +++ b/libiop/protocols/ldt/fri/fri_aux.cpp @@ -0,0 +1,43 @@ +#include +#include "fri_aux.hpp" + +namespace libiop { + + +// ------------------------------------------------- +// Optimizer utils + +/** Generate all possible localization vectors that begin with starting, + * and reduce up to max_reducable_dimensions dimensions. + */ +std::vector> localization_vector_generator( + size_t max_reducable_dimensions, + std::vector starting) +{ + std::vector> options; + options.push_back(starting); + if (max_reducable_dimensions == 0) + { + return options; + } + for (size_t i = 1; i <= max_reducable_dimensions; ++i) + { + std::vector new_starting = starting; + new_starting.push_back(i); + std::vector> new_options = + localization_vector_generator(max_reducable_dimensions - i, new_starting); + options.insert(options.end(), new_options.begin(), new_options.end()); + } + return options; +} + +/* return all partitions of this number (that is, all possible FRI localization parameter vectors + for this codeword domain dimension) */ +std::vector> all_localization_vectors(size_t dimension_to_reduce) +{ + /* Fix the start as 1 */ + std::vector starting({1}); + return localization_vector_generator(dimension_to_reduce - 1, starting); +} + +} // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_aux.tcc b/libiop/protocols/ldt/fri/fri_aux.tcc index 409e584d..a2735344 100644 --- a/libiop/protocols/ldt/fri/fri_aux.tcc +++ b/libiop/protocols/ldt/fri/fri_aux.tcc @@ -386,40 +386,6 @@ std::vector calculate_next_coset_query_positions( return query_pos; } -// ------------------------------------------------- -// Optimizer utils -/** Generate all possible localization vectors that begin with starting, - * and reduce up to max_reducable_dimensions dimensions. - */ -std::vector> localization_vector_generator( - size_t max_reducable_dimensions, - std::vector starting) -{ - std::vector> options; - options.push_back(starting); - if (max_reducable_dimensions == 0) - { - return options; - } - for (size_t i = 1; i <= max_reducable_dimensions; ++i) - { - std::vector new_starting = starting; - new_starting.push_back(i); - std::vector> new_options = - localization_vector_generator(max_reducable_dimensions - i, new_starting); - options.insert(options.end(), new_options.begin(), new_options.end()); - } - return options; -} - -/* return all partitions of this number (that is, all possible FRI localization parameter vectors - for this codeword domain dimension) */ -std::vector> all_localization_vectors(size_t dimension_to_reduce) -{ - /* Fix the start as 1 */ - std::vector starting({1}); - return localization_vector_generator(dimension_to_reduce - 1, starting); -} } // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_ldt.cpp b/libiop/protocols/ldt/fri/fri_ldt.cpp new file mode 100644 index 00000000..d42ea9ad --- /dev/null +++ b/libiop/protocols/ldt/fri/fri_ldt.cpp @@ -0,0 +1,19 @@ +//#include "libiop/common/common.hpp" +#include "libiop/protocols/ldt/fri/fri_ldt.hpp" + +namespace libiop { + + +const char* FRI_soundness_type_to_string(FRI_soundness_type soundness_type) +{ + if (soundness_type == FRI_soundness_type::heuristic) + { + return "heuristic"; + } else if (soundness_type == FRI_soundness_type::proven) + { + return "proven"; + } + return "Invalid soundness type"; +} + +} // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_ldt.tcc b/libiop/protocols/ldt/fri/fri_ldt.tcc index 89fc9d99..c1580ae9 100644 --- a/libiop/protocols/ldt/fri/fri_ldt.tcc +++ b/libiop/protocols/ldt/fri/fri_ldt.tcc @@ -1,5 +1,5 @@ #include "libiop/algebra/field_subset/subgroup.hpp" -#include "libiop/common/common.cpp" +#include "libiop/common/common.hpp" #include "libiop/common/profiling.hpp" namespace libiop { @@ -231,18 +231,6 @@ long double FRI_protocol_parameters::achieved_query_soundness() const return -1.0 * (long double)(this->num_query_repetitions_) * soundness_per_query; } -const char* FRI_soundness_type_to_string(FRI_soundness_type soundness_type) -{ - if (soundness_type == FRI_soundness_type::heuristic) - { - return "heuristic"; - } else if (soundness_type == FRI_soundness_type::proven) - { - return "proven"; - } - return "Invalid soundness type"; -} - template void FRI_protocol_parameters::print() const { diff --git a/libiop/protocols/ldt/ldt_reducer.cpp b/libiop/protocols/ldt/ldt_reducer.cpp new file mode 100644 index 00000000..fd6e4419 --- /dev/null +++ b/libiop/protocols/ldt/ldt_reducer.cpp @@ -0,0 +1,21 @@ +#include "libiop/protocols/ldt/ldt_reducer.hpp" +#include +#include + +namespace libiop { + + +const char* LDT_reducer_soundness_type_to_string(LDT_reducer_soundness_type soundness_type) +{ + if (soundness_type == LDT_reducer_soundness_type::proven) + { + return "proven"; + } else if (soundness_type == LDT_reducer_soundness_type::optimistic_heuristic) + { + return "heuristic"; + } + return "Invalid soundness type"; +} + + +} // libiop diff --git a/libiop/protocols/ldt/ldt_reducer.tcc b/libiop/protocols/ldt/ldt_reducer.tcc index 0be0d54d..794f8b31 100644 --- a/libiop/protocols/ldt/ldt_reducer.tcc +++ b/libiop/protocols/ldt/ldt_reducer.tcc @@ -107,17 +107,6 @@ size_t LDT_instance_reducer_params::num_output_LDT_instances() const return this->num_output_LDT_instances_; } -const char* LDT_reducer_soundness_type_to_string(LDT_reducer_soundness_type soundness_type) -{ - if (soundness_type == LDT_reducer_soundness_type::proven) - { - return "proven"; - } else if (soundness_type == LDT_reducer_soundness_type::optimistic_heuristic) - { - return "heuristic"; - } - return "Invalid soundness type"; -} template void LDT_instance_reducer_params::print() const diff --git a/libiop/relations/sparse_matrix.cpp b/libiop/relations/sparse_matrix.cpp new file mode 100644 index 00000000..fc792388 --- /dev/null +++ b/libiop/relations/sparse_matrix.cpp @@ -0,0 +1,9 @@ +#include "libiop/relations/sparse_matrix.hpp" + +namespace libiop { + + +std::vector all_r1cs_sparse_matrix_types( + {r1cs_sparse_matrix_A, r1cs_sparse_matrix_B, r1cs_sparse_matrix_C}); + +} // libiop diff --git a/libiop/relations/sparse_matrix.hpp b/libiop/relations/sparse_matrix.hpp index e6067068..d0bed9c3 100644 --- a/libiop/relations/sparse_matrix.hpp +++ b/libiop/relations/sparse_matrix.hpp @@ -36,8 +36,7 @@ enum r1cs_sparse_matrix_type { r1cs_sparse_matrix_C = 3 }; -std::vector all_r1cs_sparse_matrix_types( - {r1cs_sparse_matrix_A, r1cs_sparse_matrix_B, r1cs_sparse_matrix_C}); +extern std::vector all_r1cs_sparse_matrix_types; template class r1cs_sparse_matrix : public sparse_matrix {