summaryrefslogtreecommitdiff
path: root/src/smt/boolean_terms.cpp
diff options
context:
space:
mode:
authorajreynol <andrew.j.reynolds@gmail.com>2015-01-22 09:40:51 +0100
committerajreynol <andrew.j.reynolds@gmail.com>2015-01-22 09:40:51 +0100
commit9867d5a61ccde30f7e4616a652ef86a9b15ae6d8 (patch)
tree2b8987cbac1745268bfee3d66b2a06973ff53683 /src/smt/boolean_terms.cpp
parent2c09bb19994bc1baa97e30642a0281692c181a4b (diff)
Do not drop patterns during boolean term rewriting. Narrow sygus search space based on commutative operators.
Diffstat (limited to 'src/smt/boolean_terms.cpp')
-rw-r--r--src/smt/boolean_terms.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/smt/boolean_terms.cpp b/src/smt/boolean_terms.cpp
index 7ab590d89..54a6b5416 100644
--- a/src/smt/boolean_terms.cpp
+++ b/src/smt/boolean_terms.cpp
@@ -816,7 +816,13 @@ Node BooleanTermConverter::rewriteBooleanTermsRec(TNode top, theory::TheoryId pa
}
Node boundVarList = nm->mkNode(kind::BOUND_VAR_LIST, boundVars);
Node body = rewriteBooleanTermsRec(top[1], theory::THEORY_BOOL, quantBoolVars);
- Node quant = nm->mkNode(top.getKind(), boundVarList, body);
+ Node quant;
+ if( top.getNumChildren()==3 ){
+ Node ipl = rewriteBooleanTermsRec(top[2], theory::THEORY_BOOL, quantBoolVars);
+ quant = nm->mkNode(top.getKind(), boundVarList, body, ipl );
+ }else{
+ quant = nm->mkNode(top.getKind(), boundVarList, body);
+ }
Debug("bt") << "rewrote quantifier to -> " << quant << endl;
d_termCache[make_pair(top, theory::THEORY_BOOL)] = quant;
d_termCache[make_pair(top, theory::THEORY_BUILTIN)] = quant.iteNode(d_tt, d_ff);
@@ -847,16 +853,16 @@ Node BooleanTermConverter::rewriteBooleanTermsRec(TNode top, theory::TheoryId pa
k != kind::RECORD_SELECT &&
k != kind::RECORD_UPDATE &&
k != kind::DIVISIBLE &&
- // Theory parametric functions go here
- k != kind::FLOATINGPOINT_TO_FP_IEEE_BITVECTOR &&
- k != kind::FLOATINGPOINT_TO_FP_FLOATINGPOINT &&
- k != kind::FLOATINGPOINT_TO_FP_REAL &&
- k != kind::FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR &&
- k != kind::FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR &&
- k != kind::FLOATINGPOINT_TO_UBV &&
- k != kind::FLOATINGPOINT_TO_SBV &&
- k != kind::FLOATINGPOINT_TO_REAL
- ) {
+ // Theory parametric functions go here
+ k != kind::FLOATINGPOINT_TO_FP_IEEE_BITVECTOR &&
+ k != kind::FLOATINGPOINT_TO_FP_FLOATINGPOINT &&
+ k != kind::FLOATINGPOINT_TO_FP_REAL &&
+ k != kind::FLOATINGPOINT_TO_FP_SIGNED_BITVECTOR &&
+ k != kind::FLOATINGPOINT_TO_FP_UNSIGNED_BITVECTOR &&
+ k != kind::FLOATINGPOINT_TO_UBV &&
+ k != kind::FLOATINGPOINT_TO_SBV &&
+ k != kind::FLOATINGPOINT_TO_REAL
+ ) {
Debug("bt") << "rewriting: " << top.getOperator() << endl;
result.top() << rewriteBooleanTermsRec(top.getOperator(), theory::THEORY_BUILTIN, quantBoolVars);
Debug("bt") << "got: " << result.top().getOperator() << endl;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback