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>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- OneTableLookupper table, each carrying its batching challenge, its multilinear, and its lookers.numerators- The gamma-scaled numeratorsgamma^i * eq_{r_i}, grouped per table in the same order (seewitness::combined_lookers).pushforwards- The per-table pushforwardsY, the scatter of that table’s numerators.channel- The prover channel.
§Preconditions
tablesis non-empty, each has at least one variable, and each has at least one looker.numeratorsandpushforwardsare grouped/ordered to matchtables, andYhas the same variable count as its table.- A looker’s index column has
2^nentries for its own point lengthn, with every entry less than the size of its table. - Each
Yequals the scatter of its table’s numerators.