Even though PartitionManager stores the mapping from a top-level formula to an internal, preprocessed one, mapping the formulas to the internal variables TermMapper may still be broken due to Cnfizer.
For example, formula (= x 0) is preprocessed to (and (<= x 0) (<= (- x) 0)).
However, TermMapper does not know about either of the formulas because (and (<= x 0) (<= (- x) 0)) breaks down to (<= x 0) and (<= (- x) 0) separately.
Hence, it is impossible to identify if (= x 0) or (and (<= x 0) (<= (- x) 0)) are present in the SMT solver via TermMapper::hasLit, used for example in MainSolver::getTermValue.
Even though
PartitionManagerstores the mapping from a top-level formula to an internal, preprocessed one, mapping the formulas to the internal variablesTermMappermay still be broken due toCnfizer.For example, formula
(= x 0)is preprocessed to(and (<= x 0) (<= (- x) 0)).However,
TermMapperdoes not know about either of the formulas because(and (<= x 0) (<= (- x) 0))breaks down to(<= x 0)and(<= (- x) 0)separately.Hence, it is impossible to identify if
(= x 0)or(and (<= x 0) (<= (- x) 0))are present in the SMT solver viaTermMapper::hasLit, used for example inMainSolver::getTermValue.