{
Trace("fp-registerTerm") << "TheoryFp::registerTerm(): " << node << std::endl;
- if (isRegistered(node))
- {
- return;
- }
-
Kind k = node.getKind();
Assert(k != kind::FLOATINGPOINT_TO_FP_GENERIC && k != kind::FLOATINGPOINT_SUB
&& k != kind::FLOATINGPOINT_EQ && k != kind::FLOATINGPOINT_GEQ
&& k != kind::FLOATINGPOINT_GT);
- CVC5_UNUSED bool success = d_registeredTerms.insert(node);
- Assert(success);
-
- // Add to the equality engine
+ // Add to the equality engine, always. This is required to ensure
+ // getEqualityStatus works as expected when theory combination is enabled.
if (k == kind::EQUAL)
{
d_equalityEngine->addTriggerPredicate(node);
d_equalityEngine->addTerm(node);
}
+ // if not registered in this user context
+ if (isRegistered(node))
+ {
+ return;
+ }
+
+ CVC5_UNUSED bool success = d_registeredTerms.insert(node);
+ Assert(success);
+
// Give the expansion of classifications in terms of equalities
// This should make equality reasoning slightly more powerful.
if ((k == kind::FLOATINGPOINT_ISNAN) || (k == kind::FLOATINGPOINT_ISZ)
regress0/fp/issue5734.smt2
regress0/fp/issue6164.smt2
regress0/fp/issue7002.smt2
+ regress0/fp/proj-issue329-prereg-context.smt2
regress0/fp/rti_3_5_bug.smt2
regress0/fp/simple.smt2
regress0/fp/word-blast.smt2
--- /dev/null
+; COMMAND-LINE: --fp-exp
+; EXPECT: sat
+(set-logic ALL)
+(declare-const x Float128)
+(declare-const _x String)
+(declare-fun x5 (Bool Float128) Bool)
+(check-sat-assuming ((x5 (exists ((x (Array String Bool))) (and (select x _x) (or (select x _x) (x5 (exists ((x Bool)) true) (_ -oo 15 113))))) x)))