InputLanguage getInputLanguage() const;
InstFormatMode getInstFormatMode() const;
OutputLanguage getOutputLanguage() const;
+ bool getUfHo() const;
bool getCheckProofs() const;
bool getDumpInstantiations() const;
bool getDumpModels() const;
#include "options/base_options.h"
#include "options/language.h"
#include "options/main_options.h"
+#include "options/option_exception.h"
#include "options/parser_options.h"
#include "options/printer_modes.h"
#include "options/printer_options.h"
-#include "options/option_exception.h"
-#include "options/smt_options.h"
#include "options/quantifiers_options.h"
+#include "options/smt_options.h"
+#include "options/uf_options.h"
namespace CVC4 {
return (*this)[options::outputLanguage];
}
+bool Options::getUfHo() const { return (*this)[options::ufHo]; }
+
bool Options::getCheckProofs() const{
return (*this)[options::checkProofs];
}
}
}
}
-
// Second phase: apply the arguments to the parse op
ExprManager* em = getExprManager();
// handle special cases
}
else if (isBuiltinOperator)
{
+ if (!em->getOptions().getUfHo()
+ && (kind == kind::EQUAL || kind == kind::DISTINCT))
+ {
+ // need --uf-ho if these operators are applied over function args
+ for (std::vector<Expr>::iterator i = args.begin(); i != args.end(); ++i)
+ {
+ if ((*i).getType().isFunction())
+ {
+ parseError(
+ "Cannot apply equalty to functions unless --uf-ho is set.");
+ }
+ }
+ }
if (args.size() > 2)
{
if (kind == kind::INTS_DIVISION || kind == kind::XOR
; EXPECT: sat
+; COMMAND-LINE: --uf-ho
(set-info :smt-lib-version 2.6)
(set-logic UFIDL)
(set-info :status sat)