std::string logicString = d_logic.getLogicString();
- if (!(
- // Pure logics
- logicString == "QF_UF" || logicString == "QF_AX"
- || logicString == "QF_BV" ||
- // Non-pure logics
- logicString == "QF_AUF" || logicString == "QF_UFBV"
- || logicString == "QF_ABV" || logicString == "QF_AUFBV"))
+ if (!(d_logic <= LogicInfo("QF_AUFBVLRA")))
{
// This logic is not yet supported
Notice() << "Notice: no proof-checking for " << logicString << " proofs yet"
**/
#include "theory/logic_info.h"
-#include <string>
#include <cstring>
+#include <iostream>
#include <sstream>
+#include <string>
#include "base/cvc4_assert.h"
#include "expr/kind.h"
PrettyCheckArgument(d_sharingTheories == other.d_sharingTheories, *this,
"LogicInfo internal inconsistency");
+ bool res = d_cardinalityConstraints == other.d_cardinalityConstraints
+ && d_higherOrder == other.d_higherOrder;
if(isTheoryEnabled(theory::THEORY_ARITH)) {
return d_integers == other.d_integers && d_reals == other.d_reals
&& d_transcendentals == other.d_transcendentals
&& d_linear == other.d_linear
- && d_differenceLogic == other.d_differenceLogic;
+ && d_differenceLogic == other.d_differenceLogic && res;
} else {
- return true;
+ return res;
}
}
}
PrettyCheckArgument(d_sharingTheories <= other.d_sharingTheories, *this,
"LogicInfo internal inconsistency");
+ bool res = (!d_cardinalityConstraints || other.d_cardinalityConstraints)
+ && (!d_higherOrder || other.d_higherOrder);
if(isTheoryEnabled(theory::THEORY_ARITH) && other.isTheoryEnabled(theory::THEORY_ARITH)) {
return (!d_integers || other.d_integers) && (!d_reals || other.d_reals)
&& (!d_transcendentals || other.d_transcendentals)
&& (d_linear || !other.d_linear)
- && (d_differenceLogic || !other.d_differenceLogic);
+ && (d_differenceLogic || !other.d_differenceLogic) && res;
} else {
- return true;
+ return res;
}
}
}
PrettyCheckArgument(d_sharingTheories >= other.d_sharingTheories, *this,
"LogicInfo internal inconsistency");
+ bool res = (d_cardinalityConstraints || !other.d_cardinalityConstraints)
+ && (d_higherOrder || !other.d_higherOrder);
if(isTheoryEnabled(theory::THEORY_ARITH) && other.isTheoryEnabled(theory::THEORY_ARITH)) {
return (d_integers || !other.d_integers) && (d_reals || !other.d_reals)
&& (d_transcendentals || !other.d_transcendentals)
&& (!d_linear || other.d_linear)
- && (!d_differenceLogic || other.d_differenceLogic);
+ && (!d_differenceLogic || other.d_differenceLogic) && res;
} else {
- return true;
+ return res;
}
}
}
void testComparison() {
+ LogicInfo ufHo = LogicInfo("QF_UF").getUnlockedCopy();
+ ufHo.enableHigherOrder();
+ ufHo.lock();
+
eq("QF_UF", "QF_UF");
nc("QF_UF", "QF_LRA");
nc("QF_UF", "QF_LIA");
lt("QF_UF", "AUFLIA");
lt("QF_UF", "AUFLIRA");
lt("QF_UF", "AUFNIRA");
+ lt("QF_UF", "QF_UFC");
+ lt("QF_UF", ufHo);
+ nc("QF_UFC", ufHo);
nc("QF_LRA", "QF_UF");
eq("QF_LRA", "QF_LRA");
nc("QF_LRA", "AUFLIA");
lt("QF_LRA", "AUFLIRA");
lt("QF_LRA", "AUFNIRA");
+ lt("QF_LRA", "QF_UFCLRA");
nc("QF_LIA", "QF_UF");
nc("QF_LIA", "QF_LRA");
gt("AUFNIRA", "AUFLIRA");
eq("AUFNIRA", "AUFNIRA");
lt("AUFNIRA", "AUFNIRAT");
+
+ gt("QF_UFC", "QF_UF");
+ gt("QF_UFCLRA", "QF_UFLRA");
+
+ gt(ufHo, "QF_UF");
}
};/* class LogicInfoWhite */