diff options
author | Morgan Deters <mdeters@gmail.com> | 2012-09-26 03:50:57 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2012-09-26 03:50:57 +0000 |
commit | ed914e42041806538f57750c8391fa77053d8c79 (patch) | |
tree | d6da32187d9bab77bef2a5e483f2065c7adbdb98 /src | |
parent | 7f84ff856af53047c2af2c1c1987340f9075ec7c (diff) |
Fix type checking for define-funs (resolves bug 398).
(this commit was certified error- and warning-free by the test-and-commit script.)
Diffstat (limited to 'src')
-rw-r--r-- | src/smt/smt_engine.cpp | 4 | ||||
-rw-r--r-- | src/theory/builtin/theory_builtin_type_rules.h | 2 | ||||
-rw-r--r-- | 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" |