Modify equality engine to allow operators to be marked as external terms (#1082)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Wed, 13 Sep 2017 21:08:01 +0000 (16:08 -0500)
committerAina Niemetz <aina.niemetz@gmail.com>
Wed, 13 Sep 2017 21:08:01 +0000 (14:08 -0700)
commit85a1160aa4cced39808e3e73ceff0e0b5ddc6f66
treea1e4dfc3fe59f5af0bf5e6bff581f61fcbe9e2e4
parent3a00b0c4586ef61c93b7b7320cce4d720014f2bf
Modify equality engine to allow operators to be marked as external terms (#1082)

This is required for reasoning higher-order, since we may have equalities between functions, which are operators of APPLY_UF terms.

This commit gets around the previous 1% slowdown by modifying the changes to the equality engine to be minimal impact. Previously the "isInternal" flag could be reset to false after a term is marked as internal=true. This provides an interface for whether operators of a kind should be marked as internal=false from the start. When using higher-order, APPLY_UF operators will be marked as being external when the higher-order option ufHo is set to true.

This has <.001% impact on performance on QF smtlib : https://www.starexec.org/starexec/secure/details/job.jsp?id=24445
src/theory/uf/equality_engine.cpp
src/theory/uf/equality_engine.h