Function batch_prove

Source
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 ith witness must correspond to the ith claim.

§Recommendations

  • Witnesses and claims should be grouped by evaluation points from the claims.