@pervognsen it really is that abstract. the compiler will merge values at shared basic blocks; in conjunction with loops, the combinatorics are cosmic. yet we wish to gather the entire set of possible values with zero loss, so that we can recover invariants at a later point.
i guess this is further complicated by the requirement that operations can be performed on the set.