This repository was archived by the owner on Sep 9, 2025. It is now read-only.

Description
This is a verifier-side performance optimization affecting the binius_core::ring_switch and binius_core::piop modules.
When proving a constraint system, the sequence of reductions constructs one ring switch indicator polynomial for each tower-height / n_vars pair, which can be shared among all committed multilinear oracles matching that specification. However, because the row-batching operation in ring switching doesn't commute with taking a batch linear combination of tensor algebra elements, the ring-switch indicators must be scaled with a random scaling factor before row-batching. The way that the modules are decoupled, the ring_switch module provides descriptions of the scaled ring switch indicators to the piop module as MultivariatePoly trait objects. When the verifier evaluates all of the scaled ring switch indicators, it duplicates the computation of the unscaled ring switch indicator, which is relatively expensive. This adds significant cost to the verifier when there are lots of multilinear oracles.
To fix this, the ring switch module should retain and convey the structure of which transparent polynomials are different scalings of the same underlying ring switch indicator, and somehow provide a way for the piop module to verify them more efficiently in a batch.