Fix policy for purifying arguments of exp (#8416)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 30 Mar 2022 19:17:09 +0000 (14:17 -0500)
committerGitHub <noreply@github.com>
Wed, 30 Mar 2022 19:17:09 +0000 (19:17 +0000)
commit70391b799bf75f3410844eef1cc8029d5f3c9e6e
tree5039d268d2f78c37c39c9f36ec4350f6956f1021
parentc0a37b03d674ca0555e01b0aa4b345df806aea7a
Fix policy for purifying arguments of exp (#8416)

This corrects the policy for when to purify exp. It ensures we purify exp whenever the kind is not a variable or constant, instead of when the kind is a transcendental function app. The latter permits problematic terms like (exp (* (exp 1.0) (exp 1.0)).

This also corrects an issue where information for ordering on variables would be skipped if we failed to produce a model value for a single variable, which was the original source of the error on #8415.

It furthermore fixes the PfRule ARITH_TRANS_EXP_APPROX_BELOW, which did not handle non-constant arguments of exp.

Fixes #8415.
src/proof/proof_rule.h
src/theory/arith/nl/ext/monomial_check.cpp
src/theory/arith/nl/transcendental/exponential_solver.cpp
src/theory/arith/nl/transcendental/proof_checker.cpp
src/theory/arith/nl/transcendental/transcendental_solver.cpp
src/theory/arith/nl/transcendental/transcendental_state.cpp
src/theory/theory_model_builder.cpp
test/regress/cli/CMakeLists.txt
test/regress/cli/regress0/nl/nta/issue8415-embed-arg.smt2 [new file with mode: 0644]