Description
Current subsumption check using SAT call solver << and_exprt(conjunction(value), not_exprt(m))
may subsume valid meet irreducibles in presence of octagonal constraints, which may further block the propagation phase from deducing closed abstract value.
We change the subsumption check to the following. Assume the function is_subsumption(A,m) where we want to determine if m
is subsumed by abstract value A
.
Step 1: Normalize all expressions in A
as well as m
(that is, !(x<=10) to (x>10))
Step 2: Collect all lhs templates of the meet irreducibles in A
that matches with lhs of m
in a vector value
.
Step 3: Check using solver whether and_exprt(conjunction(value), not_exprt(m))
is SAT or UNSAT. If SAT, then m
is not subsumed by A, else m
is subsumed by A
.