(proof-new) Replace witness form by original form in the internal proof calculus...
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 10 Mar 2021 13:33:49 +0000 (07:33 -0600)
committerGitHub <noreply@github.com>
Wed, 10 Mar 2021 13:33:49 +0000 (13:33 +0000)
commitdd047586cf049a132e46fe561bee4716e0aec455
tree6ef863eaf48907920a914aa8693bfae620579a4e
parent4c6e0a7325034547dea92a440476035318ed33b4
(proof-new) Replace witness form by original form in the internal proof calculus  (#6051)

This makes a simplification to the internal proof calculus. In particular, purification skolems are no longer are special case of witness skolems. They are now independent concepts. The concept of "witness form" is replaced in most places by "original form".

This is required for fixing two issues:
(1) variable shadowing issues in skolemization.
(2) bookkeeping issues for bound variables introduced to construct witness terms. This made the LFSC proof conversion extremely cumbersome for e.g. string reductions.

In this PR, the main changes:

The internals of SkolemManager are changed to use original form vs witness form when necessary. This eliminates the need to do variable renaming in SkolemManager::skolemize.
the rule WITNESS_INTRO is replaced by SKOLEM_INTRO
MACRO_SR_* rules use original form
Proof post processing is simplified
These changes imply that ppRewrite should not return WITNESS terms. Followup PRs will modify arithmetic preprocessing so that its ppRewrite method returns skolems instead.
src/expr/proof_rule.cpp
src/expr/proof_rule.h
src/expr/skolem_manager.cpp
src/expr/skolem_manager.h
src/smt/quant_elim_solver.cpp
src/smt/witness_form.cpp
src/theory/builtin/proof_checker.cpp
src/theory/quantifiers/proof_checker.cpp