#include "options/arith_options.h"
#include "options/smt_options.h"
+#include "printer/smt2/smt2_printer.h"
+#include "smt/logic_exception.h"
#include "theory/arith/arith_state.h"
+#include "theory/arith/arith_utilities.h"
#include "theory/arith/bound_inference.h"
#include "theory/arith/inference_manager.h"
#include "theory/arith/nl/nl_lemma_utils.h"
// register terms with extended theory, to find extended terms that can be
// eliminated by context-depedendent simplification.
d_extTheory.registerTerm(n);
+ // logic exceptions based on the configuration of nl-ext: if we are a
+ // transcendental function, we require nl-ext=full.
+ Kind k = n.getKind();
+ if (isTranscendentalKind(k))
+ {
+ if (options().arith.nlExt != options::NlExtMode::FULL)
+ {
+ std::stringstream ss;
+ ss << "Term of kind " << printer::smt2::Smt2Printer::smtKindString(k)
+ << " requires nl-ext mode to be set to value 'full'";
+ throw LogicException(ss.str());
+ }
+ }
}
void NonlinearExtension::processSideEffect(const NlLemma& se)
// for computing congruence
std::map<Kind, ArgTrie> argTrie;
NodeMap::const_iterator itp;
- for (std::size_t i = 0, xsize = xts.size(); i < xsize; ++i)
+ for (const Node& a : xts)
{
+ Kind ak = a.getKind();
// Ignore if it is not a transcendental
- if (!isTranscendentalKind(xts[i].getKind()))
+ if (!isTranscendentalKind(ak))
{
continue;
}
- Node a = xts[i];
- Kind ak = a.getKind();
bool consider = true;
// if we've already assigned a purified term
itp = d_trPurify.find(a);
regress0/nl/nta/issue8182-2-exact-mv-keep.smt2
regress0/nl/nta/issue8183-tc-pi.smt2
regress0/nl/nta/issue8208-red-nred.smt2
+ regress0/nl/nta/proj-issue376.smt2
regress0/nl/nta/proj-issue403.smt2
regress0/nl/nta/proj-issue460-pi-value.smt2
regress0/nl/nta/real-pi.smt2