summaryrefslogtreecommitdiff
path: root/src/theory/quantifiers/quantifiers_rewriter.cpp
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-02-06 17:30:53 -0600
committerGitHub <noreply@github.com>2020-02-06 17:30:53 -0600
commitbabbe0e30d769b5f68cb3f36820fbb5e176de7c5 (patch)
tree3b0195271c8fdf233836ccd726e4f2c6cd03865c /src/theory/quantifiers/quantifiers_rewriter.cpp
parentea4355639142f10a2bc5c1aa6044d9bbc246435b (diff)
Generalize containsQuantifiers to hasClosure (#3722)
Diffstat (limited to 'src/theory/quantifiers/quantifiers_rewriter.cpp')
-rw-r--r--src/theory/quantifiers/quantifiers_rewriter.cpp30
1 files changed, 5 insertions, 25 deletions
diff --git a/src/theory/quantifiers/quantifiers_rewriter.cpp b/src/theory/quantifiers/quantifiers_rewriter.cpp
index d5bee4916..74d8ac3a6 100644
--- a/src/theory/quantifiers/quantifiers_rewriter.cpp
+++ b/src/theory/quantifiers/quantifiers_rewriter.cpp
@@ -1546,7 +1546,8 @@ Node QuantifiersRewriter::computePrenexAgg( Node n, bool topLevel, std::map< uns
if( itv!=visited[tindex].end() ){
return itv->second;
}
- if( containsQuantifiers( n ) ){
+ if (expr::hasClosure(n))
+ {
Node ret = n;
if (topLevel
&& options::prenexQuant() == options::PrenexQuantMode::DISJ_NORMAL
@@ -2168,35 +2169,13 @@ Node QuantifiersRewriter::rewriteRewriteRule( Node r ) {
return rn;
}
-struct ContainsQuantAttributeId {};
-typedef expr::Attribute<ContainsQuantAttributeId, uint64_t> ContainsQuantAttribute;
-
-// check if the given node contains a universal quantifier
-bool QuantifiersRewriter::containsQuantifiers( Node n ){
- if( n.hasAttribute(ContainsQuantAttribute()) ){
- return n.getAttribute(ContainsQuantAttribute())==1;
- }else if( n.getKind() == kind::FORALL ){
- return true;
- }else{
- bool cq = false;
- for( unsigned i = 0; i < n.getNumChildren(); ++i ){
- if( containsQuantifiers( n[i] ) ){
- cq = true;
- break;
- }
- }
- ContainsQuantAttribute cqa;
- n.setAttribute(cqa, cq ? 1 : 0);
- return cq;
- }
-}
bool QuantifiersRewriter::isPrenexNormalForm( Node n ) {
if( n.getKind()==FORALL ){
return n[1].getKind()!=FORALL && isPrenexNormalForm( n[1] );
}else if( n.getKind()==NOT ){
return n[0].getKind()!=NOT && isPrenexNormalForm( n[0] );
}else{
- return !containsQuantifiers( n );
+ return !expr::hasClosure(n);
}
}
@@ -2246,7 +2225,8 @@ Node QuantifiersRewriter::preSkolemizeQuantifiers( Node n, bool polarity, std::v
}else{
//check if it contains a quantifier as a subterm
//if so, we will write this node
- if( containsQuantifiers( n ) ){
+ if (expr::hasClosure(n))
+ {
if( ( n.getKind()==kind::ITE && n.getType().isBoolean() ) || ( n.getKind()==kind::EQUAL && n[0].getType().isBoolean() ) ){
if( options::preSkolemQuantAgg() ){
Node nn;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback