openvm_recursion_circuit/batch_constraint/
bus.rs

1use openvm_recursion_circuit_derive::AlignedBorrow;
2use openvm_stark_sdk::config::baby_bear_poseidon2::D_EF;
3use p3_field::PrimeCharacteristicRing;
4
5use crate::{define_typed_per_proof_lookup_bus, define_typed_per_proof_permutation_bus};
6
7#[repr(u8)]
8#[derive(Debug, Copy, Clone)]
9pub(super) enum BatchConstraintInnerMessageType {
10    R,
11    Xi,
12    Mu,
13}
14
15impl BatchConstraintInnerMessageType {
16    pub fn to_field<T: PrimeCharacteristicRing>(self) -> T {
17        T::from_u8(self as u8)
18    }
19}
20
21#[repr(C)]
22#[derive(AlignedBorrow, Debug, Clone)]
23pub struct BatchConstraintConductorMessage<T> {
24    pub msg_type: T,
25    pub idx: T,
26    pub value: [T; D_EF],
27}
28
29define_typed_per_proof_lookup_bus!(BatchConstraintConductorBus, BatchConstraintConductorMessage);
30
31#[repr(C)]
32#[derive(AlignedBorrow, Debug, Clone)]
33pub struct SumcheckClaimMessage<T> {
34    pub round: T,
35    pub value: [T; D_EF],
36}
37
38define_typed_per_proof_permutation_bus!(SumcheckClaimBus, SumcheckClaimMessage);
39
40#[repr(C)]
41#[derive(AlignedBorrow, Debug, Clone)]
42pub struct EqSharpUniMessage<T> {
43    pub xi_idx: T,
44    pub iter_idx: T,
45    pub product: [T; D_EF],
46}
47
48define_typed_per_proof_permutation_bus!(EqSharpUniBus, EqSharpUniMessage);
49
50#[repr(C)]
51#[derive(AlignedBorrow, Debug, Clone)]
52pub struct EqZeroNMessage<T> {
53    pub is_sharp: T,
54    pub value: [T; D_EF],
55}
56
57define_typed_per_proof_permutation_bus!(EqZeroNBus, EqZeroNMessage);
58
59#[repr(C)]
60#[derive(AlignedBorrow, Debug, Clone)]
61pub struct EqNOuterMessage<T> {
62    pub is_sharp: T,
63    pub n: T,
64    pub value: [T; D_EF],
65}
66
67define_typed_per_proof_lookup_bus!(EqNOuterBus, EqNOuterMessage);
68
69#[repr(C)]
70#[derive(AlignedBorrow, Debug, Clone)]
71pub struct Eq3bMessage<T> {
72    pub sort_idx: T,
73    pub interaction_idx: T,
74    pub eq_3b: [T; D_EF],
75}
76
77define_typed_per_proof_permutation_bus!(Eq3bBus, Eq3bMessage);
78
79#[repr(C)]
80#[derive(AlignedBorrow, Debug, Clone)]
81pub struct SymbolicExpressionMessage<T> {
82    pub air_idx: T,
83    pub node_idx: T,
84    pub value: [T; D_EF],
85}
86
87define_typed_per_proof_lookup_bus!(SymbolicExpressionBus, SymbolicExpressionMessage);
88
89#[repr(C)]
90#[derive(AlignedBorrow, Debug, Clone)]
91pub struct ExpressionClaimMessage<T> {
92    pub is_interaction: T,
93    pub idx: T,
94    pub value: [T; D_EF],
95}
96
97define_typed_per_proof_permutation_bus!(ExpressionClaimBus, ExpressionClaimMessage);
98
99#[repr(C)]
100#[derive(AlignedBorrow, Debug, Clone)]
101pub struct InteractionsFoldingMessage<T> {
102    pub air_idx: T,
103    pub interaction_idx: T,
104    pub is_mult: T,
105    pub idx_in_message: T,
106    pub value: [T; D_EF],
107}
108
109define_typed_per_proof_permutation_bus!(InteractionsFoldingBus, InteractionsFoldingMessage);
110
111#[repr(C)]
112#[derive(AlignedBorrow, Debug, Clone)]
113pub struct ConstraintsFoldingMessage<T> {
114    pub air_idx: T,
115    pub constraint_idx: T,
116    pub value: [T; D_EF],
117}
118
119define_typed_per_proof_permutation_bus!(ConstraintsFoldingBus, ConstraintsFoldingMessage);
120
121#[repr(C)]
122#[derive(AlignedBorrow, Debug, Clone)]
123pub struct EqNegInternalMessage<T> {
124    // hypercube dimension n * (-1)
125    pub neg_n: T,
126    // sampled value u_0
127    pub u: [T; D_EF],
128    // sampled value r_0^{2^{1 - n}}
129    pub r: [T; D_EF],
130    // (r_0 * omega)^{2^{1 - n}}, where omega is the D^2 generator
131    pub r_omega: [T; D_EF],
132}
133
134define_typed_per_proof_permutation_bus!(EqNegInternalBus, EqNegInternalMessage);
135
136#[repr(C)]
137#[derive(AlignedBorrow, Debug, Clone)]
138pub struct UnivariateSumcheckInputMessage<T> {
139    pub tidx: T,
140}
141
142define_typed_per_proof_permutation_bus!(UnivariateSumcheckInputBus, UnivariateSumcheckInputMessage);