Skip to content

Commit 8bfca68

Browse files
Copilotkunxian-xia
andauthored
docs(sumcheck): spell out smaller batched sumcheck expressions
Agent-Logs-Url: https://github.com/scroll-tech/ceno/sessions/171ba071-eaef-4381-9685-45c0c5450609 Co-authored-by: kunxian-xia <1082586+kunxian-xia@users.noreply.github.com>
1 parent 9ce8923 commit 8bfca68

3 files changed

Lines changed: 18 additions & 12 deletions

File tree

gkr_iop/src/gkr/layer/cpu/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,11 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZerocheckLayerProver
129129
selector_ctxs.len()
130130
);
131131

132-
// Main sumcheck polynomial shape:
133-
// Σ_g sel_g(x) * (Σ_j α_{2+offset(g,j)} * expr_{g,j}(x))
134-
// where selector groups `(sel_g, expr_{g,*})` come from `out_sel_and_eval_exprs`.
132+
// Main sumcheck batches smaller selector-group sumchecks.
133+
// Per group g (from `out_sel_and_eval_exprs`):
134+
// p_g(x) = sel_g(x) * Σ_j (α_{2+offset(g,j)} * expr_{g,j}(x)),
135+
// S_g = Σ_{x in {0,1}^n} p_g(x).
136+
// The batched polynomial is p(x) = Σ_g p_g(x), so Σ_x p(x) = Σ_g S_g.
135137
let span = entered_span!("build_out_points_eq", profiling_4 = true);
136138
let main_sumcheck_challenges = chain!(
137139
challenges.iter().copied(),

gkr_iop/src/gkr/layer/gpu/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,11 @@ impl<E: ExtensionField, PCS: PolynomialCommitmentScheme<E>> ZerocheckLayerProver
9898
out_points.len(),
9999
);
100100

101-
// Main sumcheck polynomial shape:
102-
// Σ_g sel_g(x) * (Σ_j α_{2+offset(g,j)} * expr_{g,j}(x))
103-
// where selector groups `(sel_g, expr_{g,*})` come from `out_sel_and_eval_exprs`.
101+
// Main sumcheck batches smaller selector-group sumchecks.
102+
// Per group g (from `out_sel_and_eval_exprs`):
103+
// p_g(x) = sel_g(x) * Σ_j (α_{2+offset(g,j)} * expr_{g,j}(x)),
104+
// S_g = Σ_{x in {0,1}^n} p_g(x).
105+
// The batched polynomial is p(x) = Σ_g p_g(x), so Σ_x p(x) = Σ_g S_g.
104106
let main_sumcheck_challenges = chain!(
105107
challenges.iter().copied(),
106108
get_challenge_pows(layer.exprs.len(), transcript)

gkr_iop/src/gkr/layer/zerocheck_layer.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,14 @@ impl<E: ExtensionField> ZerocheckLayer<E> for Layer<E> {
143143
})
144144
.collect::<Vec<_>>();
145145

146-
// Build the concrete main-sumcheck polynomial:
147-
// For each selector group g with expressions expr_{g,0..k-1},
148-
// group_expr_g(x) = sel_g(x) * Σ_j (α_{2+offset(g,j)} * expr_{g,j}(x))
149-
// and the final polynomial is:
150-
// main_sumcheck_expr(x) = Σ_g group_expr_g(x).
151-
// `rlc_zero_expr` returns those per-group `group_expr_g`, then we sum them here.
146+
// Build the concrete main-sumcheck polynomial by batching smaller sumchecks.
147+
// For each selector group g with expressions expr_{g,0..k-1}, define:
148+
// p_g(x) = sel_g(x) * Σ_j (α_{2+offset(g,j)} * expr_{g,j}(x)).
149+
// The corresponding smaller sumcheck target is:
150+
// S_g = Σ_{x in {0,1}^n} p_g(x).
151+
// Main sumcheck batches them into:
152+
// p(x) = Σ_g p_g(x), so Σ_{x in {0,1}^n} p(x) = Σ_g S_g.
153+
// `rlc_zero_expr` returns the per-group p_g terms, then we sum them into p.
152154
let alpha_pows_expr = (2..)
153155
.take(self.exprs.len())
154156
.map(|id| Expression::Challenge(id as ChallengeId, 1, E::ONE, E::ZERO))

0 commit comments

Comments
 (0)