diff options
author | Morgan Deters <mdeters@gmail.com> | 2012-08-27 19:27:28 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2012-08-27 19:27:28 +0000 |
commit | 58c511a607a7a3560590b49f17ee3e92b364dbcf (patch) | |
tree | 0953f80fa0386b44dec50937fbee31dd837a7393 /src/theory/builtin | |
parent | 1857318ff8b072e07bc0a802960a7b87f119688d (diff) |
* Reversing commit r4258 (which disabled failing regressions). Fixed the problem so they're no longer failing (in the quantifiers rewriter). Resolves bug #381.
* Added LAMBDA kind and type rule, and Node::isClosure().
(this commit was certified error- and warning-free by the test-and-commit script.)
Diffstat (limited to 'src/theory/builtin')
-rw-r--r-- | src/theory/builtin/kinds | 3 | ||||
-rw-r--r-- | src/theory/builtin/theory_builtin_type_rules.h | 18 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/theory/builtin/kinds b/src/theory/builtin/kinds index 48fe4d84a..c4c3435a2 100644 --- a/src/theory/builtin/kinds +++ b/src/theory/builtin/kinds @@ -298,6 +298,8 @@ variable BOUND_VARIABLE "bound variable" variable SKOLEM "skolem var" operator TUPLE 1: "a tuple" +operator LAMBDA 2 "lambda" + constant TYPE_CONSTANT \ ::CVC4::TypeConstant \ ::CVC4::TypeConstantHashFunction \ @@ -338,6 +340,7 @@ typerule APPLY ::CVC4::theory::builtin::ApplyTypeRule typerule EQUAL ::CVC4::theory::builtin::EqualityTypeRule typerule DISTINCT ::CVC4::theory::builtin::DistinctTypeRule typerule TUPLE ::CVC4::theory::builtin::TupleTypeRule +typerule LAMBDA ::CVC4::theory::builtin::LambdaTypeRule constant SUBTYPE_TYPE \ ::CVC4::Predicate \ diff --git a/src/theory/builtin/theory_builtin_type_rules.h b/src/theory/builtin/theory_builtin_type_rules.h index 68d9e8702..95ede1c46 100644 --- a/src/theory/builtin/theory_builtin_type_rules.h +++ b/src/theory/builtin/theory_builtin_type_rules.h @@ -145,6 +145,24 @@ public: } };/* class StringConstantTypeRule */ +class LambdaTypeRule { +public: + inline static TypeNode computeType(NodeManager* nodeManager, TNode n, bool check) { + if( n[0].getType(check) != nodeManager->boundVarListType() ) { + std::stringstream ss; + ss << "expected a bound var list for LAMBDA expression, got `" + << n[0].getType().toString() << "'"; + throw TypeCheckingExceptionPrivate(n, ss.str()); + } + std::vector<TypeNode> argTypes; + for(TNode::iterator i = n[0].begin(); i != n[0].end(); ++i) { + argTypes.push_back((*i).getType()); + } + TypeNode rangeType = n[1].getType(check); + return nodeManager->mkFunctionType(argTypes, rangeType); + } +};/* class LambdaTypeRule */ + class SortProperties { public: inline static bool isWellFounded(TypeNode type) { |