Simplify formalism of introduced arithmetic skolems (#8073)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Tue, 8 Feb 2022 19:08:08 +0000 (13:08 -0600)
committerGitHub <noreply@github.com>
Tue, 8 Feb 2022 19:08:08 +0000 (19:08 +0000)
commitc69f49277837aa3d4e79e07f1b8170dec03bf287
tree7a4c640beb3ce7198225292f167203515fea7647
parentd2bc889a6df05f0c984983192ed1aca129931df7
Simplify formalism of introduced arithmetic skolems (#8073)

This ensures that all skolems introduced by arithmetic have concrete terms as witnesses. This avoids introducing witness terms.

This PR is important for ensuring that the "original form" of terms does not contain introduced free variables. This means that certain features (quantifier elimination, learned literals) are useful to the user. This was requested by Certora.

This also will improve proof reconstruction for extensions of non-linear arithmetic.

It also ensures that we share skolems in some cases, e.g. we use the same skolem for eliminating (div x y) and (mod x y).
src/theory/arith/operator_elim.cpp
src/theory/arith/operator_elim.h