Expand description
Shared-challenge sampling across constraint families.
With multiple field families active (one Q[X] family over a sampled prime $q_0$, plus one F_q[X] family per declared prime $q_1, \ldots, q_n$), every protocol-level challenge is sampled once as an integer in $[0, q^)$ — where $q^ := \min(q_0, q_1, \ldots, q_n)$ — and then projected into each family’s field via the family’s config. Because each shared integer is strictly less than every $q_i$, the per-family projection is a type cast: all families see the same integer value, just typed in different fields.
The functions in this module are independent of the MultiDegreeSumcheck
/ IdealCheck / CombinedPolyResolver / etc. interfaces: they produce
Vec<F> (one entry per family). The caller distributes the per-family
lifts to the appropriate sub-protocol invocations.
Functions§
- compute_
q_ star_ idx - Compute the index of $q^* := \min$ in
prime_cfgs(the family whose modulus is smallest). - sample_
shared_ field_ challenge - Sample one shared integer challenge in $[0, q^*)$ from the transcript and return it lifted into each per-family field.
- sample_
shared_ field_ challenges - Sample
nshared integer challenges in $[0, q^*)$ and return the result as a per-family matrix: outer lengthprime_cfgs.len(), inner lengthn. Entry[i][k]is the $k$-th shared integer typed in $F_{q_i}$.