Skip to content

Commit bf2ac6d

Browse files
authored
Pre-compute Cm sumcheck rc powers (#192)
Pre-compute random-combinator powers used in Cm protocol. -23% runtime for the prover.
1 parent 3c5cd68 commit bf2ac6d

File tree

1 file changed

+33
-12
lines changed
  • crates/latticefold-plus/src

1 file changed

+33
-12
lines changed

crates/latticefold-plus/src/cm.rs

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ where
209209
let nvars = self.rg.nvars;
210210
let r: Vec<R> = dcom.out.r.iter().map(|x| R::from(*x)).collect();
211211

212-
let rc: R = transcript.get_challenge().into();
212+
let rc = transcript.get_challenge();
213213

214214
let L = self.rg.instances.len();
215215

@@ -260,26 +260,47 @@ where
260260
mles.push(t1_mle);
261261

262262
let Mlen = M.len();
263+
264+
// Pre-compute random-combinator powers
265+
let mut rcps = vec![];
266+
let mut rcp = R::BaseRing::ONE;
267+
for _ in 0..L {
268+
// [tau, m_tau, f, h]
269+
for _ in 0..4 {
270+
rcps.push(rcp);
271+
rcp *= rc;
272+
}
273+
for _ in 0..Mlen {
274+
// M_i * [tau, m_tau, f, h]
275+
for _ in 0..4 {
276+
rcps.push(rcp);
277+
rcp *= rc;
278+
}
279+
}
280+
}
281+
rcps.push(rcp); // t(0)
282+
rcp *= rc;
283+
rcps.push(rcp); // t(1)
284+
263285
let comb_fn = |vals: &[R]| -> R {
264286
(0..L)
265287
.map(|l| {
266288
let l_idx = 1 + l * (4 + 4 * Mlen);
267289
vals[0] * ( // eq
268-
vals[l_idx] * rc.pow([l_idx as u64 - 1]) // tau
269-
+ vals[l_idx + 1] * rc.pow([l_idx as u64]) // m_tau
270-
+ vals[l_idx + 2] * rc.pow([l_idx as u64 + 1]) // f
271-
+ vals[l_idx + 3] * rc.pow([l_idx as u64 + 2]) // h
290+
vals[l_idx] * rcps[l_idx - 1] // tau
291+
+ vals[l_idx + 1] * rcps[l_idx] // m_tau
292+
+ vals[l_idx + 2] * rcps[l_idx + 1] // f
293+
+ vals[l_idx + 3] * rcps[l_idx + 2] // h
272294
+ (0..Mlen).map(|i| {
273295
let idx = l_idx + 4 + i * 4;
274-
vals[idx] * rc.pow([idx as u64 - 1]) // M_i * tau
275-
+ vals[idx + 1] * rc.pow([idx as u64]) // M_i * m_tau
276-
+ vals[idx + 2] * rc.pow([idx as u64 + 1]) // M_i * f
277-
+ vals[idx + 3] * rc.pow([idx as u64 + 2]) // M_i * h
296+
vals[idx] * rcps[idx - 1] // M_i * tau
297+
+ vals[idx + 1] * rcps[idx] // M_i * m_tau
298+
+ vals[idx + 2] * rcps[idx + 1] // M_i * f
299+
+ vals[idx + 3] * rcps[idx + 2] // M_i * h
278300
}).sum::<R>()
279301
)
280-
+ (vals[l_idx] * vals[vals.len()-2]) * rc.pow([vals.len() as u64 - 3]) // t(0)
281-
+ (vals[l_idx] * vals[vals.len()-1]) * rc.pow([vals.len() as u64 - 2])
282-
// t(1)
302+
+ (vals[l_idx] * vals[vals.len()-2]) * rcps[vals.len() - 3] // t(0)
303+
+ (vals[l_idx] * vals[vals.len()-1]) * rcps[vals.len() - 2] // t(1)
283304
})
284305
.sum::<R>()
285306
};

0 commit comments

Comments
 (0)