From ed914e42041806538f57750c8391fa77053d8c79 Mon Sep 17 00:00:00 2001 From: Morgan Deters Date: Wed, 26 Sep 2012 03:50:57 +0000 Subject: [PATCH] Fix type checking for define-funs (resolves bug 398). (this commit was certified error- and warning-free by the test-and-commit script.) --- src/smt/smt_engine.cpp | 4 ++-- src/theory/builtin/theory_builtin_type_rules.h | 2 +- src/theory/uf/theory_uf_type_rules.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index cedd866f9..ad72e0737 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -888,7 +888,7 @@ void SmtEngine::defineFunction(Expr func, // doesn't match the SMT-LIBv2 standard... if(formals.size() > 0) { Type rangeType = FunctionType(funcType).getRangeType(); - if(formulaType != rangeType) { + if(! formulaType.isComparableTo(rangeType)) { stringstream ss; ss << "Type of defined function does not match its declaration\n" << "The function : " << func << "\n" @@ -898,7 +898,7 @@ void SmtEngine::defineFunction(Expr func, throw TypeCheckingException(func, ss.str()); } } else { - if(formulaType != funcType) { + if(! formulaType.isComparableTo(funcType)) { stringstream ss; ss << "Declared type of defined constant does not match its definition\n" << "The constant : " << func << "\n" diff --git a/src/theory/builtin/theory_builtin_type_rules.h b/src/theory/builtin/theory_builtin_type_rules.h index 939c52f31..a2e8e8179 100644 --- a/src/theory/builtin/theory_builtin_type_rules.h +++ b/src/theory/builtin/theory_builtin_type_rules.h @@ -50,7 +50,7 @@ class ApplyTypeRule { TNode::iterator argument_it_end = n.end(); TypeNode::iterator argument_type_it = fType.begin(); for(; argument_it != argument_it_end; ++argument_it, ++argument_type_it) { - if((*argument_it).getType() != *argument_type_it) { + if(!(*argument_it).getType().isComparableTo(*argument_type_it)) { std::stringstream ss; ss << "argument types do not match the function type:\n" << "argument: " << *argument_it << "\n" diff --git a/src/theory/uf/theory_uf_type_rules.h b/src/theory/uf/theory_uf_type_rules.h index 09f287884..2c28d41e3 100644 --- a/src/theory/uf/theory_uf_type_rules.h +++ b/src/theory/uf/theory_uf_type_rules.h @@ -44,7 +44,7 @@ public: for(; argument_it != argument_it_end; ++argument_it, ++argument_type_it) { TypeNode currentArgument = (*argument_it).getType(); TypeNode currentArgumentType = *argument_type_it; - if(!currentArgument.isSubtypeOf(currentArgumentType)) { + if(!currentArgument.isComparableTo(currentArgumentType)) { std::stringstream ss; ss << "argument type is not a subtype of the function's argument type:\n" << "argument: " << *argument_it << "\n" -- 2.30.2