col_1 - col_2 = 0
.
col_1_cumprod
for col_1
and col_2_cumprod
for col_2
, which contain the running cumulative product of col_1
and col_2
, respectively.
The new constraints will check that each of these new columns do indeed contain the cumulative product values and that their last values are the same.
We can optimize this by creating just one new column that keeps a running cumulative product of the fraction col_1 / col_2
.
col_2
are in col_1
, but each value appears an arbitrary number of times.col_2
appear exactly once in col_1
)
Supporting this third step is actually pretty simple: when creating the running cumulative product, we need to raise each value in col_1
to its multiplicity, or the number of times it appears in col_2
.
The rest of the constraints do not need to be changed.
[col_2, col_3, ...]
are in col_1
with arbitrary multiplicitiescol_1
.
To support this, we can use the same idea as the third step: when creating the running cumulative product, we need to raise each value in col_1
to the power of the number of times it appears in [col_2, col_3, ...]
.
Figure 1: Create trace columns that look up values from a preprocessed trace
Figure 2: Add a multiplicity column
Figure 3: Create LogUp columns