pub fn batch_prove<'a, FBase, F, P, FDomain, Challenger_, Backend>(
evaluation_order: EvaluationOrder,
witnesses: impl IntoIterator<Item = BaseExpWitness<'a, P, FBase>>,
claims: &[ExpClaim<F>],
evaluation_domain_factory: impl EvaluationDomainFactory<FDomain>,
transcript: &mut ProverTranscript<Challenger_>,
backend: &Backend,
) -> Result<BaseExpReductionOutput<F>, Error>where
F: ExtensionField<FBase> + ExtensionField<FDomain> + TowerField,
FDomain: Field,
FBase: TowerField + ExtensionField<FDomain>,
P: PackedFieldIndexable<Scalar = F> + PackedExtension<F, PackedSubfield = P> + PackedExtension<FDomain>,
Backend: ComputationBackend,
Challenger_: Challenger,
Expand description
Prove a batched GKR exponentiation protocol execution.
The protocol can be batched over multiple instances by grouping consecutive provers over
eval_points
in internal LayerClaims
into GkrExpProvers
. To achieve this, we use
crate::composition::IndexComposition
. Since exponents can have different bit sizes, resulting
in a varying number of layers, we group them starting from the first layer to maximize the
opportunity to share the same evaluation point.
§Requirements
- Witnesses and claims must be in the same order as in
super::batch_verify
during proof verification. - Witnesses and claims must be sorted in descending order by n_vars.
- Witnesses and claims must be of the same length.
- The
i
th witness must correspond to thei
th claim.
§Recommendations
- Witnesses and claims should be grouped by evaluation points from the claims.