diff options
author | ajreynol <andrew.j.reynolds@gmail.com> | 2015-01-22 09:40:51 +0100 |
---|---|---|
committer | ajreynol <andrew.j.reynolds@gmail.com> | 2015-01-22 09:40:51 +0100 |
commit | 9867d5a61ccde30f7e4616a652ef86a9b15ae6d8 (patch) | |
tree | 2b8987cbac1745268bfee3d66b2a06973ff53683 /src/smt/boolean_terms.cpp | |
parent | 2c09bb19994bc1baa97e30642a0281692c181a4b (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.cpp | 28 |
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; |