diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2020-06-05 17:57:25 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-05 17:57:25 -0500 |
commit | c8015e6dc858a3fd13234ec4acb22c80cb339ddc (patch) | |
tree | 0a5e7c4fc112f3753eae8dc8e6283933373aa840 /src/api/cvc4cpp.cpp | |
parent | 5c4b9e1a6ffa97a0a1f8af41069f29764eb6c74b (diff) |
Datatypes with nested recursion are not handled in TheoryDatatypes unless option is set (#3707)
Towards experimental support for non-simply recursive datatypes (https://github.com/ajreynol/CVC4/tree/dtNonSimpleRec). Builds a check for non-simple recursion in the DType class. If a term of a datatype type is registered to TheoryDatatypes for a datatype that has nested recursion, we throw a LogicException unless the option dtNestedRec is set to true. Also includes a bug discovered in the TypeMatcher utility and another in expr::getComponentTypes.
It also adds a unit test using the new API for a simple parametric datatype example as well, not related to nested recursion, as this was previously missing.
Diffstat (limited to 'src/api/cvc4cpp.cpp')
-rw-r--r-- | src/api/cvc4cpp.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/api/cvc4cpp.cpp b/src/api/cvc4cpp.cpp index 164df0631..2c65f1ca6 100644 --- a/src/api/cvc4cpp.cpp +++ b/src/api/cvc4cpp.cpp @@ -2191,6 +2191,10 @@ bool Datatype::isRecord() const { return d_dtype->isRecord(); } bool Datatype::isFinite() const { return d_dtype->isFinite(); } bool Datatype::isWellFounded() const { return d_dtype->isWellFounded(); } +bool Datatype::hasNestedRecursion() const +{ + return d_dtype->hasNestedRecursion(); +} std::string Datatype::toString() const { return d_dtype->getName(); } |