|
31 | 31 | //! ## Transcript order (identical on both sides) |
32 | 32 | //! |
33 | 33 | //! label -> shared linear map sampled ([`super::ring_switch`]'s own label; the |
34 | | -//! claims' slices were bound by the caller, so none are sent here) -> per point |
35 | | -//! claim (label + value observed) -> lambda (ONE challenge for both families) -> |
36 | | -//! WHIR, with domain-separated labels for every phase. |
| 34 | +//! claims' slices were bound by the caller, so none are sent here) -> lambda (ONE |
| 35 | +//! challenge for both families) -> WHIR, with domain-separated labels for every |
| 36 | +//! phase. No claim value is observed here: each was bound by the stream read that |
| 37 | +//! produced it, so lambda already depends on every one of them. |
37 | 38 | //! |
38 | 39 | //! ## The combined weight |
39 | 40 | //! |
@@ -393,11 +394,9 @@ pub fn open_batch_mixed_whir_stacked( |
393 | 394 | let map_challenges = ring_switch::sample_map_challenges(ps); |
394 | 395 | let coordinate_weights = ring_switch::build_coordinate_weights(&map_challenges); |
395 | 396 |
|
396 | | - // 2. Point-claim values, then the ONE batching challenge both families take |
397 | | - // disjoint power ranges of. |
398 | | - for claim in point_claims { |
399 | | - ps.observe_scalar(claim.value()); |
400 | | - } |
| 397 | + // 2. The ONE batching challenge both families take disjoint power ranges of. Nothing is |
| 398 | + // observed first: every claim value reached the caller through a binding stream read, so |
| 399 | + // the challenge already depends on all of them (`lean_vm::pcs::open`). |
401 | 400 | let lambdas = powers(ps.sample(), ring.claims.len() + point_claims.len()); |
402 | 401 | let (lambdas_rs, lambdas_pd) = lambdas.split_at(ring.claims.len()); |
403 | 402 |
|
@@ -514,11 +513,8 @@ pub fn verify_opening_batch_mixed_whir_stacked( |
514 | 513 | let map_challenges = ring_switch::sample_map_challenges(vs); |
515 | 514 | let coordinate_weights = ring_switch::build_coordinate_weights(&map_challenges); |
516 | 515 |
|
517 | | - // 2. Point-claim values, then the one batching challenge, then fold both |
518 | | - // families into the target over disjoint power ranges. |
519 | | - for claim in point_claims { |
520 | | - vs.observe_scalar(claim.value()); |
521 | | - } |
| 516 | + // 2. The one batching challenge (see the opener: the claim values are bound by the read that |
| 517 | + // produced them), then fold both families into the target over disjoint power ranges. |
522 | 518 | let lambdas = powers(vs.sample(), n_rs + point_claims.len()); |
523 | 519 | let (lambdas_rs, lambdas_pd) = lambdas.split_at(n_rs); |
524 | 520 |
|
|
0 commit comments