diff --git a/stwo_cairo_prover/crates/prover/src/cairo_air/debug_tools.rs b/stwo_cairo_prover/crates/prover/src/cairo_air/debug_tools.rs index b5793e88f..7f8fad544 100644 --- a/stwo_cairo_prover/crates/prover/src/cairo_air/debug_tools.rs +++ b/stwo_cairo_prover/crates/prover/src/cairo_air/debug_tools.rs @@ -15,8 +15,9 @@ use stwo_prover::core::poly::circle::CanonicCoset; use super::air::CairoClaim; use crate::components::range_check_vector::{ - range_check_11, range_check_12, range_check_18, range_check_19, range_check_3_6, - range_check_3_6_6_3, range_check_4_3, range_check_6, range_check_7_2_5, range_check_9_9, + range_check_11, range_check_12, range_check_18, range_check_19, range_check_3_3_3_3_3, + range_check_3_6, range_check_3_6_6_3, range_check_4_3, range_check_4_4, range_check_4_4_4_4, + range_check_6, range_check_7_2_5, range_check_9_9, }; use crate::components::{ add_ap_opcode, add_ap_opcode_imm, add_ap_opcode_op_1_base_fp, add_opcode, add_opcode_imm, @@ -674,6 +675,16 @@ where ) .entries(trace), ); + entries.extend( + RelationTrackerComponent::new( + tree_span_provider, + range_check_4_4::Eval { + lookup_elements: relations::RangeCheck_4_4::dummy(), + }, + 1 << 8, + ) + .entries(trace), + ); entries.extend( RelationTrackerComponent::new( tree_span_provider, @@ -700,7 +711,27 @@ where range_check_3_6_6_3::Eval { lookup_elements: relations::RangeCheck_3_6_6_3::dummy(), }, - 1 << 14, + 1 << 18, + ) + .entries(trace), + ); + entries.extend( + RelationTrackerComponent::new( + tree_span_provider, + range_check_4_4_4_4::Eval { + lookup_elements: relations::RangeCheck_4_4_4_4::dummy(), + }, + 1 << 16, + ) + .entries(trace), + ); + entries.extend( + RelationTrackerComponent::new( + tree_span_provider, + range_check_3_3_3_3_3::Eval { + lookup_elements: relations::RangeCheck_3_3_3_3_3::dummy(), + }, + 1 << 15, ) .entries(trace), ); diff --git a/stwo_cairo_prover/crates/prover/src/cairo_air/preprocessed.rs b/stwo_cairo_prover/crates/prover/src/cairo_air/preprocessed.rs index 0e948fb83..14aaa7287 100644 --- a/stwo_cairo_prover/crates/prover/src/cairo_air/preprocessed.rs +++ b/stwo_cairo_prover/crates/prover/src/cairo_air/preprocessed.rs @@ -100,6 +100,9 @@ fn gen_range_check_columns() -> Vec> { // RangeCheck_4_3. let range_check_4_3_col_0 = RangeCheck::new([4, 3], 0); let range_check_4_3_col_1 = RangeCheck::new([4, 3], 1); + // RangeCheck_4_4. + let range_check_4_4_col_0 = RangeCheck::new([4, 4], 0); + let range_check_4_4_col_1 = RangeCheck::new([4, 4], 1); // RangeCheck_9_9. let range_check_9_9_col_0 = RangeCheck::new([9, 9], 0); let range_check_9_9_col_1 = RangeCheck::new([9, 9], 1); @@ -112,6 +115,17 @@ fn gen_range_check_columns() -> Vec> { let range_check_3_6_6_3_col_1 = RangeCheck::new([3, 6, 6, 3], 1); let range_check_3_6_6_3_col_2 = RangeCheck::new([3, 6, 6, 3], 2); let range_check_3_6_6_3_col_3 = RangeCheck::new([3, 6, 6, 3], 3); + // RangeCheck_4_4_4_4. + let range_check_4_4_4_4_col_0 = RangeCheck::new([4, 4, 4, 4], 0); + let range_check_4_4_4_4_col_1 = RangeCheck::new([4, 4, 4, 4], 1); + let range_check_4_4_4_4_col_2 = RangeCheck::new([4, 4, 4, 4], 2); + let range_check_4_4_4_4_col_3 = RangeCheck::new([4, 4, 4, 4], 3); + // RangeCheck_3_3_3_3_3. + let range_check_3_3_3_3_3_col_0 = RangeCheck::new([3, 3, 3, 3, 3], 0); + let range_check_3_3_3_3_3_col_1 = RangeCheck::new([3, 3, 3, 3, 3], 1); + let range_check_3_3_3_3_3_col_2 = RangeCheck::new([3, 3, 3, 3, 3], 2); + let range_check_3_3_3_3_3_col_3 = RangeCheck::new([3, 3, 3, 3, 3], 3); + let range_check_3_3_3_3_3_col_4 = RangeCheck::new([3, 3, 3, 3, 3], 4); vec![ Box::new(range_check_6), @@ -123,6 +137,8 @@ fn gen_range_check_columns() -> Vec> { Box::new(range_check_3_6_col_1), Box::new(range_check_4_3_col_0), Box::new(range_check_4_3_col_1), + Box::new(range_check_4_4_col_0), + Box::new(range_check_4_4_col_1), Box::new(range_check_9_9_col_0), Box::new(range_check_9_9_col_1), Box::new(range_check_7_2_5_col_0), @@ -132,6 +148,15 @@ fn gen_range_check_columns() -> Vec> { Box::new(range_check_3_6_6_3_col_1), Box::new(range_check_3_6_6_3_col_2), Box::new(range_check_3_6_6_3_col_3), + Box::new(range_check_4_4_4_4_col_0), + Box::new(range_check_4_4_4_4_col_1), + Box::new(range_check_4_4_4_4_col_2), + Box::new(range_check_4_4_4_4_col_3), + Box::new(range_check_3_3_3_3_3_col_0), + Box::new(range_check_3_3_3_3_3_col_1), + Box::new(range_check_3_3_3_3_3_col_2), + Box::new(range_check_3_3_3_3_3_col_3), + Box::new(range_check_3_3_3_3_3_col_4), ] } diff --git a/stwo_cairo_prover/crates/prover/src/cairo_air/range_checks_air.rs b/stwo_cairo_prover/crates/prover/src/cairo_air/range_checks_air.rs index 4d60bd9f4..9f6be38c0 100644 --- a/stwo_cairo_prover/crates/prover/src/cairo_air/range_checks_air.rs +++ b/stwo_cairo_prover/crates/prover/src/cairo_air/range_checks_air.rs @@ -11,8 +11,9 @@ use stwo_prover::core::pcs::{TreeBuilder, TreeVec}; use super::debug_tools::indented_component_display; use crate::components::range_check_vector::{ - range_check_11, range_check_12, range_check_18, range_check_19, range_check_3_6, - range_check_3_6_6_3, range_check_4_3, range_check_6, range_check_7_2_5, range_check_9_9, + range_check_11, range_check_12, range_check_18, range_check_19, range_check_3_3_3_3_3, + range_check_3_6, range_check_3_6_6_3, range_check_4_3, range_check_4_4, range_check_4_4_4_4, + range_check_6, range_check_7_2_5, range_check_9_9, }; use crate::relations; @@ -25,9 +26,12 @@ pub struct RangeChecksClaim { pub rc_19: range_check_19::Claim, pub rc_3_6: range_check_3_6::Claim, pub rc_4_3: range_check_4_3::Claim, + pub rc_4_4: range_check_4_4::Claim, pub rc_9_9: range_check_9_9::Claim, pub rc_7_2_5: range_check_7_2_5::Claim, pub rc_3_6_6_3: range_check_3_6_6_3::Claim, + pub rc_4_4_4_4: range_check_4_4_4_4::Claim, + pub rc_3_3_3_3_3: range_check_3_3_3_3_3::Claim, } impl RangeChecksClaim { pub fn mix_into(&self, channel: &mut impl Channel) { @@ -38,9 +42,12 @@ impl RangeChecksClaim { self.rc_19.mix_into(channel); self.rc_3_6.mix_into(channel); self.rc_4_3.mix_into(channel); + self.rc_4_4.mix_into(channel); self.rc_9_9.mix_into(channel); self.rc_7_2_5.mix_into(channel); self.rc_3_6_6_3.mix_into(channel); + self.rc_4_4_4_4.mix_into(channel); + self.rc_3_3_3_3_3.mix_into(channel); } pub fn log_sizes(&self) -> TreeVec> { @@ -53,9 +60,12 @@ impl RangeChecksClaim { self.rc_19.log_sizes(), self.rc_3_6.log_sizes(), self.rc_4_3.log_sizes(), + self.rc_4_4.log_sizes(), self.rc_9_9.log_sizes(), self.rc_7_2_5.log_sizes(), self.rc_3_6_6_3.log_sizes(), + self.rc_4_4_4_4.log_sizes(), + self.rc_3_3_3_3_3.log_sizes(), ] .into_iter(), ) @@ -70,9 +80,12 @@ pub struct RangeChecksClaimGenerator { pub rc_19_trace_generator: range_check_19::ClaimGenerator, pub rc_3_6_trace_generator: range_check_3_6::ClaimGenerator, pub rc_4_3_trace_generator: range_check_4_3::ClaimGenerator, + pub rc_4_4_trace_generator: range_check_4_4::ClaimGenerator, pub rc_9_9_trace_generator: range_check_9_9::ClaimGenerator, pub rc_7_2_5_trace_generator: range_check_7_2_5::ClaimGenerator, pub rc_3_6_6_3_trace_generator: range_check_3_6_6_3::ClaimGenerator, + pub rc_4_4_4_4_trace_generator: range_check_4_4_4_4::ClaimGenerator, + pub rc_3_3_3_3_3_trace_generator: range_check_3_3_3_3_3::ClaimGenerator, } impl Default for RangeChecksClaimGenerator { fn default() -> Self { @@ -90,9 +103,12 @@ impl RangeChecksClaimGenerator { rc_19_trace_generator: range_check_19::ClaimGenerator::new(), rc_3_6_trace_generator: range_check_3_6::ClaimGenerator::new(), rc_4_3_trace_generator: range_check_4_3::ClaimGenerator::new(), + rc_4_4_trace_generator: range_check_4_4::ClaimGenerator::new(), rc_9_9_trace_generator: range_check_9_9::ClaimGenerator::new(), rc_7_2_5_trace_generator: range_check_7_2_5::ClaimGenerator::new(), rc_3_6_6_3_trace_generator: range_check_3_6_6_3::ClaimGenerator::new(), + rc_4_4_4_4_trace_generator: range_check_4_4_4_4::ClaimGenerator::new(), + rc_3_3_3_3_3_trace_generator: range_check_3_3_3_3_3::ClaimGenerator::new(), } } pub fn write_trace( @@ -116,12 +132,18 @@ impl RangeChecksClaimGenerator { self.rc_3_6_trace_generator.write_trace(tree_builder); let (rc_4_3_claim, rc_4_3_interaction_gen) = self.rc_4_3_trace_generator.write_trace(tree_builder); + let (rc_4_4_claim, rc_4_4_interaction_gen) = + self.rc_4_4_trace_generator.write_trace(tree_builder); let (rc_9_9_claim, rc_9_9_interaction_gen) = self.rc_9_9_trace_generator.write_trace(tree_builder); let (rc_7_2_5_claim, rc_7_2_5_interaction_gen) = self.rc_7_2_5_trace_generator.write_trace(tree_builder); let (rc_3_6_6_3_claim, rc_3_6_6_3_interaction_gen) = self.rc_3_6_6_3_trace_generator.write_trace(tree_builder); + let (rc_4_4_4_4_claim, rc_4_4_4_4_interaction_gen) = + self.rc_4_4_4_4_trace_generator.write_trace(tree_builder); + let (rc_3_3_3_3_3_claim, rc_3_3_3_3_3_interaction_gen) = + self.rc_3_3_3_3_3_trace_generator.write_trace(tree_builder); ( RangeChecksClaim { rc_6: rc_6_claim, @@ -131,9 +153,12 @@ impl RangeChecksClaimGenerator { rc_19: rc_19_claim, rc_3_6: rc_3_6_claim, rc_4_3: rc_4_3_claim, + rc_4_4: rc_4_4_claim, rc_9_9: rc_9_9_claim, rc_7_2_5: rc_7_2_5_claim, rc_3_6_6_3: rc_3_6_6_3_claim, + rc_4_4_4_4: rc_4_4_4_4_claim, + rc_3_3_3_3_3: rc_3_3_3_3_3_claim, }, RangeChecksInteractionClaimGenerator { rc_6_interaction_gen, @@ -143,9 +168,12 @@ impl RangeChecksClaimGenerator { rc_19_interaction_gen, rc_3_6_interaction_gen, rc_4_3_interaction_gen, + rc_4_4_interaction_gen, rc_9_9_interaction_gen, rc_7_2_5_interaction_gen, rc_3_6_6_3_interaction_gen, + rc_4_4_4_4_interaction_gen, + rc_3_3_3_3_3_interaction_gen, }, ) } @@ -160,9 +188,12 @@ pub struct RangeChecksInteractionClaim { pub rc_19: range_check_19::InteractionClaim, pub rc_3_6: range_check_3_6::InteractionClaim, pub rc_4_3: range_check_4_3::InteractionClaim, + pub rc_4_4: range_check_4_4::InteractionClaim, pub rc_9_9: range_check_9_9::InteractionClaim, pub rc_7_2_5: range_check_7_2_5::InteractionClaim, pub rc_3_6_6_3: range_check_3_6_6_3::InteractionClaim, + pub rc_4_4_4_4: range_check_4_4_4_4::InteractionClaim, + pub rc_3_3_3_3_3: range_check_3_3_3_3_3::InteractionClaim, } impl RangeChecksInteractionClaim { pub fn mix_into(&self, channel: &mut impl Channel) { @@ -173,9 +204,12 @@ impl RangeChecksInteractionClaim { self.rc_19.mix_into(channel); self.rc_3_6.mix_into(channel); self.rc_4_3.mix_into(channel); + self.rc_4_4.mix_into(channel); self.rc_9_9.mix_into(channel); self.rc_7_2_5.mix_into(channel); self.rc_3_6_6_3.mix_into(channel); + self.rc_4_4_4_4.mix_into(channel); + self.rc_3_3_3_3_3.mix_into(channel); } pub fn sum(&self) -> SecureField { @@ -187,9 +221,12 @@ impl RangeChecksInteractionClaim { sum += self.rc_19.claimed_sum; sum += self.rc_3_6.claimed_sum; sum += self.rc_4_3.claimed_sum; + sum += self.rc_4_4.claimed_sum; sum += self.rc_9_9.claimed_sum; sum += self.rc_7_2_5.claimed_sum; sum += self.rc_3_6_6_3.claimed_sum; + sum += self.rc_4_4_4_4.claimed_sum; + sum += self.rc_3_3_3_3_3.claimed_sum; sum } } @@ -202,9 +239,12 @@ pub struct RangeChecksInteractionClaimGenerator { rc_19_interaction_gen: range_check_19::InteractionClaimGenerator, rc_3_6_interaction_gen: range_check_3_6::InteractionClaimGenerator, rc_4_3_interaction_gen: range_check_4_3::InteractionClaimGenerator, + rc_4_4_interaction_gen: range_check_4_4::InteractionClaimGenerator, rc_9_9_interaction_gen: range_check_9_9::InteractionClaimGenerator, rc_7_2_5_interaction_gen: range_check_7_2_5::InteractionClaimGenerator, rc_3_6_6_3_interaction_gen: range_check_3_6_6_3::InteractionClaimGenerator, + rc_4_4_4_4_interaction_gen: range_check_4_4_4_4::InteractionClaimGenerator, + rc_3_3_3_3_3_interaction_gen: range_check_3_3_3_3_3::InteractionClaimGenerator, } impl RangeChecksInteractionClaimGenerator { pub fn write_interaction_trace( @@ -236,6 +276,9 @@ impl RangeChecksInteractionClaimGenerator { let rc_4_3_interaction_claim = self .rc_4_3_interaction_gen .write_interaction_trace(tree_builder, &interaction_elements.rc_4_3); + let rc_4_4_interaction_claim = self + .rc_4_4_interaction_gen + .write_interaction_trace(tree_builder, &interaction_elements.rc_4_4); let rc_9_9_interaction_claim = self .rc_9_9_interaction_gen .write_interaction_trace(tree_builder, &interaction_elements.rc_9_9); @@ -245,6 +288,12 @@ impl RangeChecksInteractionClaimGenerator { let rc_3_6_6_3_interaction_claim = self .rc_3_6_6_3_interaction_gen .write_interaction_trace(tree_builder, &interaction_elements.rc_3_6_6_3); + let rc_4_4_4_4_interaction_claim = self + .rc_4_4_4_4_interaction_gen + .write_interaction_trace(tree_builder, &interaction_elements.rc_4_4_4_4); + let rc_3_3_3_3_3_interaction_claim = self + .rc_3_3_3_3_3_interaction_gen + .write_interaction_trace(tree_builder, &interaction_elements.rc_3_3_3_3_3); RangeChecksInteractionClaim { rc_6: rc_6_interaction_claim, rc_11: rc_11_interaction_claim, @@ -253,9 +302,12 @@ impl RangeChecksInteractionClaimGenerator { rc_19: rc_19_interaction_claim, rc_3_6: rc_3_6_interaction_claim, rc_4_3: rc_4_3_interaction_claim, + rc_4_4: rc_4_4_interaction_claim, rc_9_9: rc_9_9_interaction_claim, rc_7_2_5: rc_7_2_5_interaction_claim, rc_3_6_6_3: rc_3_6_6_3_interaction_claim, + rc_4_4_4_4: rc_4_4_4_4_interaction_claim, + rc_3_3_3_3_3: rc_3_3_3_3_3_interaction_claim, } } } @@ -268,9 +320,12 @@ pub struct RangeChecksInteractionElements { pub rc_19: relations::RangeCheck_19, pub rc_3_6: relations::RangeCheck_3_6, pub rc_4_3: relations::RangeCheck_4_3, + pub rc_4_4: relations::RangeCheck_4_4, pub rc_9_9: relations::RangeCheck_9_9, pub rc_7_2_5: relations::RangeCheck_7_2_5, pub rc_3_6_6_3: relations::RangeCheck_3_6_6_3, + pub rc_4_4_4_4: relations::RangeCheck_4_4_4_4, + pub rc_3_3_3_3_3: relations::RangeCheck_3_3_3_3_3, // ... } impl RangeChecksInteractionElements { @@ -283,9 +338,12 @@ impl RangeChecksInteractionElements { rc_19: relations::RangeCheck_19::draw(channel), rc_3_6: relations::RangeCheck_3_6::draw(channel), rc_4_3: relations::RangeCheck_4_3::draw(channel), + rc_4_4: relations::RangeCheck_4_4::draw(channel), rc_9_9: relations::RangeCheck_9_9::draw(channel), rc_7_2_5: relations::RangeCheck_7_2_5::draw(channel), rc_3_6_6_3: relations::RangeCheck_3_6_6_3::draw(channel), + rc_4_4_4_4: relations::RangeCheck_4_4_4_4::draw(channel), + rc_3_3_3_3_3: relations::RangeCheck_3_3_3_3_3::draw(channel), } } } @@ -298,9 +356,12 @@ pub struct RangeChecksComponents { rc_19: range_check_19::Component, rc_3_6: range_check_3_6::Component, rc_4_3: range_check_4_3::Component, + rc_4_4: range_check_4_4::Component, rc_9_9: range_check_9_9::Component, rc_7_2_5: range_check_7_2_5::Component, rc_3_6_6_3: range_check_3_6_6_3::Component, + rc_4_4_4_4: range_check_4_4_4_4::Component, + rc_3_3_3_3_3: range_check_3_3_3_3_3::Component, } impl RangeChecksComponents { pub fn new( @@ -343,6 +404,11 @@ impl RangeChecksComponents { range_check_4_3::Eval::new(interaction_elements.rc_4_3.clone()), interaction_claim.rc_4_3.claimed_sum, ); + let rc_4_4_component = range_check_4_4::Component::new( + tree_span_provider, + range_check_4_4::Eval::new(interaction_elements.rc_4_4.clone()), + interaction_claim.rc_4_4.claimed_sum, + ); let rc_9_9_component = range_check_9_9::Component::new( tree_span_provider, range_check_9_9::Eval::new(interaction_elements.rc_9_9.clone()), @@ -358,6 +424,16 @@ impl RangeChecksComponents { range_check_3_6_6_3::Eval::new(interaction_elements.rc_3_6_6_3.clone()), interaction_claim.rc_3_6_6_3.claimed_sum, ); + let rc_4_4_4_4_component = range_check_4_4_4_4::Component::new( + tree_span_provider, + range_check_4_4_4_4::Eval::new(interaction_elements.rc_4_4_4_4.clone()), + interaction_claim.rc_4_4_4_4.claimed_sum, + ); + let rc_3_3_3_3_3_component = range_check_3_3_3_3_3::Component::new( + tree_span_provider, + range_check_3_3_3_3_3::Eval::new(interaction_elements.rc_3_3_3_3_3.clone()), + interaction_claim.rc_3_3_3_3_3.claimed_sum, + ); Self { rc_6: rc_6_component, rc_11: rc_11_component, @@ -366,9 +442,12 @@ impl RangeChecksComponents { rc_19: rc_19_component, rc_3_6: rc_3_6_component, rc_4_3: rc_4_3_component, + rc_4_4: rc_4_4_component, rc_9_9: rc_9_9_component, rc_7_2_5: rc_7_2_5_component, rc_3_6_6_3: rc_3_6_6_3_component, + rc_4_4_4_4: rc_4_4_4_4_component, + rc_3_3_3_3_3: rc_3_3_3_3_3_component, } } @@ -381,9 +460,12 @@ impl RangeChecksComponents { &self.rc_19 as &dyn ComponentProver, &self.rc_3_6 as &dyn ComponentProver, &self.rc_4_3 as &dyn ComponentProver, + &self.rc_4_4 as &dyn ComponentProver, &self.rc_9_9 as &dyn ComponentProver, &self.rc_7_2_5 as &dyn ComponentProver, &self.rc_3_6_6_3 as &dyn ComponentProver, + &self.rc_4_4_4_4 as &dyn ComponentProver, + &self.rc_3_3_3_3_3 as &dyn ComponentProver, ] } } @@ -421,6 +503,11 @@ impl std::fmt::Display for RangeChecksComponents { "RangeCheck4_3: {}", indented_component_display(&self.rc_4_3) )?; + writeln!( + f, + "RangeCheck4_4: {}", + indented_component_display(&self.rc_4_4) + )?; writeln!( f, "RangeCheck9_9: {}", @@ -436,6 +523,16 @@ impl std::fmt::Display for RangeChecksComponents { "RangeCheck3_6_6_3: {}", indented_component_display(&self.rc_3_6_6_3) )?; + writeln!( + f, + "RangeCheck4_4_4_4: {}", + indented_component_display(&self.rc_4_4_4_4) + )?; + writeln!( + f, + "RangeCheck3_3_3_3_3: {}", + indented_component_display(&self.rc_3_3_3_3_3) + )?; Ok(()) } } diff --git a/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs b/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs index eb36f7dca..26e22a257 100644 --- a/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/components/range_check_vector/mod.rs @@ -73,9 +73,12 @@ generate_range_check_code!([18]); generate_range_check_code!([19]); generate_range_check_code!([3, 6]); generate_range_check_code!([4, 3]); +generate_range_check_code!([4, 4]); generate_range_check_code!([9, 9]); generate_range_check_code!([7, 2, 5]); generate_range_check_code!([3, 6, 6, 3]); +generate_range_check_code!([4, 4, 4, 4]); +generate_range_check_code!([3, 3, 3, 3, 3]); #[cfg(test)] mod tests { diff --git a/stwo_cairo_prover/crates/prover/src/relations/mod.rs b/stwo_cairo_prover/crates/prover/src/relations/mod.rs index a4addc3a9..22d331037 100644 --- a/stwo_cairo_prover/crates/prover/src/relations/mod.rs +++ b/stwo_cairo_prover/crates/prover/src/relations/mod.rs @@ -11,8 +11,11 @@ relation!(RangeCheck_18, 1); relation!(RangeCheck_19, 1); relation!(RangeCheck_3_6, 2); relation!(RangeCheck_4_3, 2); +relation!(RangeCheck_4_4, 2); relation!(RangeCheck_9_9, 2); relation!(RangeCheck_7_2_5, 3); relation!(RangeCheck_3_6_6_3, 4); +relation!(RangeCheck_4_4_4_4, 4); +relation!(RangeCheck_3_3_3_3_3, 5); relation!(VerifyInstruction, 29); relation!(VerifyBitwiseXor_9, 3);