Skip to content

Commit

Permalink
Integrate Verify Bitwise Xor 9
Browse files Browse the repository at this point in the history
  • Loading branch information
Gali-StarkWare committed Jan 28, 2025
1 parent 11a54e8 commit 227eca8
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 3 deletions.
41 changes: 40 additions & 1 deletion stwo_cairo_prover/crates/prover/src/cairo_air/air.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ use crate::components::memory::{memory_address_to_id, memory_id_to_big};
use crate::components::range_check_vector::{
range_check_19, range_check_4_3, range_check_7_2_5, range_check_9_9,
};
use crate::components::{range_check_11, verify_instruction};
use crate::components::{range_check_11, verify_bitwise_xor_9, verify_instruction};
use crate::felt::split_f252;
use crate::input::ProverInput;
use crate::relations;
Expand Down Expand Up @@ -67,6 +67,7 @@ pub struct CairoClaim {
pub opcodes: OpcodeClaim,
pub verify_instruction: verify_instruction::Claim,
pub builtins: BuiltinsClaim,
pub verify_bitwise_xor_9: verify_bitwise_xor_9::Claim,
pub memory_address_to_id: memory_address_to_id::Claim,
pub memory_id_to_value: memory_id_to_big::Claim,
pub range_check_11: range_check_11::Claim,
Expand All @@ -83,6 +84,7 @@ impl CairoClaim {
self.opcodes.mix_into(channel);
self.verify_instruction.mix_into(channel);
self.builtins.mix_into(channel);
self.verify_bitwise_xor_9.mix_into(channel);
self.memory_address_to_id.mix_into(channel);
self.memory_id_to_value.mix_into(channel);
self.range_check_11.mix_into(channel);
Expand All @@ -97,6 +99,7 @@ impl CairoClaim {
self.opcodes.log_sizes(),
self.verify_instruction.log_sizes(),
self.builtins.log_sizes(),
self.verify_bitwise_xor_9.log_sizes(),
self.memory_address_to_id.log_sizes(),
self.memory_id_to_value.log_sizes(),
self.range_check_11.log_sizes(),
Expand Down Expand Up @@ -171,6 +174,7 @@ pub struct CairoClaimGenerator {
// Internal components.
verify_instruction_trace_generator: verify_instruction::ClaimGenerator,
builtins: BuiltinsClaimGenerator,
verify_bitwise_xor_9_trace_generator: verify_bitwise_xor_9::ClaimGenerator,
memory_address_to_id_trace_generator: memory_address_to_id::ClaimGenerator,
memory_id_to_value_trace_generator: memory_id_to_big::ClaimGenerator,
range_check_11_trace_generator: range_check_11::ClaimGenerator,
Expand All @@ -188,6 +192,7 @@ impl CairoClaimGenerator {
let verify_instruction_trace_generator =
verify_instruction::ClaimGenerator::new(input.instruction_by_pc);
let builtins = BuiltinsClaimGenerator::new(input.builtins_segments);
let verify_bitwise_xor_9_trace_generator = verify_bitwise_xor_9::ClaimGenerator::new();
let memory_address_to_id_trace_generator =
memory_address_to_id::ClaimGenerator::new(&input.memory);
let memory_id_to_value_trace_generator =
Expand Down Expand Up @@ -231,6 +236,7 @@ impl CairoClaimGenerator {
opcodes,
verify_instruction_trace_generator,
builtins,
verify_bitwise_xor_9_trace_generator,
memory_address_to_id_trace_generator,
memory_id_to_value_trace_generator,
range_check_11_trace_generator,
Expand Down Expand Up @@ -273,6 +279,9 @@ impl CairoClaimGenerator {
&self.memory_address_to_id_trace_generator,
&self.memory_id_to_value_trace_generator,
);
let (verify_bitwise_xor_9_claim, verify_bitwise_xor_9_interaction_gen) = self
.verify_bitwise_xor_9_trace_generator
.write_trace(tree_builder);
let (memory_address_to_id_claim, memory_address_to_id_interaction_gen) = self
.memory_address_to_id_trace_generator
.write_trace(tree_builder);
Expand Down Expand Up @@ -301,6 +310,7 @@ impl CairoClaimGenerator {
opcodes: opcodes_claim,
verify_instruction: verify_instruction_claim,
builtins: builtins_claim,
verify_bitwise_xor_9: verify_bitwise_xor_9_claim,
memory_address_to_id: memory_address_to_id_claim,
memory_id_to_value: memory_id_to_value_claim,
range_check_11: range_check_11_claim,
Expand All @@ -313,6 +323,7 @@ impl CairoClaimGenerator {
opcodes_interaction_gen,
verify_instruction_interaction_gen,
builtins_interaction_gen,
verify_bitwise_xor_9_interaction_gen,
memory_address_to_id_interaction_gen,
memory_id_to_value_interaction_gen,
range_check_11_interaction_gen,
Expand All @@ -329,6 +340,7 @@ pub struct CairoInteractionClaimGenerator {
opcodes_interaction_gen: OpcodesInteractionClaimGenerator,
verify_instruction_interaction_gen: verify_instruction::InteractionClaimGenerator,
builtins_interaction_gen: BuiltinsInteractionClaimGenerator,
verify_bitwise_xor_9_interaction_gen: verify_bitwise_xor_9::InteractionClaimGenerator,
memory_address_to_id_interaction_gen: memory_address_to_id::InteractionClaimGenerator,
memory_id_to_value_interaction_gen: memory_id_to_big::InteractionClaimGenerator,
range_check_11_interaction_gen: range_check_11::InteractionClaimGenerator,
Expand Down Expand Up @@ -363,6 +375,9 @@ impl CairoInteractionClaimGenerator {
let builtins_interaction_claims = self
.builtins_interaction_gen
.write_interaction_trace(tree_builder, interaction_elements);
let verify_bitwise_xor_9_interaction_claim = self
.verify_bitwise_xor_9_interaction_gen
.write_interaction_trace(tree_builder, &interaction_elements.verify_bitwise_xor_9);
let memory_address_to_id_interaction_claim = self
.memory_address_to_id_interaction_gen
.write_interaction_trace(tree_builder, &interaction_elements.memory_address_to_id);
Expand Down Expand Up @@ -394,6 +409,7 @@ impl CairoInteractionClaimGenerator {
opcodes: opcodes_interaction_claims,
verify_instruction: verify_instruction_interaction_claim,
builtins: builtins_interaction_claims,
verify_bitwise_xor_9: verify_bitwise_xor_9_interaction_claim,
memory_address_to_id: memory_address_to_id_interaction_claim,
memory_id_to_value: memory_id_to_value_interaction_claim,
range_check_11: range_check_11_interaction_claim,
Expand All @@ -408,6 +424,7 @@ impl CairoInteractionClaimGenerator {
pub struct CairoInteractionElements {
pub opcodes: relations::Opcodes,
pub verify_instruction: relations::VerifyInstruction,
pub verify_bitwise_xor_9: relations::VerifyBitwiseXor_9,
pub memory_address_to_id: relations::MemoryAddressToId,
pub memory_id_to_value: relations::MemoryIdToBig,
pub range_check_11: relations::RangeCheck_11,
Expand All @@ -422,6 +439,7 @@ impl CairoInteractionElements {
CairoInteractionElements {
opcodes: relations::Opcodes::draw(channel),
verify_instruction: relations::VerifyInstruction::draw(channel),
verify_bitwise_xor_9: relations::VerifyBitwiseXor_9::draw(channel),
memory_address_to_id: relations::MemoryAddressToId::draw(channel),
memory_id_to_value: relations::MemoryIdToBig::draw(channel),
range_check_11: relations::RangeCheck_11::draw(channel),
Expand All @@ -438,6 +456,7 @@ pub struct CairoInteractionClaim {
pub opcodes: OpcodeInteractionClaim,
pub verify_instruction: verify_instruction::InteractionClaim,
pub builtins: BuiltinsInteractionClaim,
pub verify_bitwise_xor_9: verify_bitwise_xor_9::InteractionClaim,
pub memory_address_to_id: memory_address_to_id::InteractionClaim,
pub memory_id_to_value: memory_id_to_big::InteractionClaim,
pub range_check_11: range_check_11::InteractionClaim,
Expand All @@ -451,6 +470,7 @@ impl CairoInteractionClaim {
self.opcodes.mix_into(channel);
self.verify_instruction.mix_into(channel);
self.builtins.mix_into(channel);
self.verify_bitwise_xor_9.mix_into(channel);
self.memory_address_to_id.mix_into(channel);
self.memory_id_to_value.mix_into(channel);
self.range_check_11.mix_into(channel);
Expand All @@ -474,6 +494,7 @@ pub fn lookup_sum(
sum += interaction_claim.opcodes.sum();
sum += interaction_claim.verify_instruction.claimed_sum;
sum += interaction_claim.builtins.sum();
sum += interaction_claim.verify_bitwise_xor_9.logup_sums.0;
sum += interaction_claim.memory_address_to_id.claimed_sum;
sum += interaction_claim.memory_id_to_value.big_claimed_sum;
sum += interaction_claim.memory_id_to_value.small_claimed_sum;
Expand All @@ -489,6 +510,7 @@ pub struct CairoComponents {
opcodes: OpcodeComponents,
verify_instruction: verify_instruction::Component,
builtins: BuiltinComponents,
verify_bitwise_xor_9: verify_bitwise_xor_9::Component,
memory_address_to_id: memory_address_to_id::Component,
memory_id_to_value: (
memory_id_to_big::BigComponent,
Expand Down Expand Up @@ -540,6 +562,16 @@ impl CairoComponents {
interaction_elements,
&interaction_claim.builtins,
);
let verify_bitwise_xor_9_component = verify_bitwise_xor_9::Component::new(
tree_span_provider,
verify_bitwise_xor_9::Eval {
claim: cairo_claim.verify_bitwise_xor_9,
verify_bitwise_xor_9_lookup_elements: interaction_elements
.verify_bitwise_xor_9
.clone(),
},
interaction_claim.verify_bitwise_xor_9.logup_sums,
);
let memory_address_to_id_component = memory_address_to_id::Component::new(
tree_span_provider,
memory_address_to_id::Eval::new(
Expand Down Expand Up @@ -607,6 +639,7 @@ impl CairoComponents {
opcodes: opcode_components,
verify_instruction: verify_instruction_component,
builtins: builtin_components,
verify_bitwise_xor_9: verify_bitwise_xor_9_component,
memory_address_to_id: memory_address_to_id_component,
memory_id_to_value: (
memory_id_to_value_component,
Expand All @@ -626,6 +659,7 @@ impl CairoComponents {
[&self.verify_instruction as &dyn ComponentProver<SimdBackend>,],
self.builtins.provers(),
[
&self.verify_bitwise_xor_9 as &dyn ComponentProver<SimdBackend>,
&self.memory_address_to_id as &dyn ComponentProver<SimdBackend>,
&self.memory_id_to_value.0 as &dyn ComponentProver<SimdBackend>,
&self.memory_id_to_value.1 as &dyn ComponentProver<SimdBackend>,
Expand Down Expand Up @@ -657,6 +691,11 @@ impl std::fmt::Display for CairoComponents {
indented_component_display(&self.verify_instruction)
)?;
writeln!(f, "Builtins: {}", self.builtins)?;
writeln!(
f,
"VerifyBitwiseXor9: {}",
indented_component_display(&self.verify_bitwise_xor_9)
)?;
writeln!(
f,
"MemoryAddressToId: {}",
Expand Down
13 changes: 12 additions & 1 deletion stwo_cairo_prover/crates/prover/src/cairo_air/debug_tools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use crate::components::{
jump_opcode, jump_opcode_double_deref, jump_opcode_rel, jump_opcode_rel_imm,
memory_address_to_id, memory_id_to_big, mul_opcode, mul_opcode_imm, range_check_11,
range_check_19, range_check_4_3, range_check_7_2_5, range_check_9_9,
range_check_builtin_bits_128, ret_opcode, verify_instruction,
range_check_builtin_bits_128, ret_opcode, verify_bitwise_xor_9, verify_instruction,
};
use crate::felt::split_f252;
use crate::relations;
Expand Down Expand Up @@ -485,6 +485,17 @@ where
);
}

entries.extend(
RelationTrackerComponent::new(
tree_span_provider,
verify_bitwise_xor_9::Eval {
claim: claim.verify_bitwise_xor_9,
verify_bitwise_xor_9_lookup_elements: relations::VerifyBitwiseXor_9::dummy(),
},
1 << claim.verify_bitwise_xor_9.log_size,
)
.entries(trace),
);
// Memory.
entries.extend(
RelationTrackerComponent::new(
Expand Down
10 changes: 9 additions & 1 deletion stwo_cairo_prover/crates/prover/src/cairo_air/preprocessed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ const IS_FIRST_LOG_SIZES: [u32; N_PREPROCESSED_COLUMN_SIZES] = preprocessed_log_
// List of sizes to initialize the preprocessed trace with for `PreprocessedColumn::Seq`.
const SEQ_LOG_SIZES: [u32; N_PREPROCESSED_COLUMN_SIZES] = preprocessed_log_sizes();

// List of sizes to initialize the preprocessed trace with for `PreprocessedColumn::BitwiseXor`.
const BITWISE_XOR_LOG_SIZES: [u32; 1] = [9];

/// [LOG_MAX_ROWS, LOG_MAX_ROWS - 1, ..., LOG_N_LANES]
const fn preprocessed_log_sizes() -> [u32; N_PREPROCESSED_COLUMN_SIZES] {
let mut arr = [0; N_PREPROCESSED_COLUMN_SIZES];
Expand Down Expand Up @@ -83,7 +86,12 @@ pub fn preprocessed_trace_columns() -> Vec<PreProcessedColumn> {
let is_first_columns =
IS_FIRST_LOG_SIZES.map(|log_size| PreProcessedColumn::IsFirst(IsFirst::new(log_size)));
let seq_columns = SEQ_LOG_SIZES.map(|log_size| PreProcessedColumn::Seq(Seq::new(log_size)));
chain![is_first_columns, seq_columns]
let bitwise_xor_columns = BITWISE_XOR_LOG_SIZES.into_iter().flat_map(|log_size| {
(0..3).map(move |col_index| {
PreProcessedColumn::BitwiseXor(BitwiseXor::new(log_size, col_index))
})
});
chain![is_first_columns, seq_columns, bitwise_xor_columns]
.sorted_by_key(|column| std::cmp::Reverse(column.log_size()))
.collect_vec()
}
Expand Down

0 comments on commit 227eca8

Please sign in to comment.