Skip to content

Commit 7caf36f

Browse files
committed
chore: address feedback
1 parent 7de00ae commit 7caf36f

File tree

22 files changed

+86
-72
lines changed

22 files changed

+86
-72
lines changed

air/src/air/context.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,15 @@ impl<B: StarkField> AirContext<B> {
241241

242242
/// Returns the index of the auxiliary column which implements the Lagrange kernel, if any
243243
pub fn lagrange_kernel_aux_column_idx(&self) -> Option<usize> {
244-
if self.is_with_logup_gkr() {
244+
if self.uses_logup_gkr() {
245245
Some(self.trace_info().aux_segment_width() - 1)
246246
} else {
247247
None
248248
}
249249
}
250250

251251
/// Returns true if LogUp-GKR is enabled.
252-
pub fn is_with_logup_gkr(&self) -> bool {
252+
pub fn uses_logup_gkr(&self) -> bool {
253253
self.logup_gkr
254254
}
255255

air/src/air/logup_gkr.rs

+18-21
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub trait LogUpGkrEvaluator: Clone + Sync {
2525

2626
/// Gets a list of all oracles involved in LogUp-GKR; this is intended to be used in construction of
2727
/// MLEs.
28-
fn get_oracles(&self) -> Vec<LogUpGkrOracle<Self::BaseField>>;
28+
fn get_oracles(&self) -> &[LogUpGkrOracle<Self::BaseField>];
2929

3030
/// Returns the number of random values needed to evaluate a query.
3131
fn get_num_rand_values(&self) -> usize;
@@ -81,39 +81,32 @@ pub trait LogUpGkrEvaluator: Clone + Sync {
8181
}
8282
}
8383

84-
#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord)]
85-
pub enum LogUpGkrOracle<B: StarkField> {
86-
CurrentRow(usize),
87-
NextRow(usize),
88-
PeriodicValue(Vec<B>),
89-
}
90-
9184
impl LogUpGkrEvaluator for () {
9285
type BaseField = BaseElement;
9386

9487
type PublicInputs = ();
9588

96-
fn get_oracles(&self) -> Vec<LogUpGkrOracle<Self::BaseField>> {
97-
unimplemented!()
89+
fn get_oracles(&self) -> &[LogUpGkrOracle<Self::BaseField>] {
90+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
9891
}
9992

10093
fn get_num_rand_values(&self) -> usize {
101-
unimplemented!()
94+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
10295
}
10396

10497
fn get_num_fractions(&self) -> usize {
105-
unimplemented!()
98+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
10699
}
107100

108101
fn max_degree(&self) -> usize {
109-
unimplemented!()
102+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
110103
}
111104

112105
fn build_query<E>(&self, _frame: &EvaluationFrame<E>, _periodic_values: &[E], _query: &mut [E])
113106
where
114107
E: FieldElement<BaseField = Self::BaseField>,
115108
{
116-
unimplemented!()
109+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
117110
}
118111

119112
fn evaluate_query<F, E>(
@@ -126,13 +119,17 @@ impl LogUpGkrEvaluator for () {
126119
F: FieldElement<BaseField = Self::BaseField>,
127120
E: FieldElement<BaseField = Self::BaseField> + ExtensionOf<F>,
128121
{
129-
unimplemented!()
122+
panic!("LogUpGkrEvaluator method called but LogUp-GKR is not implemented")
130123
}
124+
}
131125

132-
fn compute_claim<E>(&self, _inputs: &Self::PublicInputs, _rand_values: &[E]) -> E
133-
where
134-
E: FieldElement<BaseField = Self::BaseField>,
135-
{
136-
unimplemented!()
137-
}
126+
#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord)]
127+
pub enum LogUpGkrOracle<B: StarkField> {
128+
// a column with a given index in the main trace segment
129+
CurrentRow(usize),
130+
// a column with a given index in the main trace segment but shifted upwards
131+
NextRow(usize),
132+
// a virtual periodic column defined by its values in a given cycle. Note that the cycle length
133+
// must be a power of 2.
134+
PeriodicValue(Vec<B>),
138135
}

air/src/air/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ pub trait Air: Send + Sync {
312312
fn get_logup_gkr_evaluator<E: FieldElement<BaseField = Self::BaseField>>(
313313
&self,
314314
) -> Self::LogUpGkrEvaluator {
315-
unimplemented!("`get_auxiliary_proof_verifier()` must be implemented when the proof contains a GKR proof");
315+
unimplemented!("`get_logup_gkr_evaluator()` must be implemented when LogUp-GKR is enabled");
316316
}
317317

318318
// PROVIDED METHODS
@@ -342,7 +342,7 @@ pub trait Air: Send + Sync {
342342
lagrange_composition_coefficients: LagrangeConstraintsCompositionCoefficients<E>,
343343
lagrange_kernel_rand_elements: &LagrangeKernelRandElements<E>,
344344
) -> Option<LagrangeKernelConstraints<E>> {
345-
if self.context().is_with_logup_gkr() {
345+
if self.context().uses_logup_gkr() {
346346
let col_idx = self.context().trace_info().aux_segment_width() - 1;
347347
Some(LagrangeKernelConstraints::new(
348348
lagrange_composition_coefficients,
@@ -548,7 +548,7 @@ pub trait Air: Send + Sync {
548548
b_coefficients.push(public_coin.draw()?);
549549
}
550550

551-
let lagrange = if self.context().is_with_logup_gkr() {
551+
let lagrange = if self.context().uses_logup_gkr() {
552552
let mut lagrange_kernel_t_coefficients = Vec::new();
553553
for _ in 0..self.context().trace_len().ilog2() {
554554
lagrange_kernel_t_coefficients.push(public_coin.draw()?);
@@ -564,7 +564,7 @@ pub trait Air: Send + Sync {
564564
None
565565
};
566566

567-
let s_col = if self.context().is_with_logup_gkr() {
567+
let s_col = if self.context().uses_logup_gkr() {
568568
Some(public_coin.draw()?)
569569
} else {
570570
None
@@ -598,13 +598,13 @@ pub trait Air: Send + Sync {
598598
c_coefficients.push(public_coin.draw()?);
599599
}
600600

601-
let lagrange_cc = if self.context().is_with_logup_gkr() {
601+
let lagrange_cc = if self.context().uses_logup_gkr() {
602602
Some(public_coin.draw()?)
603603
} else {
604604
None
605605
};
606606

607-
let s_col = if self.context().is_with_logup_gkr() {
607+
let s_col = if self.context().uses_logup_gkr() {
608608
Some(public_coin.draw()?)
609609
} else {
610610
None

examples/src/fibonacci/fib2/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ impl air::LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
7979

8080
type PublicInputs = BaseElement;
8181

82-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
82+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
8383
unimplemented!()
8484
}
8585

examples/src/fibonacci/fib8/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl air::LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
8787

8888
type PublicInputs = BaseElement;
8989

90-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
90+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
9191
unimplemented!()
9292
}
9393

examples/src/fibonacci/fib_small/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ impl air::LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
7979

8080
type PublicInputs = BaseElement;
8181

82-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
82+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
8383
unimplemented!()
8484
}
8585

examples/src/fibonacci/mulfib2/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ impl air::LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
8181

8282
type PublicInputs = BaseElement;
8383

84-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
84+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
8585
unimplemented!()
8686
}
8787

examples/src/fibonacci/mulfib8/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl air::LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
102102

103103
type PublicInputs = BaseElement;
104104

105-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
105+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
106106
unimplemented!()
107107
}
108108

examples/src/lamport/aggregate/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
300300

301301
type PublicInputs = PublicInputs;
302302

303-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
303+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
304304
unimplemented!()
305305
}
306306

examples/src/lamport/threshold/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
376376

377377
type PublicInputs = PublicInputs;
378378

379-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
379+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
380380
unimplemented!()
381381
}
382382

examples/src/merkle/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
146146

147147
type PublicInputs = PublicInputs;
148148

149-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
149+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
150150
unimplemented!()
151151
}
152152

examples/src/rescue/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
151151

152152
type PublicInputs = PublicInputs;
153153

154-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
154+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
155155
unimplemented!()
156156
}
157157

examples/src/rescue_raps/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
281281

282282
type PublicInputs = PublicInputs;
283283

284-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
284+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
285285
unimplemented!()
286286
}
287287

examples/src/vdf/exempt/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
9393

9494
type PublicInputs = VdfInputs;
9595

96-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
96+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
9797
unimplemented!()
9898
}
9999

examples/src/vdf/regular/air.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
8484

8585
type PublicInputs = VdfInputs;
8686

87-
fn get_oracles(&self) -> Vec<air::LogUpGkrOracle<Self::BaseField>> {
87+
fn get_oracles(&self) -> &[air::LogUpGkrOracle<Self::BaseField>] {
8888
unimplemented!()
8989
}
9090

prover/src/constraints/evaluator/default.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ where
158158
&composition_coefficients.boundary,
159159
);
160160

161-
let lagrange_constraints_evaluator = if air.context().is_with_logup_gkr() {
161+
let lagrange_constraints_evaluator = if air.context().uses_logup_gkr() {
162162
let aux_rand_elements =
163163
aux_rand_elements.as_ref().expect("expected aux rand elements to be present");
164164
let lagrange_rand_elements = aux_rand_elements

prover/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ pub trait Prover {
329329
// build the auxiliary trace segment, and append the resulting segments to trace commitment
330330
// and trace polynomial table structs
331331
let aux_trace_with_metadata = if air.trace_info().is_multi_segment() {
332-
let (gkr_proof, aux_rand_elements) = if air.context().is_with_logup_gkr() {
332+
let (gkr_proof, aux_rand_elements) = if air.context().uses_logup_gkr() {
333333
let gkr_proof =
334334
prove_gkr(&trace, &air.get_logup_gkr_evaluator::<E>(), channel.public_coin())
335335
.map_err(|_| ProverError::FailedToGenerateGkrProof)?;

prover/src/logup_gkr/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ pub fn generate_gkr_randomness<
363363
H: ElementHasher<BaseField = E::BaseField>,
364364
>(
365365
final_opening_claim: FinalOpeningClaim<E>,
366-
oracles: Vec<LogUpGkrOracle<E::BaseField>>,
366+
oracles: &[LogUpGkrOracle<E::BaseField>],
367367
public_coin: &mut C,
368368
) -> GkrData<E> {
369369
let FinalOpeningClaim { eval_point, openings } = final_opening_claim;
@@ -379,7 +379,7 @@ pub fn generate_gkr_randomness<
379379
LagrangeKernelRandElements::new(eval_point),
380380
batching_randomness,
381381
openings,
382-
oracles,
382+
oracles.to_vec(),
383383
)
384384
}
385385

prover/src/logup_gkr/prover.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use alloc::vec::Vec;
22

3-
use air::LogUpGkrEvaluator;
3+
use air::{LogUpGkrEvaluator, LogUpGkrOracle};
44
use crypto::{ElementHasher, RandomCoin};
55
use math::FieldElement;
66
use sumcheck::{
@@ -123,21 +123,21 @@ fn prove_input_layer<
123123
// TODO: Make the multi-linears over the base field and define an operation of folding with a challenge
124124
// in an extension field.
125125
fn build_mls_from_main_trace_segment<E: FieldElement>(
126-
oracles: Vec<air::LogUpGkrOracle<E::BaseField>>,
126+
oracles: &[LogUpGkrOracle<E::BaseField>],
127127
main_trace: &ColMatrix<<E as FieldElement>::BaseField>,
128128
) -> Result<Vec<MultiLinearPoly<E>>, GkrProverError> {
129129
let mut mls = vec![];
130130

131131
for oracle in oracles {
132132
match oracle {
133-
air::LogUpGkrOracle::CurrentRow(index) => {
134-
let col = main_trace.get_column(index);
133+
LogUpGkrOracle::CurrentRow(index) => {
134+
let col = main_trace.get_column(*index);
135135
let values: Vec<E> = col.iter().map(|value| E::from(*value)).collect();
136136
let ml = MultiLinearPoly::from_evaluations(values);
137137
mls.push(ml)
138138
},
139-
air::LogUpGkrOracle::NextRow(index) => {
140-
let col = main_trace.get_column(index);
139+
LogUpGkrOracle::NextRow(index) => {
140+
let col = main_trace.get_column(*index);
141141
let mut values: Vec<E> = col.iter().map(|value| E::from(*value)).collect();
142142
if let Some(value) = values.last_mut() {
143143
*value = E::ZERO
@@ -146,7 +146,7 @@ fn build_mls_from_main_trace_segment<E: FieldElement>(
146146
let ml = MultiLinearPoly::from_evaluations(values);
147147
mls.push(ml)
148148
},
149-
air::LogUpGkrOracle::PeriodicValue(_) => unimplemented!(),
149+
LogUpGkrOracle::PeriodicValue(_) => unimplemented!(),
150150
};
151151
}
152152
Ok(mls)

sumcheck/benches/sum_check_high_degree.rs

+17-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use std::{marker::PhantomData, time::Duration};
88
use air::{EvaluationFrame, LogUpGkrEvaluator, LogUpGkrOracle};
99
use criterion::{criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion};
1010
use crypto::{hashers::Blake3_192, DefaultRandomCoin, RandomCoin};
11-
use math::{fields::f64::BaseElement, ExtensionOf, FieldElement};
11+
use math::{fields::f64::BaseElement, ExtensionOf, FieldElement, StarkField};
1212
use rand_utils::{rand_value, rand_vector};
1313
#[cfg(feature = "concurrent")]
1414
pub use rayon::prelude::*;
@@ -94,22 +94,30 @@ fn setup_sum_check<E: FieldElement>(
9494
}
9595

9696
#[derive(Clone, Default)]
97-
pub struct PlainLogUpGkrEval<B: FieldElement> {
97+
pub struct PlainLogUpGkrEval<B: FieldElement + StarkField> {
98+
oracles: Vec<LogUpGkrOracle<B>>,
9899
_field: PhantomData<B>,
99100
}
100101

101-
impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
102-
type BaseField = BaseElement;
103-
104-
type PublicInputs = ();
105-
106-
fn get_oracles(&self) -> Vec<LogUpGkrOracle<Self::BaseField>> {
102+
impl<B: FieldElement + StarkField> PlainLogUpGkrEval<B> {
103+
pub fn new() -> Self {
107104
let committed_0 = LogUpGkrOracle::CurrentRow(0);
108105
let committed_1 = LogUpGkrOracle::CurrentRow(1);
109106
let committed_2 = LogUpGkrOracle::CurrentRow(2);
110107
let committed_3 = LogUpGkrOracle::CurrentRow(3);
111108
let committed_4 = LogUpGkrOracle::CurrentRow(4);
112-
vec![committed_0, committed_1, committed_2, committed_3, committed_4]
109+
let oracles = vec![committed_0, committed_1, committed_2, committed_3, committed_4];
110+
Self { oracles, _field: PhantomData }
111+
}
112+
}
113+
114+
impl LogUpGkrEvaluator for PlainLogUpGkrEval<BaseElement> {
115+
type BaseField = BaseElement;
116+
117+
type PublicInputs = ();
118+
119+
fn get_oracles(&self) -> &[LogUpGkrOracle<Self::BaseField>] {
120+
&self.oracles
113121
}
114122

115123
fn get_num_rand_values(&self) -> usize {

0 commit comments

Comments
 (0)