Summary: Change Arith.map to not descend through non-interpreted arithmetic operators. For example, in `2×(x × y) + 3×z + 4`, `map ~f` will apply `f` to the subterms `x × y` and `z`, but not `x` or `y`. The logical notion of "subterm" that is needed by the solver does not coincide with the representation. This is essentially due to not "flattening" or "purifying" terms. That is, traditionally `x × y` would not be permitted as an indeterminate of a polynomial. Instead, a new variable would need to be introduced: `v = x × y` and then the polynomial would be expressed as `2×v + 3×z + 4`. Taking maximal non-interpreted subterms as the definition of "subterm" results in subterms in the non-flattened representation that are equivalent to those that would result from flattening the representation. Reviewed By: jvillard Differential Revision: D24746235 fbshipit-source-id: d8fcf46a1master
parent
6f4dcfbdd9
commit
1a4363627c
Loading…
Reference in new issue