From e0ecf7a2e973c8cb08c663aafced7ede94381c12 Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Mon, 15 Dec 2025 13:44:40 +0100 Subject: [PATCH 1/8] feat: sync with Plonky3 dev, add bus types to Air --- air-script/Cargo.toml | 63 +++++++++++++++---- air-script/src/tests/binary/binary_plonky3.rs | 2 +- .../src/tests/bitwise/bitwise_plonky3.rs | 2 +- .../src/tests/buses/buses_complex_plonky3.rs | 9 ++- .../src/tests/buses/buses_simple_plonky3.rs | 9 ++- .../buses_varlen_boundary_both_plonky3.rs | 9 ++- .../buses_varlen_boundary_first_plonky3.rs | 9 ++- .../buses_varlen_boundary_last_plonky3.rs | 9 ++- .../computed_indices_complex_plonky3.rs | 2 +- .../computed_indices_simple_plonky3.rs | 2 +- .../constant_in_range_plonky3.rs | 2 +- .../src/tests/constants/constants_plonky3.rs | 2 +- .../constraint_comprehension_plonky3.rs | 2 +- .../evaluators_nested_slice_call_plonky3.rs | 2 +- .../tests/evaluators/evaluators_plonky3.rs | 2 +- .../evaluators/evaluators_slice_plonky3.rs | 2 +- .../src/tests/fibonacci/fibonacci_plonky3.rs | 2 +- .../functions/functions_complex_plonky3.rs | 2 +- .../functions/functions_simple_plonky3.rs | 2 +- .../indexed_trace_access_plonky3.rs | 2 +- .../list_comprehension_nested_plonky3.rs | 2 +- .../list_comprehension_plonky3.rs | 2 +- .../list_folding/list_folding_plonky3.rs | 2 +- .../periodic_columns_plonky3.rs | 2 +- .../tests/pub_inputs/pub_inputs_plonky3.rs | 2 +- .../selectors_combine_complex_plonky3.rs | 8 ++- .../selectors_combine_simple_plonky3.rs | 2 +- ...ombine_with_list_comprehensions_plonky3.rs | 2 +- .../src/tests/selectors/selectors_plonky3.rs | 2 +- .../selectors_with_evaluators_plonky3.rs | 2 +- air-script/src/tests/system/system_plonky3.rs | 2 +- .../trace_col_groups_plonky3.rs | 2 +- .../src/tests/variables/variables_plonky3.rs | 2 +- codegen/plonky3/src/air/mod.rs | 11 ++++ codegen/plonky3/src/imports.rs | 1 + 35 files changed, 135 insertions(+), 45 deletions(-) diff --git a/air-script/Cargo.toml b/air-script/Cargo.toml index 1461ee712..6e0de90e4 100644 --- a/air-script/Cargo.toml +++ b/air-script/Cargo.toml @@ -29,9 +29,18 @@ miden-diagnostics = { workspace = true } mir = { package = "air-mir", path = "../mir", version = "0.5" } # 0xMiden Plonky3 Fork -p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } + +# MassaLabs Plonky3 Fork +p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } + +#p3-field = { package = "p3-field", path = "../../0xMiden-Plonky3/field", default-features = false } +#p3-matrix = { package = "p3-matrix", path = "../../0xMiden-Plonky3/matrix", default-features = false } +#p3-miden-air = { package = "miden-air", path = "../../0xMiden-Plonky3/miden-air", default-features = false } # MassaLabs fork miden-processor = { package = "miden-processor", git="https://github.com/massalabs/miden-vm", rev = "bc553af69a2543a0789830e8508b019694528181", default-features = false } @@ -41,16 +50,44 @@ miden-air = { package = "miden-air", git="https://github.com/massalabs/miden-vm" expect-test = "1.4" # 0xMiden Plonky3 Fork -p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } -p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } +#p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } + +# MassaLabs Plonky3 Fork +p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } + +#p3-air = { package = "p3-air", path = "../../0xMiden-Plonky3/air", default-features = false } +#p3-challenger = { package = "p3-challenger", path = "../../0xMiden-Plonky3/challenger", default-features = false } +#p3-circle = { package = "p3-circle", path = "../../0xMiden-Plonky3/circle", default-features = false } +#p3-commit = { package = "p3-commit", path = "../../0xMiden-Plonky3/commit", default-features = false } +#p3-dft = { package = "p3-dft", path = "../../0xMiden-Plonky3/dft", default-features = false } +#p3-field = { package = "p3-field", path = "../../0xMiden-Plonky3/field", default-features = false } +#p3-fri = { package = "p3-fri", path = "../../0xMiden-Plonky3/fri", default-features = false } +#p3-matrix = { package = "p3-matrix", path = "../../0xMiden-Plonky3/matrix", default-features = false } +#p3-merkle-tree = { package = "p3-merkle-tree", path = "../../0xMiden-Plonky3/merkle-tree", default-features = false } +#p3-miden-air = { package = "miden-air", path = "../../0xMiden-Plonky3/miden-air", default-features = false } +#p3-miden-prover = { package = "miden-prover", path = "../../0xMiden-Plonky3/miden-prover", default-features = false } +#p3-goldilocks = { package = "p3-goldilocks", path = "../../0xMiden-Plonky3/goldilocks", default-features = false } +#p3-sha256 = { package = "p3-sha256", path = "../../0xMiden-Plonky3/sha256", default-features = false } +#p3-symmetric = { package = "p3-symmetric", path = "../../0xMiden-Plonky3/symmetric", default-features = false } +#p3-uni-stark = { package = "p3-uni-stark", path = "../../0xMiden-Plonky3/uni-stark", default-features = false } winter-air = { package = "winter-air", version = "0.12", default-features = false } winter-math = { package = "winter-math", version = "0.12", default-features = false } diff --git a/air-script/src/tests/binary/binary_plonky3.rs b/air-script/src/tests/binary/binary_plonky3.rs index a56646b6d..0e4fd817a 100644 --- a/air-script/src/tests/binary/binary_plonky3.rs +++ b/air-script/src/tests/binary/binary_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 2; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/bitwise/bitwise_plonky3.rs b/air-script/src/tests/bitwise/bitwise_plonky3.rs index d624e1cd9..9d0f305ae 100644 --- a/air-script/src/tests/bitwise/bitwise_plonky3.rs +++ b/air-script/src/tests/bitwise/bitwise_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 14; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/buses/buses_complex_plonky3.rs b/air-script/src/tests/buses/buses_complex_plonky3.rs index 46134f3a8..cd00bd2d2 100644 --- a/air-script/src/tests/buses/buses_complex_plonky3.rs +++ b/air-script/src/tests/buses/buses_complex_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 7; pub const AUX_WIDTH: usize = 2; @@ -29,6 +29,13 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + BusType::Logup, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/buses/buses_simple_plonky3.rs b/air-script/src/tests/buses/buses_simple_plonky3.rs index 483c67163..169c1358a 100644 --- a/air-script/src/tests/buses/buses_simple_plonky3.rs +++ b/air-script/src/tests/buses/buses_simple_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; @@ -29,6 +29,13 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + BusType::Logup, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs index 541a5c3cb..62d678362 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; @@ -29,6 +29,13 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + BusType::Logup, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs index 0c33e8597..76e45b244 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; @@ -29,6 +29,13 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + BusType::Logup, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs index c2c169b98..287961c04 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; @@ -29,6 +29,13 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + BusType::Logup, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs b/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs index cfe2bbdd4..dc78881c5 100644 --- a/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs +++ b/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs b/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs index fdf649c7f..0af020fc9 100644 --- a/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs +++ b/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 8; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs b/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs index 31a872beb..f45ffa333 100644 --- a/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs +++ b/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 12; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/constants/constants_plonky3.rs b/air-script/src/tests/constants/constants_plonky3.rs index d875ed7c6..8693f5527 100644 --- a/air-script/src/tests/constants/constants_plonky3.rs +++ b/air-script/src/tests/constants/constants_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 7; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs b/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs index b6b77563f..8273e3670 100644 --- a/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs +++ b/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 14; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs b/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs index 331941455..6367cb8e3 100644 --- a/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 20; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/evaluators/evaluators_plonky3.rs b/air-script/src/tests/evaluators/evaluators_plonky3.rs index f3673062a..61322363b 100644 --- a/air-script/src/tests/evaluators/evaluators_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 7; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs b/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs index 2ea46aefe..525368d67 100644 --- a/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 20; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/fibonacci/fibonacci_plonky3.rs b/air-script/src/tests/fibonacci/fibonacci_plonky3.rs index 4a5c6c99c..804620d63 100644 --- a/air-script/src/tests/fibonacci/fibonacci_plonky3.rs +++ b/air-script/src/tests/fibonacci/fibonacci_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 2; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/functions/functions_complex_plonky3.rs b/air-script/src/tests/functions/functions_complex_plonky3.rs index 857f0cbae..3af9d91a1 100644 --- a/air-script/src/tests/functions/functions_complex_plonky3.rs +++ b/air-script/src/tests/functions/functions_complex_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 17; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/functions/functions_simple_plonky3.rs b/air-script/src/tests/functions/functions_simple_plonky3.rs index 72b8b9fec..d9a20fe2e 100644 --- a/air-script/src/tests/functions/functions_simple_plonky3.rs +++ b/air-script/src/tests/functions/functions_simple_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 9; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs b/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs index 0635708dc..dcbf9b649 100644 --- a/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs +++ b/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs b/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs index d60965418..a97d3fc89 100644 --- a/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs +++ b/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 2; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs b/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs index 4a8aa604a..9683bf5d3 100644 --- a/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs +++ b/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 16; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/list_folding/list_folding_plonky3.rs b/air-script/src/tests/list_folding/list_folding_plonky3.rs index 4d5ddf7e1..17bf03c87 100644 --- a/air-script/src/tests/list_folding/list_folding_plonky3.rs +++ b/air-script/src/tests/list_folding/list_folding_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 17; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs b/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs index c4d273280..65d19b7b8 100644 --- a/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs +++ b/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 3; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs b/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs index 211c1f70f..8318c7e05 100644 --- a/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs +++ b/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs index 103531389..9952aaa66 100644 --- a/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 6; pub const AUX_WIDTH: usize = 1; @@ -29,6 +29,12 @@ where F: Field, AUX_WIDTH } + fn bus_types(&self) -> Vec { + vec![ + BusType::Multiset, + ] + } + fn build_aux_trace(&self, _main: &RowMajorMatrix, _challenges: &[EF]) -> Option> { // Note: consider using Some(build_aux_trace_with_miden_vm::(_main, _challenges, module)) if you want to build the aux trace using Miden VM aux trace builders. diff --git a/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs index 85591a449..d8e83a136 100644 --- a/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs index 21a798247..811553323 100644 --- a/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 6; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/selectors/selectors_plonky3.rs b/air-script/src/tests/selectors/selectors_plonky3.rs index cdcbfbdc1..ceb3d06e1 100644 --- a/air-script/src/tests/selectors/selectors_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs b/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs index 92a3f7849..1d9d98e9b 100644 --- a/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/system/system_plonky3.rs b/air-script/src/tests/system/system_plonky3.rs index 4a5299b1b..923f079c9 100644 --- a/air-script/src/tests/system/system_plonky3.rs +++ b/air-script/src/tests/system/system_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 3; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs b/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs index 83ba1fac1..4fcb6b701 100644 --- a/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs +++ b/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 9; pub const AUX_WIDTH: usize = 0; diff --git a/air-script/src/tests/variables/variables_plonky3.rs b/air-script/src/tests/variables/variables_plonky3.rs index bce28aa88..89483e1f6 100644 --- a/air-script/src/tests/variables/variables_plonky3.rs +++ b/air-script/src/tests/variables/variables_plonky3.rs @@ -2,7 +2,7 @@ use p3_field::{ExtensionField, Field, PrimeCharacteristicRing}; use p3_matrix::Matrix; use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; -use p3_miden_air::{MidenAir, MidenAirBuilder, RowMajorMatrix}; +use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; pub const MAIN_WIDTH: usize = 4; pub const AUX_WIDTH: usize = 0; diff --git a/codegen/plonky3/src/air/mod.rs b/codegen/plonky3/src/air/mod.rs index d66ce1875..0ce3fe819 100644 --- a/codegen/plonky3/src/air/mod.rs +++ b/codegen/plonky3/src/air/mod.rs @@ -112,6 +112,17 @@ fn add_air_struct(scope: &mut Scope, ir: &Air, name: &str) { .line("1 + MAX_BETA_CHALLENGE_POWER"); miden_air_impl.new_fn("aux_width").arg_ref_self().ret("usize").line("AUX_WIDTH"); + + let bus_types_fn = miden_air_impl.new_fn("bus_types").arg_ref_self().ret("Vec"); + bus_types_fn.line("vec!["); + for (_id, bus) in &ir.buses { + let bus_type_str = match bus.bus_type { + air_ir::BusType::Multiset => "BusType::Multiset", + air_ir::BusType::Logup => "BusType::Logup", + }; + bus_types_fn.line(format!(" {bus_type_str},")); + } + bus_types_fn.line("]"); } // add the build_aux_trace function if needed diff --git a/codegen/plonky3/src/imports.rs b/codegen/plonky3/src/imports.rs index 8655c7161..d96c0dd40 100644 --- a/codegen/plonky3/src/imports.rs +++ b/codegen/plonky3/src/imports.rs @@ -9,6 +9,7 @@ pub(super) fn add_imports(scope: &mut Scope) { scope.import("p3_matrix", "Matrix"); scope.import("p3_matrix::dense", "RowMajorMatrixView"); scope.import("p3_matrix::stack", "VerticalPair"); + scope.import("p3_miden_air", "BusType"); scope.import("p3_miden_air", "MidenAir"); scope.import("p3_miden_air", "MidenAirBuilder"); scope.import("p3_miden_air", "RowMajorMatrix"); From de4dd61440fe6c0098ffb8b2feea82075b239224 Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Mon, 15 Dec 2025 15:44:05 +0100 Subject: [PATCH 2/8] chore: sync Plonky3 ref --- air-script/Cargo.toml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/air-script/Cargo.toml b/air-script/Cargo.toml index 6e0de90e4..ff242b1e3 100644 --- a/air-script/Cargo.toml +++ b/air-script/Cargo.toml @@ -34,9 +34,9 @@ mir = { package = "air-mir", path = "../mir", version = "0.5" } #p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } # MassaLabs Plonky3 Fork -p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } #p3-field = { package = "p3-field", path = "../../0xMiden-Plonky3/field", default-features = false } #p3-matrix = { package = "p3-matrix", path = "../../0xMiden-Plonky3/matrix", default-features = false } @@ -62,16 +62,16 @@ expect-test = "1.4" #p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } # MassaLabs Plonky3 Fork -p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } -p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "a9ffd66db37f45fc457f9b99bb4345e34d37aae2", default-features = false } +p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } #p3-air = { package = "p3-air", path = "../../0xMiden-Plonky3/air", default-features = false } #p3-challenger = { package = "p3-challenger", path = "../../0xMiden-Plonky3/challenger", default-features = false } From 1610477249eeddcd21b35e7cf1058f6efd369c84 Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Tue, 16 Dec 2025 15:15:01 +0100 Subject: [PATCH 3/8] tests(plonky3): add var_len_pub_inputs, and associated test with buses_varlen_boundary_last_plonky3 --- air-script/Cargo.toml | 26 ++++---- .../src/test_utils/air_tester_macros.rs | 32 +++++++++- .../src/tests/binary/test_air_plonky3.rs | 4 ++ .../src/tests/bitwise/test_air_plonky3.rs | 4 ++ .../buses_varlen_boundary_both_plonky3.rs | 2 +- .../buses_varlen_boundary_first_plonky3.rs | 2 +- .../buses/buses_varlen_boundary_last.air | 19 +++--- .../tests/buses/buses_varlen_boundary_last.rs | 32 ++++++---- .../buses_varlen_boundary_last_plonky3.rs | 12 ++-- air-script/src/tests/buses/mod.rs | 1 + .../src/tests/buses/test_air_plonky3.rs | 4 ++ .../test_air_plonky3_varlen_boundary_last.rs | 64 +++++++++++++++++++ .../computed_indices/test_air_plonky3.rs | 4 ++ .../constant_in_range/test_air_plonky3.rs | 4 ++ .../src/tests/constants/test_air_plonky3.rs | 4 ++ .../test_air_plonky3.rs | 4 ++ .../src/tests/evaluators/test_air_plonky3.rs | 4 ++ .../src/tests/fibonacci/test_air_plonky3.rs | 4 ++ .../src/tests/functions/test_air_plonky3.rs | 4 ++ .../indexed_trace_access/test_air_plonky3.rs | 4 ++ .../list_comprehension/test_air_plonky3.rs | 4 ++ .../tests/list_folding/test_air_plonky3.rs | 4 ++ .../periodic_columns/test_air_plonky3.rs | 4 ++ .../src/tests/pub_inputs/test_air_plonky3.rs | 4 ++ .../src/tests/selectors/test_air_plonky3.rs | 4 ++ .../src/tests/system/test_air_plonky3.rs | 4 ++ .../trace_col_groups/test_air_plonky3.rs | 4 ++ .../src/tests/variables/test_air_plonky3.rs | 4 ++ codegen/plonky3/src/air/mod.rs | 9 ++- 29 files changed, 226 insertions(+), 49 deletions(-) create mode 100644 air-script/src/tests/buses/test_air_plonky3_varlen_boundary_last.rs diff --git a/air-script/Cargo.toml b/air-script/Cargo.toml index ff242b1e3..c8673e531 100644 --- a/air-script/Cargo.toml +++ b/air-script/Cargo.toml @@ -34,9 +34,9 @@ mir = { package = "air-mir", path = "../mir", version = "0.5" } #p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } # MassaLabs Plonky3 Fork -p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } #p3-field = { package = "p3-field", path = "../../0xMiden-Plonky3/field", default-features = false } #p3-matrix = { package = "p3-matrix", path = "../../0xMiden-Plonky3/matrix", default-features = false } @@ -62,16 +62,16 @@ expect-test = "1.4" #p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "27288ba9399cf093fdf704016cd9d083bc7e2a99", default-features = false } # MassaLabs Plonky3 Fork -p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } -p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "1f3cc3f33be7e9e64e4c8942179a3362e041386c", default-features = false } +p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } #p3-air = { package = "p3-air", path = "../../0xMiden-Plonky3/air", default-features = false } #p3-challenger = { package = "p3-challenger", path = "../../0xMiden-Plonky3/challenger", default-features = false } diff --git a/air-script/src/test_utils/air_tester_macros.rs b/air-script/src/test_utils/air_tester_macros.rs index 75b77eec0..836e4a2d8 100644 --- a/air-script/src/test_utils/air_tester_macros.rs +++ b/air-script/src/test_utils/air_tester_macros.rs @@ -62,7 +62,7 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits { let challenge_mmcs = ChallengeMmcs::new(val_mmcs.clone()); let challenger = Challenger::from_hasher(vec![], byte_hash); let dft = Dft::default(); - let mut fri_params = p3_fri::create_miden_fri_params(challenge_mmcs); + let mut fri_params = p3_fri::create_recursive_miden_fri_params(challenge_mmcs); let pcs = Pcs::new(dft, val_mmcs, fri_params); let config = MyConfig::new(pcs, challenger); @@ -71,12 +71,38 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits { .iter() .map(|&x| ::from_u64(x)) .collect(); + let var_len_pub_inputs = generate_var_len_pub_inputs(); + let mut var_len_pub_inputs_goldilocks_vec: Vec>> = vec![]; + for arr in var_len_pub_inputs.iter() { + let mut goldilocks_arr: Vec> = vec![]; + for slice in arr.iter() { + let goldilocks_slice: Vec = slice + .iter() + .map(|&x| ::from_u64(x)) + .collect(); + goldilocks_arr.push(goldilocks_slice); + } + var_len_pub_inputs_goldilocks_vec.push(goldilocks_arr); + } + let var_len_pub_inputs_goldilocks_vec_slice: Vec> = + var_len_pub_inputs_goldilocks_vec + .iter() + .map(|outer| outer.iter().map(|inner| inner.as_slice()).collect()) + .collect(); + let var_len_pub_inputs_goldilocks: Vec<&[&[Val]]> = + var_len_pub_inputs_goldilocks_vec_slice.iter().map(|v| v.as_slice()).collect(); let trace = generate_trace_rows::(inputs); let proof = p3_miden_prover::prove(&config, &$air_name {}, &trace, &inputs_goldilocks); - p3_miden_prover::verify(&config, &$air_name {}, &proof, &inputs_goldilocks) - .expect("Verification failed"); + p3_miden_prover::verify( + &config, + &$air_name {}, + &proof, + &inputs_goldilocks, + &var_len_pub_inputs_goldilocks, + ) + .expect("Verification failed"); } }; } diff --git a/air-script/src/tests/binary/test_air_plonky3.rs b/air-script/src/tests/binary/test_air_plonky3.rs index bbf2674a6..ba508f868 100644 --- a/air-script/src/tests/binary/test_air_plonky3.rs +++ b/air-script/src/tests/binary/test_air_plonky3.rs @@ -40,4 +40,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BinaryAir); diff --git a/air-script/src/tests/bitwise/test_air_plonky3.rs b/air-script/src/tests/bitwise/test_air_plonky3.rs index 289fe7150..91b2c0637 100644 --- a/air-script/src/tests/bitwise/test_air_plonky3.rs +++ b/air-script/src/tests/bitwise/test_air_plonky3.rs @@ -78,4 +78,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BitwiseAir); diff --git a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs index 62d678362..aab57eece 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs @@ -8,7 +8,7 @@ pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; pub const NUM_PERIODIC_VALUES: usize = 0; pub const PERIOD: usize = 0; -pub const NUM_PUBLIC_VALUES: usize = 6; +pub const NUM_PUBLIC_VALUES: usize = 0; pub const MAX_BETA_CHALLENGE_POWER: usize = 2; pub struct BusesAir; diff --git a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs index 76e45b244..4c7b02e51 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs @@ -8,7 +8,7 @@ pub const MAIN_WIDTH: usize = 1; pub const AUX_WIDTH: usize = 2; pub const NUM_PERIODIC_VALUES: usize = 0; pub const PERIOD: usize = 0; -pub const NUM_PUBLIC_VALUES: usize = 2; +pub const NUM_PUBLIC_VALUES: usize = 0; pub const MAX_BETA_CHALLENGE_POWER: usize = 2; pub struct BusesAir; diff --git a/air-script/src/tests/buses/buses_varlen_boundary_last.air b/air-script/src/tests/buses/buses_varlen_boundary_last.air index 9819cbc21..39e48144a 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_last.air +++ b/air-script/src/tests/buses/buses_varlen_boundary_last.air @@ -1,7 +1,7 @@ def BusesAir trace_columns { - main: [a], + main: [a, sp_insert, sp_remove, sq_insert_twice, sq_remove], } buses { @@ -10,20 +10,21 @@ buses { } public_inputs { - outputs: [[2]], + outputs_p: [[2]], + outputs_q: [[2]], } boundary_constraints { enf p.first = null; enf q.first = null; - enf p.last = outputs; - enf q.last = outputs; + enf p.last = outputs_p; + enf q.last = outputs_q; } integrity_constraints { - p.insert(1) when a; - p.remove(1) when (a - 1); - q.insert(1, 2) when a; - q.insert(1, 2) when a; - q.remove(1, 2) with 2; + p.insert(a) when sp_insert; + p.remove(a) when sp_remove; + q.insert(2, a) when sq_insert_twice; + q.insert(2, a) when sq_insert_twice; + q.remove(2, a) with sq_remove; } diff --git a/air-script/src/tests/buses/buses_varlen_boundary_last.rs b/air-script/src/tests/buses/buses_varlen_boundary_last.rs index 686604e08..65dbbda92 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_last.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_last.rs @@ -4,32 +4,36 @@ use winter_math::{ExtensionOf, FieldElement, ToElements}; use winter_utils::{ByteWriter, Serializable}; pub struct PublicInputs { - outputs: Vec<[Felt; 2]>, + outputs_p: Vec<[Felt; 2]>, + outputs_q: Vec<[Felt; 2]>, } impl PublicInputs { - pub fn new(outputs: Vec<[Felt; 2]>) -> Self { - Self { outputs } + pub fn new(outputs_p: Vec<[Felt; 2]>, outputs_q: Vec<[Felt; 2]>) -> Self { + Self { outputs_p, outputs_q } } } impl Serializable for PublicInputs { fn write_into(&self, target: &mut W) { - self.outputs.write_into(target); + self.outputs_p.write_into(target); + self.outputs_q.write_into(target); } } impl ToElements for PublicInputs { fn to_elements(&self) -> Vec { let mut elements = Vec::new(); - self.outputs.iter().for_each(|row| elements.extend_from_slice(row)); + self.outputs_p.iter().for_each(|row| elements.extend_from_slice(row)); + self.outputs_q.iter().for_each(|row| elements.extend_from_slice(row)); elements } } pub struct BusesAir { context: AirContext, - outputs: Vec<[Felt; 2]>, + outputs_p: Vec<[Felt; 2]>, + outputs_q: Vec<[Felt; 2]>, } impl BusesAir { @@ -75,7 +79,7 @@ impl Air for BusesAir { fn new(trace_info: TraceInfo, public_inputs: PublicInputs, options: WinterProofOptions) -> Self { let main_degrees = vec![]; - let aux_degrees = vec![TransitionConstraintDegree::new(2), TransitionConstraintDegree::new(1)]; + let aux_degrees = vec![TransitionConstraintDegree::new(3), TransitionConstraintDegree::new(4)]; let num_main_assertions = 0; let num_aux_assertions = 4; @@ -88,7 +92,7 @@ impl Air for BusesAir { options, ) .set_num_transition_exemptions(2); - Self { context, outputs: public_inputs.outputs } + Self { context, outputs_p: public_inputs.outputs_p, outputs_q: public_inputs.outputs_q } } fn get_periodic_column_values(&self) -> Vec> { @@ -102,12 +106,12 @@ impl Air for BusesAir { fn get_aux_assertions>(&self, aux_rand_elements: &AuxRandElements) -> Vec> { let mut result = Vec::new(); - let reduced_outputs_multiset = Self::bus_multiset_boundary_varlen(aux_rand_elements, &self.outputs); - let reduced_outputs_logup = Self::bus_logup_boundary_varlen(aux_rand_elements, &self.outputs); + let reduced_outputs_p_multiset = Self::bus_multiset_boundary_varlen(aux_rand_elements, &self.outputs_p); + let reduced_outputs_q_logup = Self::bus_logup_boundary_varlen(aux_rand_elements, &self.outputs_q); result.push(Assertion::single(0, 0, E::ONE)); - result.push(Assertion::single(0, self.last_step(), reduced_outputs_multiset)); + result.push(Assertion::single(0, self.last_step(), reduced_outputs_p_multiset)); result.push(Assertion::single(1, 0, E::ZERO)); - result.push(Assertion::single(1, self.last_step(), reduced_outputs_logup)); + result.push(Assertion::single(1, self.last_step(), reduced_outputs_q_logup)); result } @@ -124,7 +128,7 @@ impl Air for BusesAir { let main_next = main_frame.next(); let aux_current = aux_frame.current(); let aux_next = aux_frame.next(); - result[0] = ((aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1]) * E::from(main_current[0]) + E::ONE - E::from(main_current[0])) * aux_current[0] - ((aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1]) * (E::from(main_current[0]) - E::ONE) + E::ONE - (E::from(main_current[0]) - E::ONE)) * aux_next[0]; - result[1] = (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * aux_current[1] + (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * E::from(main_current[0]) + (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * E::from(main_current[0]) - ((aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * aux_next[1] + (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + aux_rand_elements.rand_elements()[1] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[2]) * E::from(Felt::new(2_u64))); + result[0] = ((aux_rand_elements.rand_elements()[0] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[1]) * E::from(main_current[1]) + E::ONE - E::from(main_current[1])) * aux_current[0] - ((aux_rand_elements.rand_elements()[0] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[1]) * E::from(main_current[2]) + E::ONE - E::from(main_current[2])) * aux_next[0]; + result[1] = (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * aux_current[1] + (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * E::from(main_current[3]) + (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * E::from(main_current[3]) - ((aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * aux_next[1] + (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * (aux_rand_elements.rand_elements()[0] + E::from(Felt::new(2_u64)) * aux_rand_elements.rand_elements()[1] + E::from(main_current[0]) * aux_rand_elements.rand_elements()[2]) * E::from(main_current[4])); } } \ No newline at end of file diff --git a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs index 287961c04..238fa557f 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs @@ -4,11 +4,11 @@ use p3_matrix::dense::RowMajorMatrixView; use p3_matrix::stack::VerticalPair; use p3_miden_air::{BusType, MidenAir, MidenAirBuilder, RowMajorMatrix}; -pub const MAIN_WIDTH: usize = 1; +pub const MAIN_WIDTH: usize = 5; pub const AUX_WIDTH: usize = 2; pub const NUM_PERIODIC_VALUES: usize = 0; pub const PERIOD: usize = 0; -pub const NUM_PUBLIC_VALUES: usize = 2; +pub const NUM_PUBLIC_VALUES: usize = 0; pub const MAX_BETA_CHALLENGE_POWER: usize = 2; pub struct BusesAir; @@ -109,8 +109,8 @@ where F: Field, builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()) - aux_bus_boundary_values[1].into()); // Aux integrity/transition constraints - builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into()) * AB::ExprEF::from(main_current[0].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into()) * (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE) + AB::ExprEF::ONE - (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE)) * AB::ExprEF::from(aux_next[0].clone().into())); - builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()).double())); + builder.when_transition().assert_zero_ext(((alpha.into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[0].into()) * AB::ExprEF::from(main_current[1].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[1].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[0].into()) * AB::ExprEF::from(main_current[2].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into())); + builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[3].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[3].clone().into()) - ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[4].clone().into()))); } } @@ -137,8 +137,8 @@ impl BusesAir { let beta_challenges: [_; MAX_BETA_CHALLENGE_POWER] = beta_challenges.try_into().expect("Wrong number of randomness"); let periodic_values: [_; NUM_PERIODIC_VALUES] = periodic_evals.try_into().expect("Wrong number of periodic values"); vec![ - (((alpha + beta_challenges[0]) * EF::from(main_current[0].clone()) + EF::ONE - EF::from(main_current[0].clone())) * EF::from(aux_current[0].clone())) * ((alpha + beta_challenges[0]) * (EF::from(main_current[0].clone()) - EF::ONE) + EF::ONE - (EF::from(main_current[0].clone()) - EF::ONE)).inverse(), - ((alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()) * EF::from(aux_current[1].clone()) + (alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()) * EF::from(main_current[0].clone()) + (alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()) * EF::from(main_current[0].clone()) - (alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()).double()) * ((alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double()) * (alpha + beta_challenges[0] + beta_challenges[1].double())).inverse(), + (((alpha + EF::from(main_current[0].clone()) * beta_challenges[0]) * EF::from(main_current[1].clone()) + EF::ONE - EF::from(main_current[1].clone())) * EF::from(aux_current[0].clone())) * ((alpha + EF::from(main_current[0].clone()) * beta_challenges[0]) * EF::from(main_current[2].clone()) + EF::ONE - EF::from(main_current[2].clone())).inverse(), + ((alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * EF::from(aux_current[1].clone()) + (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * EF::from(main_current[3].clone()) + (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * EF::from(main_current[3].clone()) - (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * EF::from(main_current[4].clone())) * ((alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1]) * (alpha + beta_challenges[0].double() + EF::from(main_current[0].clone()) * beta_challenges[1])).inverse(), ] } } \ No newline at end of file diff --git a/air-script/src/tests/buses/mod.rs b/air-script/src/tests/buses/mod.rs index 95eeeb07b..5c0ca958c 100644 --- a/air-script/src/tests/buses/mod.rs +++ b/air-script/src/tests/buses/mod.rs @@ -36,4 +36,5 @@ mod buses_varlen_boundary_first_plonky3; mod buses_varlen_boundary_last_plonky3; mod test_air_plonky3; +mod test_air_plonky3_varlen_boundary_last; mod test_air_winterfell; diff --git a/air-script/src/tests/buses/test_air_plonky3.rs b/air-script/src/tests/buses/test_air_plonky3.rs index a0cc5e1dc..676d87701 100644 --- a/air-script/src/tests/buses/test_air_plonky3.rs +++ b/air-script/src/tests/buses/test_air_plonky3.rs @@ -55,4 +55,8 @@ fn generate_inputs() -> Vec { vec![1; 2] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![vec![], vec![], vec![]] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BusesAir); diff --git a/air-script/src/tests/buses/test_air_plonky3_varlen_boundary_last.rs b/air-script/src/tests/buses/test_air_plonky3_varlen_boundary_last.rs new file mode 100644 index 000000000..6415f669e --- /dev/null +++ b/air-script/src/tests/buses/test_air_plonky3_varlen_boundary_last.rs @@ -0,0 +1,64 @@ +use p3_field::PrimeField64; +use p3_miden_air::RowMajorMatrix; + +use crate::{ + generate_air_plonky3_test_with_airscript_traits, + tests::buses::buses_varlen_boundary_last_plonky3::{BusesAir, MAIN_WIDTH}, +}; + +pub fn generate_trace_rows(inputs: Vec) -> RowMajorMatrix { + let num_rows = 512; + let trace_length = num_rows * MAIN_WIDTH; + + let mut long_trace = F::zero_vec(trace_length); + + let mut trace = RowMajorMatrix::new(long_trace, MAIN_WIDTH); + + let (prefix, rows, suffix) = unsafe { trace.values.align_to_mut::<[F; MAIN_WIDTH]>() }; + assert!(prefix.is_empty(), "Alignment should match"); + assert!(suffix.is_empty(), "Alignment should match"); + assert_eq!(rows.len(), num_rows); + + // Initialize first row + rows[0][0] = F::ONE; + rows[0][1] = F::ZERO; + rows[0][2] = F::ZERO; + rows[0][3] = F::ZERO; + rows[0][4] = F::ZERO; + + // Fill subsequent rows using direct access to the rows array + for i in 1..num_rows { + let a_prev = rows[i - 1][0]; + let b_prev = rows[i - 1][1]; + let c_prev = rows[i - 1][2]; + let d_prev = rows[i - 1][3]; + let e_prev = rows[i - 1][4]; + + // Update current row based on previous values + rows[i][0] = F::ONE; + rows[i][1] = if i > 3 && i < 8 { F::ONE } else { F::ZERO }; // sp_insert is true 4 times + rows[i][2] = if i > 3 && i < 7 { F::ONE } else { F::ZERO }; // sp_remove is true 3 times + rows[i][3] = if i > 4 && i < 10 { F::ONE } else { F::ZERO }; // sq_insert_twice is true 5 times + rows[i][4] = if i > 5 && i < 10 { + F::from_canonical_checked(2).unwrap() + } else { + F::ZERO + }; // sq_remove has value "2" 4 times + } + + trace +} + +fn generate_inputs() -> Vec { + vec![] +} + +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + // At the end, the bus p will have the tuple (a) (that equals (1)) inserted once + let var_len_p = vec![vec![1]]; + // At the end, the bus q will have the tuple (2, a) (that equals (2, 1)) inserted twice + let var_len_q = vec![vec![2, 1], vec![2, 1]]; + vec![var_len_p, var_len_q] +} + +generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, BusesAir); diff --git a/air-script/src/tests/computed_indices/test_air_plonky3.rs b/air-script/src/tests/computed_indices/test_air_plonky3.rs index 170e01967..0ebed55a3 100644 --- a/air-script/src/tests/computed_indices/test_air_plonky3.rs +++ b/air-script/src/tests/computed_indices/test_air_plonky3.rs @@ -58,4 +58,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ComputedIndicesAir); diff --git a/air-script/src/tests/constant_in_range/test_air_plonky3.rs b/air-script/src/tests/constant_in_range/test_air_plonky3.rs index 856ade680..e1959450e 100644 --- a/air-script/src/tests/constant_in_range/test_air_plonky3.rs +++ b/air-script/src/tests/constant_in_range/test_air_plonky3.rs @@ -59,4 +59,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ConstantInRangeAir); diff --git a/air-script/src/tests/constants/test_air_plonky3.rs b/air-script/src/tests/constants/test_air_plonky3.rs index b5cda7213..5c906ff3b 100644 --- a/air-script/src/tests/constants/test_air_plonky3.rs +++ b/air-script/src/tests/constants/test_air_plonky3.rs @@ -55,4 +55,8 @@ fn generate_inputs() -> Vec { vec![1; 32] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ConstantsAir); diff --git a/air-script/src/tests/constraint_comprehension/test_air_plonky3.rs b/air-script/src/tests/constraint_comprehension/test_air_plonky3.rs index deee1552a..09f942eb3 100644 --- a/air-script/src/tests/constraint_comprehension/test_air_plonky3.rs +++ b/air-script/src/tests/constraint_comprehension/test_air_plonky3.rs @@ -42,4 +42,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ConstraintComprehensionAir); diff --git a/air-script/src/tests/evaluators/test_air_plonky3.rs b/air-script/src/tests/evaluators/test_air_plonky3.rs index 9c0c009fe..1d70dcb45 100644 --- a/air-script/src/tests/evaluators/test_air_plonky3.rs +++ b/air-script/src/tests/evaluators/test_air_plonky3.rs @@ -55,4 +55,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, EvaluatorsAir); diff --git a/air-script/src/tests/fibonacci/test_air_plonky3.rs b/air-script/src/tests/fibonacci/test_air_plonky3.rs index 49a10fce1..e41da1047 100644 --- a/air-script/src/tests/fibonacci/test_air_plonky3.rs +++ b/air-script/src/tests/fibonacci/test_air_plonky3.rs @@ -72,4 +72,8 @@ fn test_goldilocks_fibonacci_computation() { assert_eq!(f_512, F::new(12556846397060607923)); } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, FibonacciAir); diff --git a/air-script/src/tests/functions/test_air_plonky3.rs b/air-script/src/tests/functions/test_air_plonky3.rs index c93e864d3..d9f6c39d6 100644 --- a/air-script/src/tests/functions/test_air_plonky3.rs +++ b/air-script/src/tests/functions/test_air_plonky3.rs @@ -85,4 +85,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, FunctionsAir); diff --git a/air-script/src/tests/indexed_trace_access/test_air_plonky3.rs b/air-script/src/tests/indexed_trace_access/test_air_plonky3.rs index 485dcaa9b..74d0b60d4 100644 --- a/air-script/src/tests/indexed_trace_access/test_air_plonky3.rs +++ b/air-script/src/tests/indexed_trace_access/test_air_plonky3.rs @@ -42,4 +42,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, TraceAccessAir); diff --git a/air-script/src/tests/list_comprehension/test_air_plonky3.rs b/air-script/src/tests/list_comprehension/test_air_plonky3.rs index b5a9d9726..42080ad1f 100644 --- a/air-script/src/tests/list_comprehension/test_air_plonky3.rs +++ b/air-script/src/tests/list_comprehension/test_air_plonky3.rs @@ -82,4 +82,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ListComprehensionAir); diff --git a/air-script/src/tests/list_folding/test_air_plonky3.rs b/air-script/src/tests/list_folding/test_air_plonky3.rs index 797ce6a1c..144e4f27b 100644 --- a/air-script/src/tests/list_folding/test_air_plonky3.rs +++ b/air-script/src/tests/list_folding/test_air_plonky3.rs @@ -85,4 +85,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, ListFoldingAir); diff --git a/air-script/src/tests/periodic_columns/test_air_plonky3.rs b/air-script/src/tests/periodic_columns/test_air_plonky3.rs index 47cb72d4a..d732ffbed 100644 --- a/air-script/src/tests/periodic_columns/test_air_plonky3.rs +++ b/air-script/src/tests/periodic_columns/test_air_plonky3.rs @@ -43,4 +43,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, PeriodicColumnsAir); diff --git a/air-script/src/tests/pub_inputs/test_air_plonky3.rs b/air-script/src/tests/pub_inputs/test_air_plonky3.rs index 69a533000..2a7ad24d0 100644 --- a/air-script/src/tests/pub_inputs/test_air_plonky3.rs +++ b/air-script/src/tests/pub_inputs/test_air_plonky3.rs @@ -46,4 +46,8 @@ fn generate_inputs() -> Vec { vec![0; 32] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, PubInputsAir); diff --git a/air-script/src/tests/selectors/test_air_plonky3.rs b/air-script/src/tests/selectors/test_air_plonky3.rs index 8efe655e1..c8cfbffa2 100644 --- a/air-script/src/tests/selectors/test_air_plonky3.rs +++ b/air-script/src/tests/selectors/test_air_plonky3.rs @@ -46,4 +46,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, SelectorsAir); diff --git a/air-script/src/tests/system/test_air_plonky3.rs b/air-script/src/tests/system/test_air_plonky3.rs index 7e4378652..952a7412f 100644 --- a/air-script/src/tests/system/test_air_plonky3.rs +++ b/air-script/src/tests/system/test_air_plonky3.rs @@ -43,4 +43,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, SystemAir); diff --git a/air-script/src/tests/trace_col_groups/test_air_plonky3.rs b/air-script/src/tests/trace_col_groups/test_air_plonky3.rs index cb1dac48a..920a7f3db 100644 --- a/air-script/src/tests/trace_col_groups/test_air_plonky3.rs +++ b/air-script/src/tests/trace_col_groups/test_air_plonky3.rs @@ -61,4 +61,8 @@ fn generate_inputs() -> Vec { vec![1; 16] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, TraceColGroupAir); diff --git a/air-script/src/tests/variables/test_air_plonky3.rs b/air-script/src/tests/variables/test_air_plonky3.rs index 0b94b6e0f..356a4d9fb 100644 --- a/air-script/src/tests/variables/test_air_plonky3.rs +++ b/air-script/src/tests/variables/test_air_plonky3.rs @@ -46,4 +46,8 @@ fn generate_inputs() -> Vec { vec![1; 32] } +fn generate_var_len_pub_inputs<'a>() -> Vec>> { + vec![] +} + generate_air_plonky3_test_with_airscript_traits!(test_air_plonky3, VariablesAir); diff --git a/codegen/plonky3/src/air/mod.rs b/codegen/plonky3/src/air/mod.rs index 0ce3fe819..29e09b344 100644 --- a/codegen/plonky3/src/air/mod.rs +++ b/codegen/plonky3/src/air/mod.rs @@ -45,8 +45,13 @@ fn add_constants(scope: &mut Scope, ir: &Air) { let aux_width = ir.trace_segment_widths.get(1).cloned().unwrap_or(0); let num_periodic_values = ir.periodic_columns().count(); let period = ir.periodic_columns().map(|col| col.period()).max().unwrap_or(0); - let num_public_values = - ir.public_inputs().map(|public_input| public_input.size()).sum::(); + let num_public_values = ir + .public_inputs() + .map(|public_input| match public_input { + air_ir::PublicInput::Vector { size, .. } => size, + air_ir::PublicInput::Table { .. } => &0, + }) + .sum::(); let max_beta_challenge_power = ir.num_random_values.saturating_sub(1); let constants = [ From 0c88cd22450f020420c587cb1397384ebdf12b8f Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Wed, 17 Dec 2025 09:23:48 +0100 Subject: [PATCH 4/8] feat: Remove bus boundary handling --- air-script/Cargo.toml | 26 +++++++++---------- air-script/src/tests/binary/binary_plonky3.rs | 2 -- .../src/tests/bitwise/bitwise_plonky3.rs | 2 -- .../src/tests/buses/buses_complex_plonky3.rs | 6 ----- .../src/tests/buses/buses_simple_plonky3.rs | 5 ---- .../buses_varlen_boundary_both_plonky3.rs | 5 ---- .../buses_varlen_boundary_first_plonky3.rs | 6 ----- .../buses_varlen_boundary_last_plonky3.rs | 6 ----- .../computed_indices_complex_plonky3.rs | 2 -- .../computed_indices_simple_plonky3.rs | 2 -- .../constant_in_range_plonky3.rs | 2 -- .../src/tests/constants/constants_plonky3.rs | 2 -- .../constraint_comprehension_plonky3.rs | 2 -- .../evaluators_nested_slice_call_plonky3.rs | 2 -- .../tests/evaluators/evaluators_plonky3.rs | 2 -- .../evaluators/evaluators_slice_plonky3.rs | 2 -- .../src/tests/fibonacci/fibonacci_plonky3.rs | 2 -- .../functions/functions_complex_plonky3.rs | 2 -- .../functions/functions_simple_plonky3.rs | 2 -- .../indexed_trace_access_plonky3.rs | 2 -- .../list_comprehension_nested_plonky3.rs | 2 -- .../list_comprehension_plonky3.rs | 2 -- .../list_folding/list_folding_plonky3.rs | 2 -- .../periodic_columns_plonky3.rs | 2 -- .../tests/pub_inputs/pub_inputs_plonky3.rs | 2 -- .../selectors_combine_complex_plonky3.rs | 4 --- .../selectors_combine_simple_plonky3.rs | 2 -- ...ombine_with_list_comprehensions_plonky3.rs | 2 -- .../src/tests/selectors/selectors_plonky3.rs | 2 -- .../selectors_with_evaluators_plonky3.rs | 2 -- air-script/src/tests/system/system_plonky3.rs | 2 -- .../trace_col_groups_plonky3.rs | 2 -- .../src/tests/variables/variables_plonky3.rs | 2 -- .../plonky3/src/air/boundary_constraints.rs | 1 + codegen/plonky3/src/air/mod.rs | 5 ++-- 35 files changed, 17 insertions(+), 99 deletions(-) diff --git a/air-script/Cargo.toml b/air-script/Cargo.toml index e5c18353f..dc4d86762 100644 --- a/air-script/Cargo.toml +++ b/air-script/Cargo.toml @@ -35,9 +35,9 @@ mir = { package = "air-mir", path = "../mir", version = "0.5" } #p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } # MassaLabs Plonky3 Fork -p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } # MassaLabs fork miden-processor = { package = "miden-processor", git="https://github.com/massalabs/miden-vm", rev = "bc553af69a2543a0789830e8508b019694528181", default-features = false } @@ -59,16 +59,16 @@ expect-test = "1.4" #p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } # MassaLabs Plonky3 Fork -p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } -p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "a1170e96747406fbb98b8ab63654ea803b8d5b61", default-features = false } +p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } winter-air = { package = "winter-air", version = "0.12", default-features = false } winter-math = { package = "winter-math", version = "0.12", default-features = false } diff --git a/air-script/src/tests/binary/binary_plonky3.rs b/air-script/src/tests/binary/binary_plonky3.rs index 0e4fd817a..9f64d933c 100644 --- a/air-script/src/tests/binary/binary_plonky3.rs +++ b/air-script/src/tests/binary/binary_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for BinaryAir { builder.assert_zero(main_current[0].clone().into() * main_current[0].clone().into() - main_current[0].clone().into()); builder.assert_zero(main_current[1].clone().into() * main_current[1].clone().into() - main_current[1].clone().into()); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/bitwise/bitwise_plonky3.rs b/air-script/src/tests/bitwise/bitwise_plonky3.rs index 9d0f305ae..9811db8cf 100644 --- a/air-script/src/tests/bitwise/bitwise_plonky3.rs +++ b/air-script/src/tests/bitwise/bitwise_plonky3.rs @@ -67,8 +67,6 @@ where F: Field, builder.when_transition().assert_zero_ext(AB::ExprEF::from(periodic_values[1].clone().into()) * (AB::ExprEF::from(main_current[12].clone().into()) - AB::ExprEF::from(main_next[11].clone().into()))); builder.assert_zero((AB::Expr::ONE - main_current[0].clone().into()) * (main_current[12].clone().into() - (main_current[11].clone().into() * AB::Expr::from_u64(16) + main_current[3].clone().into() * main_current[7].clone().into() + main_current[4].clone().into().double() * main_current[8].clone().into() + AB::Expr::from_u64(4) * main_current[5].clone().into() * main_current[9].clone().into() + AB::Expr::from_u64(8) * main_current[6].clone().into() * main_current[10].clone().into())) + main_current[0].clone().into() * (main_current[12].clone().into() - (main_current[11].clone().into() * AB::Expr::from_u64(16) + main_current[3].clone().into() + main_current[7].clone().into() - main_current[3].clone().into().double() * main_current[7].clone().into() + (main_current[4].clone().into() + main_current[8].clone().into() - main_current[4].clone().into().double() * main_current[8].clone().into()).double() + AB::Expr::from_u64(4) * (main_current[5].clone().into() + main_current[9].clone().into() - main_current[5].clone().into().double() * main_current[9].clone().into()) + AB::Expr::from_u64(8) * (main_current[6].clone().into() + main_current[10].clone().into() - main_current[6].clone().into().double() * main_current[10].clone().into())))); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/buses/buses_complex_plonky3.rs b/air-script/src/tests/buses/buses_complex_plonky3.rs index cd00bd2d2..2d038524d 100644 --- a/air-script/src/tests/buses/buses_complex_plonky3.rs +++ b/air-script/src/tests/buses/buses_complex_plonky3.rs @@ -105,12 +105,6 @@ where F: Field, builder.assert_zero(main_current[2].clone().into() * main_current[2].clone().into() - main_current[2].clone().into()); builder.assert_zero(main_current[3].clone().into() * main_current[3].clone().into() - main_current[3].clone().into()); - // Aux boundary constraints - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into() + (AB::ExprEF::from_u64(3) + AB::ExprEF::from(main_current[1].clone().into())) * beta_challenges[1].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[2].into()) * AB::ExprEF::from(main_current[2].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) * ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) + AB::ExprEF::from(main_current[2].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + (AB::ExprEF::from_u64(3) + AB::ExprEF::from(main_current[1].clone().into())) * beta_challenges[1].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[2].into()) * AB::ExprEF::from(main_current[3].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[3].clone().into())) * ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[3].clone().into())) + AB::ExprEF::from(main_current[3].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into())); builder.when_transition().assert_zero_ext((alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[4].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[5].clone().into()) - ((alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[1].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[6].clone().into()))); diff --git a/air-script/src/tests/buses/buses_simple_plonky3.rs b/air-script/src/tests/buses/buses_simple_plonky3.rs index 169c1358a..65efcf8fb 100644 --- a/air-script/src/tests/buses/buses_simple_plonky3.rs +++ b/air-script/src/tests/buses/buses_simple_plonky3.rs @@ -102,11 +102,6 @@ where F: Field, // Main integrity/transition constraints - // Aux boundary constraints - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into()) * AB::ExprEF::from(main_current[0].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) + AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into())); builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()).double())); diff --git a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs index aab57eece..b32d738e1 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_both_plonky3.rs @@ -102,11 +102,6 @@ where F: Field, // Main integrity/transition constraints - // Aux boundary constraints - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - aux_bus_boundary_values[0].into()); - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()) - aux_bus_boundary_values[1].into()); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into()) * AB::ExprEF::from(main_current[0].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into()) * (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE) + AB::ExprEF::ONE - (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE)) * AB::ExprEF::from(aux_next[0].clone().into())); builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()).double())); diff --git a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs index 4c7b02e51..b32d738e1 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_first_plonky3.rs @@ -102,12 +102,6 @@ where F: Field, // Main integrity/transition constraints - // Aux boundary constraints - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - aux_bus_boundary_values[0].into()); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()) - aux_bus_boundary_values[1].into()); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into()) * AB::ExprEF::from(main_current[0].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into()) * (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE) + AB::ExprEF::ONE - (AB::ExprEF::from(main_current[0].clone().into()) - AB::ExprEF::ONE)) * AB::ExprEF::from(aux_next[0].clone().into())); builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) - ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()).double())); diff --git a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs index 238fa557f..dba927c11 100644 --- a/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs +++ b/air-script/src/tests/buses/buses_varlen_boundary_last_plonky3.rs @@ -102,12 +102,6 @@ where F: Field, // Main integrity/transition constraints - // Aux boundary constraints - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - aux_bus_boundary_values[0].into()); - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into())); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[1].clone().into()) - aux_bus_boundary_values[1].into()); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[0].into()) * AB::ExprEF::from(main_current[1].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[1].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[0].into()) * AB::ExprEF::from(main_current[2].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[2].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into())); builder.when_transition().assert_zero_ext((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_current[1].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[3].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[3].clone().into()) - ((alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(aux_next[1].clone().into()) + (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * (alpha.into() + beta_challenges[0].into().double() + AB::ExprEF::from(main_current[0].clone().into()) * beta_challenges[1].into()) * AB::ExprEF::from(main_current[4].clone().into()))); diff --git a/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs b/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs index dc78881c5..6b87e196b 100644 --- a/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs +++ b/air-script/src/tests/computed_indices/computed_indices_complex_plonky3.rs @@ -37,8 +37,6 @@ impl MidenAir for ComputedIndicesAir { // Main integrity/transition constraints builder.assert_zero(main_current[2].clone().into() * AB::Expr::from_u64(3) + main_current[3].clone().into() * AB::Expr::from_u64(4)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs b/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs index 0af020fc9..1ab566b59 100644 --- a/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs +++ b/air-script/src/tests/computed_indices/computed_indices_simple_plonky3.rs @@ -44,8 +44,6 @@ impl MidenAir for ComputedIndicesAir { builder.when_transition().assert_zero(main_next[6].clone().into() - AB::Expr::from_u64(6) * main_current[6].clone().into()); builder.when_transition().assert_zero(main_next[7].clone().into() - AB::Expr::from_u64(12) * main_current[7].clone().into()); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs b/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs index f45ffa333..134d141eb 100644 --- a/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs +++ b/air-script/src/tests/constant_in_range/constant_in_range_plonky3.rs @@ -37,8 +37,6 @@ impl MidenAir for ConstantInRangeAir { // Main integrity/transition constraints builder.assert_zero(main_current[0].clone().into() - (main_current[1].clone().into() - main_current[4].clone().into() - main_current[8].clone().into() + AB::Expr::ONE + main_current[2].clone().into() - main_current[5].clone().into() - main_current[9].clone().into() + AB::Expr::from_u64(2) + main_current[3].clone().into() - main_current[6].clone().into() - main_current[10].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/constants/constants_plonky3.rs b/air-script/src/tests/constants/constants_plonky3.rs index 8693f5527..72218cfbb 100644 --- a/air-script/src/tests/constants/constants_plonky3.rs +++ b/air-script/src/tests/constants/constants_plonky3.rs @@ -46,8 +46,6 @@ impl MidenAir for ConstantsAir { builder.when_transition().assert_zero(main_next[5].clone().into() - (main_current[5].clone().into() + AB::Expr::ONE)); builder.assert_zero(main_current[4].clone().into() - AB::Expr::ONE); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs b/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs index 8273e3670..b34c6181b 100644 --- a/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs +++ b/air-script/src/tests/constraint_comprehension/constraint_comprehension_plonky3.rs @@ -40,8 +40,6 @@ impl MidenAir for ConstraintComprehensionAir { builder.assert_zero(main_current[8].clone().into() - main_current[12].clone().into()); builder.assert_zero(main_current[9].clone().into() - main_current[13].clone().into()); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs b/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs index 6367cb8e3..45e132b6c 100644 --- a/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_nested_slice_call_plonky3.rs @@ -60,8 +60,6 @@ impl MidenAir for EvaluatorsSliceAir { builder.assert_zero(main_current[5].clone().into() * main_current[6].clone().into() * main_current[7].clone().into() * (main_current[8].clone().into() * main_current[8].clone().into() - main_current[8].clone().into())); builder.assert_zero(main_current[5].clone().into() * main_current[6].clone().into() * main_current[7].clone().into() * main_current[8].clone().into() * (main_current[9].clone().into() * main_current[9].clone().into() - main_current[9].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/evaluators/evaluators_plonky3.rs b/air-script/src/tests/evaluators/evaluators_plonky3.rs index 61322363b..5c0ad3895 100644 --- a/air-script/src/tests/evaluators/evaluators_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_plonky3.rs @@ -46,8 +46,6 @@ impl MidenAir for EvaluatorsAir { builder.assert_zero(main_current[5].clone().into() - AB::Expr::ONE); builder.assert_zero(main_current[6].clone().into() - AB::Expr::from_u64(4)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs b/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs index 525368d67..cd19cef43 100644 --- a/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs +++ b/air-script/src/tests/evaluators/evaluators_slice_plonky3.rs @@ -60,8 +60,6 @@ impl MidenAir for EvaluatorsSliceAir { builder.assert_zero(main_current[0].clone().into() * main_current[1].clone().into() * main_current[2].clone().into() * (main_current[3].clone().into() * main_current[3].clone().into() - main_current[3].clone().into())); builder.assert_zero(main_current[0].clone().into() * main_current[1].clone().into() * main_current[2].clone().into() * main_current[3].clone().into() * (main_current[4].clone().into() * main_current[4].clone().into() - main_current[4].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/fibonacci/fibonacci_plonky3.rs b/air-script/src/tests/fibonacci/fibonacci_plonky3.rs index 804620d63..15e40b79d 100644 --- a/air-script/src/tests/fibonacci/fibonacci_plonky3.rs +++ b/air-script/src/tests/fibonacci/fibonacci_plonky3.rs @@ -40,8 +40,6 @@ impl MidenAir for FibonacciAir { builder.when_transition().assert_zero(main_next[1].clone().into() - (main_current[0].clone().into() + main_current[1].clone().into())); builder.when_transition().assert_zero(main_next[0].clone().into() - main_current[1].clone().into()); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/functions/functions_complex_plonky3.rs b/air-script/src/tests/functions/functions_complex_plonky3.rs index 3af9d91a1..238cc3741 100644 --- a/air-script/src/tests/functions/functions_complex_plonky3.rs +++ b/air-script/src/tests/functions/functions_complex_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for FunctionsAir { builder.when_transition().assert_zero(main_next[16].clone().into() - main_current[16].clone().into() * ((main_current[3].clone().into() * main_current[3].clone().into() * main_current[3].clone().into() * main_current[3].clone().into() * main_current[3].clone().into() * main_current[1].clone().into() * main_current[2].clone().into() + main_current[3].clone().into() * main_current[3].clone().into() * (AB::Expr::ONE - main_current[1].clone().into()) * main_current[2].clone().into() + main_current[3].clone().into() * main_current[1].clone().into() * (AB::Expr::ONE - main_current[2].clone().into()) + (AB::Expr::ONE - main_current[1].clone().into()) * (AB::Expr::ONE - main_current[2].clone().into())) * main_current[0].clone().into() - main_current[0].clone().into() + AB::Expr::ONE)); builder.when_transition().assert_zero(main_next[3].clone().into() - (main_current[4].clone().into() + main_current[5].clone().into() + main_current[6].clone().into() + main_current[7].clone().into() + main_current[8].clone().into() + main_current[9].clone().into() + main_current[10].clone().into() + main_current[11].clone().into() + main_current[12].clone().into() + main_current[13].clone().into() + main_current[14].clone().into() + main_current[15].clone().into() + AB::Expr::ONE).double()); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/functions/functions_simple_plonky3.rs b/air-script/src/tests/functions/functions_simple_plonky3.rs index d9a20fe2e..1b72a7dfb 100644 --- a/air-script/src/tests/functions/functions_simple_plonky3.rs +++ b/air-script/src/tests/functions/functions_simple_plonky3.rs @@ -44,8 +44,6 @@ impl MidenAir for FunctionsAir { builder.assert_zero(main_current[4].clone().into() + main_current[5].clone().into() + main_current[6].clone().into() + main_current[7].clone().into() - AB::Expr::ONE); builder.assert_zero((main_current[4].clone().into() + main_current[5].clone().into() + main_current[6].clone().into() + main_current[7].clone().into()) * AB::Expr::from_u64(4) - AB::Expr::ONE); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs b/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs index dcbf9b649..9b1bea28c 100644 --- a/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs +++ b/air-script/src/tests/indexed_trace_access/indexed_trace_access_plonky3.rs @@ -37,8 +37,6 @@ impl MidenAir for TraceAccessAir { // Main integrity/transition constraints builder.when_transition().assert_zero(main_next[0].clone().into() - (main_current[1].clone().into() + AB::Expr::ONE)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs b/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs index a97d3fc89..5525f2068 100644 --- a/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs +++ b/air-script/src/tests/list_comprehension/list_comprehension_nested_plonky3.rs @@ -39,8 +39,6 @@ impl MidenAir for ListComprehensionAir { builder.assert_zero(main_current[0].clone().into().double() + main_current[1].clone().into() * AB::Expr::from_u64(3) - AB::Expr::from_u64(5)); builder.assert_zero(main_current[0].clone().into() * AB::Expr::from_u64(3) + main_current[1].clone().into() * AB::Expr::from_u64(4) - AB::Expr::from_u64(7)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs b/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs index 9683bf5d3..9d13e2e8b 100644 --- a/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs +++ b/air-script/src/tests/list_comprehension/list_comprehension_plonky3.rs @@ -42,8 +42,6 @@ impl MidenAir for ListComprehensionAir { builder.assert_zero(main_current[1].clone().into() - (main_current[5].clone().into() - main_current[8].clone().into() - main_current[12].clone().into() + AB::Expr::from_u64(10) + main_current[6].clone().into() - main_current[9].clone().into() - main_current[13].clone().into() + AB::Expr::from_u64(20) + main_current[7].clone().into() - main_current[10].clone().into() - main_current[14].clone().into())); builder.assert_zero(main_current[14].clone().into() - AB::Expr::from_u64(10)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/list_folding/list_folding_plonky3.rs b/air-script/src/tests/list_folding/list_folding_plonky3.rs index 17bf03c87..44f4753a3 100644 --- a/air-script/src/tests/list_folding/list_folding_plonky3.rs +++ b/air-script/src/tests/list_folding/list_folding_plonky3.rs @@ -40,8 +40,6 @@ impl MidenAir for ListFoldingAir { builder.when_transition().assert_zero(main_next[7].clone().into() - (main_current[9].clone().into() * main_current[13].clone().into() + main_current[10].clone().into() * main_current[14].clone().into() + main_current[11].clone().into() * main_current[15].clone().into() + main_current[12].clone().into() * main_current[16].clone().into() + (main_current[9].clone().into() + main_current[13].clone().into()) * (main_current[10].clone().into() + main_current[14].clone().into()) * (main_current[11].clone().into() + main_current[15].clone().into()) * (main_current[12].clone().into() + main_current[16].clone().into()))); builder.when_transition().assert_zero(main_next[8].clone().into() - (main_current[1].clone().into() + main_current[9].clone().into() * main_current[13].clone().into() + main_current[10].clone().into() * main_current[14].clone().into() + main_current[11].clone().into() * main_current[15].clone().into() + main_current[12].clone().into() * main_current[16].clone().into() + main_current[9].clone().into() * main_current[13].clone().into() + main_current[10].clone().into() * main_current[14].clone().into() + main_current[11].clone().into() * main_current[15].clone().into() + main_current[12].clone().into() * main_current[16].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs b/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs index 65d19b7b8..df36acbd7 100644 --- a/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs +++ b/air-script/src/tests/periodic_columns/periodic_columns_plonky3.rs @@ -52,8 +52,6 @@ where F: Field, builder.assert_zero_ext(AB::ExprEF::from(periodic_values[0].clone().into()) * (AB::ExprEF::from(main_current[1].clone().into()) + AB::ExprEF::from(main_current[2].clone().into()))); builder.when_transition().assert_zero_ext(AB::ExprEF::from(periodic_values[1].clone().into()) * (AB::ExprEF::from(main_next[0].clone().into()) - AB::ExprEF::from(main_current[0].clone().into()))); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs b/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs index 8318c7e05..4cc281a74 100644 --- a/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs +++ b/air-script/src/tests/pub_inputs/pub_inputs_plonky3.rs @@ -44,8 +44,6 @@ impl MidenAir for PubInputsAir { // Main integrity/transition constraints builder.when_transition().assert_zero(main_next[0].clone().into() - (main_current[1].clone().into() + main_current[2].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs index 9952aaa66..a89f39d38 100644 --- a/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_complex_plonky3.rs @@ -105,10 +105,6 @@ where F: Field, builder.assert_zero((AB::Expr::ONE - main_current[0].clone().into()) * (main_current[5].clone().into() - AB::Expr::from_u64(5)) + main_current[0].clone().into() * (main_current[4].clone().into() - AB::Expr::from_u64(4))); builder.assert_zero(main_current[0].clone().into() * (main_current[5].clone().into() - AB::Expr::from_u64(20)) + (AB::Expr::ONE - main_current[0].clone().into()) * main_current[1].clone().into() * (main_current[4].clone().into() - AB::Expr::from_u64(31))); - // Aux boundary constraints - builder.when_first_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - builder.when_last_row().assert_zero_ext(AB::ExprEF::from(aux_current[0].clone().into()) - AB::ExprEF::ONE); - // Aux integrity/transition constraints builder.when_transition().assert_zero_ext(((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * AB::ExprEF::from(main_current[0].clone().into()) * AB::ExprEF::from(main_current[5].clone().into()) + AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into()) * AB::ExprEF::from(main_current[5].clone().into())) * ((alpha.into() + beta_challenges[0].into() + beta_challenges[1].into().double()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(main_current[1].clone().into()) * AB::ExprEF::from(main_current[5].clone().into()) + AB::ExprEF::ONE - (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * AB::ExprEF::from(main_current[1].clone().into()) * AB::ExprEF::from(main_current[5].clone().into())) * AB::ExprEF::from(aux_current[0].clone().into()) - ((alpha.into() + AB::ExprEF::from_u64(3) * beta_challenges[0].into() + AB::ExprEF::from_u64(4) * beta_challenges[1].into()) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[1].clone().into())) * AB::ExprEF::from(main_current[4].clone().into()) + AB::ExprEF::ONE - (AB::ExprEF::ONE - AB::ExprEF::from(main_current[0].clone().into())) * (AB::ExprEF::ONE - AB::ExprEF::from(main_current[1].clone().into())) * AB::ExprEF::from(main_current[4].clone().into())) * AB::ExprEF::from(aux_next[0].clone().into())); } diff --git a/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs index d8e83a136..ed223440f 100644 --- a/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_simple_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for SelectorsAir { builder.when_transition().assert_zero(main_next[1].clone().into() - main_current[2].clone().into()); builder.when_transition().assert_zero(main_current[3].clone().into() * (main_next[0].clone().into() - (main_current[0].clone().into() + main_current[1].clone().into())) + (AB::Expr::ONE - main_current[3].clone().into()) * (main_next[0].clone().into() - main_current[0].clone().into() * main_current[1].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs b/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs index 811553323..d482f2c9d 100644 --- a/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_combine_with_list_comprehensions_plonky3.rs @@ -39,8 +39,6 @@ impl MidenAir for SelectorsAir { builder.assert_zero((AB::Expr::ONE - main_current[0].clone().into()) * (main_current[5].clone().into() - AB::Expr::from_u64(8)) + main_current[0].clone().into() * (main_current[4].clone().into() - AB::Expr::from_u64(2))); builder.assert_zero(main_current[0].clone().into() * (main_current[5].clone().into() - AB::Expr::from_u64(4)) + (AB::Expr::ONE - main_current[0].clone().into()) * main_current[1].clone().into() * (main_current[4].clone().into() - AB::Expr::from_u64(6))); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/selectors/selectors_plonky3.rs b/air-script/src/tests/selectors/selectors_plonky3.rs index ceb3d06e1..e16eb2f28 100644 --- a/air-script/src/tests/selectors/selectors_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for SelectorsAir { builder.when_transition().assert_zero(main_current[0].clone().into() * (AB::Expr::ONE - main_current[1].clone().into()) * main_next[3].clone().into()); builder.when_transition().assert_zero(main_current[0].clone().into() * main_current[1].clone().into() * main_current[2].clone().into() * (main_next[3].clone().into() - main_current[3].clone().into()) + (AB::Expr::ONE - main_current[1].clone().into()) * (AB::Expr::ONE - main_current[2].clone().into()) * (main_next[3].clone().into() - AB::Expr::ONE)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs b/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs index 1d9d98e9b..42affcf13 100644 --- a/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs +++ b/air-script/src/tests/selectors/selectors_with_evaluators_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for SelectorsAir { builder.when_transition().assert_zero(main_current[0].clone().into() * (AB::Expr::ONE - main_current[1].clone().into()) * main_next[3].clone().into()); builder.when_transition().assert_zero(main_current[1].clone().into() * main_current[2].clone().into() * main_current[0].clone().into() * (main_next[3].clone().into() - main_current[3].clone().into()) + (AB::Expr::ONE - main_current[1].clone().into()) * (AB::Expr::ONE - main_current[2].clone().into()) * (main_next[3].clone().into() - AB::Expr::ONE)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/system/system_plonky3.rs b/air-script/src/tests/system/system_plonky3.rs index 923f079c9..acc5e98be 100644 --- a/air-script/src/tests/system/system_plonky3.rs +++ b/air-script/src/tests/system/system_plonky3.rs @@ -37,8 +37,6 @@ impl MidenAir for SystemAir { // Main integrity/transition constraints builder.when_transition().assert_zero(main_next[0].clone().into() - (main_current[0].clone().into() + AB::Expr::ONE)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs b/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs index 4fcb6b701..5a0b38979 100644 --- a/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs +++ b/air-script/src/tests/trace_col_groups/trace_col_groups_plonky3.rs @@ -38,8 +38,6 @@ impl MidenAir for TraceColGroupAir { builder.when_transition().assert_zero(main_next[2].clone().into() - (main_current[2].clone().into() + AB::Expr::ONE)); builder.when_transition().assert_zero(main_next[1].clone().into() - (main_current[1].clone().into() - AB::Expr::ONE)); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/air-script/src/tests/variables/variables_plonky3.rs b/air-script/src/tests/variables/variables_plonky3.rs index 89483e1f6..57cbc460d 100644 --- a/air-script/src/tests/variables/variables_plonky3.rs +++ b/air-script/src/tests/variables/variables_plonky3.rs @@ -54,8 +54,6 @@ where F: Field, builder.assert_zero((AB::Expr::ONE - main_current[0].clone().into()) * (main_current[3].clone().into() - main_current[1].clone().into() - main_current[2].clone().into()) - (AB::Expr::from_u64(6) - (AB::Expr::from_u64(7) - main_current[0].clone().into()))); builder.when_transition().assert_zero(main_current[0].clone().into() * (main_current[3].clone().into() - main_current[1].clone().into() * main_current[2].clone().into()) - (AB::Expr::ONE - main_next[0].clone().into())); - // Aux boundary constraints - // Aux integrity/transition constraints } } \ No newline at end of file diff --git a/codegen/plonky3/src/air/boundary_constraints.rs b/codegen/plonky3/src/air/boundary_constraints.rs index aba2206b0..79a4f4f7a 100644 --- a/codegen/plonky3/src/air/boundary_constraints.rs +++ b/codegen/plonky3/src/air/boundary_constraints.rs @@ -13,6 +13,7 @@ pub(super) fn add_main_boundary_constraints(eval_func: &mut Function, ir: &Air) } } +#[allow(dead_code)] /// Adds the aux boundary constraints to the generated code. pub(super) fn add_aux_boundary_constraints(eval_func: &mut Function, ir: &Air) { eval_func.line(""); diff --git a/codegen/plonky3/src/air/mod.rs b/codegen/plonky3/src/air/mod.rs index 29e09b344..32a585ce9 100644 --- a/codegen/plonky3/src/air/mod.rs +++ b/codegen/plonky3/src/air/mod.rs @@ -6,7 +6,7 @@ use air_ir::Air; use super::Scope; use crate::air::{ - boundary_constraints::{add_aux_boundary_constraints, add_main_boundary_constraints}, + boundary_constraints::add_main_boundary_constraints, graph::Codegen, integrity_constraints::{add_aux_integrity_constraints, add_main_integrity_constraints}, }; @@ -213,7 +213,8 @@ fn add_air_struct(scope: &mut Scope, ir: &Air, name: &str) { add_main_integrity_constraints(eval_func, ir); - add_aux_boundary_constraints(eval_func, ir); + // Note: Plonky3 automatically adds aux boundary constraints + //add_aux_boundary_constraints(eval_func, ir); add_aux_integrity_constraints(eval_func, ir); } From 4a6179f1070416656335a17b248467811d706d9f Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Wed, 17 Dec 2025 15:34:38 +0100 Subject: [PATCH 5/8] chore: sync Plonky3 dependency --- air-script/Cargo.toml | 44 +++++++++++++------------------------------ 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/air-script/Cargo.toml b/air-script/Cargo.toml index dc4d86762..ed1709f76 100644 --- a/air-script/Cargo.toml +++ b/air-script/Cargo.toml @@ -29,15 +29,9 @@ miden-diagnostics = { workspace = true } mir = { package = "air-mir", path = "../mir", version = "0.5" } # 0xMiden Plonky3 Fork - -#p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } - -# MassaLabs Plonky3 Fork -p3-matrix = { package = "p3-matrix", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-field = { package = "p3-field", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-miden-air = { package = "miden-air", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-matrix = { package = "p3-matrix", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-field = { package = "p3-field", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-miden-air = { package = "miden-air", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } # MassaLabs fork miden-processor = { package = "miden-processor", git="https://github.com/massalabs/miden-vm", rev = "bc553af69a2543a0789830e8508b019694528181", default-features = false } @@ -47,28 +41,16 @@ miden-air = { package = "miden-air", git="https://github.com/massalabs/miden-vm" expect-test = "1.4" # 0xMiden Plonky3 Fork -#p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } -#p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "95fb1c965cc938eb1e04b10a6080138d4699b1ac", default-features = false } - -# MassaLabs Plonky3 Fork -p3-air = { package = "p3-air", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-challenger = { package = "p3-challenger", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-commit = { package = "p3-commit", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-dft = { package = "p3-dft", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-fri = { package = "p3-fri", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-miden-prover = { package = "miden-prover", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-sha256 = { package = "p3-sha256", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } -p3-symmetric = { package = "p3-symmetric", git="https://github.com/massalabs/Plonky3", rev = "ea807d80a591e0419f980ca6b765f1f37ac77028", default-features = false } +p3-air = { package = "p3-air", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-challenger = { package = "p3-challenger", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-commit = { package = "p3-commit", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-dft = { package = "p3-dft", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-fri = { package = "p3-fri", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-merkle-tree = { package = "p3-merkle-tree", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-miden-prover = { package = "miden-prover", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-goldilocks = { package = "p3-goldilocks", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-sha256 = { package = "p3-sha256", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } +p3-symmetric = { package = "p3-symmetric", git="https://github.com/0xMiden/Plonky3", rev = "632fb26a9141cc70f903e5378035ca8d5855c490", default-features = false } winter-air = { package = "winter-air", version = "0.12", default-features = false } winter-math = { package = "winter-math", version = "0.12", default-features = false } From ce767d582e3c06bbf9bffe8fbcbc25e9bb06a32e Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Wed, 17 Dec 2025 16:11:09 +0100 Subject: [PATCH 6/8] refactor: extract var len public input convertion utility --- .../src/test_utils/air_tester_macros.rs | 13 +------------ air-script/src/test_utils/mod.rs | 2 ++ .../var_len_pub_inputs_conversion_utils.rs | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs diff --git a/air-script/src/test_utils/air_tester_macros.rs b/air-script/src/test_utils/air_tester_macros.rs index 836e4a2d8..cff578937 100644 --- a/air-script/src/test_utils/air_tester_macros.rs +++ b/air-script/src/test_utils/air_tester_macros.rs @@ -72,18 +72,7 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits { .map(|&x| ::from_u64(x)) .collect(); let var_len_pub_inputs = generate_var_len_pub_inputs(); - let mut var_len_pub_inputs_goldilocks_vec: Vec>> = vec![]; - for arr in var_len_pub_inputs.iter() { - let mut goldilocks_arr: Vec> = vec![]; - for slice in arr.iter() { - let goldilocks_slice: Vec = slice - .iter() - .map(|&x| ::from_u64(x)) - .collect(); - goldilocks_arr.push(goldilocks_slice); - } - var_len_pub_inputs_goldilocks_vec.push(goldilocks_arr); - } + let var_len_pub_inputs_goldilocks_vec = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_var_len_pub_inputs_to_goldilocks(var_len_pub_inputs); let var_len_pub_inputs_goldilocks_vec_slice: Vec> = var_len_pub_inputs_goldilocks_vec .iter() diff --git a/air-script/src/test_utils/mod.rs b/air-script/src/test_utils/mod.rs index d01389a15..fd252e991 100644 --- a/air-script/src/test_utils/mod.rs +++ b/air-script/src/test_utils/mod.rs @@ -2,5 +2,7 @@ pub mod air_tester_macros; /// Code generation for tests/**/*.air files. pub mod codegen; +/// Nested vec utilities for test inputs +pub mod var_len_pub_inputs_conversion_utils; /// Winterfell-specific traits pub mod winterfell_traits; diff --git a/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs b/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs new file mode 100644 index 000000000..1383822e3 --- /dev/null +++ b/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs @@ -0,0 +1,19 @@ +type Val = p3_goldilocks::Goldilocks; + +pub(crate) fn convert_var_len_pub_inputs_to_goldilocks( + var_len_pub_inputs: Vec>>, +) -> Vec>> { + let mut var_len_pub_inputs_goldilocks_vec: Vec>> = vec![]; + for arr in var_len_pub_inputs.iter() { + let mut goldilocks_arr: Vec> = vec![]; + for slice in arr.iter() { + let goldilocks_slice: Vec = slice + .iter() + .map(|&x| ::from_u64(x)) + .collect(); + goldilocks_arr.push(goldilocks_slice); + } + var_len_pub_inputs_goldilocks_vec.push(goldilocks_arr); + } + var_len_pub_inputs_goldilocks_vec +} From c709f8b40ccebe929050db238be0a1d8094e49e5 Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Wed, 17 Dec 2025 16:24:19 +0100 Subject: [PATCH 7/8] refactor: further simplify var_len_pub_input conversions --- air-script/src/test_utils/air_tester_macros.rs | 9 ++------- .../var_len_pub_inputs_conversion_utils.rs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/air-script/src/test_utils/air_tester_macros.rs b/air-script/src/test_utils/air_tester_macros.rs index cff578937..a6c10dd15 100644 --- a/air-script/src/test_utils/air_tester_macros.rs +++ b/air-script/src/test_utils/air_tester_macros.rs @@ -73,13 +73,8 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits { .collect(); let var_len_pub_inputs = generate_var_len_pub_inputs(); let var_len_pub_inputs_goldilocks_vec = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_var_len_pub_inputs_to_goldilocks(var_len_pub_inputs); - let var_len_pub_inputs_goldilocks_vec_slice: Vec> = - var_len_pub_inputs_goldilocks_vec - .iter() - .map(|outer| outer.iter().map(|inner| inner.as_slice()).collect()) - .collect(); - let var_len_pub_inputs_goldilocks: Vec<&[&[Val]]> = - var_len_pub_inputs_goldilocks_vec_slice.iter().map(|v| v.as_slice()).collect(); + let var_len_pub_inputs_goldilocks_vec_slice = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_inner_vec_to_slice(&var_len_pub_inputs_goldilocks_vec); + let var_len_pub_inputs_goldilocks = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_mid_vec_to_slice(&var_len_pub_inputs_goldilocks_vec_slice); let trace = generate_trace_rows::(inputs); diff --git a/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs b/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs index 1383822e3..d86216f1a 100644 --- a/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs +++ b/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs @@ -17,3 +17,18 @@ pub(crate) fn convert_var_len_pub_inputs_to_goldilocks( } var_len_pub_inputs_goldilocks_vec } + +pub(crate) fn convert_inner_vec_to_slice<'a>( + var_len_pub_inputs: &'a Vec>>, +) -> Vec> { + var_len_pub_inputs + .iter() + .map(|outer| outer.iter().map(|inner| inner.as_slice()).collect()) + .collect() +} + +pub(crate) fn convert_mid_vec_to_slice<'a>( + var_len_pub_inputs: &'a Vec>, +) -> Vec<&'a [&'a [Val]]> { + var_len_pub_inputs.iter().map(|v| v.as_slice()).collect() +} From 58c1fd29da0033a271a635ddfcc7c577d66f341c Mon Sep 17 00:00:00 2001 From: Leo-Besancon Date: Wed, 17 Dec 2025 17:04:57 +0100 Subject: [PATCH 8/8] refactor: extracted the conversion of regular public inputs and added comments --- air-script/src/test_utils/air_tester_macros.rs | 18 +++++++++++------- air-script/src/test_utils/mod.rs | 4 ++-- ...utils.rs => pub_inputs_conversion_utils.rs} | 12 ++++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) rename air-script/src/test_utils/{var_len_pub_inputs_conversion_utils.rs => pub_inputs_conversion_utils.rs} (66%) diff --git a/air-script/src/test_utils/air_tester_macros.rs b/air-script/src/test_utils/air_tester_macros.rs index a6c10dd15..7c5e305ee 100644 --- a/air-script/src/test_utils/air_tester_macros.rs +++ b/air-script/src/test_utils/air_tester_macros.rs @@ -66,15 +66,19 @@ macro_rules! generate_air_plonky3_test_with_airscript_traits { let pcs = Pcs::new(dft, val_mmcs, fri_params); let config = MyConfig::new(pcs, challenger); + // Generate public inputs and convert them to Goldilocks field elements let inputs = generate_inputs(); - let inputs_goldilocks: Vec = inputs - .iter() - .map(|&x| ::from_u64(x)) - .collect(); + let inputs_goldilocks = crate::test_utils::pub_inputs_conversion_utils::convert_pub_inputs_to_goldilocks(&inputs); + + // Generate variable-length public inputs as a `Vec>>`. + // The outer `Vec` represents multiple tables (one for each bus in the AIR) + // The middle `Vec` represents the rows of each table + // The innermost `Vec` represents the tuple values contained by the bus, that will be combined with randomness into a single field element. let var_len_pub_inputs = generate_var_len_pub_inputs(); - let var_len_pub_inputs_goldilocks_vec = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_var_len_pub_inputs_to_goldilocks(var_len_pub_inputs); - let var_len_pub_inputs_goldilocks_vec_slice = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_inner_vec_to_slice(&var_len_pub_inputs_goldilocks_vec); - let var_len_pub_inputs_goldilocks = crate::test_utils::var_len_pub_inputs_conversion_utils::convert_mid_vec_to_slice(&var_len_pub_inputs_goldilocks_vec_slice); + // Convert variable-length public inputs to Goldilocks field elements + let var_len_pub_inputs_goldilocks_vec = crate::test_utils::pub_inputs_conversion_utils::convert_var_len_pub_inputs_to_goldilocks(var_len_pub_inputs); + let var_len_pub_inputs_goldilocks_vec_slice = crate::test_utils::pub_inputs_conversion_utils::convert_inner_vec_to_slice(&var_len_pub_inputs_goldilocks_vec); + let var_len_pub_inputs_goldilocks = crate::test_utils::pub_inputs_conversion_utils::convert_mid_vec_to_slice(&var_len_pub_inputs_goldilocks_vec_slice); let trace = generate_trace_rows::(inputs); diff --git a/air-script/src/test_utils/mod.rs b/air-script/src/test_utils/mod.rs index fd252e991..03ce65907 100644 --- a/air-script/src/test_utils/mod.rs +++ b/air-script/src/test_utils/mod.rs @@ -2,7 +2,7 @@ pub mod air_tester_macros; /// Code generation for tests/**/*.air files. pub mod codegen; -/// Nested vec utilities for test inputs -pub mod var_len_pub_inputs_conversion_utils; +/// Conversion utilities for test inputs (both public inputs and variable-length public inputs). +pub mod pub_inputs_conversion_utils; /// Winterfell-specific traits pub mod winterfell_traits; diff --git a/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs b/air-script/src/test_utils/pub_inputs_conversion_utils.rs similarity index 66% rename from air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs rename to air-script/src/test_utils/pub_inputs_conversion_utils.rs index d86216f1a..894ba75d6 100644 --- a/air-script/src/test_utils/var_len_pub_inputs_conversion_utils.rs +++ b/air-script/src/test_utils/pub_inputs_conversion_utils.rs @@ -1,5 +1,15 @@ type Val = p3_goldilocks::Goldilocks; +/// Converts public inputs from u64 to Goldilocks field elements. +pub(crate) fn convert_pub_inputs_to_goldilocks(pub_inputs: &[u64]) -> Vec { + pub_inputs + .iter() + .map(|&x| ::from_u64(x)) + .collect() +} + +/// Converts variable-length public inputs from u64 to Goldilocks field elements. +/// The input should be a Vec of tables (Vec>) in a RowMajor format. pub(crate) fn convert_var_len_pub_inputs_to_goldilocks( var_len_pub_inputs: Vec>>, ) -> Vec>> { @@ -18,6 +28,7 @@ pub(crate) fn convert_var_len_pub_inputs_to_goldilocks( var_len_pub_inputs_goldilocks_vec } +/// Converts the innermost vectors of variable-length public inputs to slices. pub(crate) fn convert_inner_vec_to_slice<'a>( var_len_pub_inputs: &'a Vec>>, ) -> Vec> { @@ -27,6 +38,7 @@ pub(crate) fn convert_inner_vec_to_slice<'a>( .collect() } +/// Converts the middle vectors of variable-length public inputs to slices. pub(crate) fn convert_mid_vec_to_slice<'a>( var_len_pub_inputs: &'a Vec>, ) -> Vec<&'a [&'a [Val]]> {