Currently, modifications are stored as a list of noise-terms, and each term has a list of modifications. I talked to @joaquimg about changing reversing this order, so we have a list of modifications, and each modification has a list with one element for each noise realization.
A concrete example:
Given two variables x >= 0 and y >= 0, we could store
noise_terms = [
{ x >= 1},
{ y >= 1}
]
or we could store
noise_terms = [
{ x >= 1, y >= 0},
{ x >= 0, y >= 1}
]
The upside is that the representation is easier to deal with, because otherwise we would have to take the union over everything that could change, and fill in the missing modifications with the base-case.
The downside is that if a coefficient differs from the base-case in only a few scenarios, then we are encoding a lot of redundant information. But this should get compressed out efficiently.
Currently, modifications are stored as a list of noise-terms, and each term has a list of modifications. I talked to @joaquimg about changing reversing this order, so we have a list of modifications, and each modification has a list with one element for each noise realization.
A concrete example:
Given two variables
x >= 0
andy >= 0
, we could storeor we could store
The upside is that the representation is easier to deal with, because otherwise we would have to take the union over everything that could change, and fill in the missing modifications with the base-case.
The downside is that if a coefficient differs from the base-case in only a few scenarios, then we are encoding a lot of redundant information. But this should get compressed out efficiently.
It'd look something like the following: