Skip to main content

prove_reduction

Function prove_reduction 

Source
pub fn prove_reduction<A, F, P>(
    alloc: &A,
    gamma: F,
    tables: &[TableLookup<'_, P>],
    numerators: Vec<Vec<FieldVec<P, A>>>,
    pushforwards: &[FieldSlice<'_, P>],
    channel: &mut impl IPProverChannel<F>,
) -> LogupOutput<F>
where A: Allocator, F: BinaryField<Underlier: Divisible<u64>>, P: PackedField<Scalar = F>,
Expand description

Run the logUp* reduction over the pre-built witnesses numerators and pushforwards Y_t.

This is the reduction core of prove, split out so a caller can build the Y_t once and commit them. The committing prover builds the numerators and the pushforwards, commits them, then hands both here. That way each scatter-add runs only once.

§Arguments

  • tables - One TableLookup per table, each carrying its batching challenge, its multilinear, and its lookers.
  • numerators - The gamma-scaled numerators gamma^i * eq_{r_i}, grouped per table in the same order (see witness::combined_lookers).
  • pushforwards - The per-table pushforwards Y, the scatter of that table’s numerators.
  • channel - The prover channel.

§Preconditions

  • tables is non-empty, each has at least one variable, and each has at least one looker.
  • numerators and pushforwards are grouped/ordered to match tables, and Y has the same variable count as its table.
  • A looker’s index column has 2^n entries for its own point length n, with every entry less than the size of its table.
  • Each Y equals the scatter of its table’s numerators.