From: Liana Hadarean Date: Wed, 4 Apr 2012 02:02:06 +0000 (+0000) Subject: * added propagation as lemmas to TheoryBV: X-Git-Tag: cvc5-1.0.0~8243 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=52d6dc20c61007a5c066590aa1fd0b95ed3c2527;p=cvc5.git * added propagation as lemmas to TheoryBV: * modified BVMinisat to work incrementally * added more bv regressions --- diff --git a/src/prop/bvminisat/bvminisat.cpp b/src/prop/bvminisat/bvminisat.cpp index b32483cbe..232502696 100644 --- a/src/prop/bvminisat/bvminisat.cpp +++ b/src/prop/bvminisat/bvminisat.cpp @@ -22,13 +22,19 @@ using namespace CVC4; using namespace prop; -BVMinisatSatSolver::BVMinisatSatSolver() : - d_minisat(new BVMinisat::SimpSolver()) +BVMinisatSatSolver::BVMinisatSatSolver(context::Context* mainSatContext) +: context::ContextNotifyObj(mainSatContext, false), + d_minisat(new BVMinisat::SimpSolver(mainSatContext)), + d_solveCount(0), + d_assertionsCount(0), + d_assertionsRealCount(mainSatContext, 0), + d_lastPropagation(mainSatContext, 0) { - d_statistics.init(d_minisat); + d_statistics.init(d_minisat); } -BVMinisatSatSolver::~BVMinisatSatSolver() { + +BVMinisatSatSolver::~BVMinisatSatSolver() throw(AssertionException) { delete d_minisat; } @@ -42,6 +48,42 @@ void BVMinisatSatSolver::addClause(SatClause& clause, bool removable) { d_minisat->addClause(minisat_clause); } +void BVMinisatSatSolver::addMarkerLiteral(SatLiteral lit) { + d_minisat->addMarkerLiteral(BVMinisat::var(toMinisatLit(lit))); +} + +bool BVMinisatSatSolver::getPropagations(std::vector& propagations) { + for (; d_lastPropagation < d_minisat->atom_propagations.size(); d_lastPropagation = d_lastPropagation + 1) { + propagations.push_back(toSatLiteral(d_minisat->atom_propagations[d_lastPropagation])); + } + return propagations.size() > 0; +} + +void BVMinisatSatSolver::explainPropagation(SatLiteral lit, std::vector& explanation) { + std::vector minisat_explanation; + d_minisat->explainPropagation(toMinisatLit(lit), minisat_explanation); + for (unsigned i = 0; i < minisat_explanation.size(); ++i) { + explanation.push_back(toSatLiteral(minisat_explanation[i])); + } +} + +SatValue BVMinisatSatSolver::assertAssumption(SatLiteral lit, bool propagate) { + d_assertionsCount ++; + d_assertionsRealCount = d_assertionsRealCount + 1; + return toSatLiteralValue(d_minisat->assertAssumption(toMinisatLit(lit), propagate)); +} + +void BVMinisatSatSolver::notify() { + while (d_assertionsCount > d_assertionsRealCount) { + popAssumption(); + d_assertionsCount --; + } +} + +void BVMinisatSatSolver::popAssumption() { + d_minisat->popAssumption(); +} + SatVariable BVMinisatSatSolver::newVar(bool freeze){ return d_minisat->newVar(true, true, freeze); } @@ -74,20 +116,28 @@ SatValue BVMinisatSatSolver::solve(long unsigned int& resource){ return result; } -SatValue BVMinisatSatSolver::solve(const context::CDList & assumptions){ - Debug("sat::minisat") << "Solve with assumptions "; - context::CDList::const_iterator it = assumptions.begin(); - BVMinisat::vec assump; - for(; it!= assumptions.end(); ++it) { - SatLiteral lit = *it; - Debug("sat::minisat") << lit <<" "; - assump.push(toMinisatLit(lit)); - } - Debug("sat::minisat") <<"\n"; - - SatValue result = toSatLiteralValue(d_minisat->solve(assump)); - return result; -} +// SatValue BVMinisatSatSolver::solve(const context::CDList & assumptions, bool only_bcp){ +// ++d_solveCount; +// ++d_statistics.d_statCallsToSolve; + +// Debug("sat::minisat") << "Solve with assumptions "; +// context::CDList::const_iterator it = assumptions.begin(); +// BVMinisat::vec assump; +// for(; it!= assumptions.end(); ++it) { +// SatLiteral lit = *it; +// Debug("sat::minisat") << lit <<" "; +// assump.push(toMinisatLit(lit)); +// } +// Debug("sat::minisat") <<"\n"; + +// clock_t begin, end; +// begin = clock(); +// d_minisat->setOnlyBCP(only_bcp); +// SatLiteralValue result = toSatLiteralValue(d_minisat->solve(assump)); +// end = clock(); +// d_statistics.d_statSolveTime = d_statistics.d_statSolveTime.getData() + (end - begin)/(double)CLOCKS_PER_SEC; +// return result; +// } void BVMinisatSatSolver::getUnsatCore(SatClause& unsatCore) { @@ -98,13 +148,11 @@ void BVMinisatSatSolver::getUnsatCore(SatClause& unsatCore) { } SatValue BVMinisatSatSolver::value(SatLiteral l){ - Unimplemented(); - return SAT_VALUE_UNKNOWN; + return toSatLiteralValue(d_minisat->value(toMinisatLit(l))); } SatValue BVMinisatSatSolver::modelValue(SatLiteral l){ - Unimplemented(); - return SAT_VALUE_UNKNOWN; + return toSatLiteralValue(d_minisat->modelValue(toMinisatLit(l))); } void BVMinisatSatSolver::unregisterVar(SatLiteral lit) { @@ -191,7 +239,9 @@ BVMinisatSatSolver::Statistics::Statistics() : d_statLearntsLiterals("theory::bv::bvminisat::learnts_literals"), d_statMaxLiterals("theory::bv::bvminisat::max_literals"), d_statTotLiterals("theory::bv::bvminisat::tot_literals"), - d_statEliminatedVars("theory::bv::bvminisat::eliminated_vars") + d_statEliminatedVars("theory::bv::bvminisat::eliminated_vars"), + d_statCallsToSolve("theory::bv::bvminisat::calls_to_solve", 0), + d_statSolveTime("theory::bv::bvminisat::solve_time", 0) { StatisticsRegistry::registerStat(&d_statStarts); StatisticsRegistry::registerStat(&d_statDecisions); @@ -203,6 +253,8 @@ BVMinisatSatSolver::Statistics::Statistics() : StatisticsRegistry::registerStat(&d_statMaxLiterals); StatisticsRegistry::registerStat(&d_statTotLiterals); StatisticsRegistry::registerStat(&d_statEliminatedVars); + StatisticsRegistry::registerStat(&d_statCallsToSolve); + StatisticsRegistry::registerStat(&d_statSolveTime); } BVMinisatSatSolver::Statistics::~Statistics() { @@ -216,6 +268,8 @@ BVMinisatSatSolver::Statistics::~Statistics() { StatisticsRegistry::unregisterStat(&d_statMaxLiterals); StatisticsRegistry::unregisterStat(&d_statTotLiterals); StatisticsRegistry::unregisterStat(&d_statEliminatedVars); + StatisticsRegistry::unregisterStat(&d_statCallsToSolve); + StatisticsRegistry::unregisterStat(&d_statSolveTime); } void BVMinisatSatSolver::Statistics::init(BVMinisat::SimpSolver* minisat){ diff --git a/src/prop/bvminisat/bvminisat.h b/src/prop/bvminisat/bvminisat.h index 4ca1164c0..19b605067 100644 --- a/src/prop/bvminisat/bvminisat.h +++ b/src/prop/bvminisat/bvminisat.h @@ -21,16 +21,27 @@ #include "prop/sat_solver.h" #include "prop/sat_solver_registry.h" #include "prop/bvminisat/simp/SimpSolver.h" +#include "context/cdo.h" namespace CVC4 { namespace prop { -class BVMinisatSatSolver: public BVSatSolverInterface { +class BVMinisatSatSolver: public BVSatSolverInterface, public context::ContextNotifyObj { BVMinisat::SimpSolver* d_minisat; + unsigned d_solveCount; + unsigned d_assertionsCount; + context::CDO d_assertionsRealCount; + context::CDO d_lastPropagation; public: - BVMinisatSatSolver(); - ~BVMinisatSatSolver(); + BVMinisatSatSolver() : + ContextNotifyObj(NULL, false), + d_assertionsRealCount(NULL, (unsigned)0), + d_lastPropagation(NULL, (unsigned)0) + { Unreachable(); } + BVMinisatSatSolver(context::Context* mainSatContext); + ~BVMinisatSatSolver() throw(AssertionException); + void addClause(SatClause& clause, bool removable); SatVariable newVar(bool theoryAtom = false); @@ -38,10 +49,11 @@ public: void markUnremovable(SatLiteral lit); void interrupt(); - + void notify(); + SatValue solve(); SatValue solve(long unsigned int&); - SatValue solve(const context::CDList & assumptions); + SatValue solve(bool quick_solve); void getUnsatCore(SatClause& unsatCore); SatValue value(SatLiteral l); @@ -62,6 +74,15 @@ public: static void toMinisatClause(SatClause& clause, BVMinisat::vec& minisat_clause); static void toSatClause (BVMinisat::vec& clause, SatClause& sat_clause); + void addMarkerLiteral(SatLiteral lit); + + bool getPropagations(std::vector& propagations); + + void explainPropagation(SatLiteral lit, std::vector& explanation); + + SatValue assertAssumption(SatLiteral lit, bool propagate); + + void popAssumption(); class Statistics { public: @@ -71,6 +92,8 @@ public: ReferenceStat d_statLearntsLiterals, d_statMaxLiterals; ReferenceStat d_statTotLiterals; ReferenceStat d_statEliminatedVars; + IntStat d_statCallsToSolve; + BackedStat d_statSolveTime; Statistics(); ~Statistics(); void init(BVMinisat::SimpSolver* minisat); diff --git a/src/prop/bvminisat/core/Solver.cc b/src/prop/bvminisat/core/Solver.cc index 7ff7b50db..5066d5d8f 100644 --- a/src/prop/bvminisat/core/Solver.cc +++ b/src/prop/bvminisat/core/Solver.cc @@ -22,8 +22,10 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA #include "mtl/Sort.h" #include "core/Solver.h" +#include #include #include "util/output.h" +#include "util/utility.h" using namespace BVMinisat; @@ -64,7 +66,7 @@ static DoubleOption opt_garbage_frac (_cat, "gc-frac", "The fraction o // Constructor/Destructor: -Solver::Solver() : +Solver::Solver(CVC4::context::Context* c) : // Parameters (user settable): // @@ -112,6 +114,8 @@ Solver::Solver() : , conflict_budget (-1) , propagation_budget (-1) , asynch_interrupt (false) + , only_bcp(false) + , d_explanations(c) {} @@ -134,6 +138,7 @@ Var Solver::newVar(bool sign, bool dvar) watches .init(mkLit(v, true )); assigns .push(l_Undef); vardata .push(mkVarData(CRef_Undef, 0)); + marker .push(0); //activity .push(0); activity .push(rnd_init_act ? drand(random_seed) * 0.00001 : 0); seen .push(0); @@ -226,13 +231,20 @@ void Solver::cancelUntil(int level) { for (int c = trail.size()-1; c >= trail_lim[level]; c--){ Var x = var(trail[c]); assigns [x] = l_Undef; + if (marker[x] == 2) marker[x] = 1; if (phase_saving > 1 || (phase_saving == 1) && c > trail_lim.last()) polarity[x] = sign(trail[c]); insertVarOrder(x); } qhead = trail_lim[level]; trail.shrink(trail.size() - trail_lim[level]); trail_lim.shrink(trail_lim.size() - level); - } } + } + + if (level < atom_propagations_lim.size()) { + atom_propagations.shrink(atom_propagations.size() - atom_propagations_lim[level]); + atom_propagations_lim.shrink(atom_propagations_lim.size() - level); + } +} //================================================================================================= @@ -278,7 +290,7 @@ Lit Solver::pickBranchLit() | rest of literals. There may be others from the same level though. | |________________________________________________________________________________________________@*/ -void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel) +void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel, UIP uip) { int pathC = 0; Lit p = lit_Undef; @@ -288,6 +300,7 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel) out_learnt.push(); // (leave room for the asserting literal) int index = trail.size() - 1; + bool done = false; do{ assert(confl != CRef_Undef); // (otherwise should be UIP) Clause& c = ca[confl]; @@ -315,7 +328,18 @@ void Solver::analyze(CRef confl, vec& out_learnt, int& out_btlevel) seen[var(p)] = 0; pathC--; - }while (pathC > 0); + switch (uip) { + case UIP_FIRST: + done = pathC == 0; + break; + case UIP_LAST: + done = confl == CRef_Undef || (pathC == 0 && marker[var(p)] == 2); + break; + default: + Unreachable(); + break; + } + } while (!done); out_learnt[0] = ~p; // Simplify conflict clause: @@ -427,8 +451,10 @@ void Solver::analyzeFinal(Lit p, vec& out_conflict) Var x = var(trail[i]); if (seen[x]){ if (reason(x) == CRef_Undef){ + if (marker[x] == 2) { assert(level(x) > 0); out_conflict.push(~trail[i]); + } }else{ Clause& c = ca[reason(x)]; for (int j = 1; j < c.size(); j++) @@ -449,8 +475,34 @@ void Solver::uncheckedEnqueue(Lit p, CRef from) assigns[var(p)] = lbool(!sign(p)); vardata[var(p)] = mkVarData(from, decisionLevel()); trail.push_(p); + if (only_bcp && marker[var(p)] == 1 && from != CRef_Undef) { + atom_propagations.push(p); + } +} + +void Solver::popAssumption() { + marker[var(assumptions.last())] = 1; + assumptions.pop(); + conflict.clear(); + cancelUntil(assumptions.size()); } +lbool Solver::assertAssumption(Lit p, bool propagate) { + + assert(marker[var(p)] == 1); + + // add to the assumptions + assumptions.push(p); + conflict.clear(); + + // run the propagation + if (propagate) { + only_bcp = true; + return search(-1, UIP_FIRST); + } else { + return l_True; + } +} /*_________________________________________________________________________________________________ | @@ -628,7 +680,7 @@ bool Solver::simplify() | all variables are decision variables, this means that the clause set is satisfiable. 'l_False' | if the clause set is unsatisfiable. 'l_Undef' if the bound on number of conflicts is reached. |________________________________________________________________________________________________@*/ -lbool Solver::search(int nof_conflicts) +lbool Solver::search(int nof_conflicts, UIP uip) { assert(ok); int backtrack_level; @@ -644,17 +696,27 @@ lbool Solver::search(int nof_conflicts) if (decisionLevel() == 0) return l_False; learnt_clause.clear(); - analyze(confl, learnt_clause, backtrack_level); + analyze(confl, learnt_clause, backtrack_level, uip); cancelUntil(backtrack_level); + Lit p = learnt_clause[0]; + bool assumption = marker[var(p)] == 2; + if (learnt_clause.size() == 1){ - uncheckedEnqueue(learnt_clause[0]); + uncheckedEnqueue(p); }else{ CRef cr = ca.alloc(learnt_clause, true); learnts.push(cr); attachClause(cr); claBumpActivity(ca[cr]); - uncheckedEnqueue(learnt_clause[0], cr); + uncheckedEnqueue(p, cr); + } + + // if an assumption, we're done + if (assumption) { + assert(decisionLevel() < assumptions.size()); + analyzeFinal(p, conflict); + return l_False; } varDecayActivity(); @@ -699,12 +761,18 @@ lbool Solver::search(int nof_conflicts) analyzeFinal(~p, conflict); return l_False; }else{ + marker[var(p)] = 2; next = p; break; } } if (next == lit_Undef){ + + if (only_bcp) { + return l_True; + } + // New variable decision: decisions++; next = pickBranchLit(); @@ -767,10 +835,12 @@ static double luby(double y, int x){ // NOTE: assumptions passed in member-variable 'assumptions'. lbool Solver::solve_() { - Debug("bvminisat") <<"BVMinisat::Solving learned clauses " << learnts.size() <<"\n"; - Debug("bvminisat") <<"BVMinisat::Solving assumptions " << assumptions.size() <<"\n"; + Debug("bvminisat") <<"BVMinisat::Solving learned clauses " << learnts.size() <<"\n"; + Debug("bvminisat") <<"BVMinisat::Solving assumptions " << assumptions.size() <<"\n"; + model.clear(); conflict.clear(); + if (!ok) return l_False; solves++; @@ -799,18 +869,55 @@ lbool Solver::solve_() if (verbosity >= 1) printf("===============================================================================\n"); - if (status == l_True){ // Extend & copy model: - model.growTo(nVars()); - for (int i = 0; i < nVars(); i++) model[i] = value(i); + // model.growTo(nVars()); + // for (int i = 0; i < nVars(); i++) model[i] = value(i); }else if (status == l_False && conflict.size() == 0) ok = false; - cancelUntil(0); return status; } +//================================================================================================= +// Bitvector propagations +// + +void Solver::storeExplanation(Lit p) { +} + +void Solver::explainPropagation(Lit p, std::vector& explanation) { + vec queue; + queue.push(p); + + __gnu_cxx::hash_set visited; + visited.insert(var(p)); + while(queue.size() > 0) { + Lit l = queue.last(); + assert(value(l) == l_True); + queue.pop(); + if (reason(var(l)) == CRef_Undef) { + if (marker[var(l)] == 2) { + explanation.push_back(l); + visited.insert(var(l)); + } + } else { + Clause& c = ca[reason(var(l))]; + for (int i = 1; i < c.size(); ++i) { + if (var(c[i]) >= vardata.size()) { + std::cerr << "BOOM" << std::endl; + } + if (visited.count(var(c[i])) == 0) { + queue.push(~c[i]); + visited.insert(var(c[i])); + } + } + } + } +} + + + //================================================================================================= // Writing CNF to DIMACS: // @@ -872,13 +979,13 @@ void Solver::toDimacs(FILE* f, const vec& assumps) } // Assumptions are added as unit clauses: - cnt += assumptions.size(); + cnt += assumps.size(); fprintf(f, "p cnf %d %d\n", max, cnt); - for (int i = 0; i < assumptions.size(); i++){ - assert(value(assumptions[i]) != l_False); - fprintf(f, "%s%d 0\n", sign(assumptions[i]) ? "-" : "", mapVar(var(assumptions[i]), map, max)+1); + for (int i = 0; i < assumps.size(); i++){ + assert(value(assumps[i]) != l_False); + fprintf(f, "%s%d 0\n", sign(assumps[i]) ? "-" : "", mapVar(var(assumps[i]), map, max)+1); } for (int i = 0; i < clauses.size(); i++) @@ -940,4 +1047,3 @@ void Solver::garbageCollect() ca.size()*ClauseAllocator::Unit_Size, to.size()*ClauseAllocator::Unit_Size); to.moveTo(ca); } - diff --git a/src/prop/bvminisat/core/Solver.h b/src/prop/bvminisat/core/Solver.h index f364a2937..33d1900c9 100644 --- a/src/prop/bvminisat/core/Solver.h +++ b/src/prop/bvminisat/core/Solver.h @@ -27,6 +27,10 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA #include "prop/bvminisat/mtl/Alg.h" #include "prop/bvminisat/utils/Options.h" +#include "context/cdhashmap.h" + +#include +#include namespace BVMinisat { @@ -38,7 +42,7 @@ public: // Constructor/Destructor: // - Solver(); + Solver(CVC4::context::Context* c); virtual ~Solver(); // Problem specification: @@ -63,6 +67,8 @@ public: bool solve (Lit p, Lit q); // Search for a model that respects two assumptions. bool solve (Lit p, Lit q, Lit r); // Search for a model that respects three assumptions. bool okay () const; // FALSE means solver is in a conflicting state + lbool assertAssumption(Lit p, bool propagate); // Assert a new assumption, start BCP if propagate = true + void popAssumption(); // Pop an assumption void toDimacs (FILE* f, const vec& assumps); // Write CNF to file in DIMACS-format. void toDimacs (const char *file, const vec& assumps); @@ -138,7 +144,20 @@ public: uint64_t solves, starts, decisions, rnd_decisions, propagations, conflicts; uint64_t dec_vars, clauses_literals, learnts_literals, max_literals, tot_literals; - + // Bitvector Propagations + // + + void addMarkerLiteral(Var var) { + marker[var] = 1; + } + + __gnu_cxx::hash_set assumptions_vars; // all the variables that appear in the current assumptions + vec atom_propagations; // the atom literals implied by the last call to solve with assumptions + vec atom_propagations_lim; // for backtracking + + bool only_bcp; // solving mode in which only boolean constraint propagation is done + void setOnlyBCP (bool val) { only_bcp = val;} + void explainPropagation(Lit l, std::vector& explanation); protected: // Helper structures: @@ -179,6 +198,7 @@ protected: watches; // 'watches[lit]' is a list of constraints watching 'lit' (will go there if literal becomes true). vec assigns; // The current assignments. vec polarity; // The preferred polarity of each variable. + vec marker; // Is the variable a marker literal vec decision; // Declares if a variable is eligible for selection in the decision heuristic. vec trail; // Assignment stack; stores all assigments made in the order they were made. vec trail_lim; // Separator indices for different decision levels in 'trail'. @@ -220,10 +240,19 @@ protected: bool enqueue (Lit p, CRef from = CRef_Undef); // Test if fact 'p' contradicts current state, enqueue otherwise. CRef propagate (); // Perform unit propagation. Returns possibly conflicting clause. void cancelUntil (int level); // Backtrack until a certain level. - void analyze (CRef confl, vec& out_learnt, int& out_btlevel); // (bt = backtrack) + + enum UIP { + UIP_FIRST, + UIP_LAST + }; + + CVC4::context::CDHashMap, LitHashFunction> d_explanations; + + void storeExplanation (Lit p); // make sure that the explanation of p is cached + void analyze (CRef confl, vec& out_learnt, int& out_btlevel, UIP uip = UIP_FIRST); // (bt = backtrack) void analyzeFinal (Lit p, vec& out_conflict); // COULD THIS BE IMPLEMENTED BY THE ORDINARIY "analyze" BY SOME REASONABLE GENERALIZATION? bool litRedundant (Lit p, uint32_t abstract_levels); // (helper method for 'analyze()') - lbool search (int nof_conflicts); // Search for a given number of conflicts. + lbool search (int nof_conflicts, UIP uip = UIP_FIRST); // Search for a given number of conflicts. lbool solve_ (); // Main solve method (assumptions given in 'assumptions'). void reduceDB (); // Reduce the set of learnt clauses. void removeSatisfied (vec& cs); // Shrink 'cs' to contain only non-satisfied clauses. @@ -275,8 +304,8 @@ protected: //================================================================================================= // Implementation of inline methods: -inline CRef Solver::reason(Var x) const { return vardata[x].reason; } -inline int Solver::level (Var x) const { return vardata[x].level; } +inline CRef Solver::reason(Var x) const { assert(x < vardata.size()); return vardata[x].reason; } +inline int Solver::level (Var x) const { assert(x < vardata.size()); return vardata[x].level; } inline void Solver::insertVarOrder(Var x) { if (!order_heap.inHeap(x) && decision[x]) order_heap.insert(x); } @@ -315,7 +344,7 @@ inline bool Solver::addClause (Lit p) { add_tmp.clear( inline bool Solver::addClause (Lit p, Lit q) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); return addClause_(add_tmp); } inline bool Solver::addClause (Lit p, Lit q, Lit r) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp); } inline bool Solver::locked (const Clause& c) const { return value(c[0]) == l_True && reason(var(c[0])) != CRef_Undef && ca.lea(reason(var(c[0]))) == &c; } -inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); } +inline void Solver::newDecisionLevel() { trail_lim.push(trail.size()); atom_propagations_lim.push(atom_propagations.size()); } inline int Solver::decisionLevel () const { return trail_lim.size(); } inline uint32_t Solver::abstractLevel (Var x) const { return 1 << (level(x) & 31); } diff --git a/src/prop/bvminisat/core/SolverTypes.h b/src/prop/bvminisat/core/SolverTypes.h index 0439a46c4..89ffc8a00 100644 --- a/src/prop/bvminisat/core/SolverTypes.h +++ b/src/prop/bvminisat/core/SolverTypes.h @@ -53,7 +53,6 @@ struct Lit { bool operator < (Lit p) const { return x < p.x; } // '<' makes p, ~p adjacent in the ordering. }; - inline Lit mkLit (Var var, bool sign) { Lit p; p.x = var + var + (int)sign; return p; } inline Lit operator ~(Lit p) { Lit q; q.x = p.x ^ 1; return q; } inline Lit operator ^(Lit p, bool b) { Lit q; q.x = p.x ^ (unsigned int)b; return q; } @@ -61,9 +60,15 @@ inline bool sign (Lit p) { return p.x & 1; } inline int var (Lit p) { return p.x >> 1; } // Mapping Literals to and from compact integers suitable for array indexing: -inline int toInt (Var v) { return v; } -inline int toInt (Lit p) { return p.x; } -inline Lit toLit (int i) { Lit p; p.x = i; return p; } +inline int toInt (Var v) { return v; } +inline int toInt (Lit p) { return p.x; } +inline Lit toLit (int i) { Lit p; p.x = i; return p; } + +struct LitHashFunction { + size_t operator () (const Lit& l) const { + return toInt(l); + } +}; //const Lit lit_Undef = mkLit(var_Undef, false); // }- Useful special constants. //const Lit lit_Error = mkLit(var_Undef, true ); // } diff --git a/src/prop/bvminisat/simp/SimpSolver.cc b/src/prop/bvminisat/simp/SimpSolver.cc index 4af756456..903ffa270 100644 --- a/src/prop/bvminisat/simp/SimpSolver.cc +++ b/src/prop/bvminisat/simp/SimpSolver.cc @@ -43,8 +43,9 @@ static DoubleOption opt_simp_garbage_frac(_cat, "simp-gc-frac", "The fraction of // Constructor/Destructor: -SimpSolver::SimpSolver() : - grow (opt_grow) +SimpSolver::SimpSolver(CVC4::context::Context* c) : + Solver(c) + , grow (opt_grow) , clause_lim (opt_clause_lim) , subsumption_lim (opt_subsumption_lim) , simp_garbage_frac (opt_simp_garbage_frac) @@ -99,7 +100,13 @@ Var SimpSolver::newVar(bool sign, bool dvar, bool freeze) { lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp) { + vec atom_propagations_backup; + atom_propagations.moveTo(atom_propagations_backup); + vec atom_propagations_lim_backup; + atom_propagations_lim.moveTo(atom_propagations_lim_backup); + only_bcp = false; + cancelUntil(0); vec extra_frozen; lbool result = l_True; @@ -128,8 +135,8 @@ lbool SimpSolver::solve_(bool do_simp, bool turn_off_simp) else if (verbosity >= 1) printf("===============================================================================\n"); - if (result == l_True) - extendModel(); + atom_propagations_backup.moveTo(atom_propagations); + atom_propagations_lim_backup.moveTo(atom_propagations_lim); if (do_simp) // Unfreeze the assumptions that were frozen: diff --git a/src/prop/bvminisat/simp/SimpSolver.h b/src/prop/bvminisat/simp/SimpSolver.h index e21a0a9ec..e3ef76212 100644 --- a/src/prop/bvminisat/simp/SimpSolver.h +++ b/src/prop/bvminisat/simp/SimpSolver.h @@ -24,6 +24,7 @@ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWA #include "prop/bvminisat/mtl/Queue.h" #include "prop/bvminisat/core/Solver.h" #include "util/stats.h" +#include "context/context.h" namespace BVMinisat { @@ -34,7 +35,7 @@ class SimpSolver : public Solver { public: // Constructor/Destructor: // - SimpSolver(); + SimpSolver(CVC4::context::Context* c); ~SimpSolver(); // Problem specification: @@ -95,7 +96,8 @@ class SimpSolver : public Solver { int merges; int asymm_lits; int eliminated_vars; - CVC4::TimerStat total_eliminate_time; + CVC4::TimerStat total_eliminate_time; + protected: // Helper structures: @@ -181,12 +183,14 @@ inline bool SimpSolver::addClause (Lit p, Lit q) { add_tmp.clear(); inline bool SimpSolver::addClause (Lit p, Lit q, Lit r) { add_tmp.clear(); add_tmp.push(p); add_tmp.push(q); add_tmp.push(r); return addClause_(add_tmp); } inline void SimpSolver::setFrozen (Var v, bool b) { frozen[v] = (char)b; if (use_simplification && !b) { updateElimHeap(v); } } -inline bool SimpSolver::solve ( bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); return solve_(do_simp, turn_off_simp) == l_True; } +inline bool SimpSolver::solve ( bool do_simp, bool turn_off_simp) { budgetOff(); return solve_(do_simp, turn_off_simp) == l_True; } inline bool SimpSolver::solve (Lit p , bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); return solve_(do_simp, turn_off_simp) == l_True; } inline bool SimpSolver::solve (Lit p, Lit q, bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); return solve_(do_simp, turn_off_simp) == l_True; } inline bool SimpSolver::solve (Lit p, Lit q, Lit r, bool do_simp, bool turn_off_simp) { budgetOff(); assumptions.clear(); assumptions.push(p); assumptions.push(q); assumptions.push(r); return solve_(do_simp, turn_off_simp) == l_True; } -inline bool SimpSolver::solve (const vec& assumps, bool do_simp, bool turn_off_simp){ - budgetOff(); assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp) == l_True; } +inline bool SimpSolver::solve (const vec& assumps, bool do_simp, bool turn_off_simp){ + budgetOff(); assumps.copyTo(assumptions); + return solve_(do_simp, turn_off_simp) == l_True; +} inline lbool SimpSolver::solveLimited (const vec& assumps, bool do_simp, bool turn_off_simp){ assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp); } diff --git a/src/prop/cryptominisat/MTRand/Makefile.in b/src/prop/cryptominisat/MTRand/Makefile.in index 8cc478cdf..1693a70f2 100644 --- a/src/prop/cryptominisat/MTRand/Makefile.in +++ b/src/prop/cryptominisat/MTRand/Makefile.in @@ -34,17 +34,36 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = MTRand +target_triplet = @target@ +subdir = src/prop/cryptominisat/MTRand DIST_COMMON = $(pkgincludesub_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/config/antlr.m4 \ + $(top_srcdir)/config/ax_prog_doxygen.m4 \ + $(top_srcdir)/config/ax_tls.m4 \ + $(top_srcdir)/config/bindings.m4 $(top_srcdir)/config/boost.m4 \ + $(top_srcdir)/config/cudd.m4 $(top_srcdir)/config/cvc4.m4 \ + $(top_srcdir)/config/gcc_version.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/pkg.m4 $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_HEADER = $(top_builddir)/cvc4autoconfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -75,54 +94,128 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ANTLR = @ANTLR@ +ANTLR_HOME = @ANTLR_HOME@ +ANTLR_INCLUDES = @ANTLR_INCLUDES@ +ANTLR_LDFLAGS = @ANTLR_LDFLAGS@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDPATH = @BOOST_LDPATH@ +BOOST_ROOT = @BOOST_ROOT@ +BOOST_THREAD_LDFLAGS = @BOOST_THREAD_LDFLAGS@ +BOOST_THREAD_LDPATH = @BOOST_THREAD_LDPATH@ +BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@ +BUILDING_SHARED = @BUILDING_SHARED@ +BUILDING_STATIC = @BUILDING_STATIC@ +CAMLP4O = @CAMLP4O@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CLN_CFLAGS = @CLN_CFLAGS@ +CLN_LIBS = @CLN_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSHARP_CPPFLAGS = @CSHARP_CPPFLAGS@ +CUDD_CPPFLAGS = @CUDD_CPPFLAGS@ +CUDD_LDFLAGS = @CUDD_LDFLAGS@ +CUDD_LIBS = @CUDD_LIBS@ +CVC4_BINDINGS_LIBRARY_VERSION = @CVC4_BINDINGS_LIBRARY_VERSION@ +CVC4_BUILD_LIBCOMPAT = @CVC4_BUILD_LIBCOMPAT@ +CVC4_COMPAT_LIBRARY_VERSION = @CVC4_COMPAT_LIBRARY_VERSION@ +CVC4_HAS_THREADS = @CVC4_HAS_THREADS@ +CVC4_LANGUAGE_BINDINGS = @CVC4_LANGUAGE_BINDINGS@ +CVC4_LIBRARY_VERSION = @CVC4_LIBRARY_VERSION@ +CVC4_PARSER_LIBRARY_VERSION = @CVC4_PARSER_LIBRARY_VERSION@ +CVC4_TLS = @CVC4_TLS@ +CVC4_TLS_SUPPORTED = @CVC4_TLS_SUPPORTED@ +CVC4_USE_CLN_IMP = @CVC4_USE_CLN_IMP@ +CVC4_USE_GMP_IMP = @CVC4_USE_GMP_IMP@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXTEST = @CXXTEST@ +CXXTESTGEN = @CXXTESTGEN@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DLLTOOL = @DLLTOOL@ +DOXYGEN_EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@ +DOXYGEN_EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@ +DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ +DX_CONFIG = @DX_CONFIG@ +DX_DOCDIR = @DX_DOCDIR@ +DX_DOT = @DX_DOT@ +DX_DOXYGEN = @DX_DOXYGEN@ +DX_DVIPS = @DX_DVIPS@ +DX_EGREP = @DX_EGREP@ +DX_ENV = @DX_ENV@ +DX_FLAG_DX_CURRENT_FEATURE = @DX_FLAG_DX_CURRENT_FEATURE@ +DX_FLAG_chi = @DX_FLAG_chi@ +DX_FLAG_chm = @DX_FLAG_chm@ +DX_FLAG_doc = @DX_FLAG_doc@ +DX_FLAG_dot = @DX_FLAG_dot@ +DX_FLAG_html = @DX_FLAG_html@ +DX_FLAG_man = @DX_FLAG_man@ +DX_FLAG_pdf = @DX_FLAG_pdf@ +DX_FLAG_ps = @DX_FLAG_ps@ +DX_FLAG_rtf = @DX_FLAG_rtf@ +DX_FLAG_xml = @DX_FLAG_xml@ +DX_HHC = @DX_HHC@ +DX_LATEX = @DX_LATEX@ +DX_MAKEINDEX = @DX_MAKEINDEX@ +DX_PDFLATEX = @DX_PDFLATEX@ +DX_PERL = @DX_PERL@ +DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FLAG_VISIBILITY_HIDDEN = @FLAG_VISIBILITY_HIDDEN@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVAC = @JAVAC@ +JAVAH = @JAVAH@ +JAVA_CPPFLAGS = @JAVA_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LFSC = @LFSC@ +LFSCARGS = @LFSCARGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MAN_DATE = @MAN_DATE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OCAMLC = @OCAMLC@ +OCAMLFIND = @OCAMLFIND@ +OCAMLMKTOP = @OCAMLMKTOP@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -133,12 +226,33 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PERL_CPPFLAGS = @PERL_CPPFLAGS@ +PHP_CPPFLAGS = @PHP_CPPFLAGS@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_CONFIG = @PYTHON_CONFIG@ +PYTHON_CXXFLAGS = @PYTHON_CXXFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDE = @PYTHON_INCLUDE@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ +READLINE_LIBS = @READLINE_LIBS@ +RUBY_CPPFLAGS = @RUBY_CPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +STATIC_BINARY = @STATIC_BINARY@ STRIP = @STRIP@ +SWIG = @SWIG@ +TCL_CPPFLAGS = @TCL_CPPFLAGS@ +TEST_CPPFLAGS = @TEST_CPPFLAGS@ +TEST_CXXFLAGS = @TEST_CXXFLAGS@ +TEST_LDFLAGS = @TEST_LDFLAGS@ VERSION = @VERSION@ +WNO_CONVERSION_NULL = @WNO_CONVERSION_NULL@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -178,17 +292,26 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mk_include = @mk_include@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -197,7 +320,7 @@ pkgincludesub_HEADERS = MersenneTwister.h all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -206,9 +329,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu MTRand/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prop/cryptominisat/MTRand/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu MTRand/Makefile + $(AUTOMAKE) --foreign src/prop/cryptominisat/MTRand/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -222,9 +345,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): diff --git a/src/prop/cryptominisat/Makefile.in b/src/prop/cryptominisat/Makefile.in index 2d9ee8bf8..a6806f0b4 100644 --- a/src/prop/cryptominisat/Makefile.in +++ b/src/prop/cryptominisat/Makefile.in @@ -33,21 +33,37 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = . -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure AUTHORS INSTALL NEWS TODO config.guess \ - config.sub depcomp install-sh ltmain.sh missing +target_triplet = @target@ +subdir = src/prop/cryptominisat +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + AUTHORS INSTALL NEWS TODO config.guess config.sub depcomp \ + install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/config/antlr.m4 \ + $(top_srcdir)/config/ax_prog_doxygen.m4 \ + $(top_srcdir)/config/ax_tls.m4 \ + $(top_srcdir)/config/bindings.m4 $(top_srcdir)/config/boost.m4 \ + $(top_srcdir)/config/cudd.m4 $(top_srcdir)/config/cvc4.m4 \ + $(top_srcdir)/config/gcc_version.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/pkg.m4 $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = config.h +CONFIG_HEADER = $(top_builddir)/cvc4autoconfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -61,17 +77,11 @@ RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir dist dist-all distcheck + distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ @@ -97,60 +107,130 @@ am__relativize = \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ANTLR = @ANTLR@ +ANTLR_HOME = @ANTLR_HOME@ +ANTLR_INCLUDES = @ANTLR_INCLUDES@ +ANTLR_LDFLAGS = @ANTLR_LDFLAGS@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDPATH = @BOOST_LDPATH@ +BOOST_ROOT = @BOOST_ROOT@ +BOOST_THREAD_LDFLAGS = @BOOST_THREAD_LDFLAGS@ +BOOST_THREAD_LDPATH = @BOOST_THREAD_LDPATH@ +BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@ +BUILDING_SHARED = @BUILDING_SHARED@ +BUILDING_STATIC = @BUILDING_STATIC@ +CAMLP4O = @CAMLP4O@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CLN_CFLAGS = @CLN_CFLAGS@ +CLN_LIBS = @CLN_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSHARP_CPPFLAGS = @CSHARP_CPPFLAGS@ +CUDD_CPPFLAGS = @CUDD_CPPFLAGS@ +CUDD_LDFLAGS = @CUDD_LDFLAGS@ +CUDD_LIBS = @CUDD_LIBS@ +CVC4_BINDINGS_LIBRARY_VERSION = @CVC4_BINDINGS_LIBRARY_VERSION@ +CVC4_BUILD_LIBCOMPAT = @CVC4_BUILD_LIBCOMPAT@ +CVC4_COMPAT_LIBRARY_VERSION = @CVC4_COMPAT_LIBRARY_VERSION@ +CVC4_HAS_THREADS = @CVC4_HAS_THREADS@ +CVC4_LANGUAGE_BINDINGS = @CVC4_LANGUAGE_BINDINGS@ +CVC4_LIBRARY_VERSION = @CVC4_LIBRARY_VERSION@ +CVC4_PARSER_LIBRARY_VERSION = @CVC4_PARSER_LIBRARY_VERSION@ +CVC4_TLS = @CVC4_TLS@ +CVC4_TLS_SUPPORTED = @CVC4_TLS_SUPPORTED@ +CVC4_USE_CLN_IMP = @CVC4_USE_CLN_IMP@ +CVC4_USE_GMP_IMP = @CVC4_USE_GMP_IMP@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXTEST = @CXXTEST@ +CXXTESTGEN = @CXXTESTGEN@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DLLTOOL = @DLLTOOL@ +DOXYGEN_EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@ +DOXYGEN_EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@ +DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ +DX_CONFIG = @DX_CONFIG@ +DX_DOCDIR = @DX_DOCDIR@ +DX_DOT = @DX_DOT@ +DX_DOXYGEN = @DX_DOXYGEN@ +DX_DVIPS = @DX_DVIPS@ +DX_EGREP = @DX_EGREP@ +DX_ENV = @DX_ENV@ +DX_FLAG_DX_CURRENT_FEATURE = @DX_FLAG_DX_CURRENT_FEATURE@ +DX_FLAG_chi = @DX_FLAG_chi@ +DX_FLAG_chm = @DX_FLAG_chm@ +DX_FLAG_doc = @DX_FLAG_doc@ +DX_FLAG_dot = @DX_FLAG_dot@ +DX_FLAG_html = @DX_FLAG_html@ +DX_FLAG_man = @DX_FLAG_man@ +DX_FLAG_pdf = @DX_FLAG_pdf@ +DX_FLAG_ps = @DX_FLAG_ps@ +DX_FLAG_rtf = @DX_FLAG_rtf@ +DX_FLAG_xml = @DX_FLAG_xml@ +DX_HHC = @DX_HHC@ +DX_LATEX = @DX_LATEX@ +DX_MAKEINDEX = @DX_MAKEINDEX@ +DX_PDFLATEX = @DX_PDFLATEX@ +DX_PERL = @DX_PERL@ +DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FLAG_VISIBILITY_HIDDEN = @FLAG_VISIBILITY_HIDDEN@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVAC = @JAVAC@ +JAVAH = @JAVAH@ +JAVA_CPPFLAGS = @JAVA_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LFSC = @LFSC@ +LFSCARGS = @LFSCARGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MAN_DATE = @MAN_DATE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OCAMLC = @OCAMLC@ +OCAMLFIND = @OCAMLFIND@ +OCAMLMKTOP = @OCAMLMKTOP@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -161,12 +241,33 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PERL_CPPFLAGS = @PERL_CPPFLAGS@ +PHP_CPPFLAGS = @PHP_CPPFLAGS@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_CONFIG = @PYTHON_CONFIG@ +PYTHON_CXXFLAGS = @PYTHON_CXXFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDE = @PYTHON_INCLUDE@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ +READLINE_LIBS = @READLINE_LIBS@ +RUBY_CPPFLAGS = @RUBY_CPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +STATIC_BINARY = @STATIC_BINARY@ STRIP = @STRIP@ +SWIG = @SWIG@ +TCL_CPPFLAGS = @TCL_CPPFLAGS@ +TEST_CPPFLAGS = @TEST_CPPFLAGS@ +TEST_CXXFLAGS = @TEST_CXXFLAGS@ +TEST_LDFLAGS = @TEST_LDFLAGS@ VERSION = @VERSION@ +WNO_CONVERSION_NULL = @WNO_CONVERSION_NULL@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -206,17 +307,26 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mk_include = @mk_include@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -229,71 +339,46 @@ SUBDIRS = Solver mtl MTRand man EXTRA_DIST = HOWTO_VisualCpp HOWTO_MinGW32 \ LICENSE-GPL LICENSE-MIT TODO -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive +all: all-recursive .SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prop/cryptominisat/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + $(AUTOMAKE) --foreign src/prop/cryptominisat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 - mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool config.lt - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -374,7 +459,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) mkid -fID $$unique tags: TAGS -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ @@ -391,7 +476,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -409,9 +494,9 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ fi; \ fi ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -430,8 +515,6 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -489,124 +572,9 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 check-am: all-am check: check-recursive -all-am: Makefile config.h all-local +all-am: Makefile all-local installdirs: installdirs-recursive installdirs-am: install: install-recursive @@ -639,10 +607,8 @@ clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr \ - distclean-libtool distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -685,8 +651,6 @@ install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -704,25 +668,22 @@ ps-am: uninstall-am: -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am all-local am--refresh check check-am clean \ - clean-generic clean-libtool ctags ctags-recursive dist \ - dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-generic \ - distclean-hdr distclean-libtool distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am + all all-am all-local check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive distclean \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am all-local: Solver diff --git a/src/prop/cryptominisat/Solver/Makefile.in b/src/prop/cryptominisat/Solver/Makefile.in index dd524fba2..02344edd7 100644 --- a/src/prop/cryptominisat/Solver/Makefile.in +++ b/src/prop/cryptominisat/Solver/Makefile.in @@ -36,16 +36,29 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +target_triplet = @target@ bin_PROGRAMS = cryptominisat$(EXEEXT) -subdir = Solver +subdir = src/prop/cryptominisat/Solver DIST_COMMON = $(pkgincludesub_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/config/antlr.m4 \ + $(top_srcdir)/config/ax_prog_doxygen.m4 \ + $(top_srcdir)/config/ax_tls.m4 \ + $(top_srcdir)/config/bindings.m4 $(top_srcdir)/config/boost.m4 \ + $(top_srcdir)/config/cudd.m4 $(top_srcdir)/config/cvc4.m4 \ + $(top_srcdir)/config/gcc_version.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/pkg.m4 $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_HEADER = $(top_builddir)/cvc4autoconfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -81,29 +94,47 @@ am_libcryptominisat_la_OBJECTS = ClauseCleaner.lo FailedLitSearcher.lo \ ClauseVivifier.lo CompleteDetachReattacher.lo DimacsParser.lo \ OnlyNonLearntBins.lo SolverConf.lo DataSync.lo BothCache.lo libcryptominisat_la_OBJECTS = $(am_libcryptominisat_la_OBJECTS) -libcryptominisat_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(libcryptominisat_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libcryptominisat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(libcryptominisat_la_LDFLAGS) \ + $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) am_cryptominisat_OBJECTS = Main.$(OBJEXT) cryptominisat_OBJECTS = $(am_cryptominisat_OBJECTS) cryptominisat_DEPENDENCIES = libcryptominisat.la -cryptominisat_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(cryptominisat_LDFLAGS) $(LDFLAGS) -o $@ +cryptominisat_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ + $(AM_CXXFLAGS) $(CXXFLAGS) $(cryptominisat_LDFLAGS) $(LDFLAGS) \ + -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp +depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) +AM_V_CXX = $(am__v_CXX_$(V)) +am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY)) +am__v_CXX_0 = @echo " CXX " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CXXLD = $(am__v_CXXLD_$(V)) +am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CXXLD_0 = @echo " CXXLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libcryptominisat_la_SOURCES) $(cryptominisat_SOURCES) DIST_SOURCES = $(libcryptominisat_la_SOURCES) $(cryptominisat_SOURCES) HEADERS = $(pkgincludesub_HEADERS) @@ -112,54 +143,128 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ANTLR = @ANTLR@ +ANTLR_HOME = @ANTLR_HOME@ +ANTLR_INCLUDES = @ANTLR_INCLUDES@ +ANTLR_LDFLAGS = @ANTLR_LDFLAGS@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDPATH = @BOOST_LDPATH@ +BOOST_ROOT = @BOOST_ROOT@ +BOOST_THREAD_LDFLAGS = @BOOST_THREAD_LDFLAGS@ +BOOST_THREAD_LDPATH = @BOOST_THREAD_LDPATH@ +BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@ +BUILDING_SHARED = @BUILDING_SHARED@ +BUILDING_STATIC = @BUILDING_STATIC@ +CAMLP4O = @CAMLP4O@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CLN_CFLAGS = @CLN_CFLAGS@ +CLN_LIBS = @CLN_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSHARP_CPPFLAGS = @CSHARP_CPPFLAGS@ +CUDD_CPPFLAGS = @CUDD_CPPFLAGS@ +CUDD_LDFLAGS = @CUDD_LDFLAGS@ +CUDD_LIBS = @CUDD_LIBS@ +CVC4_BINDINGS_LIBRARY_VERSION = @CVC4_BINDINGS_LIBRARY_VERSION@ +CVC4_BUILD_LIBCOMPAT = @CVC4_BUILD_LIBCOMPAT@ +CVC4_COMPAT_LIBRARY_VERSION = @CVC4_COMPAT_LIBRARY_VERSION@ +CVC4_HAS_THREADS = @CVC4_HAS_THREADS@ +CVC4_LANGUAGE_BINDINGS = @CVC4_LANGUAGE_BINDINGS@ +CVC4_LIBRARY_VERSION = @CVC4_LIBRARY_VERSION@ +CVC4_PARSER_LIBRARY_VERSION = @CVC4_PARSER_LIBRARY_VERSION@ +CVC4_TLS = @CVC4_TLS@ +CVC4_TLS_SUPPORTED = @CVC4_TLS_SUPPORTED@ +CVC4_USE_CLN_IMP = @CVC4_USE_CLN_IMP@ +CVC4_USE_GMP_IMP = @CVC4_USE_GMP_IMP@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXTEST = @CXXTEST@ +CXXTESTGEN = @CXXTESTGEN@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DLLTOOL = @DLLTOOL@ +DOXYGEN_EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@ +DOXYGEN_EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@ +DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ +DX_CONFIG = @DX_CONFIG@ +DX_DOCDIR = @DX_DOCDIR@ +DX_DOT = @DX_DOT@ +DX_DOXYGEN = @DX_DOXYGEN@ +DX_DVIPS = @DX_DVIPS@ +DX_EGREP = @DX_EGREP@ +DX_ENV = @DX_ENV@ +DX_FLAG_DX_CURRENT_FEATURE = @DX_FLAG_DX_CURRENT_FEATURE@ +DX_FLAG_chi = @DX_FLAG_chi@ +DX_FLAG_chm = @DX_FLAG_chm@ +DX_FLAG_doc = @DX_FLAG_doc@ +DX_FLAG_dot = @DX_FLAG_dot@ +DX_FLAG_html = @DX_FLAG_html@ +DX_FLAG_man = @DX_FLAG_man@ +DX_FLAG_pdf = @DX_FLAG_pdf@ +DX_FLAG_ps = @DX_FLAG_ps@ +DX_FLAG_rtf = @DX_FLAG_rtf@ +DX_FLAG_xml = @DX_FLAG_xml@ +DX_HHC = @DX_HHC@ +DX_LATEX = @DX_LATEX@ +DX_MAKEINDEX = @DX_MAKEINDEX@ +DX_PDFLATEX = @DX_PDFLATEX@ +DX_PERL = @DX_PERL@ +DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FLAG_VISIBILITY_HIDDEN = @FLAG_VISIBILITY_HIDDEN@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVAC = @JAVAC@ +JAVAH = @JAVAH@ +JAVA_CPPFLAGS = @JAVA_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LFSC = @LFSC@ +LFSCARGS = @LFSCARGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MAN_DATE = @MAN_DATE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OCAMLC = @OCAMLC@ +OCAMLFIND = @OCAMLFIND@ +OCAMLMKTOP = @OCAMLMKTOP@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -170,12 +275,33 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PERL_CPPFLAGS = @PERL_CPPFLAGS@ +PHP_CPPFLAGS = @PHP_CPPFLAGS@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_CONFIG = @PYTHON_CONFIG@ +PYTHON_CXXFLAGS = @PYTHON_CXXFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDE = @PYTHON_INCLUDE@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ +READLINE_LIBS = @READLINE_LIBS@ +RUBY_CPPFLAGS = @RUBY_CPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +STATIC_BINARY = @STATIC_BINARY@ STRIP = @STRIP@ +SWIG = @SWIG@ +TCL_CPPFLAGS = @TCL_CPPFLAGS@ +TEST_CPPFLAGS = @TEST_CPPFLAGS@ +TEST_CXXFLAGS = @TEST_CXXFLAGS@ +TEST_LDFLAGS = @TEST_LDFLAGS@ VERSION = @VERSION@ +WNO_CONVERSION_NULL = @WNO_CONVERSION_NULL@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -215,17 +341,26 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mk_include = @mk_include@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -263,7 +398,7 @@ all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -272,9 +407,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Solver/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prop/cryptominisat/Solver/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu Solver/Makefile + $(AUTOMAKE) --foreign src/prop/cryptominisat/Solver/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -288,9 +423,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @@ -325,7 +460,7 @@ clean-libLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libcryptominisat.la: $(libcryptominisat_la_OBJECTS) $(libcryptominisat_la_DEPENDENCIES) - $(libcryptominisat_la_LINK) -rpath $(libdir) $(libcryptominisat_la_OBJECTS) $(libcryptominisat_la_LIBADD) $(LIBS) + $(AM_V_CXXLD)$(libcryptominisat_la_LINK) -rpath $(libdir) $(libcryptominisat_la_OBJECTS) $(libcryptominisat_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @@ -371,7 +506,7 @@ clean-binPROGRAMS: rm -f $$list cryptominisat$(EXEEXT): $(cryptominisat_OBJECTS) $(cryptominisat_DEPENDENCIES) @rm -f cryptominisat$(EXEEXT) - $(cryptominisat_LINK) $(cryptominisat_OBJECTS) $(cryptominisat_LDADD) $(LIBS) + $(AM_V_CXXLD)$(cryptominisat_LINK) $(cryptominisat_OBJECTS) $(cryptominisat_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -406,22 +541,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XorSubsumer.Plo@am__quote@ .cpp.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< diff --git a/src/prop/cryptominisat/man/Makefile.in b/src/prop/cryptominisat/man/Makefile.in index 5542511eb..7dc705cf1 100644 --- a/src/prop/cryptominisat/man/Makefile.in +++ b/src/prop/cryptominisat/man/Makefile.in @@ -33,16 +33,35 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = man +target_triplet = @target@ +subdir = src/prop/cryptominisat/man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/config/antlr.m4 \ + $(top_srcdir)/config/ax_prog_doxygen.m4 \ + $(top_srcdir)/config/ax_tls.m4 \ + $(top_srcdir)/config/bindings.m4 $(top_srcdir)/config/boost.m4 \ + $(top_srcdir)/config/cudd.m4 $(top_srcdir)/config/cvc4.m4 \ + $(top_srcdir)/config/gcc_version.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/pkg.m4 $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_HEADER = $(top_builddir)/cvc4autoconfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -73,54 +92,128 @@ MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ANTLR = @ANTLR@ +ANTLR_HOME = @ANTLR_HOME@ +ANTLR_INCLUDES = @ANTLR_INCLUDES@ +ANTLR_LDFLAGS = @ANTLR_LDFLAGS@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDPATH = @BOOST_LDPATH@ +BOOST_ROOT = @BOOST_ROOT@ +BOOST_THREAD_LDFLAGS = @BOOST_THREAD_LDFLAGS@ +BOOST_THREAD_LDPATH = @BOOST_THREAD_LDPATH@ +BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@ +BUILDING_SHARED = @BUILDING_SHARED@ +BUILDING_STATIC = @BUILDING_STATIC@ +CAMLP4O = @CAMLP4O@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CLN_CFLAGS = @CLN_CFLAGS@ +CLN_LIBS = @CLN_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSHARP_CPPFLAGS = @CSHARP_CPPFLAGS@ +CUDD_CPPFLAGS = @CUDD_CPPFLAGS@ +CUDD_LDFLAGS = @CUDD_LDFLAGS@ +CUDD_LIBS = @CUDD_LIBS@ +CVC4_BINDINGS_LIBRARY_VERSION = @CVC4_BINDINGS_LIBRARY_VERSION@ +CVC4_BUILD_LIBCOMPAT = @CVC4_BUILD_LIBCOMPAT@ +CVC4_COMPAT_LIBRARY_VERSION = @CVC4_COMPAT_LIBRARY_VERSION@ +CVC4_HAS_THREADS = @CVC4_HAS_THREADS@ +CVC4_LANGUAGE_BINDINGS = @CVC4_LANGUAGE_BINDINGS@ +CVC4_LIBRARY_VERSION = @CVC4_LIBRARY_VERSION@ +CVC4_PARSER_LIBRARY_VERSION = @CVC4_PARSER_LIBRARY_VERSION@ +CVC4_TLS = @CVC4_TLS@ +CVC4_TLS_SUPPORTED = @CVC4_TLS_SUPPORTED@ +CVC4_USE_CLN_IMP = @CVC4_USE_CLN_IMP@ +CVC4_USE_GMP_IMP = @CVC4_USE_GMP_IMP@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXTEST = @CXXTEST@ +CXXTESTGEN = @CXXTESTGEN@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DLLTOOL = @DLLTOOL@ +DOXYGEN_EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@ +DOXYGEN_EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@ +DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ +DX_CONFIG = @DX_CONFIG@ +DX_DOCDIR = @DX_DOCDIR@ +DX_DOT = @DX_DOT@ +DX_DOXYGEN = @DX_DOXYGEN@ +DX_DVIPS = @DX_DVIPS@ +DX_EGREP = @DX_EGREP@ +DX_ENV = @DX_ENV@ +DX_FLAG_DX_CURRENT_FEATURE = @DX_FLAG_DX_CURRENT_FEATURE@ +DX_FLAG_chi = @DX_FLAG_chi@ +DX_FLAG_chm = @DX_FLAG_chm@ +DX_FLAG_doc = @DX_FLAG_doc@ +DX_FLAG_dot = @DX_FLAG_dot@ +DX_FLAG_html = @DX_FLAG_html@ +DX_FLAG_man = @DX_FLAG_man@ +DX_FLAG_pdf = @DX_FLAG_pdf@ +DX_FLAG_ps = @DX_FLAG_ps@ +DX_FLAG_rtf = @DX_FLAG_rtf@ +DX_FLAG_xml = @DX_FLAG_xml@ +DX_HHC = @DX_HHC@ +DX_LATEX = @DX_LATEX@ +DX_MAKEINDEX = @DX_MAKEINDEX@ +DX_PDFLATEX = @DX_PDFLATEX@ +DX_PERL = @DX_PERL@ +DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FLAG_VISIBILITY_HIDDEN = @FLAG_VISIBILITY_HIDDEN@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVAC = @JAVAC@ +JAVAH = @JAVAH@ +JAVA_CPPFLAGS = @JAVA_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LFSC = @LFSC@ +LFSCARGS = @LFSCARGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MAN_DATE = @MAN_DATE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OCAMLC = @OCAMLC@ +OCAMLFIND = @OCAMLFIND@ +OCAMLMKTOP = @OCAMLMKTOP@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -131,12 +224,33 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PERL_CPPFLAGS = @PERL_CPPFLAGS@ +PHP_CPPFLAGS = @PHP_CPPFLAGS@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_CONFIG = @PYTHON_CONFIG@ +PYTHON_CXXFLAGS = @PYTHON_CXXFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDE = @PYTHON_INCLUDE@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ +READLINE_LIBS = @READLINE_LIBS@ +RUBY_CPPFLAGS = @RUBY_CPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +STATIC_BINARY = @STATIC_BINARY@ STRIP = @STRIP@ +SWIG = @SWIG@ +TCL_CPPFLAGS = @TCL_CPPFLAGS@ +TEST_CPPFLAGS = @TEST_CPPFLAGS@ +TEST_CXXFLAGS = @TEST_CXXFLAGS@ +TEST_LDFLAGS = @TEST_LDFLAGS@ VERSION = @VERSION@ +WNO_CONVERSION_NULL = @WNO_CONVERSION_NULL@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -176,17 +290,26 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mk_include = @mk_include@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -195,7 +318,7 @@ EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -204,9 +327,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prop/cryptominisat/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu man/Makefile + $(AUTOMAKE) --foreign src/prop/cryptominisat/man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -220,9 +343,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): diff --git a/src/prop/cryptominisat/mtl/Makefile.in b/src/prop/cryptominisat/mtl/Makefile.in index eb9b73e19..7d8c8ce1b 100644 --- a/src/prop/cryptominisat/mtl/Makefile.in +++ b/src/prop/cryptominisat/mtl/Makefile.in @@ -34,17 +34,36 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = mtl +target_triplet = @target@ +subdir = src/prop/cryptominisat/mtl DIST_COMMON = $(pkgincludesub_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/config/antlr.m4 \ + $(top_srcdir)/config/ax_prog_doxygen.m4 \ + $(top_srcdir)/config/ax_tls.m4 \ + $(top_srcdir)/config/bindings.m4 $(top_srcdir)/config/boost.m4 \ + $(top_srcdir)/config/cudd.m4 $(top_srcdir)/config/cvc4.m4 \ + $(top_srcdir)/config/gcc_version.m4 \ + $(top_srcdir)/config/libtool.m4 \ + $(top_srcdir)/config/ltoptions.m4 \ + $(top_srcdir)/config/ltsugar.m4 \ + $(top_srcdir)/config/ltversion.m4 \ + $(top_srcdir)/config/lt~obsolete.m4 \ + $(top_srcdir)/config/pkg.m4 $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_HEADER = $(top_builddir)/cvc4autoconfig.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -75,54 +94,128 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +ANTLR = @ANTLR@ +ANTLR_HOME = @ANTLR_HOME@ +ANTLR_INCLUDES = @ANTLR_INCLUDES@ +ANTLR_LDFLAGS = @ANTLR_LDFLAGS@ AR = @AR@ +AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ +BOOST_LDPATH = @BOOST_LDPATH@ +BOOST_ROOT = @BOOST_ROOT@ +BOOST_THREAD_LDFLAGS = @BOOST_THREAD_LDFLAGS@ +BOOST_THREAD_LDPATH = @BOOST_THREAD_LDPATH@ +BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@ +BUILDING_SHARED = @BUILDING_SHARED@ +BUILDING_STATIC = @BUILDING_STATIC@ +CAMLP4O = @CAMLP4O@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ +CLN_CFLAGS = @CLN_CFLAGS@ +CLN_LIBS = @CLN_LIBS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ +CSHARP_CPPFLAGS = @CSHARP_CPPFLAGS@ +CUDD_CPPFLAGS = @CUDD_CPPFLAGS@ +CUDD_LDFLAGS = @CUDD_LDFLAGS@ +CUDD_LIBS = @CUDD_LIBS@ +CVC4_BINDINGS_LIBRARY_VERSION = @CVC4_BINDINGS_LIBRARY_VERSION@ +CVC4_BUILD_LIBCOMPAT = @CVC4_BUILD_LIBCOMPAT@ +CVC4_COMPAT_LIBRARY_VERSION = @CVC4_COMPAT_LIBRARY_VERSION@ +CVC4_HAS_THREADS = @CVC4_HAS_THREADS@ +CVC4_LANGUAGE_BINDINGS = @CVC4_LANGUAGE_BINDINGS@ +CVC4_LIBRARY_VERSION = @CVC4_LIBRARY_VERSION@ +CVC4_PARSER_LIBRARY_VERSION = @CVC4_PARSER_LIBRARY_VERSION@ +CVC4_TLS = @CVC4_TLS@ +CVC4_TLS_SUPPORTED = @CVC4_TLS_SUPPORTED@ +CVC4_USE_CLN_IMP = @CVC4_USE_CLN_IMP@ +CVC4_USE_GMP_IMP = @CVC4_USE_GMP_IMP@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ +CXXTEST = @CXXTEST@ +CXXTESTGEN = @CXXTESTGEN@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DLLTOOL = @DLLTOOL@ +DOXYGEN_EXTRACT_PRIVATE = @DOXYGEN_EXTRACT_PRIVATE@ +DOXYGEN_EXTRACT_STATIC = @DOXYGEN_EXTRACT_STATIC@ +DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ +DX_CONFIG = @DX_CONFIG@ +DX_DOCDIR = @DX_DOCDIR@ +DX_DOT = @DX_DOT@ +DX_DOXYGEN = @DX_DOXYGEN@ +DX_DVIPS = @DX_DVIPS@ +DX_EGREP = @DX_EGREP@ +DX_ENV = @DX_ENV@ +DX_FLAG_DX_CURRENT_FEATURE = @DX_FLAG_DX_CURRENT_FEATURE@ +DX_FLAG_chi = @DX_FLAG_chi@ +DX_FLAG_chm = @DX_FLAG_chm@ +DX_FLAG_doc = @DX_FLAG_doc@ +DX_FLAG_dot = @DX_FLAG_dot@ +DX_FLAG_html = @DX_FLAG_html@ +DX_FLAG_man = @DX_FLAG_man@ +DX_FLAG_pdf = @DX_FLAG_pdf@ +DX_FLAG_ps = @DX_FLAG_ps@ +DX_FLAG_rtf = @DX_FLAG_rtf@ +DX_FLAG_xml = @DX_FLAG_xml@ +DX_HHC = @DX_HHC@ +DX_LATEX = @DX_LATEX@ +DX_MAKEINDEX = @DX_MAKEINDEX@ +DX_PDFLATEX = @DX_PDFLATEX@ +DX_PERL = @DX_PERL@ +DX_PROJECT = @DX_PROJECT@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FLAG_VISIBILITY_HIDDEN = @FLAG_VISIBILITY_HIDDEN@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVAC = @JAVAC@ +JAVAH = @JAVAH@ +JAVA_CPPFLAGS = @JAVA_CPPFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ +LFSC = @LFSC@ +LFSCARGS = @LFSCARGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ +MAN_DATE = @MAN_DATE@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OPENMP_CXXFLAGS = @OPENMP_CXXFLAGS@ +OCAMLC = @OCAMLC@ +OCAMLFIND = @OCAMLFIND@ +OCAMLMKTOP = @OCAMLMKTOP@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -133,12 +226,33 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PERL_CPPFLAGS = @PERL_CPPFLAGS@ +PHP_CPPFLAGS = @PHP_CPPFLAGS@ +PKG_CONFIG = @PKG_CONFIG@ +PYTHON = @PYTHON@ +PYTHON_CONFIG = @PYTHON_CONFIG@ +PYTHON_CXXFLAGS = @PYTHON_CXXFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDE = @PYTHON_INCLUDE@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ +READLINE_LIBS = @READLINE_LIBS@ +RUBY_CPPFLAGS = @RUBY_CPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +STATIC_BINARY = @STATIC_BINARY@ STRIP = @STRIP@ +SWIG = @SWIG@ +TCL_CPPFLAGS = @TCL_CPPFLAGS@ +TEST_CPPFLAGS = @TEST_CPPFLAGS@ +TEST_CXXFLAGS = @TEST_CXXFLAGS@ +TEST_LDFLAGS = @TEST_LDFLAGS@ VERSION = @VERSION@ +WNO_CONVERSION_NULL = @WNO_CONVERSION_NULL@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -178,17 +292,26 @@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ +mk_include = @mk_include@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ +target = @target@ target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -197,7 +320,7 @@ pkgincludesub_HEADERS = Alg.h Heap.h Vec.h all: all-am .SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -206,9 +329,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mtl/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/prop/cryptominisat/mtl/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu mtl/Makefile + $(AUTOMAKE) --foreign src/prop/cryptominisat/mtl/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -222,9 +345,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(top_srcdir)/configure: $(am__configure_deps) +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): diff --git a/src/prop/minisat/core/Solver.cc b/src/prop/minisat/core/Solver.cc index 3a16b0d19..c602d8b9c 100644 --- a/src/prop/minisat/core/Solver.cc +++ b/src/prop/minisat/core/Solver.cc @@ -195,6 +195,8 @@ CRef Solver::reason(Var x) { if (varLevel > explLevel) { explLevel = varLevel; } + Assert(value(explanation[i]) != l_Undef); + Assert(i == 0 || trail_index(var(explanation[0])) > trail_index(var(explanation[i]))); } // Construct the reason (level 0) diff --git a/src/prop/sat_solver.h b/src/prop/sat_solver.h index f18335048..4fe24fc60 100644 --- a/src/prop/sat_solver.h +++ b/src/prop/sat_solver.h @@ -72,11 +72,20 @@ public: class BVSatSolverInterface: public SatSolver { public: - virtual SatValue solve(const context::CDList & assumptions) = 0; virtual void markUnremovable(SatLiteral lit) = 0; virtual void getUnsatCore(SatClause& unsatCore) = 0; + + virtual void addMarkerLiteral(SatLiteral lit) = 0; + + virtual bool getPropagations(std::vector& propagations) = 0; + + virtual void explainPropagation(SatLiteral lit, std::vector& explanation) = 0; + + virtual SatValue assertAssumption(SatLiteral lit, bool propagate = false) = 0; + + virtual void popAssumption() = 0; }; diff --git a/src/prop/sat_solver_factory.cpp b/src/prop/sat_solver_factory.cpp index e6ae5d1e7..3b048af47 100644 --- a/src/prop/sat_solver_factory.cpp +++ b/src/prop/sat_solver_factory.cpp @@ -27,8 +27,8 @@ namespace prop { template class SatSolverConstructor; template class SatSolverConstructor; -BVSatSolverInterface* SatSolverFactory::createMinisat() { - return new BVMinisatSatSolver(); +BVSatSolverInterface* SatSolverFactory::createMinisat(context::Context* mainSatContext) { + return new BVMinisatSatSolver(mainSatContext); } DPLLSatSolverInterface* SatSolverFactory::createDPLLMinisat() { diff --git a/src/prop/sat_solver_factory.h b/src/prop/sat_solver_factory.h index 367397fdf..379141cc6 100644 --- a/src/prop/sat_solver_factory.h +++ b/src/prop/sat_solver_factory.h @@ -30,7 +30,7 @@ namespace prop { class SatSolverFactory { public: - static BVSatSolverInterface* createMinisat(); + static BVSatSolverInterface* createMinisat(context::Context* mainSatContext); static DPLLSatSolverInterface* createDPLLMinisat(); static SatSolver* create(const char* id); diff --git a/src/theory/bv/bitblast_strategies.cpp b/src/theory/bv/bitblast_strategies.cpp index c0855122e..edaf8c154 100644 --- a/src/theory/bv/bitblast_strategies.cpp +++ b/src/theory/bv/bitblast_strategies.cpp @@ -106,7 +106,7 @@ void inline makeZero(Bits& bits, unsigned width) { * @return the carry-out */ Node inline rippleCarryAdder(const Bits&a, const Bits& b, Bits& res, Node carry) { - Assert(res.size() == 0 && a.size() == b.size()); + Assert(a.size() == b.size() && res.size() == 0); for (unsigned i = 0 ; i < a.size(); ++i) { Node sum = mkXor(mkXor(a[i], b[i]), carry); @@ -119,6 +119,24 @@ Node inline rippleCarryAdder(const Bits&a, const Bits& b, Bits& res, Node carry) return carry; } +inline void shiftAddMultiplier(const Bits&a, const Bits&b, Bits& res) { + + for (unsigned i = 0; i < a.size(); ++i) { + res.push_back(mkNode(kind::AND, b[0], a[i])); + } + + for(unsigned k = 1; k < res.size(); ++k) { + Node carry_in = mkFalse(); + Node carry_out; + for(unsigned j = 0; j < res.size() -k; ++j) { + Node aj = mkAnd(a[j], b[k]); + carry_out = mkOr(mkAnd(res[j+k], aj), + mkAnd( mkXor(res[j+k], aj), carry_in)); + res[j+k] = mkXor(mkXor(res[j+k], aj), carry_in); + carry_in = carry_out; + } + } +} Node inline uLessThanBB(const Bits&a, const Bits& b, bool orEqual) { Assert (a.size() && b.size()); @@ -175,13 +193,13 @@ Node inline sLessThanBB(const Bits&a, const Bits& b, bool orEqual) { Node UndefinedAtomBBStrategy(TNode node, Bitblaster* bb) { - Trace("bitvector") << "TheoryBV::Bitblaster Undefined bitblasting strategy for kind: " + BVDebug("bitvector") << "TheoryBV::Bitblaster Undefined bitblasting strategy for kind: " << node.getKind() << "\n"; Unreachable(); } Node DefaultEqBB(TNode node, Bitblaster* bb) { - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Assert(node.getKind() == kind::EQUAL); Bits lhs, rhs; @@ -203,7 +221,7 @@ Node DefaultEqBB(TNode node, Bitblaster* bb) { Node AdderUltBB(TNode node, Bitblaster* bb) { - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_ULT); Bits a, b; bb->bbTerm(node[0], a); @@ -225,7 +243,7 @@ Node AdderUltBB(TNode node, Bitblaster* bb) { Node DefaultUltBB(TNode node, Bitblaster* bb) { - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_ULT); Bits a, b; bb->bbTerm(node[0], a); @@ -238,7 +256,7 @@ Node DefaultUltBB(TNode node, Bitblaster* bb) { } Node DefaultUleBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_ULE); Bits a, b; @@ -251,31 +269,31 @@ Node DefaultUleBB(TNode node, Bitblaster* bb){ } Node DefaultUgtBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // should be rewritten Unimplemented(); } Node DefaultUgeBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // should be rewritten Unimplemented(); } // Node DefaultSltBB(TNode node, Bitblaster* bb){ -// Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; +// BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // // shoudl be rewritten in terms of ult // Unimplemented(); // } // Node DefaultSleBB(TNode node, Bitblaster* bb){ -// Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; +// BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // // shoudl be rewritten in terms of ule // Unimplemented(); // } Node DefaultSltBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Bits a, b; bb->bbTerm(node[0], a); @@ -287,7 +305,7 @@ Node DefaultSltBB(TNode node, Bitblaster* bb){ } Node DefaultSleBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; Bits a, b; bb->bbTerm(node[0], a); @@ -299,13 +317,13 @@ Node DefaultSleBB(TNode node, Bitblaster* bb){ } Node DefaultSgtBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // should be rewritten Unimplemented(); } Node DefaultSgeBB(TNode node, Bitblaster* bb){ - Debug("bitvector-bb") << "Bitblasting node " << node << "\n"; + BVDebug("bitvector-bb") << "Bitblasting node " << node << "\n"; // should be rewritten Unimplemented(); } @@ -314,7 +332,7 @@ Node DefaultSgeBB(TNode node, Bitblaster* bb){ /// Term bitblasting strategies void UndefinedTermBBStrategy(TNode node, Bits& bits, Bitblaster* bb) { - Trace("bitvector") << "theory::bv:: Undefined bitblasting strategy for kind: " + BVDebug("bitvector") << "theory::bv:: Undefined bitblasting strategy for kind: " << node.getKind() << "\n"; Unreachable(); } @@ -327,12 +345,12 @@ void DefaultVarBB (TNode node, Bits& bits, Bitblaster* bb) { bits.push_back(utils::mkBitOf(node, i)); } - Debug("bitvector-bb") << "theory::bv::DefaultVarBB bitblasting " << node << "\n"; - Debug("bitvector-bb") << " with bits " << toString(bits); + BVDebug("bitvector-bb") << "theory::bv::DefaultVarBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << " with bits " << toString(bits); } void DefaultConstBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultConstBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultConstBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::CONST_BITVECTOR); Assert(bits.size() == 0); @@ -345,12 +363,12 @@ void DefaultConstBB (TNode node, Bits& bits, Bitblaster* bb) { bits.push_back(utils::mkTrue()); } } - Debug("bitvector-bb") << "with bits: " << toString(bits) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(bits) << "\n"; } void DefaultNotBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultNotBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultNotBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_NOT); Assert(bits.size() == 0); Bits bv; @@ -359,7 +377,7 @@ void DefaultNotBB (TNode node, Bits& bits, Bitblaster* bb) { } void DefaultConcatBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultConcatBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultConcatBB bitblasting " << node << "\n"; Assert(bits.size() == 0); Assert (node.getKind() == kind::BITVECTOR_CONCAT); @@ -373,64 +391,68 @@ void DefaultConcatBB (TNode node, Bits& bits, Bitblaster* bb) { } } Assert (bits.size() == utils::getSize(node)); - Debug("bitvector-bb") << "with bits: " << toString(bits) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(bits) << "\n"; } - void DefaultAndBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultAndBB bitblasting " << node << "\n"; - - Assert(node.getNumChildren() == 2 && - node.getKind() == kind::BITVECTOR_AND && + BVDebug("bitvector-bb") << "theory::bv::DefaultAndBB bitblasting " << node << "\n"; + + Assert(node.getKind() == kind::BITVECTOR_AND && bits.size() == 0); - Bits lhs, rhs; - bb->bbTerm(node[0], rhs); - bb->bbTerm(node[1], lhs); - - Assert (lhs.size() == rhs.size()); - for (unsigned i = 0; i < lhs.size(); ++i) { - bits.push_back(utils::mkAnd(lhs[i], rhs[i])); + for(unsigned j = 0; j < utils::getSize(node); ++j) { + NodeBuilder<> andBuilder(kind::AND); + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + Bits current; + bb->bbTerm(node[i], current); + andBuilder << current[j]; + Assert(utils::getSize(node) == current.size()); + } + bits.push_back(andBuilder); } - } void DefaultOrBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultOrBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultOrBB bitblasting " << node << "\n"; - Assert(node.getNumChildren() == 2 && - node.getKind() == kind::BITVECTOR_OR && + Assert(node.getKind() == kind::BITVECTOR_OR && bits.size() == 0); - Bits lhs, rhs; - bb->bbTerm(node[0], lhs); - bb->bbTerm(node[1], rhs); - Assert(lhs.size() == rhs.size()); - - for (unsigned i = 0; i < lhs.size(); ++i) { - bits.push_back(utils::mkOr(lhs[i], rhs[i])); + for(unsigned j = 0; j < utils::getSize(node); ++j) { + NodeBuilder<> orBuilder(kind::OR); + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + Bits current; + bb->bbTerm(node[i], current); + orBuilder << current[j]; + Assert(utils::getSize(node) == current.size()); + } + bits.push_back(orBuilder); } } void DefaultXorBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultXorBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultXorBB bitblasting " << node << "\n"; - Assert(node.getNumChildren() == 2 && - node.getKind() == kind::BITVECTOR_XOR && + Assert(node.getKind() == kind::BITVECTOR_XOR && bits.size() == 0); - Bits lhs, rhs; - bb->bbTerm(node[0], lhs); - bb->bbTerm(node[1], rhs); - Assert(lhs.size() == rhs.size()); - - for (unsigned i = 0; i < lhs.size(); ++i) { - bits.push_back(utils::mkXor(lhs[i], rhs[i])); + for(unsigned j = 0; j < utils::getSize(node); ++j) { + Bits first; + bb->bbTerm(node[0], first); + Node bitj = first[j]; + + for (unsigned i = 1; i < node.getNumChildren(); ++i) { + Bits current; + bb->bbTerm(node[i], current); + bitj = utils::mkNode(kind::XOR, bitj, current[j]); + Assert(utils::getSize(node) == current.size()); + } + bits.push_back(bitj); } } void DefaultXnorBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultXnorBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultXnorBB bitblasting " << node << "\n"; Assert(node.getNumChildren() == 2 && node.getKind() == kind::BITVECTOR_XNOR && @@ -447,17 +469,17 @@ void DefaultXnorBB (TNode node, Bits& bits, Bitblaster* bb) { void DefaultNandBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultNorBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultCompBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: DefaultCompBB bitblasting "<< node << "\n"; + BVDebug("bitvector") << "theory::bv:: DefaultCompBB bitblasting "<< node << "\n"; Assert(getSize(node) == 1 && bits.size() == 0 && node.getKind() == kind::BITVECTOR_COMP); Bits a, b; @@ -475,51 +497,50 @@ void DefaultCompBB (TNode node, Bits& bits, Bitblaster* bb) { } void DefaultMultBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: DefaultMultBB bitblasting "<< node << "\n"; + BVDebug("bitvector") << "theory::bv:: DefaultMultBB bitblasting "<< node << "\n"; Assert(res.size() == 0 && node.getKind() == kind::BITVECTOR_MULT); - Bits a, b; - bb->bbTerm(node[0], a); - bb->bbTerm(node[1], b); - // constructs a simple shift and add multiplier building the result in - // in res - - for (unsigned i = 0; i < a.size(); ++i) { - res.push_back(mkNode(kind::AND, b[0], a[i])); - } - - for(unsigned k = 1; k < res.size(); ++k) { - Node carry_in = mkFalse(); - Node carry_out; - for(unsigned j = 0; j < res.size() -k; ++j) { - Node aj = mkAnd(a[j], b[k]); - carry_out = mkOr(mkAnd(res[j+k], aj), - mkAnd( mkXor(res[j+k], aj), carry_in)); - res[j+k] = mkXor(mkXor(res[j+k], aj), carry_in); - carry_in = carry_out; - } + Bits newres; + bb->bbTerm(node[0], res); + for(unsigned i = 1; i < node.getNumChildren(); ++i) { + Bits current; + bb->bbTerm(node[i], current); + newres.clear(); + // constructs a simple shift and add multiplier building the result + // in res + shiftAddMultiplier(res, current, newres); + res = newres; } - Debug("bitvector-bb") << "with bits: " << toString(res) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(res) << "\n"; } void DefaultPlusBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaulPlusBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaulPlusBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_PLUS && res.size() == 0); - Bits a, b; - bb->bbTerm(node[0], a); - bb->bbTerm(node[1], b); + bb->bbTerm(node[0], res); - Assert(a.size() == b.size() && utils::getSize(node) == a.size()); - rippleCarryAdder(a, b, res, mkFalse()); + Bits newres; + + for(unsigned i = 1; i < node.getNumChildren(); ++i) { + Bits current; + bb->bbTerm(node[i], current); + newres.clear(); + rippleCarryAdder(res, current, newres, utils::mkFalse()); + res = newres; + } + + Assert(res.size() == utils::getSize(node)); } void DefaultSubBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefautSubBB bitblasting " << node << "\n"; - Assert(node.getKind() == kind::BITVECTOR_SUB && bits.size() == 0); + BVDebug("bitvector-bb") << "theory::bv::DefautSubBB bitblasting " << node << "\n"; + Assert(node.getKind() == kind::BITVECTOR_SUB && + node.getNumChildren() == 2 && + bits.size() == 0); Bits a, b; bb->bbTerm(node[0], a); @@ -534,7 +555,7 @@ void DefaultSubBB (TNode node, Bits& bits, Bitblaster* bb) { } void DefaultNegBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefautNegBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefautNegBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_NEG); Bits a; @@ -612,7 +633,7 @@ void uDivModRec(const Bits& a, const Bits& b, Bits& q, Bits& r, unsigned rec_wid } void DefaultUdivBB (TNode node, Bits& q, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefautUdivBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefautUdivBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_UDIV && q.size() == 0); Bits a, b; @@ -628,7 +649,7 @@ void DefaultUdivBB (TNode node, Bits& q, Bitblaster* bb) { } void DefaultUremBB (TNode node, Bits& rem, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefautUremBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefautUremBB bitblasting " << node << "\n"; Assert(node.getKind() == kind::BITVECTOR_UREM && rem.size() == 0); Bits a, b; @@ -645,23 +666,23 @@ void DefaultUremBB (TNode node, Bits& rem, Bitblaster* bb) { void DefaultSdivBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultSremBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultSmodBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultShlBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultShlBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultShlBB bitblasting " << node << "\n"; Assert (node.getKind() == kind::BITVECTOR_SHL && res.size() == 0); Bits a, b; @@ -688,11 +709,11 @@ void DefaultShlBB (TNode node, Bits& res, Bitblaster* bb) { } } } - Debug("bitvector-bb") << "with bits: " << toString(res) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(res) << "\n"; } void DefaultLshrBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultLshrBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultLshrBB bitblasting " << node << "\n"; Assert (node.getKind() == kind::BITVECTOR_LSHR && res.size() == 0); Bits a, b; @@ -719,12 +740,12 @@ void DefaultLshrBB (TNode node, Bits& res, Bitblaster* bb) { } } } - Debug("bitvector-bb") << "with bits: " << toString(res) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(res) << "\n"; } void DefaultAshrBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultAshrBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultAshrBB bitblasting " << node << "\n"; Assert (node.getKind() == kind::BITVECTOR_ASHR && res.size() == 0); Bits a, b; @@ -752,7 +773,7 @@ void DefaultAshrBB (TNode node, Bits& res, Bitblaster* bb) { } } } - Debug("bitvector-bb") << "with bits: " << toString(res) << "\n"; + BVDebug("bitvector-bb") << "with bits: " << toString(res) << "\n"; } @@ -770,14 +791,14 @@ void DefaultExtractBB (TNode node, Bits& bits, Bitblaster* bb) { } Assert (bits.size() == high - low + 1); - Debug("bitvector-bb") << "theory::bv::DefaultExtractBB bitblasting " << node << "\n"; - Debug("bitvector-bb") << " with bits " << toString(bits); + BVDebug("bitvector-bb") << "theory::bv::DefaultExtractBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << " with bits " << toString(bits); } void DefaultRepeatBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; // this should be rewritten Unimplemented(); @@ -785,7 +806,7 @@ void DefaultRepeatBB (TNode node, Bits& bits, Bitblaster* bb) { void DefaultZeroExtendBB (TNode node, Bits& res_bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultZeroExtendBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultZeroExtendBB bitblasting " << node << "\n"; // this should be rewritten Unimplemented(); @@ -793,7 +814,7 @@ void DefaultZeroExtendBB (TNode node, Bits& res_bits, Bitblaster* bb) { } void DefaultSignExtendBB (TNode node, Bits& res_bits, Bitblaster* bb) { - Debug("bitvector-bb") << "theory::bv::DefaultSignExtendBB bitblasting " << node << "\n"; + BVDebug("bitvector-bb") << "theory::bv::DefaultSignExtendBB bitblasting " << node << "\n"; Assert (node.getKind() == kind::BITVECTOR_SIGN_EXTEND && res_bits.size() == 0); @@ -816,14 +837,14 @@ void DefaultSignExtendBB (TNode node, Bits& res_bits, Bitblaster* bb) { } void DefaultRotateRightBB (TNode node, Bits& res, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } void DefaultRotateLeftBB (TNode node, Bits& bits, Bitblaster* bb) { - Debug("bitvector") << "theory::bv:: Unimplemented kind " + BVDebug("bitvector") << "theory::bv:: Unimplemented kind " << node.getKind() << "\n"; Unimplemented(); } diff --git a/src/theory/bv/bv_sat.cpp b/src/theory/bv/bv_sat.cpp index 6f91335ce..f5c43688a 100644 --- a/src/theory/bv/bv_sat.cpp +++ b/src/theory/bv/bv_sat.cpp @@ -23,6 +23,7 @@ #include "prop/cnf_stream.h" #include "prop/sat_solver.h" #include "prop/sat_solver_factory.h" +#include "theory_bv_rewrite_rules_simplification.h" using namespace std; @@ -57,7 +58,7 @@ Bitblaster::Bitblaster(context::Context* c) : d_assertedAtoms(c), d_statistics() { - d_satSolver = prop::SatSolverFactory::createMinisat(); + d_satSolver = prop::SatSolverFactory::createMinisat(c); d_cnfStream = new TseitinCnfStream(d_satSolver, new NullRegistrar()); // initializing the bit-blasting strategies @@ -83,7 +84,7 @@ void Bitblaster::bbAtom(TNode node) { } BVDebug("bitvector-bitblast") << "Bitblasting node " << node <<"\n"; - + ++d_statistics.d_numAtoms; // the bitblasted definition of the atom Node atom_bb = d_atomBBStrategies[node.getKind()](node, this); // asserting that the atom is true iff the definition holds @@ -101,14 +102,78 @@ void Bitblaster::bbTerm(TNode node, Bits& bits) { return; } BVDebug("bitvector-bitblast") << "Bitblasting node " << node <<"\n"; - d_termBBStrategies[node.getKind()] (node, bits,this); + ++d_statistics.d_numTerms; + + Node optimized = bbOptimize(node); + + // if we already bitblasted the optimized version + if(hasBBTerm(optimized)) { + getBBTerm(optimized, bits); + // cache it as the same for this node + cacheTermDef(node, bits); + return; + } + + d_termBBStrategies[optimized.getKind()] (optimized, bits,this); - Assert (bits.size() == utils::getSize(node)); + Assert (bits.size() == utils::getSize(node) && + bits.size() == utils::getSize(optimized)); + + if(optimized != node) { + cacheTermDef(optimized, bits); + } cacheTermDef(node, bits); } +Node Bitblaster::bbOptimize(TNode node) { + std::vector children; + + if (node.getKind() == kind::BITVECTOR_PLUS) { + if (RewriteRule::applies(node)) { + Node res = RewriteRule::run(node); + return res; + } + // if (RewriteRule::applies(node)) { + // Node res = RewriteRule::run(node); + // return res; + // } + + } else if (node.getKind() == kind::BITVECTOR_MULT) { + if (RewriteRule::applies(node)) { + Node res = RewriteRule::run(node); + return res; + } + } + + return node; +} + /// Public methods +void Bitblaster::addAtom(TNode atom) { + d_cnfStream->ensureLiteral(atom); + SatLiteral lit = d_cnfStream->getLiteral(atom); + d_satSolver->addMarkerLiteral(lit); +} +bool Bitblaster::getPropagations(std::vector& propagations) { + std::vector propagated_literals; + if (d_satSolver->getPropagations(propagated_literals)) { + for (unsigned i = 0; i < propagated_literals.size(); ++i) { + propagations.push_back(d_cnfStream->getNode(propagated_literals[i])); + } + return true; + } + return false; +} + +void Bitblaster::explainPropagation(TNode atom, std::vector& explanation) { + std::vector literal_explanation; + d_satSolver->explainPropagation(d_cnfStream->getLiteral(atom), literal_explanation); + for (unsigned i = 0; i < literal_explanation.size(); ++i) { + explanation.push_back(d_cnfStream->getNode(literal_explanation[i])); + } +} + /** * Called from preregistration bitblasts the node * @@ -153,7 +218,7 @@ void Bitblaster::bitblast(TNode node) { * */ -void Bitblaster::assertToSat(TNode lit) { +bool Bitblaster::assertToSat(TNode lit, bool propagate) { // strip the not TNode atom; if (lit.getKind() == kind::NOT) { @@ -163,17 +228,22 @@ void Bitblaster::assertToSat(TNode lit) { } Assert (hasBBAtom(atom)); - Node rewr_atom = Rewriter::rewrite(atom); + SatLiteral markerLit = d_cnfStream->getLiteral(atom); if(lit.getKind() == kind::NOT) { markerLit = ~markerLit; } - Debug("bitvector-bb") << "TheoryBV::Bitblaster::assertToSat asserting node: " << atom <<"\n"; - Debug("bitvector-bb") << "TheoryBV::Bitblaster::assertToSat with literal: " << markerLit << "\n"; + BVDebug("bitvector-bb") << "TheoryBV::Bitblaster::assertToSat asserting node: " << atom <<"\n"; + BVDebug("bitvector-bb") << "TheoryBV::Bitblaster::assertToSat with literal: " << markerLit << "\n"; + + SatValue ret = d_satSolver->assertAssumption(markerLit, propagate); d_assertedAtoms.push_back(markerLit); + + Assert(ret != prop::SAT_VALUE_UNKNOWN); + return ret == prop::SAT_VALUE_TRUE; } /** @@ -183,9 +253,9 @@ void Bitblaster::assertToSat(TNode lit) { * @return true for sat, and false for unsat */ -bool Bitblaster::solve() { - Trace("bitvector") << "Bitblaster::solve() asserted atoms " << d_assertedAtoms.size() <<"\n"; - return SAT_VALUE_TRUE == d_satSolver->solve(d_assertedAtoms); +bool Bitblaster::solve(bool quick_solve) { + BVDebug("bitvector") << "Bitblaster::solve() asserted atoms " << d_assertedAtoms.size() <<"\n"; + return SAT_VALUE_TRUE == d_satSolver->solve(); } void Bitblaster::getConflict(std::vector& conflict) { @@ -287,11 +357,15 @@ void Bitblaster::getBBTerm(TNode node, Bits& bits) { Bitblaster::Statistics::Statistics() : d_numTermClauses("theory::bv::NumberOfTermSatClauses", 0), - d_numAtomClauses("theory::bv::NumberOfAtomSatClauses", 0), + d_numAtomClauses("theory::bv::NumberOfAtomSatClauses", 0), + d_numTerms("theory::bv::NumberOfBitblastedTerms", 0), + d_numAtoms("theory::bv::NumberOfBitblastedAtoms", 0), d_bitblastTimer("theory::bv::BitblastTimer") { StatisticsRegistry::registerStat(&d_numTermClauses); StatisticsRegistry::registerStat(&d_numAtomClauses); + StatisticsRegistry::registerStat(&d_numTerms); + StatisticsRegistry::registerStat(&d_numAtoms); StatisticsRegistry::registerStat(&d_bitblastTimer); } @@ -299,6 +373,8 @@ Bitblaster::Statistics::Statistics() : Bitblaster::Statistics::~Statistics() { StatisticsRegistry::unregisterStat(&d_numTermClauses); StatisticsRegistry::unregisterStat(&d_numAtomClauses); + StatisticsRegistry::unregisterStat(&d_numTerms); + StatisticsRegistry::unregisterStat(&d_numAtoms); StatisticsRegistry::unregisterStat(&d_bitblastTimer); } diff --git a/src/theory/bv/bv_sat.h b/src/theory/bv/bv_sat.h index c0f3b75ed..647e4fe9f 100644 --- a/src/theory/bv/bv_sat.h +++ b/src/theory/bv/bv_sat.h @@ -97,6 +97,8 @@ class Bitblaster { void initAtomBBStrategies(); void initTermBBStrategies(); + // returns a node that might be easier to bitblast + Node bbOptimize(TNode node); void bbAtom(TNode node); // division is bitblasted in terms of constraints @@ -110,17 +112,20 @@ public: public: Bitblaster(context::Context* c); ~Bitblaster(); - void assertToSat(TNode node); - bool solve(); + bool assertToSat(TNode node, bool propagate = true); + bool solve(bool quick_solve = false); void bitblast(TNode node); void getConflict(std::vector& conflict); - + void addAtom(TNode atom); + bool getPropagations(std::vector& propagations); + void explainPropagation(TNode atom, std::vector& explanation); private: class Statistics { public: - IntStat d_numTermClauses, d_numAtomClauses; + IntStat d_numTermClauses, d_numAtomClauses; + IntStat d_numTerms, d_numAtoms; TimerStat d_bitblastTimer; Statistics(); ~Statistics(); diff --git a/src/theory/bv/kinds b/src/theory/bv/kinds index 36d25de2a..6ef2cb0a9 100644 --- a/src/theory/bv/kinds +++ b/src/theory/bv/kinds @@ -28,16 +28,16 @@ constant CONST_BITVECTOR \ "a fixed-width bit-vector constant" operator BITVECTOR_CONCAT 2: "bit-vector concatenation" -operator BITVECTOR_AND 2 "bitwise and" -operator BITVECTOR_OR 2 "bitwise or" -operator BITVECTOR_XOR 2 "bitwise xor" +operator BITVECTOR_AND 2: "bitwise and" +operator BITVECTOR_OR 2: "bitwise or" +operator BITVECTOR_XOR 2: "bitwise xor" operator BITVECTOR_NOT 1 "bitwise not" operator BITVECTOR_NAND 2 "bitwise nand" operator BITVECTOR_NOR 2 "bitwise nor" operator BITVECTOR_XNOR 2 "bitwise xnor" operator BITVECTOR_COMP 2 "equality comparison (returns one bit)" -operator BITVECTOR_MULT 2 "bit-vector multiplication" -operator BITVECTOR_PLUS 2 "bit-vector addition" +operator BITVECTOR_MULT 2: "bit-vector multiplication" +operator BITVECTOR_PLUS 2: "bit-vector addition" operator BITVECTOR_SUB 2 "bit-vector subtraction" operator BITVECTOR_NEG 1 "bit-vector unary negation" operator BITVECTOR_UDIV 2 "bit-vector unsigned division, truncating towards 0 (undefined if divisor is 0)" diff --git a/src/theory/bv/theory_bv.cpp b/src/theory/bv/theory_bv.cpp index 45d99f9c9..e8e1aead6 100644 --- a/src/theory/bv/theory_bv.cpp +++ b/src/theory/bv/theory_bv.cpp @@ -32,12 +32,13 @@ using namespace std; using namespace CVC4::theory::bv::utils; TheoryBV::TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation) - : Theory(THEORY_BV, c, u, out, valuation), + : Theory(THEORY_BV, c, u, out, valuation), d_context(c), d_assertions(c), d_bitblaster(new Bitblaster(c) ), - d_statistics() - { + d_statistics(), + d_alreadyPropagatedSet(c) + { d_true = utils::mkTrue(); } TheoryBV::~TheoryBV() { @@ -61,35 +62,54 @@ TheoryBV::Statistics::~Statistics() { void TheoryBV::preRegisterTerm(TNode node) { BVDebug("bitvector-preregister") << "TheoryBV::preRegister(" << node << ")" << std::endl; - //marker literal: bitblast all terms before we start - //d_bitblaster->bitblast(node); + if (node.getKind() == kind::EQUAL || + node.getKind() == kind::BITVECTOR_ULT || + node.getKind() == kind::BITVECTOR_ULE || + node.getKind() == kind::BITVECTOR_SLT || + node.getKind() == kind::BITVECTOR_SLE) { + d_bitblaster->bitblast(node); + d_bitblaster->addAtom(node); + } } void TheoryBV::check(Effort e) { - if (fullEffort(e) && !done()) { - Trace("bitvector")<< "TheoryBV::check(" << e << ")" << std::endl; - std::vector assertions; - + if (e == EFFORT_STANDARD) { + BVDebug("bitvector") << "TheoryBV::check " << e << "\n"; + BVDebug("bitvector")<< "TheoryBV::check(" << e << ")" << std::endl; while (!done()) { TNode assertion = get(); - Trace("bitvector-assertions") << "TheoryBV::check assertion " << assertion << "\n"; - d_bitblaster->bitblast(assertion); - d_bitblaster->assertToSat(assertion); + // make sure we do not assert things we propagated + if (!hasBeenPropagated(assertion)) { + BVDebug("bitvector-assertions") << "TheoryBV::check assertion " << assertion << "\n"; + bool ok = d_bitblaster->assertToSat(assertion, true); + if (!ok) { + std::vector conflictAtoms; + d_bitblaster->getConflict(conflictAtoms); + d_statistics.d_avgConflictSize.addEntry(conflictAtoms.size()); + Node conflict = mkConjunction(conflictAtoms); + d_out->conflict(conflict); + BVDebug("bitvector") << "TheoryBV::check returns conflict: " <solve(); - if (res == false) { + if (e == EFFORT_FULL) { + BVDebug("bitvector") << "TheoryBV::check " << e << "\n"; + // in standard effort we only do boolean constraint propagation + bool ok = d_bitblaster->solve(false); + if (!ok) { std::vector conflictAtoms; d_bitblaster->getConflict(conflictAtoms); d_statistics.d_avgConflictSize.addEntry(conflictAtoms.size()); - Node conflict = mkConjunction(conflictAtoms); d_out->conflict(conflict); - Trace("bitvector") << "TheoryBV::check returns conflict. \n "; + BVDebug("bitvector") << "TheoryBV::check returns conflict: " < propagations; + d_bitblaster->getPropagations(propagations); + + // propagate the facts on the propagation queue + for (unsigned i = 0; i < propagations.size(); ++ i) { + TNode node = propagations[i]; + BVDebug("bitvector") << "TheoryBV::propagate " << node <<" \n"; + if (d_valuation.getSatValue(node) == Node::null()) { + vector explanation; + d_bitblaster->explainPropagation(node, explanation); + if (explanation.size() == 0) { + d_out->lemma(node); + } else { + NodeBuilder<> nb(kind::OR); + nb << node; + for (unsigned i = 0; i < explanation.size(); ++ i) { + nb << explanation[i].notNode(); + } + Node lemma = nb; + d_out->lemma(lemma); + } + d_alreadyPropagatedSet.insert(node); + } + } } -// Node TheoryBV::preprocessTerm(TNode term) { -// return term; //d_staticEqManager.find(term); -// } +Node TheoryBV::explain(TNode n) { + BVDebug("bitvector") << "TheoryBV::explain node " << n <<"\n"; + std::vector explanation; + d_bitblaster->explainPropagation(n, explanation); + Node exp; + + if (explanation.size() == 0) { + return utils::mkTrue(); + } + + exp = utils::mkAnd(explanation); + + BVDebug("bitvector") << "TheoryBV::explain with " << exp <<"\n"; + return exp; +} Theory::PPAssertStatus TheoryBV::ppAssert(TNode in, SubstitutionMap& outSubstitutions) { switch(in.getKind()) { diff --git a/src/theory/bv/theory_bv.h b/src/theory/bv/theory_bv.h index 36ba17b52..d147c8bb5 100644 --- a/src/theory/bv/theory_bv.h +++ b/src/theory/bv/theory_bv.h @@ -24,6 +24,7 @@ #include "theory/theory.h" #include "context/context.h" #include "context/cdlist.h" +#include "context/cdhashset.h" #include "theory/bv/theory_bv_utils.h" #include "util/stats.h" @@ -41,7 +42,6 @@ class Bitblaster; class TheoryBV : public Theory { -public: private: @@ -54,7 +54,11 @@ private: /** Bitblaster */ Bitblaster* d_bitblaster; Node d_true; - + + /** Context dependent set of atoms we already propagated */ + context::CDHashSet d_alreadyPropagatedSet; + + bool hasBeenPropagated(TNode node); public: TheoryBV(context::Context* c, context::UserContext* u, OutputChannel& out, Valuation valuation); @@ -66,7 +70,7 @@ public: void check(Effort e); - void propagate(Effort e) { } + void propagate(Effort e); Node explain(TNode n); diff --git a/src/theory/bv/theory_bv_rewrite_rules.h b/src/theory/bv/theory_bv_rewrite_rules.h index b01a0646c..30437a76e 100644 --- a/src/theory/bv/theory_bv_rewrite_rules.h +++ b/src/theory/bv/theory_bv_rewrite_rules.h @@ -87,7 +87,9 @@ enum RewriteRuleId { EvalRotateLeft, EvalRotateRight, EvalNeg, - + EvalSlt, + EvalSle, + /// simplification rules /// all of these rules decrease formula size ShlByConst, @@ -136,12 +138,26 @@ enum RewriteRuleId { ExtractArith, ExtractArith2, DoubleNeg, + NegMult, + NegSub, + NegPlus, NotConcat, NotAnd, // not sure why this would help (not done) NotOr, // not sure why this would help (not done) - NotXor // not sure why this would help (not done) + NotXor, // not sure why this would help (not done) + FlattenAssocCommut, + PlusCombineLikeTerms, + MultSimplify, + MultDistribConst, + AndSimplify, + OrSimplify, + XorSimplify, + + // rules to simplify bitblasting + BBPlusNeg }; + inline std::ostream& operator << (std::ostream& out, RewriteRuleId ruleId) { switch (ruleId) { case EmptyRule: out << "EmptyRule"; return out; @@ -183,6 +199,8 @@ inline std::ostream& operator << (std::ostream& out, RewriteRuleId ruleId) { case EvalAshr : out << "EvalAshr"; return out; case EvalUlt : out << "EvalUlt"; return out; case EvalUle : out << "EvalUle"; return out; + case EvalSlt : out << "EvalSlt"; return out; + case EvalSle : out << "EvalSle"; return out; case EvalExtract : out << "EvalExtract"; return out; case EvalSignExtend : out << "EvalSignExtend"; return out; case EvalRotateLeft : out << "EvalRotateLeft"; return out; @@ -241,6 +259,17 @@ inline std::ostream& operator << (std::ostream& out, RewriteRuleId ruleId) { case SignExtendEliminate : out << "SignExtendEliminate"; return out; case NotIdemp : out << "NotIdemp"; return out; case UleSelf: out << "UleSelf"; return out; + case FlattenAssocCommut: out << "FlattenAssocCommut"; return out; + case PlusCombineLikeTerms: out << "PlusCombineLikeTerms"; return out; + case MultSimplify: out << "MultSimplify"; return out; + case MultDistribConst: out << "MultDistribConst"; return out; + case NegMult : out << "NegMult"; return out; + case NegSub : out << "NegSub"; return out; + case AndSimplify : out << "AndSimplify"; return out; + case OrSimplify : out << "OrSimplify"; return out; + case XorSimplify : out << "XorSimplify"; return out; + case NegPlus : out << "NegPlus"; return out; + case BBPlusNeg : out << "BBPlusNeg"; return out; default: Unreachable(); } @@ -346,6 +375,8 @@ struct AllRewriteRules { RewriteRule rule12; RewriteRule rule13; RewriteRule rule14; + RewriteRule rule15; + RewriteRule rule16; RewriteRule rule17; RewriteRule rule18; RewriteRule rule19; @@ -359,8 +390,10 @@ struct AllRewriteRules { RewriteRule rule27; RewriteRule rule28; RewriteRule rule29; + RewriteRule rule30; RewriteRule rule31; RewriteRule rule32; + RewriteRule rule33; RewriteRule rule34; RewriteRule rule35; RewriteRule rule36; @@ -368,6 +401,7 @@ struct AllRewriteRules { RewriteRule rule38; RewriteRule rule39; RewriteRule rule40; + RewriteRule rule41; RewriteRule rule43; RewriteRule rule44; RewriteRule rule45; @@ -428,14 +462,22 @@ struct AllRewriteRules { RewriteRule rule101; RewriteRule rule102; RewriteRule rule103; + RewriteRule rule104; + RewriteRule rule105; + RewriteRule rule106; + RewriteRule rule107; + RewriteRule rule108; + RewriteRule rule109; + RewriteRule rule110; + RewriteRule rule111; }; -template<> +template<> inline bool RewriteRule::applies(Node node) { return false; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule for " << node.getKind() <<"\n"; Unreachable(); diff --git a/src/theory/bv/theory_bv_rewrite_rules_constant_evaluation.h b/src/theory/bv/theory_bv_rewrite_rules_constant_evaluation.h index 1dc053b5d..da3ef4485 100644 --- a/src/theory/bv/theory_bv_rewrite_rules_constant_evaluation.h +++ b/src/theory/bv/theory_bv_rewrite_rules_constant_evaluation.h @@ -28,13 +28,13 @@ namespace CVC4 { namespace theory { namespace bv { -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_AND && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -44,13 +44,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_OR && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -60,13 +60,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_XOR && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -76,13 +76,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -// template<> +// template<> inline // bool RewriteRule::applies(Node node) { // return (node.getKind() == kind::BITVECTOR_XNOR && // utils::isBVGroundTerm(node)); // } -// template<> +// template<> inline // Node RewriteRule::apply(Node node) { // BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; // BitVector a = node[0].getConst(); @@ -91,13 +91,13 @@ Node RewriteRule::apply(Node node) { // return utils::mkConst(res); // } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_NOT && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -105,13 +105,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -// template<> +// template<> inline // bool RewriteRule::applies(Node node) { // return (node.getKind() == kind::BITVECTOR_COMP && // utils::isBVGroundTerm(node)); // } -// template<> +// template<> inline // Node RewriteRule::apply(Node node) { // BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; // BitVector a = node[0].getConst(); @@ -126,13 +126,13 @@ Node RewriteRule::apply(Node node) { // return utils::mkConst(res); // } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_MULT && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -142,13 +142,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_PLUS && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -158,13 +158,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -// template<> +// template<> inline // bool RewriteRule::applies(Node node) { // return (node.getKind() == kind::BITVECTOR_SUB && // utils::isBVGroundTerm(node)); // } -// template<> +// template<> inline // Node RewriteRule::apply(Node node) { // BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; // BitVector a = node[0].getConst(); @@ -173,13 +173,13 @@ Node RewriteRule::apply(Node node) { // return utils::mkConst(res); // } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_NEG && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -187,13 +187,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UDIV && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -202,13 +202,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UREM && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -217,13 +217,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_SHL && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -233,13 +233,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_LSHR && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -249,13 +249,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ASHR && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -265,13 +265,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULT && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -283,32 +283,32 @@ Node RewriteRule::apply(Node node) { return utils::mkFalse(); } -// template<> -// bool RewriteRule::applies(Node node) { -// return (node.getKind() == kind::BITVECTOR_SLT && -// utils::isBVGroundTerm(node)); -// } +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_SLT && + utils::isBVGroundTerm(node)); +} -// template<> -// Node RewriteRule::apply(Node node) { -// BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; -// BitVector a = node[0].getConst(); -// BitVector b = node[1].getConst(); +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + BitVector a = node[0].getConst(); + BitVector b = node[1].getConst(); -// if (a.signedLessThan(b)) { -// return utils::mkTrue(); -// } -// return utils::mkFalse(); + if (a.signedLessThan(b)) { + return utils::mkTrue(); + } + return utils::mkFalse(); -// } +} -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULE && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -320,31 +320,31 @@ Node RewriteRule::apply(Node node) { return utils::mkFalse(); } -// template<> -// bool RewriteRule::applies(Node node) { -// return (node.getKind() == kind::BITVECTOR_SLE && -// utils::isBVGroundTerm(node)); -// } +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_SLE && + utils::isBVGroundTerm(node)); +} -// template<> -// Node RewriteRule::apply(Node node) { -// BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; -// BitVector a = node[0].getConst(); -// BitVector b = node[1].getConst(); +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + BitVector a = node[0].getConst(); + BitVector b = node[1].getConst(); -// if (a.signedLessThanEq(b)) { -// return utils::mkTrue(); -// } -// return utils::mkFalse(); -// } + if (a.signedLessThanEq(b)) { + return utils::mkTrue(); + } + return utils::mkFalse(); +} -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_EXTRACT && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -356,13 +356,13 @@ Node RewriteRule::apply(Node node) { } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_CONCAT && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned num = node.getNumChildren(); @@ -374,13 +374,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_SIGN_EXTEND && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); @@ -390,13 +390,13 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(res); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::EQUAL && utils::isBVGroundTerm(node)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; BitVector a = node[0].getConst(); diff --git a/src/theory/bv/theory_bv_rewrite_rules_core.h b/src/theory/bv/theory_bv_rewrite_rules_core.h index 3240ef5f3..f3d28072e 100644 --- a/src/theory/bv/theory_bv_rewrite_rules_core.h +++ b/src/theory/bv/theory_bv_rewrite_rules_core.h @@ -28,12 +28,12 @@ namespace CVC4 { namespace theory { namespace bv { -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_CONCAT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; NodeBuilder<> result(kind::BITVECTOR_CONCAT); @@ -54,12 +54,12 @@ Node RewriteRule::apply(Node node) { return resultNode; } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_CONCAT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; @@ -115,12 +115,12 @@ Node RewriteRule::apply(Node node) { return utils::mkConcat(mergedExtracts); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return node.getKind() == kind::BITVECTOR_CONCAT; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; @@ -157,7 +157,7 @@ Node RewriteRule::apply(Node node) { return utils::mkConcat(mergedConstants); } -template<> +template<> inline bool RewriteRule::applies(Node node) { if (node.getKind() != kind::BITVECTOR_EXTRACT) return false; unsigned length = utils::getSize(node[0]); @@ -168,20 +168,20 @@ bool RewriteRule::applies(Node node) { return true; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0]; } -template<> +template<> inline bool RewriteRule::applies(Node node) { if (node.getKind() != kind::BITVECTOR_EXTRACT) return false; if (node[0].getKind() != kind::CONST_BITVECTOR) return false; return true; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node child = node[0]; @@ -189,7 +189,7 @@ Node RewriteRule::apply(Node node) { return utils::mkConst(childValue.extract(utils::getExtractHigh(node), utils::getExtractLow(node))); } -template<> +template<> inline bool RewriteRule::applies(Node node) { //BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; if (node.getKind() != kind::BITVECTOR_EXTRACT) return false; @@ -197,7 +197,7 @@ bool RewriteRule::applies(Node node) { return true; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; int extract_high = utils::getExtractHigh(node); @@ -223,14 +223,14 @@ Node RewriteRule::apply(Node node) { return utils::mkConcat(resultChildren); } -template<> +template<> inline bool RewriteRule::applies(Node node) { if (node.getKind() != kind::BITVECTOR_EXTRACT) return false; if (node[0].getKind() != kind::BITVECTOR_EXTRACT) return false; return true; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; @@ -244,7 +244,7 @@ Node RewriteRule::apply(Node node) { return result; } -template<> +template<> inline bool RewriteRule::applies(Node node) { //BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; if (node.getKind() != kind::EQUAL) return false; @@ -253,29 +253,29 @@ bool RewriteRule::applies(Node node) { return node[0] != node[1]; } -template<> +template<> inline Node RewriteRule::apply(Node node) { return utils::mkFalse(); } -template<> +template<> inline bool RewriteRule::applies(Node node) { if (node.getKind() != kind::EQUAL) return false; return node[0] == node[1]; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkTrue(); } -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::EQUAL && node[0] < node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[1].eqNode(node[0]); diff --git a/src/theory/bv/theory_bv_rewrite_rules_normalization.h b/src/theory/bv/theory_bv_rewrite_rules_normalization.h index 4e974881c..5587e25eb 100644 --- a/src/theory/bv/theory_bv_rewrite_rules_normalization.h +++ b/src/theory/bv/theory_bv_rewrite_rules_normalization.h @@ -33,7 +33,7 @@ namespace bv { * (x bvop y) [i:j] ==> x[i:j] bvop y[i:j] * where bvop is bvand,bvor, bvxor */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_EXTRACT && (node[0].getKind() == kind::BITVECTOR_AND || @@ -41,7 +41,7 @@ bool RewriteRule::applies(Node node) { node[0].getKind() == kind::BITVECTOR_XOR )); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned high = utils::getExtractHigh(node); @@ -57,13 +57,13 @@ Node RewriteRule::apply(Node node) { * * (~ a) [i:j] ==> ~ (a[i:j]) */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_EXTRACT && node[0].getKind() == kind::BITVECTOR_NOT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned low = utils::getExtractLow(node); @@ -78,7 +78,7 @@ Node RewriteRule::apply(Node node) { * (a bvop b) [k:0] ==> (a[k:0] bvop b[k:0]) */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_EXTRACT && utils::getExtractLow(node) == 0 && @@ -86,7 +86,7 @@ bool RewriteRule::applies(Node node) { node[0].getKind() == kind::BITVECTOR_MULT)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned low = utils::getExtractLow(node); @@ -107,14 +107,14 @@ Node RewriteRule::apply(Node node) { */ // careful not to apply in a loop -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_EXTRACT && (node[0].getKind() == kind::BITVECTOR_PLUS || node[0].getKind() == kind::BITVECTOR_MULT)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned low = utils::getExtractLow(node); @@ -128,13 +128,570 @@ Node RewriteRule::apply(Node node) { return utils::mkExtract(a_op_b, high, low); } +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_PLUS || + node.getKind() == kind::BITVECTOR_MULT || + node.getKind() == kind::BITVECTOR_OR || + node.getKind() == kind::BITVECTOR_XOR || + node.getKind() == kind::BITVECTOR_AND); +} + + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + std::vector processingStack; + processingStack.push_back(node); + std::vector children; + Kind kind = node.getKind(); + + while (! processingStack.empty()) { + TNode current = processingStack.back(); + processingStack.pop_back(); + + // flatten expression + if (current.getKind() == kind) { + for (unsigned i = 0; i < current.getNumChildren(); ++i) { + processingStack.push_back(current[i]); + } + } else { + children.push_back(current); + } + } + return utils::mkSortedNode(kind, children); +} + +static inline void addToCoefMap(std::map& map, + TNode term, const BitVector& coef) { + if (map.find(term) != map.end()) { + map[term] = map[term] + coef; + } else { + map[term] = coef; + } +} + + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_PLUS); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + unsigned size = utils::getSize(node); + BitVector constSum(size, (unsigned)0); + std::map factorToCoefficient; + + // combine like-terms + for(unsigned i= 0; i < node.getNumChildren(); ++i) { + TNode current = node[i]; + + // look for c * x, where c is a constant + if (current.getKind() == kind::BITVECTOR_MULT && + (current[0].getKind() == kind::CONST_BITVECTOR || + current[1].getKind() == kind::CONST_BITVECTOR)) { + // if we are multiplying by a constant + BitVector coeff; + TNode term; + // figure out which part is the constant + if (current[0].getKind() == kind::CONST_BITVECTOR) { + coeff = current[0].getConst(); + term = current[1]; + } else { + coeff = current[1].getConst(); + term = current[0]; + } + if(term.getKind() == kind::BITVECTOR_SUB) { + TNode a = term[0]; + TNode b = term[1]; + addToCoefMap(factorToCoefficient, a, coeff); + addToCoefMap(factorToCoefficient, b, -coeff); + } + else if(term.getKind() == kind::BITVECTOR_NEG) { + addToCoefMap(factorToCoefficient, term[0], -BitVector(size, coeff)); + } + else { + addToCoefMap(factorToCoefficient, term, coeff); + } + } + else if (current.getKind() == kind::BITVECTOR_SUB) { + // turn into a + (-1)*b + addToCoefMap(factorToCoefficient, current[0], BitVector(size, (unsigned)1)); + addToCoefMap(factorToCoefficient, current[1], -BitVector(size, (unsigned)1)); + } + else if (current.getKind() == kind::BITVECTOR_NEG) { + addToCoefMap(factorToCoefficient, current[0], -BitVector(size, (unsigned)1)); + } + else if (current.getKind() == kind::CONST_BITVECTOR) { + BitVector constValue = current.getConst(); + constSum = constSum + constValue; + } + else { + // store as 1 * current + addToCoefMap(factorToCoefficient, current, BitVector(size, (unsigned)1)); + } + } + + std::vector children; + if ( constSum!= BitVector(size, (unsigned)0)) { + children.push_back(utils::mkConst(constSum)); + } + + // construct result + std::map::const_iterator it = factorToCoefficient.begin(); + + for (; it != factorToCoefficient.end(); ++it) { + BitVector bv_coeff = it->second; + TNode term = it->first; + if(bv_coeff == BitVector(size, (unsigned)0)) { + continue; + } + else if (bv_coeff == BitVector(size, (unsigned)1)) { + children.push_back(term); + } + else if (bv_coeff == -BitVector(size, (unsigned)1)) { + // avoid introducing an extra multiplication + children.push_back(utils::mkNode(kind::BITVECTOR_NEG, term)); + } + else { + Node coeff = utils::mkConst(bv_coeff); + Node product = utils::mkSortedNode(kind::BITVECTOR_MULT, coeff, term); + children.push_back(product); + } + } + + if(children.size() == 0) { + return utils::mkConst(size, (unsigned)0); + } + + return utils::mkSortedNode(kind::BITVECTOR_PLUS, children); +} + + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_MULT); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + unsigned size = utils::getSize(node); + BitVector constant(size, Integer(1)); + + std::vector children; + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + TNode current = node[i]; + if (current.getKind() == kind::CONST_BITVECTOR) { + BitVector value = current.getConst(); + if(value == BitVector(size, (unsigned) 0)) { + return utils::mkConst(size, 0); + } + constant = constant * current.getConst(); + } else { + children.push_back(current); + } + } + + + if(constant != BitVector(size, (unsigned)1)) { + children.push_back(utils::mkConst(constant)); + } + + + if(children.size() == 0) { + return utils::mkConst(size, (unsigned)1); + } + + return utils::mkSortedNode(kind::BITVECTOR_MULT, children); +} + +template<> inline +bool RewriteRule::applies(Node node) { + if (node.getKind() != kind::BITVECTOR_MULT) + return false; + + TNode factor; + if (node[0].getKind() == kind::CONST_BITVECTOR) { + factor = node[1]; + } else if (node[1].getKind() == kind::CONST_BITVECTOR) { + factor = node[0]; + } else { + return false; + } + + return (factor.getKind() == kind::BITVECTOR_PLUS || + factor.getKind() == kind::BITVECTOR_SUB || + factor.getKind() == kind::BITVECTOR_NEG); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + + TNode constant; + TNode factor; + if (node[0].getKind() == kind::CONST_BITVECTOR) { + constant = node[0]; + factor = node[1]; + } else { + Assert(node[1].getKind() == kind::CONST_BITVECTOR); + constant = node[1]; + factor = node[0]; + } + + if (factor.getKind() == kind::BITVECTOR_NEG) { + // push negation on the constant part + BitVector const_bv = constant.getConst(); + return utils::mkSortedNode(kind::BITVECTOR_MULT, + utils::mkConst(-const_bv), + factor[0]); + } + + std::vector children; + for(unsigned i = 0; i < factor.getNumChildren(); ++i) { + children.push_back(utils::mkSortedNode(kind::BITVECTOR_MULT, constant, factor[i])); + } + + return utils::mkSortedNode(factor.getKind(), children); + +} + + +/** + * -(c * expr) ==> (-c * expr) + * where c is a constant + */ +template<> inline +bool RewriteRule::applies(Node node) { + if(node.getKind()!= kind::BITVECTOR_NEG || + node[0].getKind() != kind::BITVECTOR_MULT) { + return false; + } + TNode mult = node[0]; + for (unsigned i = 0; i < mult.getNumChildren(); ++i) { + if (mult[i].getKind() == kind::CONST_BITVECTOR) { + return true; + } + } + return false; +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + TNode mult = node[0]; + std::vector children; + bool has_const = false; + for(unsigned i = 0; i < mult.getNumChildren(); ++i) { + if(mult[i].getKind() == kind::CONST_BITVECTOR) { + Assert(has_const == false); + has_const = true; + BitVector bv = mult[i].getConst(); + children.push_back(utils::mkConst(-bv)); + } else { + children.push_back(mult[i]); + } + } + Assert (has_const); + return utils::mkSortedNode(kind::BITVECTOR_MULT, children); +} + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_NEG && + node[0].getKind() == kind::BITVECTOR_SUB); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + return utils::mkNode(kind::BITVECTOR_SUB, node[0][1], node[0][0]); +} + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_NEG && + node[0].getKind() == kind::BITVECTOR_PLUS); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + std::vector children; + for (unsigned i = 0; i < node[0].getNumChildren(); ++i) { + children.push_back(utils::mkNode(kind::BITVECTOR_NEG, node[0][i])); + } + return utils::mkSortedNode(kind::BITVECTOR_PLUS, children); +} + + + + +struct Count { + unsigned pos; + unsigned neg; + Count() : pos(0), neg(0) {} + Count(unsigned p, unsigned n): + pos(p), + neg(n) + {} +}; + +inline static void insert(std::hash_map& map, TNode node, bool neg) { + if(map.find(node) == map.end()) { + Count c = neg? Count(0,1) : Count(1, 0); + map[node] = c; + } else { + if (neg) { + ++(map[node].neg); + } else { + ++(map[node].pos); + } + } +} + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_AND); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + + // this will remove duplicates + std::hash_map subterms; + unsigned size = utils::getSize(node); + BitVector constant = utils::mkBitVectorOnes(size); + + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + TNode current = node[i]; + // simplify constants + if (current.getKind() == kind::CONST_BITVECTOR) { + BitVector bv = current.getConst(); + constant = constant & bv; + } else { + if (current.getKind() == kind::BITVECTOR_NOT) { + insert(subterms, current[0], true); + } else { + insert(subterms, current, false); + } + } + } + + std::vector children; + + if (constant == BitVector(size, (unsigned)0)) { + return utils::mkConst(BitVector(size, (unsigned)0)); + } + + if (constant != utils::mkBitVectorOnes(size)) { + children.push_back(utils::mkConst(constant)); + } + + std::hash_map::const_iterator it = subterms.begin(); + + for (; it != subterms.end(); ++it) { + if (it->second.pos > 0 && it->second.neg > 0) { + // if we have a and ~a + return utils::mkConst(BitVector(size, (unsigned)0)); + } else { + // idempotence + if (it->second.neg > 0) { + // if it only occured negated + children.push_back(utils::mkNode(kind::BITVECTOR_NOT, it->first)); + } else { + // if it only occured positive + children.push_back(it->first); + } + } + } + if (children.size() == 0) { + return utils::mkOnes(size); + } + + return utils::mkSortedNode(kind::BITVECTOR_AND, children); +} + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_OR); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + + // this will remove duplicates + std::hash_map subterms; + unsigned size = utils::getSize(node); + BitVector constant(size, (unsigned)0); + + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + TNode current = node[i]; + // simplify constants + if (current.getKind() == kind::CONST_BITVECTOR) { + BitVector bv = current.getConst(); + constant = constant | bv; + } else { + if (current.getKind() == kind::BITVECTOR_NOT) { + insert(subterms, current[0], true); + } else { + insert(subterms, current, false); + } + } + } + + std::vector children; + + if (constant == utils::mkBitVectorOnes(size)) { + return utils::mkOnes(size); + } + + if (constant != BitVector(size, (unsigned)0)) { + children.push_back(utils::mkConst(constant)); + } + + std::hash_map::const_iterator it = subterms.begin(); + + for (; it != subterms.end(); ++it) { + if (it->second.pos > 0 && it->second.neg > 0) { + // if we have a or ~a + return utils::mkOnes(size); + } else { + // idempotence + if (it->second.neg > 0) { + // if it only occured negated + children.push_back(utils::mkNode(kind::BITVECTOR_NOT, it->first)); + } else { + // if it only occured positive + children.push_back(it->first); + } + } + } + + if (children.size() == 0) { + return utils::mkConst(BitVector(size, (unsigned)0)); + } + return utils::mkSortedNode(kind::BITVECTOR_OR, children); +} + +template<> inline +bool RewriteRule::applies(Node node) { + return (node.getKind() == kind::BITVECTOR_XOR); +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + + + std::hash_map subterms; + unsigned size = utils::getSize(node); + BitVector constant; + bool const_set = false; + + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + TNode current = node[i]; + // simplify constants + if (current.getKind() == kind::CONST_BITVECTOR) { + BitVector bv = current.getConst(); + if (const_set) { + constant = constant ^ bv; + } else { + const_set = true; + constant = bv; + } + } else { + // collect number of occurances of each term and its negation + if (current.getKind() == kind::BITVECTOR_NOT) { + insert(subterms, current[0], true); + } else { + insert(subterms, current, false); + } + } + } + + std::vector children; + + std::hash_map::const_iterator it = subterms.begin(); + unsigned true_count = 0; + bool seen_false = false; + for (; it != subterms.end(); ++it) { + unsigned pos = it->second.pos; // number of positive occurances + unsigned neg = it->second.neg; // number of negated occurances + + // remove duplicates using the following rules + // a xor a ==> false + // false xor false ==> false + seen_false = seen_false? seen_false : (pos > 1 || neg > 1); + // check what did not reduce + if (pos % 2 && neg % 2) { + // we have a xor ~a ==> true + ++true_count; + } else if (pos % 2) { + // we had a positive occurence left + children.push_back(it->first); + } else if (neg % 2) { + // we had a negative occurence left + children.push_back(utils::mkNode(kind::BITVECTOR_NOT, it->first)); + } + // otherwise both reduced to false + } + + std::vector xorConst; + BitVector true_bv = utils::mkBitVectorOnes(size); + BitVector false_bv(size, (unsigned)0); + + if (true_count) { + // true xor ... xor true ==> true (odd) + // ==> false (even) + xorConst.push_back(true_count % 2? true_bv : false_bv); + } + if (seen_false) { + xorConst.push_back(false_bv); + } + if(const_set) { + xorConst.push_back(constant); + } + + if (xorConst.size() > 0) { + BitVector result = xorConst[0]; + for (unsigned i = 1; i < xorConst.size(); ++i) { + result = result ^ xorConst[i]; + } + children.push_back(utils::mkConst(result)); + } + + Assert(children.size()); + + return utils::mkSortedNode(kind::BITVECTOR_XOR, children); +} + + + + +// template<> inline +// bool RewriteRule::applies(Node node) { +// return (node.getKind() == kind::BITVECTOR_AND); +// } + +// template<> inline +// Node RewriteRule::apply(Node node) { +// BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; +// return resultNode; +// } + -// template<> +// template<> inline // bool RewriteRule<>::applies(Node node) { // return (node.getKind() == kind::BITVECTOR_CONCAT); // } -// template<> +// template<> inline // Node RewriteRule<>::apply(Node node) { // BVDebug("bv-rewrite") << "RewriteRule<>(" << node << ")" << std::endl; // return resultNode; diff --git a/src/theory/bv/theory_bv_rewrite_rules_simplification.h b/src/theory/bv/theory_bv_rewrite_rules_simplification.h index 507f98c91..cf8310e5a 100644 --- a/src/theory/bv/theory_bv_rewrite_rules_simplification.h +++ b/src/theory/bv/theory_bv_rewrite_rules_simplification.h @@ -36,14 +36,14 @@ namespace bv { * * Left Shift by constant amount */ -template<> +template<> inline bool RewriteRule::applies(Node node) { // if the shift amount is constant return (node.getKind() == kind::BITVECTOR_SHL && node[1].getKind() == kind::CONST_BITVECTOR); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Integer amount = node[1].getConst().toInteger(); @@ -72,14 +72,14 @@ Node RewriteRule::apply(Node node) { * Right Logical Shift by constant amount */ -template<> +template<> inline bool RewriteRule::applies(Node node) { // if the shift amount is constant return (node.getKind() == kind::BITVECTOR_LSHR && node[1].getKind() == kind::CONST_BITVECTOR); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Integer amount = node[1].getConst().toInteger(); @@ -108,14 +108,14 @@ Node RewriteRule::apply(Node node) { * Right Arithmetic Shift by constant amount */ -template<> +template<> inline bool RewriteRule::applies(Node node) { // if the shift amount is constant return (node.getKind() == kind::BITVECTOR_ASHR && node[1].getKind() == kind::CONST_BITVECTOR); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Integer amount = node[1].getConst().toInteger(); @@ -150,14 +150,14 @@ Node RewriteRule::apply(Node node) { * (a bvor a) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return ((node.getKind() == kind::BITVECTOR_AND || node.getKind() == kind::BITVECTOR_OR) && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0]; @@ -169,7 +169,7 @@ Node RewriteRule::apply(Node node) { * (a bvand 0) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); return (node.getKind() == kind::BITVECTOR_AND && @@ -177,7 +177,7 @@ bool RewriteRule::applies(Node node) { node[1] == utils::mkConst(size, 0))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(utils::getSize(node), 0); @@ -189,7 +189,7 @@ Node RewriteRule::apply(Node node) { * (a bvand 1) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); Node ones = utils::mkOnes(size); @@ -198,7 +198,7 @@ bool RewriteRule::applies(Node node) { node[1] == ones)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned size = utils::getSize(node); @@ -217,7 +217,7 @@ Node RewriteRule::apply(Node node) { * (a bvor 0) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); return (node.getKind() == kind::BITVECTOR_OR && @@ -225,7 +225,7 @@ bool RewriteRule::applies(Node node) { node[1] == utils::mkConst(size, 0))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; @@ -244,7 +244,7 @@ Node RewriteRule::apply(Node node) { * (a bvor 1) ==> 1 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); Node ones = utils::mkOnes(size); @@ -253,7 +253,7 @@ bool RewriteRule::applies(Node node) { node[1] == ones)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkOnes(utils::getSize(node)); @@ -266,13 +266,13 @@ Node RewriteRule::apply(Node node) { * (a bvxor a) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_XOR && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(BitVector(utils::getSize(node), Integer(0))); @@ -284,27 +284,39 @@ Node RewriteRule::apply(Node node) { * (a bvxor 1) ==> ~a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { - Node ones = utils::mkOnes(utils::getSize(node)); - return (node.getKind() == kind::BITVECTOR_XOR && - (node[0] == ones || - node[1] == ones)); + if (node.getKind() != kind::BITVECTOR_XOR) { + return false; + } + Node ones = utils::mkOnes(utils::getSize(node)); + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i] == ones) { + return true; + } + } + return false; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node ones = utils::mkOnes(utils::getSize(node)); - Node a; - if (node[0] == ones) { - a = node[1]; - } else { - Assert(node[1] == ones); - a = node[0]; + std::vector children; + bool found_ones = false; + // XorSimplify should have been called before + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i] == ones) { + // make sure only ones occurs only once + Assert(!found_ones); + found_ones = true; + } else { + children.push_back(node[i]); + } } - return utils::mkNode(kind::BITVECTOR_NOT, a); + children[0] = utils::mkNode(kind::BITVECTOR_NOT, children[0]); + return utils::mkSortedNode(kind::BITVECTOR_XOR, children); } @@ -314,24 +326,39 @@ Node RewriteRule::apply(Node node) { * (a bvxor 0) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { - Node zero = utils::mkConst(utils::getSize(node), 0); - return (node.getKind() == kind::BITVECTOR_XOR && - (node[0] == zero || - node[1] == zero)); + if (node.getKind() != kind::BITVECTOR_XOR) { + return false; + } + Node zero = utils::mkConst(utils::getSize(node), 0); + for (unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i] == zero) { + return true; + } + } + return false; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; - Node zero = utils::mkConst(utils::getSize(node), 0); - if (node[0] == zero) { - return node[1]; + std::vector children; + bool found_zero = false; + Node zero = utils::mkConst(utils::getSize(node), 0); + + // XorSimplify should have been called before + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i] == zero) { + // make sure zero occurs only once + Assert(!found_zero); + found_zero = true; + } else { + children.push_back(node[i]); + } } - - Assert(node[1] == zero); - return node[0]; + + return utils::mkNode(kind::BITVECTOR_XOR, children); } @@ -341,14 +368,14 @@ Node RewriteRule::apply(Node node) { * (a bvand (~ a)) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_AND && ((node[0].getKind() == kind::BITVECTOR_NOT && node[0][0] == node[1]) || (node[1].getKind() == kind::BITVECTOR_NOT && node[1][0] == node[0]))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(BitVector(utils::getSize(node), Integer(0))); @@ -360,14 +387,14 @@ Node RewriteRule::apply(Node node) { * (a bvor (~ a)) ==> 1 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_OR && ((node[0].getKind() == kind::BITVECTOR_NOT && node[0][0] == node[1]) || (node[1].getKind() == kind::BITVECTOR_NOT && node[1][0] == node[0]))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; uint32_t size = utils::getSize(node); @@ -381,14 +408,14 @@ Node RewriteRule::apply(Node node) { * ((~ a) bvxor (~ b)) ==> (a bvxor b) */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_XOR && node[0].getKind() == kind::BITVECTOR_NOT && node[1].getKind() == kind::BITVECTOR_NOT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node a = node[0][0]; @@ -402,19 +429,19 @@ Node RewriteRule::apply(Node node) { * ~(a bvxor b) ==> (~ a bvxor b) */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_NOT && node[0].getKind() == kind::BITVECTOR_XOR); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node a = node[0][0]; Node b = node[0][1]; Node nota = utils::mkNode(kind::BITVECTOR_NOT, a); - return utils::mkNode(kind::BITVECTOR_XOR, nota, b); + return utils::mkSortedNode(kind::BITVECTOR_XOR, nota, b); } /** @@ -423,13 +450,13 @@ Node RewriteRule::apply(Node node) { * ~ (~ a) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_NOT && node[0].getKind() == kind::BITVECTOR_NOT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0][0]; @@ -443,14 +470,14 @@ Node RewriteRule::apply(Node node) { * a < a ==> false */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return ((node.getKind() == kind::BITVECTOR_ULT || node.getKind() == kind::BITVECTOR_SLT) && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkFalse(); @@ -462,14 +489,14 @@ Node RewriteRule::apply(Node node) { * a <= a ==> true */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return ((node.getKind() == kind::BITVECTOR_ULE || node.getKind() == kind::BITVECTOR_SLE) && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkTrue(); @@ -481,13 +508,13 @@ Node RewriteRule::apply(Node node) { * a < 0 ==> false */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULT && node[1] == utils::mkConst(BitVector(utils::getSize(node[0]), Integer(0)))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkFalse(); @@ -499,13 +526,13 @@ Node RewriteRule::apply(Node node) { * a < a ==> false */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULT && node[1] == node[0]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkFalse(); @@ -518,13 +545,13 @@ Node RewriteRule::apply(Node node) { * a <= 0 ==> a = 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULE && node[1] == utils::mkConst(BitVector(utils::getSize(node[0]), Integer(0)))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkNode(kind::EQUAL, node[0], node[1]); @@ -536,13 +563,13 @@ Node RewriteRule::apply(Node node) { * a <= a ==> true */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULE && node[1] == node[0]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkTrue(); @@ -555,13 +582,13 @@ Node RewriteRule::apply(Node node) { * 0 <= a ==> true */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_ULE && node[0] == utils::mkConst(BitVector(utils::getSize(node[0]), Integer(0)))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkTrue(); @@ -573,7 +600,7 @@ Node RewriteRule::apply(Node node) { * a <= 11..1 ==> true */ -template<> +template<> inline bool RewriteRule::applies(Node node) { if (node.getKind()!= kind::BITVECTOR_ULE) { return false; @@ -584,7 +611,7 @@ bool RewriteRule::applies(Node node) { node[1] == utils::mkConst(BitVector(size, ones))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkTrue(); @@ -596,13 +623,13 @@ Node RewriteRule::apply(Node node) { * ~ ( a < b) ==> b <= a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::NOT && node[0].getKind() == kind::BITVECTOR_ULT); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node ult = node[0]; @@ -617,13 +644,13 @@ Node RewriteRule::apply(Node node) { * ~ ( a <= b) ==> b < a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::NOT && node[0].getKind() == kind::BITVECTOR_ULE); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node ult = node[0]; @@ -638,7 +665,7 @@ Node RewriteRule::apply(Node node) { * (a * 1) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); return (node.getKind() == kind::BITVECTOR_MULT && @@ -646,7 +673,7 @@ bool RewriteRule::applies(Node node) { node[1] == utils::mkConst(size, 1))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; unsigned size = utils::getSize(node); @@ -663,7 +690,7 @@ Node RewriteRule::apply(Node node) { * (a * 0) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { unsigned size = utils::getSize(node); return (node.getKind() == kind::BITVECTOR_MULT && @@ -671,7 +698,7 @@ bool RewriteRule::applies(Node node) { node[1] == utils::mkConst(size, 0))); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(utils::getSize(node), 0); @@ -683,33 +710,39 @@ Node RewriteRule::apply(Node node) { * (a * 2^k) ==> a[n-k-1:0] 0_k */ -template<> +template<> inline bool RewriteRule::applies(Node node) { - return (node.getKind() == kind::BITVECTOR_MULT && - (utils::isPow2Const(node[0]) || - utils::isPow2Const(node[1]))); + if (node.getKind() != kind::BITVECTOR_MULT) + return false; + + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + if (utils::isPow2Const(node[i])) { + return true; + } + } + return false; } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; - Node a; - unsigned power; - power = utils::isPow2Const(node[0]); - - if (power != 0) { - a = node[1]; - // isPow2Const returns the power + 1 - --power; - } else { - power = utils::isPow2Const(node[1]); - Assert(power != 0); - a = node[0]; - power--; + + std::vector children; + unsigned exponent = 0; + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + unsigned exp = utils::isPow2Const(node[i]); + if (exp) { + exponent += exp - 1; + } + else { + children.push_back(node[i]); + } } - Node extract = utils::mkExtract(a, utils::getSize(node) - power - 1, 0); - Node zeros = utils::mkConst(power, 0); + Node a = utils::mkSortedNode(kind::BITVECTOR_MULT, children); + + Node extract = utils::mkExtract(a, utils::getSize(node) - exponent - 1, 0); + Node zeros = utils::mkConst(exponent, 0); return utils::mkConcat(extract, zeros); } @@ -719,7 +752,7 @@ Node RewriteRule::apply(Node node) { * (a + 0) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { Node zero = utils::mkConst(utils::getSize(node), 0); return (node.getKind() == kind::BITVECTOR_PLUS && @@ -727,7 +760,7 @@ bool RewriteRule::applies(Node node) { node[1] == zero)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node zero = utils::mkConst(utils::getSize(node), 0); @@ -744,13 +777,13 @@ Node RewriteRule::apply(Node node) { * -(-a) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_NEG && node[0].getKind() == kind::BITVECTOR_NEG); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0][0]; @@ -762,13 +795,13 @@ Node RewriteRule::apply(Node node) { * (a udiv 2^k) ==> 0_k a[n-1: k] */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UDIV && utils::isPow2Const(node[1])); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; Node a = node[0]; @@ -786,13 +819,13 @@ Node RewriteRule::apply(Node node) { * (a udiv 1) ==> a */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UDIV && node[1] == utils::mkConst(utils::getSize(node), 1)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0]; @@ -804,13 +837,13 @@ Node RewriteRule::apply(Node node) { * (a udiv a) ==> 1 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UDIV && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(utils::getSize(node), 1); @@ -822,13 +855,13 @@ Node RewriteRule::apply(Node node) { * (a urem 2^k) ==> 0_(n-k) a[k-1:0] */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UREM && utils::isPow2Const(node[1])); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; TNode a = node[0]; @@ -844,13 +877,13 @@ Node RewriteRule::apply(Node node) { * (a urem 1) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UREM && node[1] == utils::mkConst(utils::getSize(node), 1)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(utils::getSize(node), 0); @@ -862,13 +895,13 @@ Node RewriteRule::apply(Node node) { * (a urem a) ==> 0 */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return (node.getKind() == kind::BITVECTOR_UREM && node[0] == node[1]); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return utils::mkConst(utils::getSize(node), 0); @@ -880,7 +913,7 @@ Node RewriteRule::apply(Node node) { * (0_k >> a) ==> 0_k */ -template<> +template<> inline bool RewriteRule::applies(Node node) { return ((node.getKind() == kind::BITVECTOR_SHL || node.getKind() == kind::BITVECTOR_LSHR || @@ -888,24 +921,110 @@ bool RewriteRule::applies(Node node) { node[0] == utils::mkConst(utils::getSize(node), 0)); } -template<> +template<> inline Node RewriteRule::apply(Node node) { BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; return node[0]; } +/** + * BBPlusNeg + * + * -a1 - a2 - ... - an + ak + .. ==> - (a1 + a2 + ... + an) + ak + * + */ + +template<> inline +bool RewriteRule::applies(Node node) { + if (node.getKind() != kind::BITVECTOR_PLUS) { + return false; + } + + unsigned neg_count = 0; + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i].getKind()== kind::BITVECTOR_NEG) { + ++neg_count; + } + } + return neg_count > 1; +} + +template<> inline +Node RewriteRule::apply(Node node) { + BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; + + std::vector children; + unsigned neg_count = 0; + for(unsigned i = 0; i < node.getNumChildren(); ++i) { + if (node[i].getKind() == kind::BITVECTOR_NEG) { + ++neg_count; + children.push_back(utils::mkNode(kind::BITVECTOR_NOT, node[i][0])); + } else { + children.push_back(node[i]); + } + } + Assert(neg_count!= 0); + children.push_back(utils::mkConst(utils::getSize(node), neg_count)); + + return utils::mkSortedNode(kind::BITVECTOR_PLUS, children); +} + +// /** +// * +// * +// * +// */ + +// template<> inline +// bool RewriteRule::applies(Node node) { +// if (node.getKind() != kind::BITVECTOR_PLUS) { +// return false; +// } + +// for (unsigned i = 0; i < node.getNumChildren(); ++i) { +// if (node[i].getKind() != kind::BITVECTOR_MULT) { +// return false; +// } +// } +// } + +// template<> inline +// Node RewriteRule::apply(Node node) { +// BVDebug("bv-rewrite") << "RewriteRule(" << node << ")" << std::endl; +// std::hash_set factors; + +// for (unsigned i = 0; i < node.getNumChildren(); ++i) { +// Assert (node[i].getKind() == kind::BITVECTOR_MULT); +// for (unsigned j = 0; j < node[i].getNumChildren(); ++j) { +// factors.insert(node[i][j]); +// } +// } + +// std::vector gcd; +// std::hash_set::const_iterator it; +// for (it = factors.begin(); it != factors.end(); ++it) { +// // for each factor check if it occurs in all children +// TNode f = *it; +// for (unsigned i = 0; i < node.getNumChildren + +// } +// } +// return ; +// } + + // /** // * // * // * // */ -// template<> +// template<> inline // bool RewriteRule<>::applies(Node node) { // return (node.getKind() == ); // } -// template<> +// template<> inline // Node RewriteRule<>::apply(Node node) { // BVDebug("bv-rewrite") << "RewriteRule<>(" << node << ")" << std::endl; // return ; diff --git a/src/theory/bv/theory_bv_rewriter.cpp b/src/theory/bv/theory_bv_rewriter.cpp index 2b48977b6..c2649e881 100644 --- a/src/theory/bv/theory_bv_rewriter.cpp +++ b/src/theory/bv/theory_bv_rewriter.cpp @@ -49,19 +49,31 @@ void TheoryBVRewriter::shutdown() { } RewriteResponse TheoryBVRewriter::preRewrite(TNode node) { - Debug("bitvector-rewrite") << "TheoryBV::preRewrite(" << node << ")" << std::endl; - //return d_rewriteTable[node.getKind()](node); - return RewriteResponse(REWRITE_DONE, node); + RewriteResponse res = d_rewriteTable[node.getKind()](node, true); + if(res.node != node) { + Debug("bitvector-rewrite") << "TheoryBV::preRewrite " << node << std::endl; + Debug("bitvector-rewrite") << "TheoryBV::preRewrite to " << res.node << std::endl; + } + return res; } RewriteResponse TheoryBVRewriter::postRewrite(TNode node) { - //TimerStat::CodeTimer codeTimer(*d_rewriteTimer); - Debug("bitvector-rewrite") << "TheoryBV::postRewrite(" << node << ")" << std::endl; - RewriteResponse res = d_rewriteTable[node.getKind()](node); + RewriteResponse res = d_rewriteTable[node.getKind()](node, false); + if(res.node!= node) { + Debug("bitvector-rewrite") << "TheoryBV::postRewrite " << node << std::endl; + Debug("bitvector-rewrite") << "TheoryBV::postRewrite to " << res.node << std::endl; + } + // if (res.status == REWRITE_DONE) { + // Node rewr = res.node; + // Node rerewr = d_rewriteTable[rewr.getKind()](rewr, false).node; + // Assert(rewr == rerewr); + // } + return res; } -RewriteResponse TheoryBVRewriter::RewriteUlt(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteUlt(TNode node, bool preregister) { + // reduce common subexpressions on both sides Node resultNode = LinearRewriteStrategy < RewriteRule, // if both arguments are constants evaluates @@ -72,8 +84,13 @@ RewriteResponse TheoryBVRewriter::RewriteUlt(TNode node) { return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSlt(TNode node){ - return RewriteResponse(REWRITE_DONE, node); +RewriteResponse TheoryBVRewriter::RewriteSlt(TNode node, bool preregister){ + Node resultNode = LinearRewriteStrategy + < RewriteRule < EvalSlt > + >::apply(node); + + return RewriteResponse(REWRITE_DONE, resultNode); + // Node resultNode = LinearRewriteStrategy // < RewriteRule < SltEliminate > // // a <_s b ==> a + 2^{n-1} <_u b + 2^{n-1} @@ -82,7 +99,7 @@ RewriteResponse TheoryBVRewriter::RewriteSlt(TNode node){ // return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteUle(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteUle(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule, RewriteRule, @@ -93,16 +110,15 @@ RewriteResponse TheoryBVRewriter::RewriteUle(TNode node){ return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSle(TNode node){ - return RewriteResponse(REWRITE_DONE, node); - // Node resultNode = LinearRewriteStrategy - // < RewriteRule - // >::apply(node); +RewriteResponse TheoryBVRewriter::RewriteSle(TNode node, bool preregister){ + Node resultNode = LinearRewriteStrategy + < RewriteRule < EvalSle > + >::apply(node); - // return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteUgt(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteUgt(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -110,16 +126,16 @@ RewriteResponse TheoryBVRewriter::RewriteUgt(TNode node){ return RewriteResponse(REWRITE_AGAIN, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSgt(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteSgt(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule //RewriteRule >::apply(node); - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + return RewriteResponse(REWRITE_AGAIN, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteUge(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteUge(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -127,7 +143,7 @@ RewriteResponse TheoryBVRewriter::RewriteUge(TNode node){ return RewriteResponse(REWRITE_AGAIN, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSge(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteSge(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule // RewriteRule @@ -136,8 +152,9 @@ RewriteResponse TheoryBVRewriter::RewriteSge(TNode node){ return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteNot(TNode node){ - Node resultNode = node; +RewriteResponse TheoryBVRewriter::RewriteNot(TNode node, bool preregister){ + Node resultNode = node; + if(RewriteRule::applies(node)) { resultNode = RewriteRule::run(node); return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); @@ -150,8 +167,9 @@ RewriteResponse TheoryBVRewriter::RewriteNot(TNode node){ return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteExtract(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteExtract(TNode node, bool preregister) { Node resultNode = node; + if (RewriteRule::applies(node)) { resultNode = RewriteRule::run(node); return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); @@ -184,7 +202,8 @@ RewriteResponse TheoryBVRewriter::RewriteExtract(TNode node) { } -RewriteResponse TheoryBVRewriter::RewriteConcat(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteConcat(TNode node, bool preregister) { + Node resultNode = LinearRewriteStrategy < RewriteRule, // Flatten the top level concatenations @@ -197,45 +216,53 @@ RewriteResponse TheoryBVRewriter::RewriteConcat(TNode node) { return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteAnd(TNode node){ - Node resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule, - RewriteRule +RewriteResponse TheoryBVRewriter::RewriteAnd(TNode node, bool preregister){ + Node resultNode = node; + + resultNode = LinearRewriteStrategy + < RewriteRule, + RewriteRule + // RewriteRule, + // RewriteRule, + // //RewriteRule, -> might need rw again + // RewriteRule, + // RewriteRule >::apply(node); return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteOr(TNode node){ - Node resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule, - RewriteRule +RewriteResponse TheoryBVRewriter::RewriteOr(TNode node, bool preregister){ + Node resultNode = node; + + resultNode = LinearRewriteStrategy + < RewriteRule, + RewriteRule >::apply(node); return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteXor(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteXor(TNode node, bool preregister) { Node resultNode = node; - if (RewriteRule::applies(node)) { - resultNode = RewriteRule::run (node); - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); - } + resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule, - RewriteRule + < RewriteRule, // flatten the expression + RewriteRule, // simplify duplicates and constants + RewriteRule // checks if the constant part is zero and eliminates it >::apply(node); - + + // this simplification introduces new terms and might require further + // rewriting + if (RewriteRule::applies(resultNode)) { + resultNode = RewriteRule::run (resultNode); + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } + return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteXnor(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteXnor(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -243,7 +270,7 @@ RewriteResponse TheoryBVRewriter::RewriteXnor(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteNand(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteNand(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -251,7 +278,7 @@ RewriteResponse TheoryBVRewriter::RewriteNand(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteNor(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteNor(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -259,7 +286,7 @@ RewriteResponse TheoryBVRewriter::RewriteNor(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteComp(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteComp(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -267,54 +294,81 @@ RewriteResponse TheoryBVRewriter::RewriteComp(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteMult(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteMult(TNode node, bool preregister) { Node resultNode = node; - if(RewriteRule::applies(node)) { - resultNode = RewriteRule::run (node); - return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); - } resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule, - RewriteRule + < RewriteRule, // flattens and sorts + RewriteRule // multiplies constant part and checks for 0 >::apply(node); + // only apply if every subterm was already rewritten + if (!preregister) { + // distributes multiplication by constant over +, - and unary - + if(RewriteRule::applies(resultNode)) { + resultNode = RewriteRule::run(resultNode); + // creating new terms that might simplify further + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } + } + + if(resultNode == node) { + return RewriteResponse(REWRITE_DONE, resultNode); + } return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewritePlus(TNode node) { - Node resultNode = LinearRewriteStrategy - < RewriteRule, - RewriteRule - // RewriteRule, - // RewriteRule - // RewriteRule - >::apply(node); +RewriteResponse TheoryBVRewriter::RewritePlus(TNode node, bool preregister) { + Node resultNode = node; - return RewriteResponse(REWRITE_DONE, resultNode); + resultNode = LinearRewriteStrategy + < RewriteRule, + RewriteRule + // RewriteRule + >::apply(resultNode); + if (resultNode == node) { + return RewriteResponse(REWRITE_DONE, resultNode); + } else { + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } } -RewriteResponse TheoryBVRewriter::RewriteSub(TNode node){ - return RewriteResponse(REWRITE_DONE, node); - // Node resultNode = LinearRewriteStrategy - // < RewriteRule - // >::apply(node); +RewriteResponse TheoryBVRewriter::RewriteSub(TNode node, bool preregister){ + // return RewriteResponse(REWRITE_DONE, node); + Node resultNode = LinearRewriteStrategy + < RewriteRule + >::apply(node); - // return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteNeg(TNode node) { - Node resultNode = LinearRewriteStrategy +RewriteResponse TheoryBVRewriter::RewriteNeg(TNode node, bool preregister) { + Node resultNode = node; + + resultNode = LinearRewriteStrategy < RewriteRule, - RewriteRule - >::apply(node); + RewriteRule, + RewriteRule + >::apply(node); + + if (RewriteRule::applies(node)) { + resultNode = RewriteRule::run(node); + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } + if(!preregister) { + if (RewriteRule::applies(node)) { + resultNode = RewriteRule::run(node); + return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); + } + } + return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteUdiv(TNode node){ - Node resultNode = node; +RewriteResponse TheoryBVRewriter::RewriteUdiv(TNode node, bool preregister){ + Node resultNode = node; + if(RewriteRule::applies(node)) { resultNode = RewriteRule::run (node); return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); @@ -329,8 +383,10 @@ RewriteResponse TheoryBVRewriter::RewriteUdiv(TNode node){ return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteUrem(TNode node) { - Node resultNode = node; +RewriteResponse TheoryBVRewriter::RewriteUrem(TNode node, bool preregister) { + Node resultNode = node; + return RewriteResponse(REWRITE_DONE, resultNode); + if(RewriteRule::applies(node)) { resultNode = RewriteRule::run (node); return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); @@ -344,7 +400,7 @@ RewriteResponse TheoryBVRewriter::RewriteUrem(TNode node) { return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSmod(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteSmod(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -352,7 +408,7 @@ RewriteResponse TheoryBVRewriter::RewriteSmod(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSdiv(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteSdiv(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -360,14 +416,14 @@ RewriteResponse TheoryBVRewriter::RewriteSdiv(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSrem(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteSrem(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteShl(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteShl(TNode node, bool preregister) { Node resultNode = node; if(RewriteRule::applies(node)) { resultNode = RewriteRule::run (node); @@ -382,7 +438,7 @@ RewriteResponse TheoryBVRewriter::RewriteShl(TNode node) { return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteLshr(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteLshr(TNode node, bool preregister) { Node resultNode = node; if(RewriteRule::applies(node)) { resultNode = RewriteRule::run (node); @@ -397,7 +453,7 @@ RewriteResponse TheoryBVRewriter::RewriteLshr(TNode node) { return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteAshr(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteAshr(TNode node, bool preregister) { Node resultNode = node; if(RewriteRule::applies(node)) { resultNode = RewriteRule::run (node); @@ -413,7 +469,7 @@ RewriteResponse TheoryBVRewriter::RewriteAshr(TNode node) { } -RewriteResponse TheoryBVRewriter::RewriteRepeat(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteRepeat(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -421,7 +477,7 @@ RewriteResponse TheoryBVRewriter::RewriteRepeat(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteZeroExtend(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteZeroExtend(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -429,17 +485,17 @@ RewriteResponse TheoryBVRewriter::RewriteZeroExtend(TNode node){ return RewriteResponse(REWRITE_AGAIN, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteSignExtend(TNode node) { - // Node resultNode = LinearRewriteStrategy - // < RewriteRule - // >::apply(node); +RewriteResponse TheoryBVRewriter::RewriteSignExtend(TNode node, bool preregister) { + Node resultNode = LinearRewriteStrategy + < RewriteRule + >::apply(node); // return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); - return RewriteResponse(REWRITE_DONE, node); + return RewriteResponse(REWRITE_DONE, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteRotateRight(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteRotateRight(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -447,7 +503,7 @@ RewriteResponse TheoryBVRewriter::RewriteRotateRight(TNode node) { return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteRotateLeft(TNode node){ +RewriteResponse TheoryBVRewriter::RewriteRotateLeft(TNode node, bool preregister){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -455,7 +511,7 @@ RewriteResponse TheoryBVRewriter::RewriteRotateLeft(TNode node){ return RewriteResponse(REWRITE_AGAIN_FULL, resultNode); } -RewriteResponse TheoryBVRewriter::RewriteEqual(TNode node) { +RewriteResponse TheoryBVRewriter::RewriteEqual(TNode node, bool preregister) { Node resultNode = LinearRewriteStrategy < RewriteRule, RewriteRule, @@ -466,11 +522,11 @@ RewriteResponse TheoryBVRewriter::RewriteEqual(TNode node) { } -RewriteResponse TheoryBVRewriter::IdentityRewrite(TNode node) { +RewriteResponse TheoryBVRewriter::IdentityRewrite(TNode node, bool prerewrite) { return RewriteResponse(REWRITE_DONE, node); } -RewriteResponse TheoryBVRewriter::UndefinedRewrite(TNode node) { +RewriteResponse TheoryBVRewriter::UndefinedRewrite(TNode node, bool prerewrite) { Debug("bv-rewrite") << "TheoryBV::UndefinedRewrite for" << node; Unimplemented(); } diff --git a/src/theory/bv/theory_bv_rewriter.h b/src/theory/bv/theory_bv_rewriter.h index 7ce914477..0ce3fa303 100644 --- a/src/theory/bv/theory_bv_rewriter.h +++ b/src/theory/bv/theory_bv_rewriter.h @@ -30,7 +30,7 @@ namespace theory { namespace bv { struct AllRewriteRules; -typedef RewriteResponse (*RewriteFunction) (TNode); +typedef RewriteResponse (*RewriteFunction) (TNode, bool); class TheoryBVRewriter { // static CVC4_THREADLOCAL(AllRewriteRules*) s_allRules; @@ -39,47 +39,47 @@ class TheoryBVRewriter { #warning "TODO: Double check thread safety and make sure the fix compiles on mac." static RewriteFunction d_rewriteTable[kind::LAST_KIND]; - static RewriteResponse IdentityRewrite(TNode node); - static RewriteResponse UndefinedRewrite(TNode node); + static RewriteResponse IdentityRewrite(TNode node, bool prerewrite = false); + static RewriteResponse UndefinedRewrite(TNode node, bool prerewrite = false); static void initializeRewrites(); - static RewriteResponse RewriteEqual(TNode node); - static RewriteResponse RewriteUlt(TNode node); - static RewriteResponse RewriteSlt(TNode node); - static RewriteResponse RewriteUle(TNode node); - static RewriteResponse RewriteSle(TNode node); - static RewriteResponse RewriteUgt(TNode node); - static RewriteResponse RewriteSgt(TNode node); - static RewriteResponse RewriteUge(TNode node); - static RewriteResponse RewriteSge(TNode node); - static RewriteResponse RewriteNot(TNode node); - static RewriteResponse RewriteConcat(TNode node); - static RewriteResponse RewriteAnd(TNode node); - static RewriteResponse RewriteOr(TNode node); - static RewriteResponse RewriteXnor(TNode node); - static RewriteResponse RewriteXor(TNode node); - static RewriteResponse RewriteNand(TNode node); - static RewriteResponse RewriteNor(TNode node); - static RewriteResponse RewriteComp(TNode node); - static RewriteResponse RewriteMult(TNode node); - static RewriteResponse RewritePlus(TNode node); - static RewriteResponse RewriteSub(TNode node); - static RewriteResponse RewriteNeg(TNode node); - static RewriteResponse RewriteUdiv(TNode node); - static RewriteResponse RewriteUrem(TNode node); - static RewriteResponse RewriteSmod(TNode node); - static RewriteResponse RewriteSdiv(TNode node); - static RewriteResponse RewriteSrem(TNode node); - static RewriteResponse RewriteShl(TNode node); - static RewriteResponse RewriteLshr(TNode node); - static RewriteResponse RewriteAshr(TNode node); - static RewriteResponse RewriteExtract(TNode node); - static RewriteResponse RewriteRepeat(TNode node); - static RewriteResponse RewriteZeroExtend(TNode node); - static RewriteResponse RewriteSignExtend(TNode node); - static RewriteResponse RewriteRotateRight(TNode node); - static RewriteResponse RewriteRotateLeft(TNode node); + static RewriteResponse RewriteEqual(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUlt(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSlt(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUle(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSle(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUgt(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSgt(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUge(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSge(TNode node, bool prerewrite = false); + static RewriteResponse RewriteNot(TNode node, bool prerewrite = false); + static RewriteResponse RewriteConcat(TNode node, bool prerewrite = false); + static RewriteResponse RewriteAnd(TNode node, bool prerewrite = false); + static RewriteResponse RewriteOr(TNode node, bool prerewrite = false); + static RewriteResponse RewriteXnor(TNode node, bool prerewrite = false); + static RewriteResponse RewriteXor(TNode node, bool prerewrite = false); + static RewriteResponse RewriteNand(TNode node, bool prerewrite = false); + static RewriteResponse RewriteNor(TNode node, bool prerewrite = false); + static RewriteResponse RewriteComp(TNode node, bool prerewrite = false); + static RewriteResponse RewriteMult(TNode node, bool prerewrite = false); + static RewriteResponse RewritePlus(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSub(TNode node, bool prerewrite = false); + static RewriteResponse RewriteNeg(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUdiv(TNode node, bool prerewrite = false); + static RewriteResponse RewriteUrem(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSmod(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSdiv(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSrem(TNode node, bool prerewrite = false); + static RewriteResponse RewriteShl(TNode node, bool prerewrite = false); + static RewriteResponse RewriteLshr(TNode node, bool prerewrite = false); + static RewriteResponse RewriteAshr(TNode node, bool prerewrite = false); + static RewriteResponse RewriteExtract(TNode node, bool prerewrite = false); + static RewriteResponse RewriteRepeat(TNode node, bool prerewrite = false); + static RewriteResponse RewriteZeroExtend(TNode node, bool prerewrite = false); + static RewriteResponse RewriteSignExtend(TNode node, bool prerewrite = false); + static RewriteResponse RewriteRotateRight(TNode node, bool prerewrite = false); + static RewriteResponse RewriteRotateLeft(TNode node, bool prerewrite = false); public: diff --git a/src/theory/bv/theory_bv_utils.h b/src/theory/bv/theory_bv_utils.h index 60e459958..8b5dd0499 100644 --- a/src/theory/bv/theory_bv_utils.h +++ b/src/theory/bv/theory_bv_utils.h @@ -79,6 +79,27 @@ inline Node mkAnd(std::vector& children) { } } +inline Node mkSortedNode(Kind kind, std::vector& children) { + Assert (kind == kind::BITVECTOR_PLUS || + kind == kind::BITVECTOR_MULT || + kind == kind::BITVECTOR_AND || + kind == kind::BITVECTOR_OR || + kind == kind::BITVECTOR_XOR); + + if (children.size() == 1) { + return children[0]; + } + std::sort(children.begin(), children.end()); + return NodeManager::currentNM()->mkNode(kind, children); +} + + +inline Node mkNode(Kind kind, std::vector& children) { + if (children.size() == 1) { + return children[0]; + } + return NodeManager::currentNM()->mkNode(kind, children); +} inline Node mkNode(Kind kind, TNode child) { return NodeManager::currentNM()->mkNode(kind, child); @@ -88,6 +109,21 @@ inline Node mkNode(Kind kind, TNode child1, TNode child2) { return NodeManager::currentNM()->mkNode(kind, child1, child2); } + +inline Node mkSortedNode(Kind kind, TNode child1, TNode child2) { + Assert (kind == kind::BITVECTOR_PLUS || + kind == kind::BITVECTOR_MULT || + kind == kind::BITVECTOR_AND || + kind == kind::BITVECTOR_OR || + kind == kind::BITVECTOR_XOR); + + if (child1 < child2) { + return NodeManager::currentNM()->mkNode(kind, child1, child2); + } else { + return NodeManager::currentNM()->mkNode(kind, child2, child1); + } +} + inline Node mkNode(Kind kind, TNode child1, TNode child2, TNode child3) { return NodeManager::currentNM()->mkNode(kind, child1, child2, child3); } @@ -156,8 +192,14 @@ inline Node mkConcat(TNode t1, TNode t2) { return NodeManager::currentNM()->mkNode(kind::BITVECTOR_CONCAT, t1, t2); } + +inline BitVector mkBitVectorOnes(unsigned size) { + Assert(size > 0); + return BitVector(1, Integer(1)).signExtend(size - 1); +} + inline Node mkOnes(unsigned size) { - BitVector val = BitVector(1, Integer(1)).signExtend(size-1); + BitVector val = mkBitVectorOnes(size); return NodeManager::currentNM()->mkConst(val); } @@ -276,6 +318,7 @@ inline Node mkConjunction(const std::vector& nodes) { std::vector::const_iterator it_end = nodes.end(); while (it != it_end) { TNode current = *it; + if (current != mkTrue()) { Assert(isBVPredicate(current)); expandedNodes.push_back(current); diff --git a/src/util/bitvector.h b/src/util/bitvector.h index 7429ac8c9..512f23136 100644 --- a/src/util/bitvector.h +++ b/src/util/bitvector.h @@ -337,9 +337,9 @@ public: } /** - Returns k is the integer is equal to 2^k and zero + Returns k is the integer is equal to 2^{k-1} and zero otherwise - @return k if the integer is equal to 2^k and zero otherwise + @return k if the integer is equal to 2^{k-1} and zero otherwise */ unsigned isPow2() { return d_value.isPow2(); diff --git a/test/regress/regress0/bv/fuzz01.smt b/test/regress/regress0/bv/fuzz01.smt new file mode 100644 index 000000000..df6b54394 --- /dev/null +++ b/test/regress/regress0/bv/fuzz01.smt @@ -0,0 +1,183 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[16])) +:extrafuns ((v1 BitVec[2])) +:extrafuns ((v2 BitVec[11])) +:extrafuns ((v3 BitVec[5])) +:extrafuns ((v4 BitVec[15])) +:formula +(let (?e5 bv0[1]) +(let (?e6 (ite (bvult v4 (sign_extend[13] v1)) bv1[1] bv0[1])) +(let (?e7 (bvadd (sign_extend[9] v1) v2)) +(let (?e8 (bvcomp v4 v4)) +(let (?e9 (bvadd ?e7 (zero_extend[10] ?e6))) +(let (?e10 (bvand v0 (sign_extend[11] v3))) +(let (?e11 (ite (bvsge (zero_extend[11] v3) v0) bv1[1] bv0[1])) +(let (?e12 (ite (bvsge (zero_extend[9] v1) ?e9) bv1[1] bv0[1])) +(let (?e13 (repeat[1] v0)) +(let (?e14 (bvshl ?e6 ?e12)) +(let (?e15 (ite (= bv1[1] (extract[0:0] v0)) ?e9 (zero_extend[10] ?e6))) +(let (?e16 (ite (bvsle (sign_extend[9] v1) v2) bv1[1] bv0[1])) +(let (?e17 (ite (bvsge v4 (zero_extend[14] ?e6)) bv1[1] bv0[1])) +(let (?e18 (bvcomp (sign_extend[10] ?e6) ?e9)) +(let (?e19 (ite (bvsle ?e15 ?e15) bv1[1] bv0[1])) +(let (?e20 (ite (bvule ?e10 (zero_extend[15] ?e5)) bv1[1] bv0[1])) +(flet ($e21 (= (zero_extend[10] ?e18) ?e9)) +(flet ($e22 (= ?e7 ?e7)) +(flet ($e23 (= ?e17 ?e6)) +(flet ($e24 (= (zero_extend[15] ?e17) ?e10)) +(flet ($e25 (= (zero_extend[10] ?e16) ?e7)) +(flet ($e26 (= (sign_extend[13] v1) v4)) +(flet ($e27 (= (sign_extend[15] ?e16) v0)) +(flet ($e28 (= (sign_extend[15] ?e18) ?e10)) +(flet ($e29 (= ?e7 (sign_extend[10] ?e18))) +(flet ($e30 (= ?e9 (sign_extend[9] v1))) +(flet ($e31 (= ?e11 ?e18)) +(flet ($e32 (= (sign_extend[15] ?e20) ?e10)) +(flet ($e33 (= ?e18 ?e8)) +(flet ($e34 (= ?e14 ?e6)) +(flet ($e35 (= (zero_extend[15] ?e20) v0)) +(flet ($e36 (= v4 (sign_extend[14] ?e11))) +(flet ($e37 (= (sign_extend[1] v4) ?e13)) +(flet ($e38 (= ?e20 ?e16)) +(flet ($e39 (= v1 (sign_extend[1] ?e14))) +(flet ($e40 (= ?e5 ?e19)) +(flet ($e41 (= ?e7 (sign_extend[10] ?e14))) +(flet ($e42 (= ?e15 (sign_extend[6] v3))) +(flet ($e43 (= ?e18 ?e18)) +(flet ($e44 (= ?e16 ?e8)) +(flet ($e45 (= (sign_extend[15] ?e8) v0)) +(flet ($e46 (= (zero_extend[4] ?e15) v4)) +(flet ($e47 (= (sign_extend[14] ?e20) v4)) +(flet ($e48 (= v3 (sign_extend[4] ?e17))) +(flet ($e49 (= ?e17 ?e6)) +(flet ($e50 (= ?e10 (sign_extend[15] ?e16))) +(flet ($e51 (= ?e16 ?e18)) +(flet ($e52 (= (sign_extend[10] ?e12) ?e9)) +(flet ($e53 (= ?e8 ?e19)) +(flet ($e54 (= (zero_extend[1] ?e14) v1)) +(flet ($e55 (= v1 (sign_extend[1] ?e6))) +(flet ($e56 (= v4 (zero_extend[14] ?e14))) +(flet ($e57 (= ?e17 ?e20)) +(flet ($e58 (= ?e20 ?e11)) +(flet ($e59 (= (zero_extend[4] ?e6) v3)) +(flet ($e60 (= v0 (zero_extend[5] ?e9))) +(flet ($e61 (= v0 (sign_extend[15] ?e17))) +(flet ($e62 (= ?e15 ?e9)) +(flet ($e63 (= (sign_extend[4] ?e15) v4)) +(flet ($e64 (= (zero_extend[10] ?e16) ?e15)) +(flet ($e65 (= v4 (zero_extend[14] ?e18))) +(flet ($e66 (= (sign_extend[10] ?e14) ?e9)) +(flet ($e67 (= ?e20 ?e17)) +(flet ($e68 (= ?e14 ?e18)) +(flet ($e69 (= ?e10 (sign_extend[5] ?e9))) +(flet ($e70 (= ?e5 ?e16)) +(flet ($e71 (= (zero_extend[10] ?e19) ?e15)) +(flet ($e72 (= ?e15 ?e9)) +(flet ($e73 (= ?e12 ?e11)) +(flet ($e74 (= (sign_extend[10] ?e14) ?e7)) +(flet ($e75 (= ?e20 ?e20)) +(flet ($e76 (= ?e12 ?e18)) +(flet ($e77 (= ?e20 ?e16)) +(flet ($e78 (= ?e17 ?e16)) +(flet ($e79 (= (zero_extend[14] ?e17) v4)) +(flet ($e80 (= ?e7 (sign_extend[10] ?e8))) +(flet ($e81 (= ?e11 ?e20)) +(flet ($e82 (= ?e9 (sign_extend[10] ?e8))) +(flet ($e83 (= v0 (zero_extend[15] ?e18))) +(flet ($e84 (= ?e17 ?e12)) +(flet ($e85 (= (zero_extend[4] ?e18) v3)) +(flet ($e86 (= v1 (sign_extend[1] ?e5))) +(flet ($e87 (= ?e14 ?e5)) +(flet ($e88 (= ?e13 (zero_extend[15] ?e14))) +(flet ($e89 (= ?e19 ?e16)) +(flet ($e90 (= ?e20 ?e17)) +(flet ($e91 (= ?e15 v2)) +(flet ($e92 (or $e72 $e38)) +(flet ($e93 (if_then_else $e58 $e65 $e60)) +(flet ($e94 (not $e71)) +(flet ($e95 (and $e75 $e63)) +(flet ($e96 (and $e82 $e53)) +(flet ($e97 (iff $e22 $e59)) +(flet ($e98 (if_then_else $e96 $e41 $e29)) +(flet ($e99 (not $e46)) +(flet ($e100 (not $e39)) +(flet ($e101 (not $e62)) +(flet ($e102 (iff $e91 $e83)) +(flet ($e103 (implies $e51 $e61)) +(flet ($e104 (not $e33)) +(flet ($e105 (xor $e84 $e45)) +(flet ($e106 (implies $e54 $e50)) +(flet ($e107 (iff $e40 $e57)) +(flet ($e108 (xor $e30 $e89)) +(flet ($e109 (implies $e68 $e103)) +(flet ($e110 (if_then_else $e101 $e52 $e99)) +(flet ($e111 (or $e80 $e110)) +(flet ($e112 (iff $e108 $e88)) +(flet ($e113 (xor $e86 $e78)) +(flet ($e114 (not $e48)) +(flet ($e115 (if_then_else $e67 $e92 $e49)) +(flet ($e116 (implies $e77 $e93)) +(flet ($e117 (and $e26 $e25)) +(flet ($e118 (or $e47 $e117)) +(flet ($e119 (or $e87 $e21)) +(flet ($e120 (not $e64)) +(flet ($e121 (not $e119)) +(flet ($e122 (and $e106 $e118)) +(flet ($e123 (or $e114 $e43)) +(flet ($e124 (implies $e100 $e74)) +(flet ($e125 (iff $e123 $e109)) +(flet ($e126 (iff $e23 $e37)) +(flet ($e127 (not $e121)) +(flet ($e128 (and $e70 $e98)) +(flet ($e129 (if_then_else $e76 $e90 $e122)) +(flet ($e130 (iff $e81 $e111)) +(flet ($e131 (implies $e24 $e24)) +(flet ($e132 (iff $e130 $e42)) +(flet ($e133 (if_then_else $e79 $e34 $e94)) +(flet ($e134 (implies $e102 $e56)) +(flet ($e135 (or $e66 $e27)) +(flet ($e136 (and $e131 $e55)) +(flet ($e137 (iff $e105 $e120)) +(flet ($e138 (if_then_else $e129 $e85 $e32)) +(flet ($e139 (xor $e44 $e132)) +(flet ($e140 (xor $e133 $e139)) +(flet ($e141 (and $e134 $e128)) +(flet ($e142 (or $e127 $e113)) +(flet ($e143 (implies $e136 $e136)) +(flet ($e144 (iff $e143 $e36)) +(flet ($e145 (not $e144)) +(flet ($e146 (if_then_else $e35 $e137 $e142)) +(flet ($e147 (if_then_else $e116 $e126 $e112)) +(flet ($e148 (and $e141 $e97)) +(flet ($e149 (implies $e146 $e115)) +(flet ($e150 (not $e140)) +(flet ($e151 (and $e150 $e95)) +(flet ($e152 (if_then_else $e147 $e138 $e147)) +(flet ($e153 (or $e135 $e31)) +(flet ($e154 (iff $e148 $e73)) +(flet ($e155 (or $e152 $e69)) +(flet ($e156 (not $e107)) +(flet ($e157 (if_then_else $e149 $e28 $e104)) +(flet ($e158 (iff $e157 $e124)) +(flet ($e159 (iff $e125 $e151)) +(flet ($e160 (if_then_else $e154 $e159 $e145)) +(flet ($e161 (iff $e155 $e155)) +(flet ($e162 (iff $e160 $e160)) +(flet ($e163 (iff $e158 $e156)) +(flet ($e164 (iff $e162 $e162)) +(flet ($e165 (and $e163 $e161)) +(flet ($e166 (xor $e164 $e165)) +(flet ($e167 (or $e166 $e166)) +(flet ($e168 (or $e167 $e167)) +(flet ($e169 (iff $e153 $e153)) +(flet ($e170 (or $e168 $e168)) +(flet ($e171 (or $e169 $e169)) +(flet ($e172 (not $e171)) +(flet ($e173 (implies $e170 $e170)) +(flet ($e174 (not $e172)) +(flet ($e175 (iff $e173 $e174)) +$e175 +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz02.smt b/test/regress/regress0/bv/fuzz02.smt new file mode 100644 index 000000000..41b616ef0 --- /dev/null +++ b/test/regress/regress0/bv/fuzz02.smt @@ -0,0 +1,122 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[3])) +:extrafuns ((v1 BitVec[12])) +:extrafuns ((v2 BitVec[9])) +:formula +(let (?e3 bv10[9]) +(let (?e4 (extract[6:6] ?e3)) +(let (?e5 (ite (bvult v2 v2) bv1[1] bv0[1])) +(let (?e6 (ite (bvsgt ?e4 ?e4) bv1[1] bv0[1])) +(let (?e7 (sign_extend[5] ?e6)) +(let (?e8 (concat ?e7 ?e5)) +(let (?e9 (bvcomp ?e8 (zero_extend[1] ?e7))) +(let (?e10 (ite (bvule ?e7 (zero_extend[5] ?e9)) bv1[1] bv0[1])) +(let (?e11 (bvadd (sign_extend[2] ?e10) v0)) +(let (?e12 (extract[1:0] v0)) +(let (?e13 (ite (bvslt ?e12 ?e12) bv1[1] bv0[1])) +(let (?e14 (ite (bvult ?e7 (sign_extend[4] ?e12)) bv1[1] bv0[1])) +(let (?e15 (bvlshr (sign_extend[8] ?e4) v2)) +(let (?e16 (repeat[2] v0)) +(let (?e17 (rotate_right[4] ?e15)) +(let (?e18 (bvxor ?e14 ?e14)) +(let (?e19 (bvand v2 (sign_extend[7] ?e12))) +(let (?e20 (bvnot v1)) +(flet ($e21 (= ?e15 ?e3)) +(flet ($e22 (= (sign_extend[6] ?e9) ?e8)) +(flet ($e23 (= ?e6 ?e4)) +(flet ($e24 (= ?e11 (zero_extend[2] ?e13))) +(flet ($e25 (= v0 (zero_extend[2] ?e13))) +(flet ($e26 (= (sign_extend[1] ?e4) ?e12)) +(flet ($e27 (= ?e15 ?e3)) +(flet ($e28 (= ?e3 ?e19)) +(flet ($e29 (= (zero_extend[8] ?e14) ?e15)) +(flet ($e30 (= v0 (sign_extend[2] ?e6))) +(flet ($e31 (= ?e11 (sign_extend[2] ?e4))) +(flet ($e32 (= ?e7 (zero_extend[5] ?e6))) +(flet ($e33 (= ?e5 ?e5)) +(flet ($e34 (= (zero_extend[8] ?e6) v2)) +(flet ($e35 (= ?e20 (zero_extend[3] ?e3))) +(flet ($e36 (= (zero_extend[8] ?e4) ?e15)) +(flet ($e37 (= ?e3 (sign_extend[8] ?e5))) +(flet ($e38 (= (sign_extend[11] ?e9) v1)) +(flet ($e39 (= (zero_extend[1] ?e9) ?e12)) +(flet ($e40 (= (sign_extend[6] v0) ?e15)) +(flet ($e41 (= ?e7 (zero_extend[5] ?e14))) +(flet ($e42 (= ?e6 ?e14)) +(flet ($e43 (= ?e16 (zero_extend[5] ?e4))) +(flet ($e44 (= (zero_extend[8] ?e9) v2)) +(flet ($e45 (= v1 (zero_extend[11] ?e5))) +(flet ($e46 (= ?e8 (zero_extend[6] ?e4))) +(flet ($e47 (= (sign_extend[1] ?e13) ?e12)) +(flet ($e48 (= (zero_extend[11] ?e18) v1)) +(flet ($e49 (= (zero_extend[11] ?e5) v1)) +(flet ($e50 (= ?e15 (sign_extend[8] ?e4))) +(flet ($e51 (= ?e13 ?e14)) +(flet ($e52 (= (zero_extend[2] ?e5) ?e11)) +(flet ($e53 (= (sign_extend[11] ?e9) v1)) +(flet ($e54 (= ?e8 (sign_extend[6] ?e5))) +(flet ($e55 (= (sign_extend[7] ?e12) v2)) +(flet ($e56 (= ?e20 (sign_extend[3] ?e15))) +(flet ($e57 (= ?e15 (sign_extend[6] ?e11))) +(flet ($e58 (= ?e6 ?e4)) +(flet ($e59 (= (sign_extend[8] ?e10) v2)) +(flet ($e60 (= (zero_extend[8] ?e10) ?e19)) +(flet ($e61 (= ?e9 ?e6)) +(flet ($e62 (= ?e11 (sign_extend[2] ?e9))) +(flet ($e63 (= v2 (zero_extend[8] ?e18))) +(flet ($e64 (= (sign_extend[2] ?e10) ?e11)) +(flet ($e65 (= ?e5 ?e5)) +(flet ($e66 (= (zero_extend[3] ?e16) ?e17)) +(flet ($e67 (if_then_else $e34 $e37 $e22)) +(flet ($e68 (xor $e61 $e63)) +(flet ($e69 (iff $e55 $e53)) +(flet ($e70 (not $e51)) +(flet ($e71 (or $e70 $e56)) +(flet ($e72 (or $e23 $e54)) +(flet ($e73 (or $e43 $e39)) +(flet ($e74 (implies $e58 $e32)) +(flet ($e75 (and $e21 $e59)) +(flet ($e76 (implies $e33 $e38)) +(flet ($e77 (and $e41 $e57)) +(flet ($e78 (if_then_else $e77 $e74 $e64)) +(flet ($e79 (iff $e36 $e52)) +(flet ($e80 (or $e29 $e25)) +(flet ($e81 (iff $e68 $e62)) +(flet ($e82 (xor $e78 $e76)) +(flet ($e83 (xor $e66 $e69)) +(flet ($e84 (or $e45 $e27)) +(flet ($e85 (xor $e83 $e79)) +(flet ($e86 (if_then_else $e72 $e72 $e65)) +(flet ($e87 (iff $e28 $e75)) +(flet ($e88 (if_then_else $e26 $e73 $e47)) +(flet ($e89 (xor $e60 $e60)) +(flet ($e90 (xor $e49 $e42)) +(flet ($e91 (iff $e44 $e48)) +(flet ($e92 (and $e71 $e80)) +(flet ($e93 (not $e88)) +(flet ($e94 (iff $e35 $e35)) +(flet ($e95 (iff $e81 $e90)) +(flet ($e96 (xor $e89 $e85)) +(flet ($e97 (xor $e82 $e94)) +(flet ($e98 (or $e92 $e40)) +(flet ($e99 (implies $e93 $e24)) +(flet ($e100 (if_then_else $e46 $e31 $e50)) +(flet ($e101 (or $e86 $e97)) +(flet ($e102 (and $e101 $e67)) +(flet ($e103 (if_then_else $e87 $e96 $e30)) +(flet ($e104 (not $e100)) +(flet ($e105 (xor $e91 $e104)) +(flet ($e106 (if_then_else $e84 $e102 $e84)) +(flet ($e107 (implies $e106 $e98)) +(flet ($e108 (implies $e107 $e103)) +(flet ($e109 (or $e95 $e95)) +(flet ($e110 (implies $e108 $e109)) +(flet ($e111 (not $e99)) +(flet ($e112 (or $e110 $e105)) +(flet ($e113 (or $e112 $e112)) +(flet ($e114 (xor $e111 $e113)) +$e114 +))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz03.smt b/test/regress/regress0/bv/fuzz03.smt new file mode 100644 index 000000000..fe0b5b129 --- /dev/null +++ b/test/regress/regress0/bv/fuzz03.smt @@ -0,0 +1,81 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[1])) +:extrafuns ((v1 BitVec[4])) +:extrafuns ((v2 BitVec[11])) +:extrafuns ((v3 BitVec[9])) +:formula +(let (?e4 bv0[1]) +(let (?e5 bv125[7]) +(let (?e6 (bvxor v2 (zero_extend[2] v3))) +(let (?e7 (ite (bvule (zero_extend[2] v3) ?e6) bv1[1] bv0[1])) +(let (?e8 (ite (= ?e6 v2) bv1[1] bv0[1])) +(let (?e9 (ite (= bv1[1] (extract[0:0] ?e8)) (zero_extend[10] ?e4) ?e6)) +(let (?e10 (ite (bvule (sign_extend[4] ?e5) ?e6) bv1[1] bv0[1])) +(let (?e11 (bvnor (zero_extend[8] ?e10) v3)) +(let (?e12 (ite (bvugt (sign_extend[8] ?e7) ?e11) bv1[1] bv0[1])) +(let (?e13 (bvor ?e6 (zero_extend[10] ?e12))) +(let (?e14 (bvor ?e4 v0)) +(let (?e15 (bvnor ?e13 (zero_extend[2] ?e11))) +(let (?e16 (sign_extend[5] ?e15)) +(let (?e17 (zero_extend[5] ?e6)) +(let (?e18 (ite (bvugt (sign_extend[8] v0) ?e11) bv1[1] bv0[1])) +(let (?e19 (rotate_right[0] v1)) +(flet ($e20 (= ?e18 ?e12)) +(flet ($e21 (= (sign_extend[10] ?e8) ?e13)) +(flet ($e22 (= ?e16 ?e16)) +(flet ($e23 (= (sign_extend[10] ?e14) ?e9)) +(flet ($e24 (= v3 (zero_extend[8] ?e14))) +(flet ($e25 (= v0 ?e10)) +(flet ($e26 (= (sign_extend[8] ?e7) v3)) +(flet ($e27 (= (sign_extend[5] ?e9) ?e16)) +(flet ($e28 (= ?e14 ?e7)) +(flet ($e29 (= ?e12 ?e18)) +(flet ($e30 (= ?e6 ?e13)) +(flet ($e31 (= ?e9 (zero_extend[10] ?e12))) +(flet ($e32 (= ?e16 (sign_extend[5] v2))) +(flet ($e33 (= v1 v1)) +(flet ($e34 (= (sign_extend[12] v1) ?e16)) +(flet ($e35 (= (sign_extend[5] ?e15) ?e16)) +(flet ($e36 (= v2 (zero_extend[7] ?e19))) +(flet ($e37 (= ?e13 (sign_extend[4] ?e5))) +(flet ($e38 (= (zero_extend[10] ?e14) ?e15)) +(flet ($e39 (= (sign_extend[5] v1) ?e11)) +(flet ($e40 (= (zero_extend[3] ?e7) v1)) +(flet ($e41 (= (sign_extend[7] v1) ?e13)) +(flet ($e42 (= v2 (zero_extend[10] v0))) +(flet ($e43 (= ?e13 (zero_extend[10] ?e4))) +(flet ($e44 (= ?e9 (sign_extend[7] ?e19))) +(flet ($e45 (= ?e15 (sign_extend[10] v0))) +(flet ($e46 (= ?e17 (zero_extend[5] ?e6))) +(flet ($e47 (iff $e38 $e44)) +(flet ($e48 (and $e23 $e36)) +(flet ($e49 (not $e25)) +(flet ($e50 (xor $e32 $e39)) +(flet ($e51 (if_then_else $e30 $e26 $e29)) +(flet ($e52 (not $e24)) +(flet ($e53 (if_then_else $e43 $e34 $e41)) +(flet ($e54 (iff $e47 $e33)) +(flet ($e55 (iff $e28 $e37)) +(flet ($e56 (or $e27 $e53)) +(flet ($e57 (and $e52 $e56)) +(flet ($e58 (if_then_else $e48 $e50 $e50)) +(flet ($e59 (if_then_else $e21 $e40 $e57)) +(flet ($e60 (implies $e58 $e55)) +(flet ($e61 (implies $e54 $e45)) +(flet ($e62 (implies $e35 $e61)) +(flet ($e63 (iff $e22 $e62)) +(flet ($e64 (or $e63 $e59)) +(flet ($e65 (and $e42 $e60)) +(flet ($e66 (or $e20 $e51)) +(flet ($e67 (or $e49 $e65)) +(flet ($e68 (not $e31)) +(flet ($e69 (xor $e64 $e68)) +(flet ($e70 (implies $e66 $e66)) +(flet ($e71 (iff $e46 $e69)) +(flet ($e72 (implies $e70 $e71)) +(flet ($e73 (implies $e72 $e67)) +$e73 +))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz04.smt b/test/regress/regress0/bv/fuzz04.smt new file mode 100644 index 000000000..c5598a23a --- /dev/null +++ b/test/regress/regress0/bv/fuzz04.smt @@ -0,0 +1,249 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[3])) +:extrafuns ((v1 BitVec[9])) +:extrafuns ((v2 BitVec[15])) +:extrafuns ((v3 BitVec[5])) +:formula +(let (?e4 bv111[9]) +(let (?e5 bv6[3]) +(let (?e6 (bvor v1 (zero_extend[6] v0))) +(let (?e7 (bvxor (sign_extend[4] v3) v1)) +(let (?e8 (bvlshr v1 ?e6)) +(let (?e9 (bvnot v0)) +(let (?e10 (bvshl v1 (sign_extend[6] v0))) +(let (?e11 (bvnot v1)) +(let (?e12 (bvmul ?e7 ?e7)) +(let (?e13 (ite (bvsgt ?e10 (zero_extend[4] v3)) bv1[1] bv0[1])) +(let (?e14 (bvnor ?e11 ?e6)) +(let (?e15 (bvnor v2 (zero_extend[6] ?e7))) +(let (?e16 (ite (= bv1[1] (extract[0:0] v3)) v1 ?e6)) +(let (?e17 (ite (bvule ?e10 ?e14) bv1[1] bv0[1])) +(let (?e18 (ite (bvuge (sign_extend[2] ?e17) ?e5) bv1[1] bv0[1])) +(let (?e19 (bvnot ?e10)) +(let (?e20 (ite (bvuge ?e13 ?e18) bv1[1] bv0[1])) +(let (?e21 (bvneg ?e15)) +(let (?e22 (bvmul ?e7 ?e10)) +(let (?e23 (rotate_left[2] v1)) +(let (?e24 (bvneg ?e13)) +(let (?e25 (sign_extend[7] ?e22)) +(let (?e26 (bvnand (sign_extend[6] v0) v1)) +(let (?e27 (bvxnor (zero_extend[1] ?e21) ?e25)) +(let (?e28 (bvnand ?e9 v0)) +(let (?e29 (bvor ?e15 (sign_extend[6] ?e26))) +(let (?e30 (bvsub ?e16 (sign_extend[8] ?e20))) +(let (?e31 (bvand (sign_extend[2] ?e13) ?e28)) +(let (?e32 (rotate_right[2] ?e12)) +(let (?e33 (repeat[1] ?e25)) +(let (?e34 (ite (= bv1[1] (extract[4:4] ?e19)) (zero_extend[6] ?e9) ?e23)) +(let (?e35 (bvlshr ?e8 (zero_extend[6] ?e31))) +(let (?e36 (rotate_left[5] ?e4)) +(flet ($e37 (= (sign_extend[8] ?e24) ?e12)) +(flet ($e38 (= (sign_extend[10] v3) v2)) +(flet ($e39 (= ?e29 (sign_extend[6] ?e32))) +(flet ($e40 (= ?e19 (sign_extend[6] ?e9))) +(flet ($e41 (= (zero_extend[6] ?e9) ?e6)) +(flet ($e42 (= ?e25 (zero_extend[15] ?e17))) +(flet ($e43 (= ?e25 (sign_extend[15] ?e17))) +(flet ($e44 (= ?e25 ?e25)) +(flet ($e45 (= v2 (sign_extend[12] ?e31))) +(flet ($e46 (= (sign_extend[15] ?e17) ?e25)) +(flet ($e47 (= ?e12 (zero_extend[6] ?e9))) +(flet ($e48 (= ?e29 (zero_extend[6] ?e4))) +(flet ($e49 (= (zero_extend[8] ?e24) ?e26)) +(flet ($e50 (= (zero_extend[4] ?e17) v3)) +(flet ($e51 (= ?e7 ?e23)) +(flet ($e52 (= (sign_extend[8] ?e18) ?e4)) +(flet ($e53 (= v1 ?e26)) +(flet ($e54 (= (sign_extend[8] ?e18) ?e16)) +(flet ($e55 (= ?e16 ?e36)) +(flet ($e56 (= ?e35 v1)) +(flet ($e57 (= ?e11 ?e36)) +(flet ($e58 (= ?e16 (sign_extend[6] ?e5))) +(flet ($e59 (= ?e22 ?e35)) +(flet ($e60 (= ?e33 (sign_extend[7] ?e6))) +(flet ($e61 (= v2 (sign_extend[12] ?e9))) +(flet ($e62 (= ?e12 ?e12)) +(flet ($e63 (= v0 (zero_extend[2] ?e18))) +(flet ($e64 (= ?e16 ?e7)) +(flet ($e65 (= ?e22 (sign_extend[8] ?e13))) +(flet ($e66 (= (zero_extend[7] ?e8) ?e33)) +(flet ($e67 (= v1 ?e35)) +(flet ($e68 (= ?e30 (zero_extend[6] ?e28))) +(flet ($e69 (= ?e6 (sign_extend[6] ?e31))) +(flet ($e70 (= ?e23 ?e35)) +(flet ($e71 (= ?e11 ?e14)) +(flet ($e72 (= (zero_extend[2] ?e20) v0)) +(flet ($e73 (= (sign_extend[8] ?e18) ?e26)) +(flet ($e74 (= (zero_extend[10] v3) ?e21)) +(flet ($e75 (= ?e19 (zero_extend[8] ?e20))) +(flet ($e76 (= ?e26 (sign_extend[8] ?e20))) +(flet ($e77 (= ?e29 (sign_extend[6] ?e16))) +(flet ($e78 (= (sign_extend[2] ?e17) ?e28)) +(flet ($e79 (= ?e30 ?e10)) +(flet ($e80 (= ?e20 ?e20)) +(flet ($e81 (= ?e15 (zero_extend[6] ?e19))) +(flet ($e82 (= ?e10 (zero_extend[8] ?e18))) +(flet ($e83 (= (zero_extend[14] ?e24) v2)) +(flet ($e84 (= (sign_extend[8] ?e17) ?e4)) +(flet ($e85 (= ?e21 (sign_extend[14] ?e24))) +(flet ($e86 (= ?e22 (sign_extend[8] ?e24))) +(flet ($e87 (= (zero_extend[8] ?e18) ?e23)) +(flet ($e88 (= (sign_extend[6] ?e31) ?e10)) +(flet ($e89 (= ?e21 (sign_extend[6] ?e7))) +(flet ($e90 (= ?e30 (sign_extend[6] v0))) +(flet ($e91 (= ?e33 (sign_extend[7] ?e36))) +(flet ($e92 (= ?e34 (sign_extend[6] ?e9))) +(flet ($e93 (= (zero_extend[2] ?e17) ?e9)) +(flet ($e94 (= ?e15 (zero_extend[6] ?e16))) +(flet ($e95 (= ?e25 (sign_extend[7] ?e8))) +(flet ($e96 (= ?e12 ?e8)) +(flet ($e97 (= v1 (sign_extend[8] ?e13))) +(flet ($e98 (= ?e32 ?e8)) +(flet ($e99 (= v0 v0)) +(flet ($e100 (= ?e14 (sign_extend[6] ?e5))) +(flet ($e101 (= (sign_extend[6] ?e34) ?e29)) +(flet ($e102 (= ?e35 (sign_extend[8] ?e13))) +(flet ($e103 (= ?e6 ?e12)) +(flet ($e104 (= (zero_extend[8] ?e18) ?e36)) +(flet ($e105 (= ?e36 (zero_extend[8] ?e17))) +(flet ($e106 (= (zero_extend[6] ?e5) ?e4)) +(flet ($e107 (= ?e34 (zero_extend[6] ?e5))) +(flet ($e108 (= (sign_extend[8] ?e17) ?e6)) +(flet ($e109 (= (sign_extend[8] ?e20) ?e4)) +(flet ($e110 (= ?e21 (zero_extend[6] ?e32))) +(flet ($e111 (= (zero_extend[6] ?e9) ?e19)) +(flet ($e112 (= ?e6 (zero_extend[8] ?e13))) +(flet ($e113 (= ?e25 (zero_extend[15] ?e24))) +(flet ($e114 (= (sign_extend[8] ?e20) ?e10)) +(flet ($e115 (= (sign_extend[6] v1) v2)) +(flet ($e116 (= (sign_extend[6] v0) ?e7)) +(flet ($e117 (= v1 ?e8)) +(flet ($e118 (= (zero_extend[6] ?e11) ?e15)) +(flet ($e119 (= (sign_extend[6] ?e22) v2)) +(flet ($e120 (= (zero_extend[4] ?e18) v3)) +(flet ($e121 (= ?e10 v1)) +(flet ($e122 (= ?e10 ?e32)) +(flet ($e123 (= v1 (zero_extend[6] ?e28))) +(flet ($e124 (= ?e25 ?e25)) +(flet ($e125 (= (zero_extend[2] ?e31) v3)) +(flet ($e126 (= ?e10 ?e8)) +(flet ($e127 (= ?e29 (sign_extend[12] v0))) +(flet ($e128 (= ?e30 (zero_extend[6] ?e9))) +(flet ($e129 (= v2 v2)) +(flet ($e130 (= (sign_extend[8] ?e18) ?e4)) +(flet ($e131 (= (sign_extend[8] ?e20) ?e36)) +(flet ($e132 (= ?e32 ?e22)) +(flet ($e133 (= ?e8 ?e16)) +(flet ($e134 (= (zero_extend[13] ?e5) ?e33)) +(flet ($e135 (= v2 (sign_extend[14] ?e20))) +(flet ($e136 (= ?e27 ?e27)) +(flet ($e137 (xor $e68 $e88)) +(flet ($e138 (and $e111 $e56)) +(flet ($e139 (and $e39 $e84)) +(flet ($e140 (if_then_else $e139 $e116 $e75)) +(flet ($e141 (xor $e108 $e110)) +(flet ($e142 (xor $e78 $e44)) +(flet ($e143 (xor $e131 $e133)) +(flet ($e144 (and $e97 $e95)) +(flet ($e145 (or $e80 $e124)) +(flet ($e146 (xor $e58 $e45)) +(flet ($e147 (or $e99 $e42)) +(flet ($e148 (or $e67 $e118)) +(flet ($e149 (if_then_else $e47 $e102 $e102)) +(flet ($e150 (and $e106 $e43)) +(flet ($e151 (iff $e82 $e86)) +(flet ($e152 (if_then_else $e61 $e109 $e81)) +(flet ($e153 (iff $e120 $e150)) +(flet ($e154 (not $e144)) +(flet ($e155 (xor $e49 $e69)) +(flet ($e156 (iff $e48 $e115)) +(flet ($e157 (not $e57)) +(flet ($e158 (and $e154 $e94)) +(flet ($e159 (not $e113)) +(flet ($e160 (and $e126 $e89)) +(flet ($e161 (or $e157 $e159)) +(flet ($e162 (and $e77 $e98)) +(flet ($e163 (not $e85)) +(flet ($e164 (implies $e55 $e137)) +(flet ($e165 (xor $e148 $e100)) +(flet ($e166 (not $e60)) +(flet ($e167 (implies $e153 $e65)) +(flet ($e168 (implies $e76 $e141)) +(flet ($e169 (if_then_else $e51 $e165 $e149)) +(flet ($e170 (not $e70)) +(flet ($e171 (xor $e92 $e37)) +(flet ($e172 (and $e104 $e134)) +(flet ($e173 (xor $e130 $e64)) +(flet ($e174 (not $e138)) +(flet ($e175 (implies $e174 $e145)) +(flet ($e176 (iff $e38 $e101)) +(flet ($e177 (or $e146 $e122)) +(flet ($e178 (or $e123 $e172)) +(flet ($e179 (and $e63 $e114)) +(flet ($e180 (xor $e117 $e41)) +(flet ($e181 (or $e136 $e161)) +(flet ($e182 (implies $e121 $e151)) +(flet ($e183 (iff $e52 $e53)) +(flet ($e184 (implies $e79 $e103)) +(flet ($e185 (or $e87 $e183)) +(flet ($e186 (not $e50)) +(flet ($e187 (iff $e173 $e186)) +(flet ($e188 (if_then_else $e170 $e156 $e112)) +(flet ($e189 (implies $e179 $e142)) +(flet ($e190 (not $e71)) +(flet ($e191 (iff $e164 $e93)) +(flet ($e192 (if_then_else $e143 $e191 $e127)) +(flet ($e193 (and $e59 $e189)) +(flet ($e194 (if_then_else $e178 $e132 $e129)) +(flet ($e195 (and $e152 $e167)) +(flet ($e196 (if_then_else $e171 $e62 $e162)) +(flet ($e197 (xor $e192 $e192)) +(flet ($e198 (and $e188 $e135)) +(flet ($e199 (iff $e175 $e196)) +(flet ($e200 (xor $e73 $e193)) +(flet ($e201 (and $e168 $e176)) +(flet ($e202 (iff $e185 $e201)) +(flet ($e203 (xor $e190 $e91)) +(flet ($e204 (iff $e74 $e182)) +(flet ($e205 (xor $e194 $e147)) +(flet ($e206 (and $e128 $e187)) +(flet ($e207 (iff $e83 $e169)) +(flet ($e208 (iff $e177 $e197)) +(flet ($e209 (if_then_else $e166 $e199 $e96)) +(flet ($e210 (or $e119 $e46)) +(flet ($e211 (xor $e200 $e207)) +(flet ($e212 (xor $e205 $e209)) +(flet ($e213 (iff $e212 $e184)) +(flet ($e214 (or $e105 $e180)) +(flet ($e215 (and $e181 $e210)) +(flet ($e216 (xor $e155 $e204)) +(flet ($e217 (and $e213 $e66)) +(flet ($e218 (implies $e214 $e211)) +(flet ($e219 (if_then_else $e206 $e208 $e198)) +(flet ($e220 (xor $e215 $e216)) +(flet ($e221 (if_then_else $e218 $e90 $e203)) +(flet ($e222 (xor $e202 $e160)) +(flet ($e223 (xor $e125 $e158)) +(flet ($e224 (or $e220 $e195)) +(flet ($e225 (or $e219 $e54)) +(flet ($e226 (not $e223)) +(flet ($e227 (if_then_else $e140 $e217 $e140)) +(flet ($e228 (not $e226)) +(flet ($e229 (or $e222 $e224)) +(flet ($e230 (iff $e225 $e221)) +(flet ($e231 (and $e72 $e163)) +(flet ($e232 (and $e227 $e40)) +(flet ($e233 (not $e107)) +(flet ($e234 (and $e232 $e231)) +(flet ($e235 (and $e228 $e228)) +(flet ($e236 (not $e235)) +(flet ($e237 (iff $e229 $e230)) +(flet ($e238 (and $e236 $e233)) +(flet ($e239 (xor $e237 $e238)) +(flet ($e240 (not $e234)) +(flet ($e241 (and $e239 $e240)) +$e241 +))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz05.smt b/test/regress/regress0/bv/fuzz05.smt new file mode 100644 index 000000000..6a64a7218 --- /dev/null +++ b/test/regress/regress0/bv/fuzz05.smt @@ -0,0 +1,282 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[12])) +:extrafuns ((v1 BitVec[2])) +:extrafuns ((v2 BitVec[13])) +:extrafuns ((v3 BitVec[10])) +:formula +(let (?e4 bv47[10]) +(let (?e5 (bvshl (zero_extend[8] v1) v3)) +(let (?e6 (bvcomp v2 (zero_extend[11] v1))) +(let (?e7 (ite (bvslt ?e5 ?e4) bv1[1] bv0[1])) +(let (?e8 (ite (bvsgt ?e4 (zero_extend[9] ?e6)) bv1[1] bv0[1])) +(let (?e9 (bvadd v1 (zero_extend[1] ?e6))) +(let (?e10 (ite (bvsle (zero_extend[9] ?e7) ?e4) bv1[1] bv0[1])) +(let (?e11 (rotate_left[0] ?e8)) +(let (?e12 (ite (= bv1[1] (extract[0:0] ?e7)) (zero_extend[1] ?e8) ?e9)) +(let (?e13 (bvadd ?e9 ?e9)) +(let (?e14 (rotate_right[0] ?e7)) +(let (?e15 (ite (bvslt (sign_extend[9] ?e6) ?e5) bv1[1] bv0[1])) +(let (?e16 (ite (distinct ?e7 ?e6) bv1[1] bv0[1])) +(let (?e17 (bvor ?e7 ?e8)) +(let (?e18 (bvand (zero_extend[1] ?e6) ?e9)) +(let (?e19 (ite (bvuge ?e18 (sign_extend[1] ?e16)) bv1[1] bv0[1])) +(let (?e20 (ite (bvsgt ?e18 (sign_extend[1] ?e17)) bv1[1] bv0[1])) +(let (?e21 (ite (= (sign_extend[3] v3) v2) bv1[1] bv0[1])) +(let (?e22 (bvxor ?e10 ?e19)) +(let (?e23 (bvxor (zero_extend[1] ?e19) v1)) +(let (?e24 (ite (bvule v1 (sign_extend[1] ?e19)) bv1[1] bv0[1])) +(let (?e25 (ite (bvuge ?e8 ?e17) bv1[1] bv0[1])) +(let (?e26 (ite (bvsge ?e20 ?e22) bv1[1] bv0[1])) +(let (?e27 (zero_extend[1] ?e22)) +(let (?e28 (bvsub (sign_extend[1] ?e10) v1)) +(let (?e29 (bvlshr ?e27 (sign_extend[1] ?e17))) +(let (?e30 (concat ?e17 ?e4)) +(let (?e31 (bvnand (zero_extend[11] ?e23) v2)) +(let (?e32 (bvashr (zero_extend[9] ?e19) ?e5)) +(let (?e33 (bvmul ?e23 (zero_extend[1] ?e25))) +(let (?e34 (repeat[1] ?e27)) +(let (?e35 (ite (bvuge ?e27 (zero_extend[1] ?e11)) bv1[1] bv0[1])) +(let (?e36 (ite (= (sign_extend[1] ?e11) v1) bv1[1] bv0[1])) +(let (?e37 (bvneg ?e31)) +(let (?e38 (ite (bvsgt ?e22 ?e14) bv1[1] bv0[1])) +(let (?e39 (ite (bvsge ?e36 ?e8) bv1[1] bv0[1])) +(let (?e40 (bvand ?e8 ?e14)) +(let (?e41 (bvand (zero_extend[12] ?e17) v2)) +(let (?e42 (ite (bvsle ?e35 ?e26) bv1[1] bv0[1])) +(let (?e43 (ite (bvsle v2 (sign_extend[12] ?e21)) bv1[1] bv0[1])) +(let (?e44 (bvshl ?e16 ?e42)) +(let (?e45 (ite (= ?e23 ?e29) bv1[1] bv0[1])) +(let (?e46 (repeat[1] ?e41)) +(let (?e47 (bvcomp ?e10 ?e21)) +(let (?e48 (ite (= (zero_extend[9] ?e47) ?e4) bv1[1] bv0[1])) +(let (?e49 (bvnand (zero_extend[11] ?e33) ?e41)) +(let (?e50 (ite (bvslt ?e44 ?e20) bv1[1] bv0[1])) +(let (?e51 (ite (bvsgt ?e31 (sign_extend[12] ?e21)) bv1[1] bv0[1])) +(let (?e52 (ite (bvslt v0 (zero_extend[11] ?e38)) bv1[1] bv0[1])) +(flet ($e53 (= v1 ?e29)) +(flet ($e54 (= (zero_extend[1] ?e44) ?e13)) +(flet ($e55 (= ?e17 ?e44)) +(flet ($e56 (= ?e4 (zero_extend[9] ?e39))) +(flet ($e57 (= (sign_extend[11] ?e14) v0)) +(flet ($e58 (= (zero_extend[12] ?e42) ?e37)) +(flet ($e59 (= ?e40 ?e36)) +(flet ($e60 (= ?e23 ?e33)) +(flet ($e61 (= (zero_extend[1] ?e24) ?e29)) +(flet ($e62 (= ?e28 (zero_extend[1] ?e50))) +(flet ($e63 (= ?e6 ?e25)) +(flet ($e64 (= ?e49 (sign_extend[12] ?e21))) +(flet ($e65 (= ?e20 ?e38)) +(flet ($e66 (= (zero_extend[1] ?e16) ?e18)) +(flet ($e67 (= ?e50 ?e16)) +(flet ($e68 (= ?e20 ?e48)) +(flet ($e69 (= ?e17 ?e21)) +(flet ($e70 (= (sign_extend[12] ?e44) ?e46)) +(flet ($e71 (= ?e51 ?e47)) +(flet ($e72 (= ?e5 (sign_extend[9] ?e16))) +(flet ($e73 (= ?e16 ?e21)) +(flet ($e74 (= ?e5 (sign_extend[8] ?e27))) +(flet ($e75 (= (zero_extend[9] ?e21) ?e5)) +(flet ($e76 (= (sign_extend[8] ?e28) ?e5)) +(flet ($e77 (= (sign_extend[9] ?e10) ?e32)) +(flet ($e78 (= ?e28 (sign_extend[1] ?e11))) +(flet ($e79 (= ?e29 (sign_extend[1] ?e17))) +(flet ($e80 (= ?e36 ?e15)) +(flet ($e81 (= (sign_extend[11] ?e45) v0)) +(flet ($e82 (= ?e27 (sign_extend[1] ?e40))) +(flet ($e83 (= ?e28 (zero_extend[1] ?e44))) +(flet ($e84 (= v2 (zero_extend[1] v0))) +(flet ($e85 (= ?e32 (sign_extend[9] ?e47))) +(flet ($e86 (= v3 (sign_extend[9] ?e24))) +(flet ($e87 (= ?e46 (sign_extend[12] ?e52))) +(flet ($e88 (= ?e46 ?e46)) +(flet ($e89 (= v2 (sign_extend[12] ?e20))) +(flet ($e90 (= v0 (sign_extend[10] ?e23))) +(flet ($e91 (= (zero_extend[9] ?e11) ?e4)) +(flet ($e92 (= ?e52 ?e17)) +(flet ($e93 (= v2 (zero_extend[12] ?e40))) +(flet ($e94 (= ?e35 ?e51)) +(flet ($e95 (= ?e42 ?e10)) +(flet ($e96 (= ?e47 ?e43)) +(flet ($e97 (= (zero_extend[1] ?e11) v1)) +(flet ($e98 (= (zero_extend[1] ?e32) ?e30)) +(flet ($e99 (= ?e23 (zero_extend[1] ?e11))) +(flet ($e100 (= ?e44 ?e22)) +(flet ($e101 (= ?e31 (sign_extend[12] ?e16))) +(flet ($e102 (= ?e32 (zero_extend[8] ?e27))) +(flet ($e103 (= (zero_extend[9] ?e45) ?e5)) +(flet ($e104 (= ?e27 ?e13)) +(flet ($e105 (= (zero_extend[1] ?e7) ?e13)) +(flet ($e106 (= ?e33 (zero_extend[1] ?e26))) +(flet ($e107 (= ?e13 (zero_extend[1] ?e51))) +(flet ($e108 (= ?e32 (zero_extend[9] ?e40))) +(flet ($e109 (= ?e29 v1)) +(flet ($e110 (= ?e35 ?e20)) +(flet ($e111 (= ?e34 (sign_extend[1] ?e19))) +(flet ($e112 (= ?e52 ?e52)) +(flet ($e113 (= (sign_extend[12] ?e40) ?e49)) +(flet ($e114 (= ?e47 ?e47)) +(flet ($e115 (= (zero_extend[12] ?e35) ?e46)) +(flet ($e116 (= (sign_extend[11] ?e35) v0)) +(flet ($e117 (= ?e4 (zero_extend[9] ?e38))) +(flet ($e118 (= v2 (sign_extend[12] ?e7))) +(flet ($e119 (= ?e47 ?e20)) +(flet ($e120 (= (zero_extend[1] ?e11) ?e9)) +(flet ($e121 (= ?e29 (zero_extend[1] ?e16))) +(flet ($e122 (= v0 (zero_extend[11] ?e24))) +(flet ($e123 (= ?e51 ?e36)) +(flet ($e124 (= (sign_extend[8] ?e13) v3)) +(flet ($e125 (= v1 (zero_extend[1] ?e45))) +(flet ($e126 (= (sign_extend[1] ?e48) ?e33)) +(flet ($e127 (= ?e45 ?e7)) +(flet ($e128 (= ?e26 ?e47)) +(flet ($e129 (= (zero_extend[11] v1) ?e41)) +(flet ($e130 (= (sign_extend[1] v0) v2)) +(flet ($e131 (= ?e5 (sign_extend[9] ?e26))) +(flet ($e132 (= (sign_extend[11] ?e48) v0)) +(flet ($e133 (= ?e38 ?e50)) +(flet ($e134 (= ?e13 v1)) +(flet ($e135 (= (sign_extend[1] ?e42) ?e23)) +(flet ($e136 (= ?e20 ?e7)) +(flet ($e137 (= ?e39 ?e19)) +(flet ($e138 (= ?e52 ?e38)) +(flet ($e139 (= ?e5 (zero_extend[9] ?e11))) +(flet ($e140 (= (sign_extend[11] ?e34) ?e49)) +(flet ($e141 (= ?e18 ?e28)) +(flet ($e142 (= ?e43 ?e26)) +(flet ($e143 (= ?e14 ?e16)) +(flet ($e144 (= ?e10 ?e40)) +(flet ($e145 (= ?e6 ?e45)) +(flet ($e146 (= ?e29 ?e18)) +(flet ($e147 (= ?e5 (sign_extend[9] ?e48))) +(flet ($e148 (= (zero_extend[9] ?e19) v3)) +(flet ($e149 (= ?e33 (sign_extend[1] ?e22))) +(flet ($e150 (= ?e50 ?e10)) +(flet ($e151 (= (sign_extend[9] ?e35) v3)) +(flet ($e152 (= ?e23 (zero_extend[1] ?e21))) +(flet ($e153 (= v2 (zero_extend[12] ?e15))) +(flet ($e154 (= v1 (sign_extend[1] ?e38))) +(flet ($e155 (= ?e23 (zero_extend[1] ?e22))) +(flet ($e156 (= ?e34 (zero_extend[1] ?e42))) +(flet ($e157 (= (zero_extend[9] ?e15) ?e4)) +(flet ($e158 (= v3 (sign_extend[9] ?e8))) +(flet ($e159 (= (sign_extend[9] ?e14) ?e32)) +(flet ($e160 (= (sign_extend[10] ?e13) v0)) +(flet ($e161 (= (zero_extend[1] ?e35) ?e12)) +(flet ($e162 (iff $e69 $e132)) +(flet ($e163 (and $e62 $e124)) +(flet ($e164 (iff $e152 $e133)) +(flet ($e165 (not $e65)) +(flet ($e166 (and $e159 $e57)) +(flet ($e167 (and $e163 $e56)) +(flet ($e168 (and $e129 $e90)) +(flet ($e169 (if_then_else $e54 $e102 $e91)) +(flet ($e170 (xor $e127 $e61)) +(flet ($e171 (iff $e137 $e59)) +(flet ($e172 (implies $e87 $e78)) +(flet ($e173 (iff $e77 $e81)) +(flet ($e174 (if_then_else $e170 $e161 $e171)) +(flet ($e175 (if_then_else $e174 $e94 $e92)) +(flet ($e176 (or $e168 $e55)) +(flet ($e177 (and $e121 $e88)) +(flet ($e178 (or $e167 $e131)) +(flet ($e179 (or $e126 $e125)) +(flet ($e180 (or $e151 $e79)) +(flet ($e181 (not $e122)) +(flet ($e182 (or $e112 $e83)) +(flet ($e183 (or $e130 $e136)) +(flet ($e184 (xor $e105 $e153)) +(flet ($e185 (if_then_else $e148 $e128 $e66)) +(flet ($e186 (iff $e109 $e154)) +(flet ($e187 (and $e119 $e96)) +(flet ($e188 (if_then_else $e179 $e64 $e140)) +(flet ($e189 (xor $e134 $e123)) +(flet ($e190 (implies $e97 $e165)) +(flet ($e191 (or $e188 $e71)) +(flet ($e192 (and $e145 $e185)) +(flet ($e193 (or $e191 $e99)) +(flet ($e194 (implies $e53 $e89)) +(flet ($e195 (iff $e180 $e116)) +(flet ($e196 (and $e84 $e117)) +(flet ($e197 (or $e135 $e75)) +(flet ($e198 (xor $e82 $e197)) +(flet ($e199 (if_then_else $e142 $e195 $e177)) +(flet ($e200 (implies $e181 $e73)) +(flet ($e201 (or $e169 $e70)) +(flet ($e202 (or $e150 $e106)) +(flet ($e203 (xor $e110 $e115)) +(flet ($e204 (or $e60 $e60)) +(flet ($e205 (implies $e138 $e187)) +(flet ($e206 (and $e194 $e156)) +(flet ($e207 (not $e114)) +(flet ($e208 (if_then_else $e147 $e63 $e118)) +(flet ($e209 (not $e86)) +(flet ($e210 (xor $e202 $e178)) +(flet ($e211 (if_then_else $e210 $e58 $e100)) +(flet ($e212 (implies $e113 $e166)) +(flet ($e213 (iff $e120 $e141)) +(flet ($e214 (and $e157 $e196)) +(flet ($e215 (if_then_else $e72 $e199 $e68)) +(flet ($e216 (not $e146)) +(flet ($e217 (and $e215 $e95)) +(flet ($e218 (not $e139)) +(flet ($e219 (xor $e214 $e176)) +(flet ($e220 (or $e175 $e211)) +(flet ($e221 (if_then_else $e162 $e198 $e172)) +(flet ($e222 (xor $e221 $e189)) +(flet ($e223 (xor $e213 $e104)) +(flet ($e224 (not $e206)) +(flet ($e225 (and $e203 $e108)) +(flet ($e226 (iff $e200 $e155)) +(flet ($e227 (if_then_else $e111 $e208 $e144)) +(flet ($e228 (implies $e227 $e85)) +(flet ($e229 (not $e223)) +(flet ($e230 (implies $e217 $e205)) +(flet ($e231 (iff $e204 $e80)) +(flet ($e232 (implies $e107 $e143)) +(flet ($e233 (if_then_else $e209 $e220 $e209)) +(flet ($e234 (or $e74 $e225)) +(flet ($e235 (or $e103 $e103)) +(flet ($e236 (implies $e67 $e234)) +(flet ($e237 (xor $e232 $e182)) +(flet ($e238 (xor $e190 $e235)) +(flet ($e239 (or $e231 $e233)) +(flet ($e240 (implies $e212 $e186)) +(flet ($e241 (iff $e218 $e237)) +(flet ($e242 (not $e238)) +(flet ($e243 (xor $e193 $e240)) +(flet ($e244 (implies $e228 $e222)) +(flet ($e245 (not $e230)) +(flet ($e246 (iff $e224 $e93)) +(flet ($e247 (and $e158 $e207)) +(flet ($e248 (if_then_else $e229 $e245 $e183)) +(flet ($e249 (iff $e98 $e184)) +(flet ($e250 (iff $e244 $e242)) +(flet ($e251 (if_then_else $e149 $e101 $e250)) +(flet ($e252 (xor $e236 $e173)) +(flet ($e253 (xor $e248 $e226)) +(flet ($e254 (and $e249 $e192)) +(flet ($e255 (if_then_else $e246 $e254 $e247)) +(flet ($e256 (if_then_else $e76 $e255 $e239)) +(flet ($e257 (not $e256)) +(flet ($e258 (or $e257 $e164)) +(flet ($e259 (or $e243 $e258)) +(flet ($e260 (iff $e219 $e216)) +(flet ($e261 (xor $e160 $e201)) +(flet ($e262 (not $e241)) +(flet ($e263 (not $e252)) +(flet ($e264 (not $e259)) +(flet ($e265 (and $e261 $e251)) +(flet ($e266 (if_then_else $e253 $e260 $e253)) +(flet ($e267 (implies $e264 $e264)) +(flet ($e268 (if_then_else $e266 $e266 $e265)) +(flet ($e269 (iff $e263 $e267)) +(flet ($e270 (if_then_else $e262 $e269 $e269)) +(flet ($e271 (and $e270 $e270)) +(flet ($e272 (not $e271)) +(flet ($e273 (xor $e272 $e272)) +(flet ($e274 (iff $e273 $e268)) +$e274 +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz06.smt b/test/regress/regress0/bv/fuzz06.smt new file mode 100644 index 000000000..6fc41f3c4 --- /dev/null +++ b/test/regress/regress0/bv/fuzz06.smt @@ -0,0 +1,218 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[9])) +:extrafuns ((v1 BitVec[2])) +:extrafuns ((v2 BitVec[1])) +:extrafuns ((v3 BitVec[3])) +:formula +(let (?e4 bv256[9]) +(let (?e5 bv68[7]) +(let (?e6 (extract[0:0] v1)) +(let (?e7 (extract[1:0] v1)) +(let (?e8 (bvsub ?e4 (sign_extend[8] ?e6))) +(let (?e9 (zero_extend[1] v3)) +(let (?e10 (rotate_right[1] v1)) +(let (?e11 (ite (bvult ?e7 ?e7) bv1[1] bv0[1])) +(let (?e12 (extract[1:1] ?e9)) +(let (?e13 (extract[3:1] ?e9)) +(let (?e14 (ite (bvule (sign_extend[2] ?e12) v3) bv1[1] bv0[1])) +(let (?e15 (rotate_left[0] v2)) +(let (?e16 (bvadd ?e14 ?e6)) +(let (?e17 (extract[0:0] ?e16)) +(let (?e18 (bvxnor ?e10 (zero_extend[1] v2))) +(let (?e19 (bvnot v2)) +(let (?e20 (bvadd ?e18 ?e18)) +(let (?e21 (bvnand v3 (sign_extend[2] v2))) +(let (?e22 (bvnot ?e9)) +(let (?e23 (ite (bvslt ?e15 ?e14) bv1[1] bv0[1])) +(let (?e24 (bvcomp (sign_extend[2] ?e10) ?e9)) +(let (?e25 (bvor (zero_extend[1] ?e17) ?e10)) +(let (?e26 (bvand (zero_extend[1] ?e15) ?e25)) +(let (?e27 (ite (distinct (sign_extend[1] ?e26) ?e21) bv1[1] bv0[1])) +(let (?e28 (ite (bvult ?e11 ?e11) bv1[1] bv0[1])) +(let (?e29 (ite (bvugt ?e26 ?e10) bv1[1] bv0[1])) +(let (?e30 (bvadd ?e18 (sign_extend[1] ?e19))) +(let (?e31 (ite (= bv1[1] (extract[0:0] ?e5)) ?e9 (sign_extend[3] ?e19))) +(let (?e32 (bvmul (zero_extend[3] ?e24) ?e31)) +(let (?e33 (ite (bvslt ?e10 (zero_extend[1] ?e12)) bv1[1] bv0[1])) +(let (?e34 (ite (= bv1[1] (extract[0:0] ?e16)) ?e21 (zero_extend[2] ?e15))) +(let (?e35 (ite (bvslt v3 (zero_extend[2] ?e23)) bv1[1] bv0[1])) +(let (?e36 (rotate_right[0] ?e23)) +(let (?e37 (extract[1:1] ?e10)) +(let (?e38 (bvcomp (sign_extend[3] ?e19) ?e31)) +(let (?e39 (bvmul (sign_extend[8] ?e6) v0)) +(flet ($e40 (= ?e15 ?e27)) +(flet ($e41 (= v1 (sign_extend[1] ?e33))) +(flet ($e42 (= ?e36 ?e35)) +(flet ($e43 (= ?e22 (zero_extend[2] ?e30))) +(flet ($e44 (= (sign_extend[1] ?e33) ?e25)) +(flet ($e45 (= ?e18 ?e26)) +(flet ($e46 (= (zero_extend[5] ?e20) ?e5)) +(flet ($e47 (= ?e9 ?e32)) +(flet ($e48 (= (zero_extend[2] ?e37) ?e34)) +(flet ($e49 (= ?e32 (sign_extend[2] ?e25))) +(flet ($e50 (= (sign_extend[2] ?e20) ?e22)) +(flet ($e51 (= v0 (sign_extend[5] ?e9))) +(flet ($e52 (= ?e5 (sign_extend[6] ?e15))) +(flet ($e53 (= ?e11 ?e36)) +(flet ($e54 (= ?e6 ?e15)) +(flet ($e55 (= (zero_extend[8] ?e23) ?e8)) +(flet ($e56 (= ?e8 (zero_extend[8] ?e14))) +(flet ($e57 (= ?e20 ?e25)) +(flet ($e58 (= ?e11 ?e38)) +(flet ($e59 (= ?e11 ?e12)) +(flet ($e60 (= (zero_extend[5] ?e22) ?e4)) +(flet ($e61 (= (sign_extend[5] ?e32) ?e4)) +(flet ($e62 (= (sign_extend[1] ?e35) ?e7)) +(flet ($e63 (= ?e39 ?e39)) +(flet ($e64 (= ?e16 ?e11)) +(flet ($e65 (= ?e29 ?e14)) +(flet ($e66 (= (sign_extend[7] ?e30) v0)) +(flet ($e67 (= ?e4 (zero_extend[5] ?e22))) +(flet ($e68 (= ?e26 ?e18)) +(flet ($e69 (= ?e8 (zero_extend[7] ?e26))) +(flet ($e70 (= (sign_extend[3] ?e33) ?e31)) +(flet ($e71 (= ?e38 v2)) +(flet ($e72 (= (sign_extend[1] ?e24) ?e10)) +(flet ($e73 (= (zero_extend[8] ?e27) ?e4)) +(flet ($e74 (= (sign_extend[1] ?e28) ?e7)) +(flet ($e75 (= (sign_extend[8] v2) ?e8)) +(flet ($e76 (= ?e15 ?e24)) +(flet ($e77 (= ?e22 ?e31)) +(flet ($e78 (= ?e23 ?e6)) +(flet ($e79 (= ?e6 ?e27)) +(flet ($e80 (= ?e18 (sign_extend[1] ?e27))) +(flet ($e81 (= (sign_extend[1] ?e18) v3)) +(flet ($e82 (= ?e5 (zero_extend[6] ?e16))) +(flet ($e83 (= ?e23 ?e12)) +(flet ($e84 (= ?e30 (zero_extend[1] ?e37))) +(flet ($e85 (= (zero_extend[1] ?e38) ?e20)) +(flet ($e86 (= (sign_extend[8] ?e19) ?e8)) +(flet ($e87 (= ?e39 (zero_extend[6] ?e21))) +(flet ($e88 (= ?e21 (zero_extend[2] ?e6))) +(flet ($e89 (= (zero_extend[3] ?e28) ?e31)) +(flet ($e90 (= ?e32 (zero_extend[2] ?e25))) +(flet ($e91 (= ?e22 (zero_extend[1] ?e34))) +(flet ($e92 (= (zero_extend[6] ?e21) ?e39)) +(flet ($e93 (= ?e18 (sign_extend[1] ?e15))) +(flet ($e94 (= (zero_extend[1] ?e28) ?e20)) +(flet ($e95 (= ?e7 v1)) +(flet ($e96 (= (sign_extend[5] ?e31) ?e4)) +(flet ($e97 (= ?e17 ?e37)) +(flet ($e98 (= (zero_extend[3] ?e6) ?e31)) +(flet ($e99 (= ?e21 (sign_extend[2] ?e24))) +(flet ($e100 (= (zero_extend[3] ?e19) ?e22)) +(flet ($e101 (= ?e22 (sign_extend[3] ?e15))) +(flet ($e102 (= ?e11 ?e24)) +(flet ($e103 (= ?e34 (zero_extend[2] ?e16))) +(flet ($e104 (= ?e12 v2)) +(flet ($e105 (= ?e12 ?e37)) +(flet ($e106 (= ?e26 (zero_extend[1] ?e15))) +(flet ($e107 (= (zero_extend[2] ?e26) ?e22)) +(flet ($e108 (= (zero_extend[3] v2) ?e9)) +(flet ($e109 (= (sign_extend[5] ?e32) ?e8)) +(flet ($e110 (= ?e24 ?e17)) +(flet ($e111 (= ?e20 (sign_extend[1] ?e28))) +(flet ($e112 (= (sign_extend[6] ?e27) ?e5)) +(flet ($e113 (= (zero_extend[6] ?e34) ?e8)) +(flet ($e114 (= (sign_extend[7] ?e25) ?e8)) +(flet ($e115 (= ?e8 (zero_extend[7] ?e20))) +(flet ($e116 (= ?e20 (sign_extend[1] ?e36))) +(flet ($e117 (= ?e20 (sign_extend[1] ?e37))) +(flet ($e118 (= (sign_extend[7] ?e10) ?e39)) +(flet ($e119 (= ?e36 ?e16)) +(flet ($e120 (= ?e21 (zero_extend[1] ?e10))) +(flet ($e121 (= ?e38 ?e11)) +(flet ($e122 (= (sign_extend[1] ?e20) ?e34)) +(flet ($e123 (= ?e5 (zero_extend[4] ?e13))) +(flet ($e124 (not $e79)) +(flet ($e125 (if_then_else $e50 $e63 $e115)) +(flet ($e126 (if_then_else $e54 $e120 $e40)) +(flet ($e127 (if_then_else $e85 $e117 $e87)) +(flet ($e128 (iff $e127 $e95)) +(flet ($e129 (and $e76 $e46)) +(flet ($e130 (if_then_else $e93 $e42 $e65)) +(flet ($e131 (implies $e113 $e92)) +(flet ($e132 (not $e125)) +(flet ($e133 (implies $e62 $e61)) +(flet ($e134 (iff $e74 $e110)) +(flet ($e135 (and $e66 $e56)) +(flet ($e136 (if_then_else $e78 $e64 $e83)) +(flet ($e137 (if_then_else $e84 $e124 $e43)) +(flet ($e138 (if_then_else $e128 $e89 $e67)) +(flet ($e139 (not $e136)) +(flet ($e140 (or $e73 $e121)) +(flet ($e141 (if_then_else $e129 $e138 $e101)) +(flet ($e142 (and $e131 $e139)) +(flet ($e143 (if_then_else $e41 $e123 $e130)) +(flet ($e144 (xor $e100 $e81)) +(flet ($e145 (implies $e98 $e97)) +(flet ($e146 (xor $e71 $e143)) +(flet ($e147 (xor $e126 $e80)) +(flet ($e148 (if_then_else $e99 $e111 $e103)) +(flet ($e149 (implies $e47 $e88)) +(flet ($e150 (not $e140)) +(flet ($e151 (xor $e146 $e86)) +(flet ($e152 (and $e119 $e148)) +(flet ($e153 (not $e106)) +(flet ($e154 (xor $e114 $e104)) +(flet ($e155 (and $e58 $e91)) +(flet ($e156 (xor $e44 $e57)) +(flet ($e157 (if_then_else $e141 $e154 $e135)) +(flet ($e158 (if_then_else $e134 $e102 $e132)) +(flet ($e159 (iff $e108 $e109)) +(flet ($e160 (or $e90 $e53)) +(flet ($e161 (not $e77)) +(flet ($e162 (not $e157)) +(flet ($e163 (implies $e55 $e82)) +(flet ($e164 (implies $e69 $e51)) +(flet ($e165 (and $e164 $e116)) +(flet ($e166 (and $e133 $e161)) +(flet ($e167 (not $e165)) +(flet ($e168 (or $e159 $e162)) +(flet ($e169 (or $e112 $e153)) +(flet ($e170 (iff $e149 $e94)) +(flet ($e171 (or $e156 $e49)) +(flet ($e172 (and $e105 $e170)) +(flet ($e173 (and $e168 $e48)) +(flet ($e174 (iff $e172 $e151)) +(flet ($e175 (or $e60 $e118)) +(flet ($e176 (if_then_else $e155 $e142 $e175)) +(flet ($e177 (implies $e150 $e137)) +(flet ($e178 (if_then_else $e173 $e158 $e158)) +(flet ($e179 (not $e152)) +(flet ($e180 (not $e176)) +(flet ($e181 (xor $e144 $e59)) +(flet ($e182 (not $e171)) +(flet ($e183 (implies $e70 $e75)) +(flet ($e184 (and $e166 $e182)) +(flet ($e185 (and $e184 $e169)) +(flet ($e186 (not $e183)) +(flet ($e187 (not $e68)) +(flet ($e188 (implies $e185 $e180)) +(flet ($e189 (and $e122 $e188)) +(flet ($e190 (not $e181)) +(flet ($e191 (not $e174)) +(flet ($e192 (or $e145 $e72)) +(flet ($e193 (not $e160)) +(flet ($e194 (if_then_else $e177 $e178 $e45)) +(flet ($e195 (xor $e193 $e147)) +(flet ($e196 (or $e190 $e190)) +(flet ($e197 (xor $e179 $e192)) +(flet ($e198 (iff $e52 $e195)) +(flet ($e199 (or $e187 $e196)) +(flet ($e200 (implies $e194 $e96)) +(flet ($e201 (not $e189)) +(flet ($e202 (or $e191 $e167)) +(flet ($e203 (if_then_else $e198 $e186 $e202)) +(flet ($e204 (iff $e163 $e201)) +(flet ($e205 (if_then_else $e199 $e199 $e200)) +(flet ($e206 (implies $e197 $e204)) +(flet ($e207 (or $e203 $e107)) +(flet ($e208 (and $e205 $e206)) +(flet ($e209 (and $e208 $e208)) +(flet ($e210 (and $e209 $e207)) +$e210 +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz07.smt b/test/regress/regress0/bv/fuzz07.smt new file mode 100644 index 000000000..c813a31be --- /dev/null +++ b/test/regress/regress0/bv/fuzz07.smt @@ -0,0 +1,395 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[5])) +:extrafuns ((v1 BitVec[2])) +:extrafuns ((v2 BitVec[4])) +:formula +(let (?e3 bv2[2]) +(let (?e4 bv2[2]) +(let (?e5 (bvnot ?e3)) +(let (?e6 (bvadd ?e4 v1)) +(let (?e7 (bvand ?e5 ?e6)) +(let (?e8 (bvashr v0 (sign_extend[3] ?e5))) +(let (?e9 (bvshl ?e4 ?e4)) +(let (?e10 (ite (bvsle ?e3 ?e6) bv1[1] bv0[1])) +(let (?e11 (bvxor ?e3 (sign_extend[1] ?e10))) +(let (?e12 (ite (= (sign_extend[3] ?e7) ?e8) bv1[1] bv0[1])) +(let (?e13 (bvor (zero_extend[1] ?e10) ?e5)) +(let (?e14 (concat ?e12 v0)) +(let (?e15 (bvand (zero_extend[1] ?e12) ?e6)) +(let (?e16 (bvnot ?e15)) +(let (?e17 (ite (bvsgt ?e8 (zero_extend[3] ?e13)) bv1[1] bv0[1])) +(let (?e18 (extract[0:0] ?e9)) +(let (?e19 (repeat[1] ?e7)) +(let (?e20 (ite (distinct ?e5 (zero_extend[1] ?e17)) bv1[1] bv0[1])) +(let (?e21 (bvlshr ?e3 (zero_extend[1] ?e12))) +(let (?e22 (bvcomp (zero_extend[1] ?e10) ?e6)) +(let (?e23 (sign_extend[2] ?e10)) +(let (?e24 (ite (bvule ?e16 ?e11) bv1[1] bv0[1])) +(let (?e25 (bvcomp ?e20 ?e10)) +(let (?e26 (bvshl (sign_extend[1] ?e17) ?e21)) +(let (?e27 (bvnot ?e11)) +(let (?e28 (bvsub (sign_extend[4] ?e16) ?e14)) +(let (?e29 (bvlshr ?e21 ?e27)) +(let (?e30 (bvneg ?e14)) +(let (?e31 (ite (bvugt ?e22 ?e17) bv1[1] bv0[1])) +(let (?e32 (ite (bvsge ?e19 ?e6) bv1[1] bv0[1])) +(let (?e33 (bvlshr ?e15 (sign_extend[1] ?e31))) +(let (?e34 (bvcomp (sign_extend[4] ?e15) ?e28)) +(let (?e35 (bvcomp (zero_extend[4] ?e26) ?e14)) +(let (?e36 (ite (bvsge ?e16 ?e13) bv1[1] bv0[1])) +(let (?e37 (rotate_right[0] ?e22)) +(let (?e38 (rotate_left[0] ?e35)) +(let (?e39 (bvsub ?e15 (sign_extend[1] ?e35))) +(let (?e40 (ite (= bv1[1] (extract[0:0] ?e31)) ?e6 ?e5)) +(let (?e41 (bvand (sign_extend[1] ?e31) ?e33)) +(let (?e42 (bvxor (zero_extend[3] ?e41) ?e8)) +(let (?e43 (bvmul ?e3 (zero_extend[1] ?e12))) +(let (?e44 (ite (bvsle (sign_extend[1] ?e18) ?e41) bv1[1] bv0[1])) +(let (?e45 (bvnand ?e26 ?e3)) +(let (?e46 (ite (bvsgt ?e23 (zero_extend[1] ?e4)) bv1[1] bv0[1])) +(let (?e47 (bvand ?e38 ?e37)) +(let (?e48 (bvneg ?e27)) +(let (?e49 (ite (= bv1[1] (extract[1:1] ?e13)) ?e3 (sign_extend[1] ?e24))) +(let (?e50 (concat ?e5 ?e38)) +(let (?e51 (bvadd ?e13 (sign_extend[1] ?e10))) +(let (?e52 (bvxnor (zero_extend[1] ?e6) ?e50)) +(let (?e53 (concat v1 ?e35)) +(let (?e54 (bvlshr ?e27 ?e41)) +(let (?e55 (ite (bvsle ?e29 ?e40) bv1[1] bv0[1])) +(let (?e56 (ite (bvugt (sign_extend[3] ?e45) ?e42) bv1[1] bv0[1])) +(let (?e57 (zero_extend[12] ?e5)) +(let (?e58 (bvcomp (sign_extend[3] ?e40) v0)) +(let (?e59 (ite (distinct ?e23 (zero_extend[2] ?e35)) bv1[1] bv0[1])) +(let (?e60 (bvor (sign_extend[1] ?e17) ?e26)) +(let (?e61 (ite (distinct ?e55 ?e38) bv1[1] bv0[1])) +(let (?e62 (bvnot ?e21)) +(let (?e63 (ite (bvuge (zero_extend[1] ?e32) ?e21) bv1[1] bv0[1])) +(let (?e64 (bvneg ?e17)) +(let (?e65 (rotate_right[0] ?e20)) +(let (?e66 (sign_extend[13] ?e15)) +(let (?e67 (ite (= ?e61 ?e55) bv1[1] bv0[1])) +(let (?e68 (bvor (sign_extend[1] ?e65) ?e49)) +(let (?e69 (zero_extend[4] ?e64)) +(let (?e70 (ite (bvugt ?e23 (zero_extend[1] ?e19)) bv1[1] bv0[1])) +(let (?e71 (bvneg ?e68)) +(let (?e72 (sign_extend[14] ?e54)) +(let (?e73 (ite (bvslt ?e14 (zero_extend[5] ?e37)) bv1[1] bv0[1])) +(let (?e74 (bvshl ?e53 (zero_extend[1] ?e7))) +(let (?e75 (repeat[4] ?e16)) +(let (?e76 (repeat[3] ?e51)) +(let (?e77 (ite (bvsle ?e28 ?e76) bv1[1] bv0[1])) +(let (?e78 (rotate_right[1] ?e42)) +(let (?e79 (bvor ?e65 ?e20)) +(let (?e80 (bvashr ?e19 ?e3)) +(let (?e81 (ite (distinct ?e23 (zero_extend[2] ?e44)) bv1[1] bv0[1])) +(let (?e82 (rotate_right[0] ?e15)) +(let (?e83 (bvashr ?e35 ?e35)) +(let (?e84 (bvsub ?e78 (sign_extend[2] ?e53))) +(let (?e85 (bvsub ?e11 (zero_extend[1] ?e36))) +(let (?e86 (ite (bvugt ?e53 (zero_extend[1] ?e33)) bv1[1] bv0[1])) +(let (?e87 (ite (bvugt (zero_extend[6] ?e48) ?e75) bv1[1] bv0[1])) +(let (?e88 (bvmul (zero_extend[3] ?e3) v0)) +(let (?e89 (concat ?e9 ?e14)) +(let (?e90 (ite (bvsle v2 v2) bv1[1] bv0[1])) +(flet ($e91 (= ?e54 ?e26)) +(flet ($e92 (= ?e3 (sign_extend[1] ?e77))) +(flet ($e93 (= ?e49 (sign_extend[1] ?e10))) +(flet ($e94 (= ?e85 (sign_extend[1] ?e73))) +(flet ($e95 (= ?e52 (sign_extend[2] ?e73))) +(flet ($e96 (= (sign_extend[1] ?e47) v1)) +(flet ($e97 (= (zero_extend[7] ?e20) ?e75)) +(flet ($e98 (= ?e57 (zero_extend[12] ?e15))) +(flet ($e99 (= ?e25 ?e90)) +(flet ($e100 (= ?e26 (sign_extend[1] ?e46))) +(flet ($e101 (= v1 (sign_extend[1] ?e31))) +(flet ($e102 (= ?e89 (zero_extend[7] ?e77))) +(flet ($e103 (= (zero_extend[4] ?e41) ?e30)) +(flet ($e104 (= ?e71 v1)) +(flet ($e105 (= (sign_extend[1] ?e83) ?e51)) +(flet ($e106 (= ?e32 ?e56)) +(flet ($e107 (= ?e25 ?e24)) +(flet ($e108 (= (sign_extend[1] ?e27) ?e74)) +(flet ($e109 (= ?e7 ?e15)) +(flet ($e110 (= (zero_extend[1] ?e70) ?e49)) +(flet ($e111 (= (sign_extend[1] ?e44) ?e15)) +(flet ($e112 (= ?e24 ?e63)) +(flet ($e113 (= ?e39 (sign_extend[1] ?e83))) +(flet ($e114 (= v1 (sign_extend[1] ?e70))) +(flet ($e115 (= ?e76 (sign_extend[1] v0))) +(flet ($e116 (= ?e77 ?e22)) +(flet ($e117 (= v1 (sign_extend[1] ?e59))) +(flet ($e118 (= ?e3 (sign_extend[1] ?e67))) +(flet ($e119 (= ?e39 ?e45)) +(flet ($e120 (= ?e42 (zero_extend[2] ?e50))) +(flet ($e121 (= (zero_extend[8] ?e14) ?e57)) +(flet ($e122 (= ?e28 (sign_extend[3] ?e23))) +(flet ($e123 (= (zero_extend[1] ?e37) ?e40)) +(flet ($e124 (= (sign_extend[5] ?e63) ?e30)) +(flet ($e125 (= ?e16 (sign_extend[1] ?e37))) +(flet ($e126 (= ?e81 ?e24)) +(flet ($e127 (= (zero_extend[1] ?e46) ?e54)) +(flet ($e128 (= ?e3 (sign_extend[1] ?e90))) +(flet ($e129 (= (zero_extend[1] ?e12) ?e21)) +(flet ($e130 (= ?e89 (zero_extend[3] ?e88))) +(flet ($e131 (= ?e31 ?e63)) +(flet ($e132 (= ?e15 ?e16)) +(flet ($e133 (= ?e72 (zero_extend[15] ?e81))) +(flet ($e134 (= ?e27 ?e41)) +(flet ($e135 (= ?e67 ?e12)) +(flet ($e136 (= (sign_extend[1] ?e65) ?e41)) +(flet ($e137 (= ?e69 (sign_extend[4] ?e81))) +(flet ($e138 (= ?e40 (zero_extend[1] ?e87))) +(flet ($e139 (= ?e59 ?e44)) +(flet ($e140 (= (zero_extend[5] ?e67) ?e28)) +(flet ($e141 (= ?e68 (sign_extend[1] ?e86))) +(flet ($e142 (= (zero_extend[2] ?e37) ?e23)) +(flet ($e143 (= (zero_extend[13] ?e6) ?e66)) +(flet ($e144 (= (zero_extend[5] ?e25) ?e76)) +(flet ($e145 (= ?e14 (zero_extend[4] ?e71))) +(flet ($e146 (= ?e5 ?e26)) +(flet ($e147 (= ?e17 ?e44)) +(flet ($e148 (= ?e64 ?e81)) +(flet ($e149 (= ?e60 (zero_extend[1] ?e83))) +(flet ($e150 (= ?e28 (sign_extend[5] ?e22))) +(flet ($e151 (= ?e50 (zero_extend[2] ?e87))) +(flet ($e152 (= ?e34 ?e47)) +(flet ($e153 (= (zero_extend[1] ?e65) ?e60)) +(flet ($e154 (= (zero_extend[1] ?e44) ?e5)) +(flet ($e155 (= ?e40 (sign_extend[1] ?e31))) +(flet ($e156 (= ?e78 ?e78)) +(flet ($e157 (= ?e76 (zero_extend[4] ?e49))) +(flet ($e158 (= ?e34 ?e67)) +(flet ($e159 (= ?e33 ?e45)) +(flet ($e160 (= ?e26 ?e4)) +(flet ($e161 (= ?e89 (sign_extend[6] ?e11))) +(flet ($e162 (= ?e86 ?e47)) +(flet ($e163 (= ?e32 ?e46)) +(flet ($e164 (= (zero_extend[2] ?e58) ?e23)) +(flet ($e165 (= ?e24 ?e64)) +(flet ($e166 (= ?e10 ?e24)) +(flet ($e167 (= ?e78 (zero_extend[3] ?e19))) +(flet ($e168 (= (sign_extend[6] ?e54) ?e89)) +(flet ($e169 (= ?e89 (sign_extend[7] ?e37))) +(flet ($e170 (= ?e42 (zero_extend[3] ?e13))) +(flet ($e171 (= ?e54 (sign_extend[1] ?e56))) +(flet ($e172 (= ?e27 ?e62)) +(flet ($e173 (= ?e75 (sign_extend[6] ?e4))) +(flet ($e174 (= ?e33 ?e80)) +(flet ($e175 (= (sign_extend[1] ?e17) ?e16)) +(flet ($e176 (= ?e17 ?e17)) +(flet ($e177 (= ?e80 ?e68)) +(flet ($e178 (= ?e15 ?e26)) +(flet ($e179 (= ?e82 (zero_extend[1] ?e22))) +(flet ($e180 (= (zero_extend[1] ?e79) ?e45)) +(flet ($e181 (= ?e50 (sign_extend[2] ?e90))) +(flet ($e182 (= ?e62 ?e80)) +(flet ($e183 (= ?e4 (zero_extend[1] ?e18))) +(flet ($e184 (= ?e60 (sign_extend[1] ?e36))) +(flet ($e185 (= ?e56 ?e32)) +(flet ($e186 (= ?e15 (sign_extend[1] ?e61))) +(flet ($e187 (= ?e59 ?e37)) +(flet ($e188 (= ?e36 ?e65)) +(flet ($e189 (= (sign_extend[2] v2) ?e14)) +(flet ($e190 (= ?e36 ?e35)) +(flet ($e191 (= (zero_extend[5] ?e53) ?e75)) +(flet ($e192 (= (sign_extend[13] ?e55) ?e57)) +(flet ($e193 (= (sign_extend[3] ?e84) ?e89)) +(flet ($e194 (= ?e27 (zero_extend[1] ?e77))) +(flet ($e195 (= (sign_extend[2] ?e43) v2)) +(flet ($e196 (= ?e62 (zero_extend[1] ?e47))) +(flet ($e197 (= ?e14 (zero_extend[5] ?e59))) +(flet ($e198 (= ?e75 (sign_extend[6] ?e43))) +(flet ($e199 (= (zero_extend[12] v1) ?e57)) +(flet ($e200 (= ?e23 ?e50)) +(flet ($e201 (= (sign_extend[1] ?e70) ?e54)) +(flet ($e202 (= ?e45 ?e26)) +(flet ($e203 (= v2 (sign_extend[2] ?e41))) +(flet ($e204 (= ?e45 ?e62)) +(flet ($e205 (= (zero_extend[1] ?e32) ?e19)) +(flet ($e206 (= ?e49 (zero_extend[1] ?e81))) +(flet ($e207 (= ?e89 (zero_extend[6] ?e26))) +(flet ($e208 (= (sign_extend[4] ?e87) v0)) +(flet ($e209 (= ?e13 ?e4)) +(flet ($e210 (= v2 (sign_extend[2] ?e33))) +(flet ($e211 (= ?e66 (zero_extend[14] ?e61))) +(flet ($e212 (= (zero_extend[1] ?e24) ?e80)) +(flet ($e213 (= ?e5 ?e21)) +(flet ($e214 (= ?e21 ?e16)) +(flet ($e215 (= (zero_extend[13] ?e22) ?e57)) +(flet ($e216 (= ?e33 (zero_extend[1] ?e47))) +(flet ($e217 (= (sign_extend[4] ?e71) ?e76)) +(flet ($e218 (= (zero_extend[4] ?e86) ?e69)) +(flet ($e219 (= ?e63 ?e63)) +(flet ($e220 (= (zero_extend[1] ?e44) ?e33)) +(flet ($e221 (= ?e8 (zero_extend[3] ?e62))) +(flet ($e222 (= ?e71 ?e60)) +(flet ($e223 (= ?e56 ?e55)) +(flet ($e224 (= ?e48 ?e85)) +(flet ($e225 (= ?e52 (zero_extend[1] ?e27))) +(flet ($e226 (= ?e4 (sign_extend[1] ?e36))) +(flet ($e227 (= (sign_extend[1] ?e38) ?e49)) +(flet ($e228 (= ?e7 ?e11)) +(flet ($e229 (= (zero_extend[3] ?e44) v2)) +(flet ($e230 (= (zero_extend[4] ?e58) ?e88)) +(flet ($e231 (= ?e85 ?e5)) +(flet ($e232 (= ?e16 (zero_extend[1] ?e86))) +(flet ($e233 (= ?e75 (sign_extend[7] ?e12))) +(flet ($e234 (= ?e9 ?e9)) +(flet ($e235 (= ?e4 (sign_extend[1] ?e22))) +(flet ($e236 (= ?e84 (zero_extend[4] ?e70))) +(flet ($e237 (= ?e41 ?e29)) +(flet ($e238 (and $e142 $e200)) +(flet ($e239 (xor $e187 $e214)) +(flet ($e240 (or $e136 $e160)) +(flet ($e241 (xor $e144 $e224)) +(flet ($e242 (and $e151 $e181)) +(flet ($e243 (if_then_else $e158 $e141 $e148)) +(flet ($e244 (iff $e218 $e164)) +(flet ($e245 (iff $e92 $e156)) +(flet ($e246 (xor $e183 $e155)) +(flet ($e247 (xor $e134 $e185)) +(flet ($e248 (xor $e219 $e178)) +(flet ($e249 (if_then_else $e174 $e132 $e212)) +(flet ($e250 (implies $e152 $e246)) +(flet ($e251 (or $e194 $e215)) +(flet ($e252 (iff $e204 $e137)) +(flet ($e253 (and $e249 $e135)) +(flet ($e254 (xor $e115 $e171)) +(flet ($e255 (implies $e192 $e105)) +(flet ($e256 (or $e201 $e95)) +(flet ($e257 (or $e250 $e175)) +(flet ($e258 (xor $e213 $e113)) +(flet ($e259 (if_then_else $e248 $e143 $e248)) +(flet ($e260 (implies $e179 $e163)) +(flet ($e261 (and $e220 $e227)) +(flet ($e262 (xor $e261 $e193)) +(flet ($e263 (iff $e190 $e233)) +(flet ($e264 (or $e239 $e159)) +(flet ($e265 (or $e221 $e149)) +(flet ($e266 (not $e150)) +(flet ($e267 (or $e103 $e109)) +(flet ($e268 (implies $e139 $e262)) +(flet ($e269 (implies $e231 $e217)) +(flet ($e270 (not $e138)) +(flet ($e271 (or $e235 $e147)) +(flet ($e272 (and $e131 $e166)) +(flet ($e273 (xor $e207 $e191)) +(flet ($e274 (or $e123 $e91)) +(flet ($e275 (implies $e259 $e222)) +(flet ($e276 (not $e275)) +(flet ($e277 (if_then_else $e114 $e165 $e276)) +(flet ($e278 (and $e243 $e264)) +(flet ($e279 (implies $e154 $e273)) +(flet ($e280 (if_then_else $e119 $e236 $e226)) +(flet ($e281 (or $e228 $e176)) +(flet ($e282 (not $e229)) +(flet ($e283 (not $e208)) +(flet ($e284 (not $e128)) +(flet ($e285 (or $e230 $e254)) +(flet ($e286 (xor $e118 $e253)) +(flet ($e287 (not $e146)) +(flet ($e288 (not $e98)) +(flet ($e289 (or $e210 $e121)) +(flet ($e290 (not $e189)) +(flet ($e291 (and $e279 $e157)) +(flet ($e292 (implies $e117 $e281)) +(flet ($e293 (iff $e206 $e282)) +(flet ($e294 (iff $e101 $e172)) +(flet ($e295 (iff $e184 $e173)) +(flet ($e296 (or $e272 $e257)) +(flet ($e297 (and $e104 $e244)) +(flet ($e298 (if_then_else $e122 $e284 $e202)) +(flet ($e299 (not $e140)) +(flet ($e300 (not $e145)) +(flet ($e301 (not $e274)) +(flet ($e302 (implies $e170 $e205)) +(flet ($e303 (xor $e153 $e97)) +(flet ($e304 (if_then_else $e265 $e300 $e96)) +(flet ($e305 (xor $e255 $e296)) +(flet ($e306 (and $e294 $e267)) +(flet ($e307 (xor $e297 $e209)) +(flet ($e308 (or $e127 $e278)) +(flet ($e309 (if_then_else $e238 $e232 $e280)) +(flet ($e310 (or $e129 $e182)) +(flet ($e311 (iff $e100 $e216)) +(flet ($e312 (implies $e295 $e203)) +(flet ($e313 (if_then_else $e309 $e309 $e167)) +(flet ($e314 (iff $e162 $e289)) +(flet ($e315 (if_then_else $e130 $e234 $e304)) +(flet ($e316 (if_then_else $e251 $e94 $e195)) +(flet ($e317 (xor $e285 $e112)) +(flet ($e318 (or $e93 $e308)) +(flet ($e319 (or $e252 $e168)) +(flet ($e320 (not $e292)) +(flet ($e321 (if_then_else $e111 $e198 $e196)) +(flet ($e322 (not $e277)) +(flet ($e323 (if_then_else $e268 $e319 $e293)) +(flet ($e324 (or $e161 $e245)) +(flet ($e325 (or $e317 $e177)) +(flet ($e326 (if_then_else $e311 $e197 $e323)) +(flet ($e327 (or $e241 $e266)) +(flet ($e328 (and $e327 $e288)) +(flet ($e329 (not $e124)) +(flet ($e330 (and $e126 $e302)) +(flet ($e331 (if_then_else $e169 $e240 $e326)) +(flet ($e332 (if_then_else $e225 $e269 $e328)) +(flet ($e333 (and $e99 $e314)) +(flet ($e334 (not $e298)) +(flet ($e335 (implies $e263 $e283)) +(flet ($e336 (and $e313 $e331)) +(flet ($e337 (or $e258 $e325)) +(flet ($e338 (iff $e120 $e299)) +(flet ($e339 (xor $e211 $e306)) +(flet ($e340 (not $e106)) +(flet ($e341 (iff $e301 $e320)) +(flet ($e342 (if_then_else $e223 $e287 $e223)) +(flet ($e343 (or $e188 $e307)) +(flet ($e344 (xor $e247 $e199)) +(flet ($e345 (if_then_else $e260 $e286 $e318)) +(flet ($e346 (implies $e256 $e337)) +(flet ($e347 (and $e329 $e186)) +(flet ($e348 (if_then_else $e291 $e339 $e107)) +(flet ($e349 (not $e316)) +(flet ($e350 (if_then_else $e305 $e116 $e348)) +(flet ($e351 (not $e125)) +(flet ($e352 (and $e335 $e321)) +(flet ($e353 (not $e338)) +(flet ($e354 (iff $e336 $e180)) +(flet ($e355 (and $e345 $e347)) +(flet ($e356 (not $e350)) +(flet ($e357 (iff $e102 $e237)) +(flet ($e358 (if_then_else $e312 $e322 $e133)) +(flet ($e359 (or $e344 $e333)) +(flet ($e360 (xor $e332 $e315)) +(flet ($e361 (implies $e110 $e324)) +(flet ($e362 (implies $e360 $e349)) +(flet ($e363 (or $e342 $e330)) +(flet ($e364 (implies $e270 $e270)) +(flet ($e365 (and $e361 $e108)) +(flet ($e366 (and $e341 $e346)) +(flet ($e367 (xor $e352 $e343)) +(flet ($e368 (iff $e353 $e362)) +(flet ($e369 (iff $e310 $e357)) +(flet ($e370 (if_then_else $e355 $e303 $e354)) +(flet ($e371 (iff $e364 $e370)) +(flet ($e372 (not $e367)) +(flet ($e373 (if_then_else $e368 $e371 $e366)) +(flet ($e374 (or $e340 $e351)) +(flet ($e375 (xor $e334 $e271)) +(flet ($e376 (and $e373 $e374)) +(flet ($e377 (if_then_else $e369 $e242 $e358)) +(flet ($e378 (implies $e363 $e363)) +(flet ($e379 (xor $e365 $e378)) +(flet ($e380 (iff $e375 $e377)) +(flet ($e381 (or $e372 $e372)) +(flet ($e382 (xor $e380 $e356)) +(flet ($e383 (implies $e379 $e359)) +(flet ($e384 (implies $e376 $e290)) +(flet ($e385 (iff $e384 $e383)) +(flet ($e386 (implies $e382 $e385)) +(flet ($e387 (or $e381 $e386)) +$e387 +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) + diff --git a/test/regress/regress0/bv/fuzz08.smt b/test/regress/regress0/bv/fuzz08.smt new file mode 100644 index 000000000..e2a73db50 --- /dev/null +++ b/test/regress/regress0/bv/fuzz08.smt @@ -0,0 +1,19 @@ +(benchmark fuzzsmt +:logic QF_BV +:extrafuns ((v1 BitVec[9])) +:status sat +:formula +(let (?n1 bv0[6]) +(let (?n2 bv0[9]) +(flet ($n3 (bvult ?n2 v1)) +(let (?n4 bv1[1]) +(let (?n5 bv0[1]) +(let (?n6 (ite $n3 ?n4 ?n5)) +(let (?n7 (sign_extend[5] ?n6)) +(flet ($n8 (bvsgt ?n1 ?n7)) +(let (?n9 (ite $n8 ?n4 ?n5)) +(let (?n10 (sign_extend[8] ?n9)) +(let (?n11 (bvcomp v1 ?n10)) +(flet ($n12 (= ?n9 ?n11)) +$n12 +))))))))))))) diff --git a/test/regress/regress0/bv/fuzz09.smt b/test/regress/regress0/bv/fuzz09.smt new file mode 100644 index 000000000..ce8e9bfd6 --- /dev/null +++ b/test/regress/regress0/bv/fuzz09.smt @@ -0,0 +1,370 @@ +(benchmark fuzzsmt +:logic QF_BV +:status sat +:extrafuns ((v0 BitVec[7])) +:extrafuns ((v1 BitVec[5])) +:extrafuns ((v2 BitVec[13])) +:extrafuns ((v3 BitVec[16])) +:formula +(let (?e4 bv15872[14]) +(let (?e5 bv148[12]) +(let (?e6 (repeat[1] v2)) +(let (?e7 (ite (bvugt (sign_extend[6] v0) ?e6) bv1[1] bv0[1])) +(let (?e8 (bvnor (sign_extend[2] v1) v0)) +(let (?e9 (sign_extend[1] v2)) +(let (?e10 (ite (bvsgt (sign_extend[6] v0) v2) bv1[1] bv0[1])) +(let (?e11 (concat v0 v1)) +(let (?e12 (bvneg ?e6)) +(let (?e13 (bvsub (sign_extend[8] v1) v2)) +(let (?e14 (ite (bvule (sign_extend[13] ?e7) ?e9) bv1[1] bv0[1])) +(let (?e15 (ite (bvult v1 (zero_extend[4] ?e7)) bv1[1] bv0[1])) +(let (?e16 (bvnand (sign_extend[1] ?e5) v2)) +(let (?e17 (bvor ?e9 (sign_extend[9] v1))) +(let (?e18 (bvxnor ?e9 (sign_extend[7] v0))) +(let (?e19 (bvmul (sign_extend[1] ?e11) ?e16)) +(let (?e20 (bvand ?e18 (sign_extend[13] ?e14))) +(let (?e21 (bvsub (zero_extend[12] ?e7) v2)) +(let (?e22 (bvmul ?e18 (zero_extend[7] v0))) +(let (?e23 (rotate_right[13] ?e20)) +(let (?e24 (ite (bvult ?e22 (zero_extend[1] v2)) bv1[1] bv0[1])) +(let (?e25 (bvneg ?e19)) +(let (?e26 (ite (bvult ?e5 (zero_extend[11] ?e10)) bv1[1] bv0[1])) +(let (?e27 (bvxor ?e22 ?e4)) +(let (?e28 (ite (distinct (sign_extend[1] ?e5) ?e21) bv1[1] bv0[1])) +(let (?e29 (bvlshr ?e6 (zero_extend[6] v0))) +(let (?e30 (bvashr ?e10 ?e28)) +(let (?e31 (bvmul ?e24 ?e26)) +(let (?e32 (bvnand (sign_extend[2] ?e5) ?e20)) +(let (?e33 (bvxor v1 (sign_extend[4] ?e31))) +(let (?e34 (bvor ?e26 ?e7)) +(let (?e35 (bvnot ?e6)) +(let (?e36 (extract[10:5] ?e21)) +(let (?e37 (ite (= ?e31 ?e15) bv1[1] bv0[1])) +(let (?e38 (bvnot ?e11)) +(let (?e39 (extract[5:5] ?e13)) +(let (?e40 (bvadd (zero_extend[12] ?e24) ?e29)) +(let (?e41 (bvshl ?e13 (zero_extend[12] ?e7))) +(let (?e42 (ite (bvuge ?e4 (zero_extend[1] ?e13)) bv1[1] bv0[1])) +(let (?e43 (bvor (sign_extend[13] ?e15) ?e22)) +(let (?e44 (ite (bvsle ?e25 (zero_extend[6] v0)) bv1[1] bv0[1])) +(let (?e45 (ite (bvslt ?e19 (sign_extend[8] v1)) bv1[1] bv0[1])) +(let (?e46 (bvshl (zero_extend[1] ?e35) ?e22)) +(let (?e47 (sign_extend[4] ?e7)) +(let (?e48 (bvxor ?e6 (zero_extend[12] ?e30))) +(let (?e49 (bvand v0 v0)) +(let (?e50 (bvand (sign_extend[12] ?e28) ?e16)) +(let (?e51 (bvmul (sign_extend[12] ?e34) ?e21)) +(let (?e52 (sign_extend[15] ?e45)) +(let (?e53 (bvnot ?e23)) +(let (?e54 (extract[5:3] ?e12)) +(let (?e55 (ite (bvslt (zero_extend[15] ?e42) ?e52) bv1[1] bv0[1])) +(let (?e56 (bvneg ?e6)) +(let (?e57 (repeat[3] ?e47)) +(let (?e58 (ite (bvsle ?e38 (sign_extend[11] ?e44)) bv1[1] bv0[1])) +(let (?e59 (sign_extend[0] ?e21)) +(let (?e60 (ite (bvsle ?e22 (zero_extend[13] ?e58)) bv1[1] bv0[1])) +(let (?e61 (bvadd ?e7 ?e37)) +(let (?e62 (bvnor v3 (zero_extend[3] ?e50))) +(flet ($e63 (= ?e46 (zero_extend[13] ?e7))) +(flet ($e64 (= (zero_extend[12] ?e30) ?e29)) +(flet ($e65 (= (zero_extend[10] ?e54) ?e6)) +(flet ($e66 (= ?e20 (sign_extend[13] ?e44))) +(flet ($e67 (= ?e43 (zero_extend[1] ?e19))) +(flet ($e68 (= ?e9 (sign_extend[8] ?e36))) +(flet ($e69 (= ?e56 (zero_extend[6] ?e49))) +(flet ($e70 (= ?e52 (sign_extend[3] v2))) +(flet ($e71 (= ?e6 (zero_extend[8] ?e47))) +(flet ($e72 (= ?e56 (zero_extend[6] v0))) +(flet ($e73 (= ?e33 (zero_extend[4] ?e34))) +(flet ($e74 (= ?e32 ?e27)) +(flet ($e75 (= ?e12 (sign_extend[12] ?e34))) +(flet ($e76 (= ?e21 ?e6)) +(flet ($e77 (= (sign_extend[12] ?e37) v2)) +(flet ($e78 (= ?e36 (sign_extend[5] ?e30))) +(flet ($e79 (= v2 ?e13)) +(flet ($e80 (= (zero_extend[12] ?e55) ?e56)) +(flet ($e81 (= ?e52 (zero_extend[2] ?e9))) +(flet ($e82 (= (sign_extend[12] ?e55) ?e13)) +(flet ($e83 (= ?e57 (sign_extend[1] ?e23))) +(flet ($e84 (= (zero_extend[7] v0) ?e27)) +(flet ($e85 (= (sign_extend[15] ?e14) v3)) +(flet ($e86 (= ?e62 (sign_extend[2] ?e9))) +(flet ($e87 (= (zero_extend[13] ?e31) ?e23)) +(flet ($e88 (= (zero_extend[2] ?e5) ?e46)) +(flet ($e89 (= ?e12 (zero_extend[1] ?e38))) +(flet ($e90 (= ?e13 (zero_extend[12] ?e61))) +(flet ($e91 (= (zero_extend[12] ?e30) ?e12)) +(flet ($e92 (= (zero_extend[4] ?e61) ?e33)) +(flet ($e93 (= ?e32 (sign_extend[1] ?e12))) +(flet ($e94 (= ?e40 (sign_extend[12] ?e31))) +(flet ($e95 (= (sign_extend[11] ?e28) ?e38)) +(flet ($e96 (= ?e36 (sign_extend[5] ?e26))) +(flet ($e97 (= ?e6 ?e35)) +(flet ($e98 (= ?e52 (zero_extend[9] ?e8))) +(flet ($e99 (= (sign_extend[7] ?e8) ?e53)) +(flet ($e100 (= (zero_extend[12] ?e42) ?e21)) +(flet ($e101 (= ?e46 (sign_extend[1] ?e51))) +(flet ($e102 (= ?e46 (zero_extend[13] ?e26))) +(flet ($e103 (= ?e31 ?e15)) +(flet ($e104 (= ?e59 (sign_extend[12] ?e7))) +(flet ($e105 (= (sign_extend[12] ?e45) ?e48)) +(flet ($e106 (= ?e4 ?e4)) +(flet ($e107 (= ?e52 (sign_extend[4] ?e38))) +(flet ($e108 (= ?e62 (sign_extend[3] ?e56))) +(flet ($e109 (= ?e37 ?e60)) +(flet ($e110 (= (sign_extend[1] ?e36) ?e8)) +(flet ($e111 (= (sign_extend[1] ?e29) ?e22)) +(flet ($e112 (= ?e53 (sign_extend[13] ?e44))) +(flet ($e113 (= ?e27 (sign_extend[13] ?e31))) +(flet ($e114 (= (sign_extend[1] ?e59) ?e9)) +(flet ($e115 (= (zero_extend[1] ?e16) ?e22)) +(flet ($e116 (= (zero_extend[13] ?e7) ?e9)) +(flet ($e117 (= ?e40 ?e35)) +(flet ($e118 (= (zero_extend[13] ?e60) ?e22)) +(flet ($e119 (= ?e50 (sign_extend[1] ?e38))) +(flet ($e120 (= ?e56 ?e35)) +(flet ($e121 (= ?e16 (sign_extend[12] ?e7))) +(flet ($e122 (= (zero_extend[1] ?e5) ?e59)) +(flet ($e123 (= (sign_extend[7] ?e8) ?e22)) +(flet ($e124 (= ?e9 (sign_extend[1] v2))) +(flet ($e125 (= (zero_extend[2] ?e39) ?e54)) +(flet ($e126 (= ?e36 (sign_extend[5] ?e34))) +(flet ($e127 (= (zero_extend[9] ?e8) v3)) +(flet ($e128 (= ?e23 (zero_extend[2] ?e11))) +(flet ($e129 (= (sign_extend[12] ?e55) ?e56)) +(flet ($e130 (= ?e57 (sign_extend[10] ?e33))) +(flet ($e131 (= ?e23 ?e32)) +(flet ($e132 (= ?e62 (zero_extend[15] ?e58))) +(flet ($e133 (= ?e30 ?e42)) +(flet ($e134 (= ?e26 ?e7)) +(flet ($e135 (= v2 ?e21)) +(flet ($e136 (= ?e53 ?e23)) +(flet ($e137 (= ?e23 (sign_extend[13] ?e37))) +(flet ($e138 (= (sign_extend[13] ?e24) ?e53)) +(flet ($e139 (= (zero_extend[1] ?e13) ?e17)) +(flet ($e140 (= ?e58 ?e7)) +(flet ($e141 (= ?e6 (zero_extend[12] ?e14))) +(flet ($e142 (= ?e15 ?e37)) +(flet ($e143 (= ?e16 (sign_extend[12] ?e39))) +(flet ($e144 (= (zero_extend[12] ?e58) ?e59)) +(flet ($e145 (= ?e52 (sign_extend[2] ?e27))) +(flet ($e146 (= (zero_extend[15] ?e15) ?e52)) +(flet ($e147 (= ?e43 (sign_extend[1] ?e56))) +(flet ($e148 (= (zero_extend[10] ?e54) ?e35)) +(flet ($e149 (= ?e20 (zero_extend[13] ?e34))) +(flet ($e150 (= (sign_extend[12] ?e44) ?e41)) +(flet ($e151 (= ?e41 (sign_extend[12] ?e34))) +(flet ($e152 (= ?e18 (zero_extend[13] ?e55))) +(flet ($e153 (= (zero_extend[2] ?e9) v3)) +(flet ($e154 (= (sign_extend[13] ?e45) ?e43)) +(flet ($e155 (= ?e40 ?e35)) +(flet ($e156 (= ?e19 (zero_extend[12] ?e61))) +(flet ($e157 (= (zero_extend[1] ?e5) ?e59)) +(flet ($e158 (= ?e35 (zero_extend[12] ?e37))) +(flet ($e159 (= ?e53 ?e43)) +(flet ($e160 (= ?e32 (zero_extend[2] ?e5))) +(flet ($e161 (= ?e54 (sign_extend[2] ?e55))) +(flet ($e162 (= ?e51 ?e12)) +(flet ($e163 (= (sign_extend[12] ?e34) ?e6)) +(flet ($e164 (= ?e17 ?e53)) +(flet ($e165 (= ?e53 ?e9)) +(flet ($e166 (= ?e8 (sign_extend[6] ?e10))) +(flet ($e167 (= ?e10 ?e24)) +(flet ($e168 (= (sign_extend[11] ?e47) ?e62)) +(flet ($e169 (= (zero_extend[12] ?e42) v2)) +(flet ($e170 (= (sign_extend[11] ?e15) ?e5)) +(flet ($e171 (= (zero_extend[12] ?e45) v2)) +(flet ($e172 (= (zero_extend[1] ?e56) ?e20)) +(flet ($e173 (= ?e5 (sign_extend[7] v1))) +(flet ($e174 (= ?e36 (sign_extend[3] ?e54))) +(flet ($e175 (= ?e6 (sign_extend[12] ?e31))) +(flet ($e176 (= (sign_extend[13] ?e42) ?e22)) +(flet ($e177 (= (sign_extend[2] ?e17) ?e62)) +(flet ($e178 (= (sign_extend[7] ?e33) ?e11)) +(flet ($e179 (= ?e27 (zero_extend[13] ?e14))) +(flet ($e180 (= (zero_extend[2] v2) ?e57)) +(flet ($e181 (= v3 (zero_extend[3] ?e40))) +(flet ($e182 (= ?e30 ?e24)) +(flet ($e183 (= (sign_extend[11] ?e30) ?e11)) +(flet ($e184 (= ?e17 (zero_extend[9] ?e33))) +(flet ($e185 (= (sign_extend[7] ?e36) ?e51)) +(flet ($e186 (= (zero_extend[13] ?e61) ?e23)) +(flet ($e187 (= (sign_extend[15] ?e44) ?e52)) +(flet ($e188 (= ?e39 ?e34)) +(flet ($e189 (= ?e59 (sign_extend[12] ?e55))) +(flet ($e190 (= v2 ?e16)) +(flet ($e191 (= ?e36 (zero_extend[5] ?e24))) +(flet ($e192 (= (sign_extend[12] ?e10) ?e41)) +(flet ($e193 (= ?e57 (zero_extend[2] ?e6))) +(flet ($e194 (= ?e31 ?e10)) +(flet ($e195 (= ?e38 (zero_extend[11] ?e58))) +(flet ($e196 (= ?e27 (zero_extend[13] ?e58))) +(flet ($e197 (= (zero_extend[13] ?e60) ?e4)) +(flet ($e198 (= ?e50 (sign_extend[12] ?e39))) +(flet ($e199 (= ?e20 ?e32)) +(flet ($e200 (= (zero_extend[1] ?e12) ?e22)) +(flet ($e201 (= ?e51 (sign_extend[12] ?e14))) +(flet ($e202 (= (sign_extend[2] ?e4) v3)) +(flet ($e203 (= (sign_extend[8] ?e36) ?e20)) +(flet ($e204 (= ?e62 (zero_extend[15] ?e42))) +(flet ($e205 (= ?e21 (sign_extend[8] v1))) +(flet ($e206 (= ?e33 (zero_extend[4] ?e60))) +(flet ($e207 (= ?e55 ?e45)) +(flet ($e208 (= ?e55 ?e45)) +(flet ($e209 (= (zero_extend[13] ?e44) ?e20)) +(flet ($e210 (= (zero_extend[1] ?e11) ?e51)) +(flet ($e211 (= v3 (zero_extend[2] ?e27))) +(flet ($e212 (= ?e25 ?e21)) +(flet ($e213 (iff $e200 $e110)) +(flet ($e214 (iff $e209 $e138)) +(flet ($e215 (if_then_else $e204 $e156 $e75)) +(flet ($e216 (xor $e191 $e126)) +(flet ($e217 (and $e175 $e151)) +(flet ($e218 (xor $e80 $e196)) +(flet ($e219 (xor $e202 $e187)) +(flet ($e220 (and $e114 $e163)) +(flet ($e221 (or $e63 $e203)) +(flet ($e222 (implies $e131 $e134)) +(flet ($e223 (iff $e152 $e108)) +(flet ($e224 (xor $e119 $e85)) +(flet ($e225 (not $e184)) +(flet ($e226 (implies $e88 $e213)) +(flet ($e227 (not $e161)) +(flet ($e228 (if_then_else $e201 $e103 $e112)) +(flet ($e229 (not $e118)) +(flet ($e230 (and $e82 $e122)) +(flet ($e231 (implies $e90 $e149)) +(flet ($e232 (implies $e120 $e193)) +(flet ($e233 (xor $e109 $e140)) +(flet ($e234 (or $e190 $e113)) +(flet ($e235 (or $e228 $e150)) +(flet ($e236 (or $e76 $e220)) +(flet ($e237 (iff $e144 $e155)) +(flet ($e238 (or $e142 $e159)) +(flet ($e239 (if_then_else $e222 $e158 $e100)) +(flet ($e240 (not $e129)) +(flet ($e241 (and $e164 $e179)) +(flet ($e242 (implies $e73 $e226)) +(flet ($e243 (xor $e166 $e66)) +(flet ($e244 (iff $e168 $e102)) +(flet ($e245 (not $e86)) +(flet ($e246 (if_then_else $e244 $e183 $e83)) +(flet ($e247 (if_then_else $e137 $e225 $e236)) +(flet ($e248 (if_then_else $e79 $e171 $e239)) +(flet ($e249 (xor $e217 $e176)) +(flet ($e250 (xor $e249 $e145)) +(flet ($e251 (implies $e194 $e195)) +(flet ($e252 (iff $e197 $e206)) +(flet ($e253 (xor $e95 $e243)) +(flet ($e254 (xor $e98 $e218)) +(flet ($e255 (not $e157)) +(flet ($e256 (if_then_else $e182 $e221 $e115)) +(flet ($e257 (or $e216 $e177)) +(flet ($e258 (iff $e139 $e235)) +(flet ($e259 (not $e172)) +(flet ($e260 (not $e77)) +(flet ($e261 (and $e180 $e125)) +(flet ($e262 (or $e91 $e87)) +(flet ($e263 (not $e135)) +(flet ($e264 (implies $e130 $e232)) +(flet ($e265 (if_then_else $e240 $e111 $e123)) +(flet ($e266 (not $e121)) +(flet ($e267 (xor $e199 $e147)) +(flet ($e268 (xor $e74 $e170)) +(flet ($e269 (implies $e192 $e267)) +(flet ($e270 (implies $e245 $e65)) +(flet ($e271 (implies $e230 $e148)) +(flet ($e272 (implies $e264 $e205)) +(flet ($e273 (and $e143 $e78)) +(flet ($e274 (not $e257)) +(flet ($e275 (xor $e261 $e167)) +(flet ($e276 (not $e268)) +(flet ($e277 (iff $e93 $e260)) +(flet ($e278 (if_then_else $e242 $e258 $e247)) +(flet ($e279 (if_then_else $e252 $e116 $e214)) +(flet ($e280 (implies $e259 $e189)) +(flet ($e281 (not $e141)) +(flet ($e282 (if_then_else $e96 $e208 $e127)) +(flet ($e283 (iff $e211 $e165)) +(flet ($e284 (implies $e255 $e185)) +(flet ($e285 (if_then_else $e278 $e162 $e272)) +(flet ($e286 (and $e128 $e282)) +(flet ($e287 (or $e263 $e273)) +(flet ($e288 (or $e106 $e215)) +(flet ($e289 (not $e71)) +(flet ($e290 (iff $e207 $e250)) +(flet ($e291 (or $e68 $e68)) +(flet ($e292 (implies $e72 $e212)) +(flet ($e293 (implies $e254 $e277)) +(flet ($e294 (not $e280)) +(flet ($e295 (not $e274)) +(flet ($e296 (implies $e256 $e233)) +(flet ($e297 (implies $e275 $e64)) +(flet ($e298 (or $e234 $e248)) +(flet ($e299 (or $e153 $e223)) +(flet ($e300 (if_then_else $e286 $e224 $e276)) +(flet ($e301 (or $e94 $e124)) +(flet ($e302 (or $e279 $e287)) +(flet ($e303 (if_then_else $e302 $e292 $e174)) +(flet ($e304 (if_then_else $e265 $e104 $e294)) +(flet ($e305 (or $e186 $e173)) +(flet ($e306 (if_then_else $e270 $e133 $e288)) +(flet ($e307 (and $e81 $e305)) +(flet ($e308 (xor $e293 $e291)) +(flet ($e309 (iff $e84 $e303)) +(flet ($e310 (xor $e262 $e284)) +(flet ($e311 (iff $e297 $e178)) +(flet ($e312 (iff $e198 $e132)) +(flet ($e313 (if_then_else $e169 $e304 $e146)) +(flet ($e314 (if_then_else $e306 $e285 $e307)) +(flet ($e315 (and $e281 $e289)) +(flet ($e316 (if_then_else $e309 $e299 $e97)) +(flet ($e317 (or $e266 $e117)) +(flet ($e318 (and $e227 $e301)) +(flet ($e319 (or $e300 $e317)) +(flet ($e320 (iff $e313 $e237)) +(flet ($e321 (or $e241 $e318)) +(flet ($e322 (and $e308 $e188)) +(flet ($e323 (xor $e269 $e154)) +(flet ($e324 (xor $e69 $e246)) +(flet ($e325 (or $e310 $e296)) +(flet ($e326 (implies $e136 $e311)) +(flet ($e327 (or $e326 $e160)) +(flet ($e328 (if_then_else $e295 $e238 $e229)) +(flet ($e329 (or $e316 $e322)) +(flet ($e330 (and $e319 $e89)) +(flet ($e331 (not $e298)) +(flet ($e332 (or $e219 $e92)) +(flet ($e333 (implies $e324 $e271)) +(flet ($e334 (iff $e251 $e323)) +(flet ($e335 (xor $e181 $e327)) +(flet ($e336 (implies $e331 $e210)) +(flet ($e337 (implies $e231 $e290)) +(flet ($e338 (iff $e312 $e99)) +(flet ($e339 (implies $e105 $e337)) +(flet ($e340 (implies $e325 $e339)) +(flet ($e341 (xor $e335 $e101)) +(flet ($e342 (iff $e253 $e330)) +(flet ($e343 (iff $e328 $e341)) +(flet ($e344 (and $e321 $e340)) +(flet ($e345 (and $e314 $e343)) +(flet ($e346 (iff $e333 $e329)) +(flet ($e347 (not $e70)) +(flet ($e348 (or $e283 $e107)) +(flet ($e349 (or $e336 $e345)) +(flet ($e350 (not $e332)) +(flet ($e351 (and $e315 $e342)) +(flet ($e352 (xor $e349 $e348)) +(flet ($e353 (xor $e67 $e344)) +(flet ($e354 (not $e334)) +(flet ($e355 (and $e354 $e352)) +(flet ($e356 (if_then_else $e351 $e355 $e347)) +(flet ($e357 (and $e346 $e320)) +(flet ($e358 (iff $e350 $e338)) +(flet ($e359 (not $e353)) +(flet ($e360 (or $e359 $e357)) +(flet ($e361 (xor $e360 $e356)) +(flet ($e362 (implies $e361 $e358)) +$e362 +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +