Skip to content

Commit 8c5d074

Browse files
committed
interactions_per_air
1 parent c872c38 commit 8c5d074

File tree

6 files changed

+41
-41
lines changed

6 files changed

+41
-41
lines changed

crates/stark-backend/src/interaction/fri_log_up.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ where
9797
fn partially_prove(
9898
&self,
9999
challenger: &mut Challenger,
100-
constraints_per_air: &[&SymbolicConstraints<F>],
100+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
101101
params_per_air: &[&FriLogUpProvingKey],
102102
trace_view_per_air: &[PairTraceView<F>],
103103
) -> Option<(Self::PartialProof, RapPhaseProverData<Challenge>)> {
104-
let has_any_interactions = constraints_per_air
104+
let has_any_interactions = interactions_per_air
105105
.iter()
106-
.any(|constraints| !constraints.interactions.is_empty());
106+
.any(|interaction| !interaction.is_empty());
107107

108108
if !has_any_interactions {
109109
return None;
@@ -117,7 +117,7 @@ where
117117
let after_challenge_trace_per_air = metrics_span("generate_perm_trace_time_ms", || {
118118
Self::generate_after_challenge_traces_per_air(
119119
&challenges,
120-
constraints_per_air,
120+
interactions_per_air,
121121
params_per_air,
122122
trace_view_per_air,
123123
)
@@ -241,14 +241,14 @@ where
241241
/// Returns a list of optional tuples of (permutation trace,cumulative sum) for each AIR.
242242
fn generate_after_challenge_traces_per_air(
243243
challenges: &[Challenge; STARK_LU_NUM_CHALLENGES],
244-
constraints_per_air: &[&SymbolicConstraints<F>],
244+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
245245
params_per_air: &[&FriLogUpProvingKey],
246246
trace_view_per_air: &[PairTraceView<F>],
247247
) -> Vec<Option<RowMajorMatrix<Challenge>>> {
248-
parizip!(constraints_per_air, trace_view_per_air, params_per_air)
249-
.map(|(constraints, trace_view, params)| {
248+
parizip!(interactions_per_air, trace_view_per_air, params_per_air)
249+
.map(|(interactions, trace_view, params)| {
250250
Self::generate_after_challenge_trace(
251-
&constraints.interactions,
251+
&interactions,
252252
trace_view,
253253
challenges,
254254
&params.interaction_partitions,

crates/stark-backend/src/interaction/gkr_log_up.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use crate::{
2727
},
2828
rap::PermutationAirBuilderWithExposedValues,
2929
};
30+
use crate::interaction::SymbolicInteraction;
3031

3132
pub struct GkrLogUpPhase<F, EF, Challenger> {
3233
// FIXME: USE THIS IN POW
@@ -107,13 +108,14 @@ where
107108
fn partially_prove(
108109
&self,
109110
challenger: &mut Challenger,
110-
constraints_per_air: &[&SymbolicConstraints<F>],
111+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
111112
_params_per_air: &[&Self::PartialProvingKey],
112113
trace_view_per_air: &[PairTraceView<'_, F>],
113114
) -> Option<(Self::PartialProof, RapPhaseProverData<EF>)> {
114-
let all_interactions = constraints_per_air
115+
let all_interactions = interactions_per_air
115116
.iter()
116-
.flat_map(|c| c.interactions.clone())
117+
.cloned()
118+
.flatten()
117119
.collect_vec();
118120
if all_interactions.is_empty() {
119121
return None;
@@ -126,7 +128,7 @@ where
126128

127129
// Build GKR instances.
128130
let gkr_instances: Vec<_> =
129-
Self::build_gkr_instances(trace_view_per_air, constraints_per_air, &beta_pows);
131+
Self::build_gkr_instances(trace_view_per_air, interactions_per_air, &beta_pows);
130132

131133
// Construct input layers and run GKR proof.
132134
let input_layers: Vec<_> = gkr_instances
@@ -144,7 +146,7 @@ where
144146
sigma_mle_claims_per_instance,
145147
} = Self::generate_aux_per_air(
146148
challenger,
147-
constraints_per_air,
149+
interactions_per_air,
148150
trace_view_per_air,
149151
alpha,
150152
&gkr_instances,

crates/stark-backend/src/interaction/gkr_log_up/prove.rs

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,19 @@ where
137137
{
138138
pub(super) fn build_gkr_instances(
139139
trace_view_per_air: &[PairTraceView<F>],
140-
constraints_per_air: &[&SymbolicConstraints<F>],
140+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
141141
beta_pows: &[EF],
142142
) -> Vec<GkrLogUpInstance<EF>> {
143-
constraints_per_air
143+
interactions_per_air
144144
.par_iter()
145145
.zip_eq(trace_view_per_air.par_iter())
146-
.filter_map(|(constraints, trace_view)| {
147-
if constraints.interactions.is_empty() {
146+
.filter_map(|(interactions, trace_view)| {
147+
if interactions.is_empty() {
148148
None
149149
} else {
150150
Some(GkrLogUpInstance::from_interactions(
151151
trace_view,
152-
&constraints.interactions,
152+
&interactions,
153153
beta_pows,
154154
))
155155
}
@@ -159,39 +159,35 @@ where
159159

160160
pub(super) fn generate_aux_per_air(
161161
challenger: &mut Challenger,
162-
constraints_per_air: &[&SymbolicConstraints<F>],
162+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
163163
trace_view_per_air: &[PairTraceView<F>],
164164
gamma: EF,
165165
gkr_instances: &[GkrLogUpInstance<EF>],
166166
gkr_artifact: &GkrArtifact<EF>,
167167
) -> GkrAuxData<EF> {
168168
let ood_point = &gkr_artifact.ood_point;
169169

170-
let max_interactions = constraints_per_air
170+
let max_interactions = interactions_per_air
171171
.iter()
172-
.map(|c| c.interactions.len())
172+
.map(|v| v.len())
173173
.max()
174174
.unwrap();
175175
let gamma_pows = gamma.powers().take(2 * max_interactions).collect_vec();
176176

177-
let (interactions_per_air, trace_view_per_air_filtered): (Vec<_>, Vec<_>) =
178-
constraints_per_air
177+
let (interactions_per_air_filtered, trace_view_per_air_filtered): (Vec<_>, Vec<_>) =
178+
interactions_per_air
179179
.iter()
180180
.zip(trace_view_per_air.iter())
181-
.filter_map(|(c, view)| {
182-
if c.interactions.is_empty() {
181+
.filter_map(|(interactions, view)| {
182+
if interactions.is_empty() {
183183
None
184184
} else {
185-
Some((&c.interactions, view))
185+
Some((interactions, view))
186186
}
187187
})
188188
.unzip();
189189

190-
assert_eq!(interactions_per_air.len(), trace_view_per_air_filtered.len());
191-
assert_eq!(interactions_per_air.len(), gkr_instances.len());
192-
assert_eq!(interactions_per_air.len(), gkr_artifact.n_variables_by_instance.len());
193-
194-
let results: Vec<_> = interactions_per_air
190+
let results: Vec<_> = interactions_per_air_filtered
195191
.par_iter()
196192
.zip(trace_view_per_air_filtered.par_iter())
197193
.zip(gkr_instances.par_iter())
@@ -218,13 +214,14 @@ where
218214

219215
let mut results_iter = results.into_iter();
220216

221-
let mut after_challenge_trace_per_air = Vec::with_capacity(constraints_per_air.len());
222-
let mut exposed_values_per_air = Vec::with_capacity(constraints_per_air.len());
223-
let mut count_mle_claims_per_instance = Vec::with_capacity(constraints_per_air.len());
224-
let mut sigma_mle_claims_per_instance = Vec::with_capacity(constraints_per_air.len());
217+
let n_airs = interactions_per_air.len();
218+
let mut after_challenge_trace_per_air = Vec::with_capacity(n_airs);
219+
let mut exposed_values_per_air = Vec::with_capacity(n_airs);
220+
let mut count_mle_claims_per_instance = Vec::with_capacity(n_airs);
221+
let mut sigma_mle_claims_per_instance = Vec::with_capacity(n_airs);
225222

226-
for c in constraints_per_air.iter() {
227-
if c.interactions.is_empty() {
223+
for interactions in interactions_per_air.iter() {
224+
if interactions.is_empty() {
228225
after_challenge_trace_per_air.push(None);
229226
exposed_values_per_air.push(None);
230227
} else {

crates/stark-backend/src/interaction/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ pub trait RapPhaseSeq<F, Challenge, Challenger> {
298298
fn partially_prove(
299299
&self,
300300
challenger: &mut Challenger,
301-
constraints_per_air: &[&SymbolicConstraints<F>],
301+
interactions_per_air: &[Vec<SymbolicInteraction<F>>],
302302
params_per_air: &[&Self::PartialProvingKey],
303303
trace_view_per_air: &[PairTraceView<F>],
304304
) -> Option<(Self::PartialProof, RapPhaseProverData<Challenge>)>;

crates/stark-backend/src/prover/cpu/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ impl<SC: StarkGenericConfig> hal::RapPartialProver<CpuBackend<SC>> for CpuDevice
138138
let num_airs = mpk.per_air.len();
139139
assert_eq!(num_airs, trace_views.len());
140140

141-
let (constraints_per_air, rap_pk_per_air): (Vec<_>, Vec<_>) = mpk
141+
let (interactions_per_air, rap_pk_per_air): (Vec<_>, Vec<_>) = mpk
142142
.per_air
143143
.iter()
144144
.map(|pk| {
145145
(
146-
SymbolicConstraints::from(&pk.vk.symbolic_constraints),
146+
SymbolicConstraints::from(&pk.vk.symbolic_constraints).interactions,
147147
&pk.rap_partial_pk,
148148
)
149149
})
@@ -163,7 +163,7 @@ impl<SC: StarkGenericConfig> hal::RapPartialProver<CpuBackend<SC>> for CpuDevice
163163
.rap_phase_seq()
164164
.partially_prove(
165165
challenger,
166-
&constraints_per_air.iter().collect_vec(),
166+
&interactions_per_air,
167167
&rap_pk_per_air,
168168
&trace_views,
169169
)

crates/stark-backend/src/prover/cpu/quotient/single.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ where
8686
}
8787

8888
let gkr_folder = is_gkr.then(|| {
89+
// TODO[zach]: Compute this once per height.
8990
let mut cyclic_sels = cyclic_selectors_on_coset(trace_domain, quotient_domain);
9091
for _ in quotient_size..PackedVal::<SC>::WIDTH {
9192
for is_pow2k_sel in cyclic_sels.iter_mut() {

0 commit comments

Comments
 (0)