Skip to main content

new_split_half

Function new_split_half 

Source
pub fn new_split_half<'alloc, A, F, P>(
    alloc: &'alloc A,
    buffer: FieldVec<P, A>,
    eval_point: Vec<F>,
    eval_claim: F,
) -> impl MleCheckProver<F> + 'alloc
where A: Allocator, F: Field, P: PackedField<Scalar = F>,
Expand description

Reduces the product of the two halves of a single buffer, sharing one allocation.

buffer has one more variable than eval_point:

  • its low half fixes the highest variable to 0,
  • its high half fixes it to 1.

The reduction proves the product of those two halves. Both halves live inside the one buffer, so separating them costs no copy. This is the zero-copy path the product-check layer reduction uses on its large witness layers.

§Returns

A prover whose reduction emits the low half’s evaluation, then the high half’s.