BoolExpr removed and replaced with Expr
authorDejan Jovanović <dejan.jovanovic@gmail.com>
Fri, 5 Oct 2012 22:07:16 +0000 (22:07 +0000)
committerDejan Jovanović <dejan.jovanovic@gmail.com>
Fri, 5 Oct 2012 22:07:16 +0000 (22:07 +0000)
28 files changed:
.cproject
.settings/language.settings.xml [new file with mode: 0644]
examples/hashsmt/sha1smt.cpp
examples/hashsmt/word.cpp
examples/hashsmt/word.h
examples/nra-translate/normalize.cpp
examples/nra-translate/smt2info.cpp
examples/nra-translate/smt2todreal.cpp
examples/nra-translate/smt2toisat.cpp
examples/nra-translate/smt2tomathematica.cpp
examples/nra-translate/smt2toqepcad.cpp
examples/nra-translate/smt2toredlog.cpp
examples/simple_vc_cxx.cpp
src/compat/cvc3_compat.cpp
src/expr/command.cpp
src/expr/command.h
src/expr/expr_template.cpp
src/expr/expr_template.h
src/printer/ast/ast_printer.cpp
src/printer/cvc/cvc_printer.cpp
src/printer/smt2/smt2_printer.cpp
src/prop/cnf_stream.cpp
src/prop/cnf_stream.h
src/prop/minisat/core/Solver.cc
src/prop/prop_engine.cpp
src/smt/smt_engine.cpp
src/smt/smt_engine.h
src/theory/theory_engine.cpp

index bcc6a9ca587725c7bd29f1be7a883c8f6cd97e4b..299de0591338f4a3eb489e9e6a907a836f46f08a 100644 (file)
--- a/.cproject
+++ b/.cproject
@@ -1,7 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
        <storageModule moduleId="org.eclipse.cdt.core.settings">
                <cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1461790692">
                        <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1461790692" moduleId="org.eclipse.cdt.core.settings" name="Default">
                                <useDefaultCommand>false</useDefaultCommand>
                                <runAllBuilders>true</runAllBuilders>
                        </target>
+                       <target name="all" path="examples" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+                               <buildCommand>make</buildCommand>
+                               <buildArguments>-j10</buildArguments>
+                               <buildTarget>all</buildTarget>
+                               <stopOnError>true</stopOnError>
+                               <useDefaultCommand>true</useDefaultCommand>
+                               <runAllBuilders>true</runAllBuilders>
+                       </target>
                        <target name="uf" path="src/theory/uf" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
                                <buildCommand>make</buildCommand>
                                <buildArguments>-j2</buildArguments>
                        </target>
                </buildTargets>
        </storageModule>
+       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 </cproject>
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
new file mode 100644 (file)
index 0000000..e0bae15
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project>
+       <configuration id="cdt.managedbuild.toolchain.gnu.base.1461790692" name="Default">
+               <extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
+                       <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
+                       <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
+               </extension>
+       </configuration>
+</project>
index 3a33a4bc2c17c1e352cfba8194f24045cc97db62..97b79a7d0fa9aae29e125e2f73d522fe34660459 100644 (file)
@@ -46,7 +46,7 @@ int main(int argc, char* argv[]) {
       output << DeclareFunctionCommand(ss.str(), cvc4input[i].getExpr(), cvc4input[i].getExpr().getType()) << endl;
 
       // Ouput the solution also
-      BoolExpr solution = (cvc4input[i] == hashsmt::cvc4_uchar8(msg.c_str()[i]));
+      Expr solution = (cvc4input[i] == hashsmt::cvc4_uchar8(msg.c_str()[i]));
       output << "; " << AssertCommand(solution) << endl;
     }
 
@@ -65,9 +65,9 @@ int main(int argc, char* argv[]) {
     sha1encoder.get_digest(sha1digest);
                 
     // Create the assertion
-    BoolExpr assertion;
+    Expr assertion;
     for (unsigned i = 0; i < 5; ++ i) {
-      BoolExpr conjunct = (cvc4digest[i] == hashsmt::cvc4_uint32(sha1digest[i]));
+      Expr conjunct = (cvc4digest[i] == hashsmt::cvc4_uint32(sha1digest[i]));
       if (i > 0) {
         assertion = assertion.andExpr(conjunct);
       } else {
index d1b8e2fef01d044ffc6feb285152df3744f3e9d9..c6cb8caf278a0ba4c85757ff18138596956d690b 100644 (file)
@@ -34,7 +34,7 @@ ExprManager* Word::em() {
   return s_manager;
 }
 
-BoolExpr Word::operator == (const Word& b) const {
+Expr Word::operator == (const Word& b) const {
   return em()->mkExpr(kind::EQUAL, d_expr, b.getExpr());
 }
 
index 50fdee0c0d57c1ef6142da7afd7a1bda3ce5fb3b..e8d6053c0189a2ebff0ee81a52ca7d34494683cd 100644 (file)
@@ -61,7 +61,7 @@ public:
   }
 
   /** Returns the comparison expression */  
-  CVC4::BoolExpr operator == (const Word& b) const;
+  CVC4::Expr operator == (const Word& b) const;
 };
 
 inline std::ostream& operator << (std::ostream& out, const Word& word) {
index ac5780439f746730d6b4c02b821afb080aafbd2d..d38da7616adbcabef472d125acc6d69b9d509d5d 100644 (file)
@@ -40,7 +40,7 @@ int main(int argc, char* argv[])
   SmtEngine engine(&exprManager);
 
   // Variables and assertions
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
index b14f8fa8fbc236fbdf514774079405e05f73b416..0ccf9d6697170fa839a2e820a5ceed475de37796 100644 (file)
@@ -72,7 +72,7 @@ int main(int argc, char* argv[])
     vector<string> variables;
     vector<string> info_tags;
     vector<string> info_data;
-    vector<BoolExpr> assertions;
+    vector<Expr> assertions;
   
     Command* cmd;
     while ((cmd = parser->nextCommand())) {
index 8bdb271812b6b4022ebb65bd021c7bf87aefd12b..6fcf5c565fe2f594a84389dd5d98117fab5f5adb 100644 (file)
@@ -42,7 +42,7 @@ int main(int argc, char* argv[])
   std::map<Expr, unsigned> variables;
   vector<string> info_tags;
   vector<string> info_data;
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
index e2b55b4b9ae3036fc7031574593f02e87bc62875..b443393093607f47324b2f9675c5d0141af7c126 100644 (file)
@@ -23,7 +23,7 @@ void translate_to_isat(
         const vector<string>& info_tags,
         const vector<string>& info_data,
        const map<Expr, unsigned>& variables, 
-       const vector<BoolExpr>& assertions);
+       const vector<Expr>& assertions);
 
 int main(int argc, char* argv[]) 
 {
@@ -47,7 +47,7 @@ int main(int argc, char* argv[])
   std::map<Expr, unsigned> variables;
   vector<string> info_tags;
   vector<string> info_data;
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
@@ -148,7 +148,7 @@ void translate_to_isat_term(const map<Expr, unsigned>& variables, const Expr& te
   }  
 }
 
-void translate_to_isat(const map<Expr, unsigned>& variables, const BoolExpr& assertion) {
+void translate_to_isat(const map<Expr, unsigned>& variables, const Expr& assertion) {
   bool first;
   
   unsigned n = assertion.getNumChildren();
@@ -260,7 +260,7 @@ void translate_to_isat(
         const vector<string>& info_tags,
         const vector<string>& info_data,
         const std::map<Expr, unsigned>& variables,
-       const vector<BoolExpr>& assertions) 
+       const vector<Expr>& assertions)
 {
   bool first;
 
index 9da21b69b3f1ab157aca42e05d851f7a5621af6a..bfee27310dfaabf2386b90363e1a1fade8963828 100644 (file)
@@ -22,7 +22,7 @@ void translate_to_mathematica(
         const vector<string>& info_tags,
         const vector<string>& info_data,
        const map<Expr, unsigned>& variables, 
-       const vector<BoolExpr>& assertions);
+       const vector<Expr>& assertions);
 
 int main(int argc, char* argv[]) 
 {
@@ -43,7 +43,7 @@ int main(int argc, char* argv[])
   std::map<Expr, unsigned> variables;
   vector<string> info_tags;
   vector<string> info_data;
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
@@ -150,7 +150,7 @@ void translate_to_mathematica_term(const map<Expr, unsigned>& variables, const E
   }  
 }
 
-void translate_to_mathematica(const map<Expr, unsigned>& variables, const BoolExpr& assertion) {
+void translate_to_mathematica(const map<Expr, unsigned>& variables, const Expr& assertion) {
   bool first;
   
   unsigned n = assertion.getNumChildren();
@@ -255,7 +255,7 @@ void translate_to_mathematica(
         const vector<string>& info_tags,
         const vector<string>& info_data,
         const std::map<Expr, unsigned>& variables,
-       const vector<BoolExpr>& assertions) 
+       const vector<Expr>& assertions)
 {
   bool first;
 
index bed9b42ea2f5dc21a6b070a110b4bb26b6c26bc6..fc43c4c7bcd761797f399f8503b3e01086925ee2 100644 (file)
@@ -22,7 +22,7 @@ void translate_to_qepcad(
         const vector<string>& info_tags,
         const vector<string>& info_data,
        const map<Expr, unsigned>& variables, 
-       const vector<BoolExpr>& assertions);
+       const vector<Expr>& assertions);
 
 int main(int argc, char* argv[]) 
 {
@@ -44,7 +44,7 @@ int main(int argc, char* argv[])
   std::map<Expr, unsigned> variables;
   vector<string> info_tags;
   vector<string> info_data;
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
@@ -152,7 +152,7 @@ void translate_to_qepcad_term(const std::map<Expr, unsigned>& variables, const E
   }  
 }
 
-void translate_to_qepcad(const std::map<Expr, unsigned>& variables, const BoolExpr& assertion) {
+void translate_to_qepcad(const std::map<Expr, unsigned>& variables, const Expr& assertion) {
   bool first;
   
   unsigned n = assertion.getNumChildren();
@@ -251,7 +251,7 @@ void translate_to_qepcad(
         const vector<string>& info_tags,
         const vector<string>& info_data,
        const std::map<Expr, unsigned>& variables, 
-       const vector<BoolExpr>& assertions) 
+       const vector<Expr>& assertions)
 {
   bool first;
 
index da34ca4dac7f0e323371f84f89a320fd513425b2..b2717c157f367ebea03b256b478ed4dd63b4c70f 100644 (file)
@@ -24,7 +24,7 @@ void translate_to_redlog(
         const vector<string>& info_tags,
         const vector<string>& info_data,
        const map<Expr, unsigned>& variables, 
-       const vector<BoolExpr>& assertions);
+       const vector<Expr>& assertions);
 
 int main(int argc, char* argv[]) 
 {
@@ -50,7 +50,7 @@ int main(int argc, char* argv[])
   std::map<Expr, unsigned> variables;
   vector<string> info_tags;
   vector<string> info_data;
-  vector<BoolExpr> assertions;
+  vector<Expr> assertions;
 
   Command* cmd;
   while ((cmd = parser->nextCommand())) {
@@ -155,7 +155,7 @@ void translate_to_redlog_term(const map<Expr, unsigned>& variables, const Expr&
   }  
 }
 
-void translate_to_redlog(const map<Expr, unsigned>& variables, const BoolExpr& assertion) {
+void translate_to_redlog(const map<Expr, unsigned>& variables, const Expr& assertion) {
   bool first;
   
   unsigned n = assertion.getNumChildren();
@@ -269,7 +269,7 @@ void translate_to_redlog(
         const vector<string>& info_tags,
         const vector<string>& info_data,
         const std::map<Expr, unsigned>& variables,
-       const vector<BoolExpr>& assertions) 
+       const vector<Expr>& assertions)
 {
   bool first;
 
index 557199e75b29f7e049a5fce383acb909e3082783..92714ebc72f89d346cef25d266b65a5e251ec4c1 100644 (file)
@@ -49,9 +49,9 @@ int main() {
   Expr three = em.mkConst(Rational(3));
   Expr twox_plus_y_geq_3 = em.mkExpr(kind::GEQ, twox_plus_y, three);
 
-  BoolExpr formula =
-    BoolExpr(em.mkExpr(kind::AND, x_positive, y_positive)).
-    impExpr(BoolExpr(twox_plus_y_geq_3));
+  Expr formula =
+    em.mkExpr(kind::AND, x_positive, y_positive).
+    impExpr(twox_plus_y_geq_3);
 
   cout << "Checking validity of formula " << formula << " with CVC4." << endl;
   cout << "CVC4 should report VALID." << endl;
index 8ba91b41944bab59b693a99d42915039edf37afd..2ed3c0a7fc68da78738e021e84425b5b892845b2 100644 (file)
@@ -2071,7 +2071,7 @@ void ValidityChecker::setTimeLimit(unsigned limit) {
 }
 
 void ValidityChecker::assertFormula(const Expr& e) {
-  d_smt->assertFormula(CVC4::BoolExpr(e));
+  d_smt->assertFormula(e);
 }
 
 void ValidityChecker::registerAtom(const Expr& e) {
@@ -2107,11 +2107,11 @@ static QueryResult cvc4resultToCvc3result(CVC4::Result r) {
 }
 
 QueryResult ValidityChecker::query(const Expr& e) {
-  return cvc4resultToCvc3result(d_smt->query(CVC4::BoolExpr(e)));
+  return cvc4resultToCvc3result(d_smt->query(e));
 }
 
 QueryResult ValidityChecker::checkUnsat(const Expr& e) {
-  return cvc4resultToCvc3result(d_smt->checkSat(CVC4::BoolExpr(e)));
+  return cvc4resultToCvc3result(d_smt->checkSat(e));
 }
 
 QueryResult ValidityChecker::checkContinue() {
index a62a9421faf7fb81019bdce55545fb610cae3c28..220629cfd977a747f89091265163b8f9cd65a142 100644 (file)
@@ -177,11 +177,11 @@ Command* EchoCommand::clone() const {
 
 /* class AssertCommand */
 
-AssertCommand::AssertCommand(const BoolExpr& e) throw() :
+AssertCommand::AssertCommand(const Expr& e) throw() :
   d_expr(e) {
 }
 
-BoolExpr AssertCommand::getExpr() const throw() {
+Expr AssertCommand::getExpr() const throw() {
   return d_expr;
 }
 
@@ -248,11 +248,11 @@ Command* PopCommand::clone() const {
 
 /* class CheckSatCommand */
 
-CheckSatCommand::CheckSatCommand(const BoolExpr& expr) throw() :
+CheckSatCommand::CheckSatCommand(const Expr& expr) throw() :
   d_expr(expr) {
 }
 
-BoolExpr CheckSatCommand::getExpr() const throw() {
+Expr CheckSatCommand::getExpr() const throw() {
   return d_expr;
 }
 
@@ -291,11 +291,11 @@ Command* CheckSatCommand::clone() const {
 
 /* class QueryCommand */
 
-QueryCommand::QueryCommand(const BoolExpr& e) throw() :
+QueryCommand::QueryCommand(const Expr& e) throw() :
   d_expr(e) {
 }
 
-BoolExpr QueryCommand::getExpr() const throw() {
+Expr QueryCommand::getExpr() const throw() {
   return d_expr;
 }
 
index 6f5b0bd4cb6e9740cf0732314e433f3c1e952464..9fabf129e8cb353dbc7fde0cbdbe29e2fe95e774 100644 (file)
@@ -290,11 +290,11 @@ public:
 
 class CVC4_PUBLIC AssertCommand : public Command {
 protected:
-  BoolExpr d_expr;
+  Expr d_expr;
 public:
-  AssertCommand(const BoolExpr& e) throw();
+  AssertCommand(const Expr& e) throw();
   ~AssertCommand() throw() {}
-  BoolExpr getExpr() const throw();
+  Expr getExpr() const throw();
   void invoke(SmtEngine* smtEngine) throw();
   Command* exportTo(ExprManager* exprManager, ExprManagerMapCollection& variableMap);
   Command* clone() const;
@@ -423,13 +423,13 @@ public:
 
 class CVC4_PUBLIC CheckSatCommand : public Command {
 protected:
-  BoolExpr d_expr;
+  Expr d_expr;
   Result d_result;
 public:
   CheckSatCommand() throw();
-  CheckSatCommand(const BoolExpr& expr) throw();
+  CheckSatCommand(const Expr& expr) throw();
   ~CheckSatCommand() throw() {}
-  BoolExpr getExpr() const throw();
+  Expr getExpr() const throw();
   void invoke(SmtEngine* smtEngine) throw();
   Result getResult() const throw();
   void printResult(std::ostream& out) const throw();
@@ -439,12 +439,12 @@ public:
 
 class CVC4_PUBLIC QueryCommand : public Command {
 protected:
-  BoolExpr d_expr;
+  Expr d_expr;
   Result d_result;
 public:
-  QueryCommand(const BoolExpr& e) throw();
+  QueryCommand(const Expr& e) throw();
   ~QueryCommand() throw() {}
-  BoolExpr getExpr() const throw();
+  Expr getExpr() const throw();
   void invoke(SmtEngine* smtEngine) throw();
   Result getResult() const throw();
   void printResult(std::ostream& out) const throw();
index 2f9e27c0c0309981a32eebb0e21cbeba27e0226f..d535beec24fc88367f5d206fd9b184b27d22d9a3 100644 (file)
@@ -467,20 +467,13 @@ TNode Expr::getTNode() const throw() {
   return *d_node;
 }
 
-BoolExpr::BoolExpr() {
-}
-
-BoolExpr::BoolExpr(const Expr& e) :
-  Expr(e) {
-}
-
-BoolExpr BoolExpr::notExpr() const {
+Expr Expr::notExpr() const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   return d_exprManager->mkExpr(NOT, *this);
 }
 
-BoolExpr BoolExpr::andExpr(const BoolExpr& e) const {
+Expr Expr::andExpr(const Expr& e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == e.d_exprManager, e,
@@ -488,7 +481,7 @@ BoolExpr BoolExpr::andExpr(const BoolExpr& e) const {
   return d_exprManager->mkExpr(AND, *this, e);
 }
 
-BoolExpr BoolExpr::orExpr(const BoolExpr& e) const {
+Expr Expr::orExpr(const Expr& e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == e.d_exprManager, e,
@@ -496,7 +489,7 @@ BoolExpr BoolExpr::orExpr(const BoolExpr& e) const {
   return d_exprManager->mkExpr(OR, *this, e);
 }
 
-BoolExpr BoolExpr::xorExpr(const BoolExpr& e) const {
+Expr Expr::xorExpr(const Expr& e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == e.d_exprManager, e,
@@ -504,7 +497,7 @@ BoolExpr BoolExpr::xorExpr(const BoolExpr& e) const {
   return d_exprManager->mkExpr(XOR, *this, e);
 }
 
-BoolExpr BoolExpr::iffExpr(const BoolExpr& e) const {
+Expr Expr::iffExpr(const Expr& e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == e.d_exprManager, e,
@@ -512,7 +505,7 @@ BoolExpr BoolExpr::iffExpr(const BoolExpr& e) const {
   return d_exprManager->mkExpr(IFF, *this, e);
 }
 
-BoolExpr BoolExpr::impExpr(const BoolExpr& e) const {
+Expr Expr::impExpr(const Expr& e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == e.d_exprManager, e,
@@ -520,8 +513,8 @@ BoolExpr BoolExpr::impExpr(const BoolExpr& e) const {
   return d_exprManager->mkExpr(IMPLIES, *this, e);
 }
 
-BoolExpr BoolExpr::iteExpr(const BoolExpr& then_e,
-                           const BoolExpr& else_e) const {
+Expr Expr::iteExpr(const Expr& then_e,
+                           const Expr& else_e) const {
   Assert(d_exprManager != NULL,
          "Don't have an expression manager for this expression!");
   CheckArgument(d_exprManager == then_e.d_exprManager, then_e,
@@ -531,16 +524,6 @@ BoolExpr BoolExpr::iteExpr(const BoolExpr& then_e,
   return d_exprManager->mkExpr(ITE, *this, then_e, else_e);
 }
 
-Expr BoolExpr::iteExpr(const Expr& then_e, const Expr& else_e) const {
-  Assert(d_exprManager != NULL,
-         "Don't have an expression manager for this expression!");
-  CheckArgument(d_exprManager == then_e.getExprManager(), then_e,
-                "Different expression managers!");
-  CheckArgument(d_exprManager == else_e.getExprManager(), else_e,
-                "Different expression managers!");
-  return d_exprManager->mkExpr(ITE, *this, then_e, else_e);
-}
-
 void Expr::printAst(std::ostream & o, int indent) const {
   ExprManagerScope ems(*this);
   getNode().printAst(o, indent);
index 4255e34546844b7e1c118b8d4245f59434b3f4d3..b530d13b2078259b4cdedc5e9e3a78b2661ea76b 100644 (file)
@@ -161,16 +161,12 @@ struct ExprHashFunction {
   size_t operator()(CVC4::Expr e) const;
 };/* struct ExprHashFunction */
 
-class BoolExpr;
-
 /**
  * Class encapsulating CVC4 expressions and methods for constructing new
  * expressions.
  */
 class CVC4_PUBLIC Expr {
 
-  friend class BoolExpr;
-
   /** The internal expression representation */
   NodeTemplate<true>* d_node;
 
@@ -312,6 +308,48 @@ public:
     return std::vector<Expr>(begin(), end());
   }
 
+  /**
+   * Returns the Boolean negation of this Expr.
+   */
+  Expr notExpr() const;
+
+  /**
+   * Returns the conjunction of this expression and
+   * the given expression.
+   */
+  Expr andExpr(const Expr& e) const;
+
+  /**
+   * Returns the disjunction of this expression and
+   * the given expression.
+   */
+  Expr orExpr(const Expr& e) const;
+
+  /**
+   * Returns the exclusive disjunction of this expression and
+   * the given expression.
+   */
+  Expr xorExpr(const Expr& e) const;
+
+  /**
+   * Returns the Boolean equivalence of this expression and
+   * the given expression.
+   */
+  Expr iffExpr(const Expr& e) const;
+
+  /**
+   * Returns the implication of this expression and
+   * the given expression.
+   */
+  Expr impExpr(const Expr& e) const;
+
+  /**
+   * Returns the if-then-else expression with this expression
+   * as the Boolean condition and the given expressions as
+   * the "then" and "else" expressions.
+   */
+  Expr iteExpr(const Expr& then_e, const Expr& else_e) const;
+
   /**
    * Iterator type for the children of an Expr.
    */
@@ -562,86 +600,6 @@ private:
 
 };/* class Expr */
 
-/**
- * Extending the expression with the capability to construct Boolean
- * expressions.
- */
-class CVC4_PUBLIC BoolExpr : public Expr {
-
-public:
-
-  /** Default constructor, makes a null expression */
-  BoolExpr();
-
-  /**
-   * Convert an expression to a Boolean expression
-   */
-  BoolExpr(const Expr& e);
-
-  /**
-   * Negate this expression.
-   * @return the logical negation of this expression.
-   */
-  BoolExpr notExpr() const;
-
-  /**
-   * Conjunct the given expression to this expression.
-   * @param e the expression to conjunct
-   * @return the conjunction of this expression and e
-   */
-  BoolExpr andExpr(const BoolExpr& e) const;
-
-  /**
-   * Disjunct the given expression to this expression.
-   * @param e the expression to disjunct
-   * @return the disjunction of this expression and e
-   */
-  BoolExpr orExpr(const BoolExpr& e) const;
-
-  /**
-   * Make an exclusive or expression out of this expression and the given
-   * expression.
-   * @param e the right side of the xor
-   * @return the xor of this expression and e
-   */
-  BoolExpr xorExpr(const BoolExpr& e) const;
-
-  /**
-   * Make an equivalence expression out of this expression and the given
-   * expression.
-   * @param e the right side of the equivalence
-   * @return the equivalence expression
-   */
-  BoolExpr iffExpr(const BoolExpr& e) const;
-
-  /**
-   * Make an implication expression out of this expression and the given
-   * expression.
-   * @param e the right side of the equivalence
-   * @return the equivalence expression
-   */
-  BoolExpr impExpr(const BoolExpr& e) const;
-
-  /**
-   * Make a Boolean if-then-else expression using this expression as the
-   * condition, and given the then and else parts.
-   * @param then_e the then branch expression
-   * @param else_e the else branch expression
-   * @return the if-then-else expression
-   */
-  BoolExpr iteExpr(const BoolExpr& then_e, const BoolExpr& else_e) const;
-
-  /**
-   * Make a term if-then-else expression using this expression as the
-   * condition, and given the then and else parts.
-   * @param then_e the then branch expression
-   * @param else_e the else branch expression
-   * @return the if-then-else expression
-   */
-  Expr iteExpr(const Expr& then_e, const Expr& else_e) const;
-
-};/* class BoolExpr */
-
 namespace expr {
 
 /**
@@ -968,7 +926,7 @@ public:
 
 ${getConst_instantiations}
 
-#line 959 "${template}"
+#line 930 "${template}"
 
 namespace expr {
 
index 4ae66f51054ec5a4f2b37d7c67111840b08f819d..34bf0bb6d053be43a3fda0211622108712cf2f70 100644 (file)
@@ -208,7 +208,7 @@ static void toStream(std::ostream& out, const PopCommand* c) throw() {
 }
 
 static void toStream(std::ostream& out, const CheckSatCommand* c) throw() {
-  BoolExpr e = c->getExpr();
+  Expr e = c->getExpr();
   if(e.isNull()) {
     out << "CheckSat()";
   } else {
index 56d9a20b0350e35435e33ca423bdebd294ecce6e..5d2ffb9dbe8658f454e552dab86ae79b0a265724 100644 (file)
@@ -821,7 +821,7 @@ static void toStream(std::ostream& out, const PopCommand* c) throw() {
 }
 
 static void toStream(std::ostream& out, const CheckSatCommand* c) throw() {
-  BoolExpr e = c->getExpr();
+  Expr e = c->getExpr();
   if(!e.isNull()) {
     out << "CHECKSAT " << e << ";";
   } else {
@@ -830,7 +830,7 @@ static void toStream(std::ostream& out, const CheckSatCommand* c) throw() {
 }
 
 static void toStream(std::ostream& out, const QueryCommand* c) throw() {
-  BoolExpr e = c->getExpr();
+  Expr e = c->getExpr();
   if(!e.isNull()) {
     out << "QUERY " << e << ";";
   } else {
index 5d9a13786d89228a22977c277b1fc921c755d8ee..31754cb3a13b117024c07fd13f30b52e4a949507 100644 (file)
@@ -615,7 +615,7 @@ static void toStream(std::ostream& out, const PopCommand* c) throw() {
 }
 
 static void toStream(std::ostream& out, const CheckSatCommand* c) throw() {
-  BoolExpr e = c->getExpr();
+  Expr e = c->getExpr();
   if(!e.isNull()) {
     out << PushCommand() << endl
         << AssertCommand(e) << endl
@@ -627,7 +627,7 @@ static void toStream(std::ostream& out, const CheckSatCommand* c) throw() {
 }
 
 static void toStream(std::ostream& out, const QueryCommand* c) throw() {
-  BoolExpr e = c->getExpr();
+  Expr e = c->getExpr();
   if(!e.isNull()) {
     out << PushCommand() << endl
         << AssertCommand(BooleanSimplification::negate(e)) << endl
index f47637b729a3c8dd728174bcc30c561403d459ae..e7c74525deeb5fcca7ce5163c2632be0d68ac38b 100644 (file)
@@ -75,7 +75,7 @@ void CnfStream::assertClause(TNode node, SatClause& c) {
   Debug("cnf") << "Inserting into stream " << c << endl;
   if(Dump.isOn("clauses")) {
     if(c.size() == 1) {
-      Dump("clauses") << AssertCommand(BoolExpr(getNode(c[0]).toExpr()));
+      Dump("clauses") << AssertCommand(Expr(getNode(c[0]).toExpr()));
     } else {
       Assert(c.size() > 1);
       NodeBuilder<> b(kind::OR);
@@ -83,7 +83,7 @@ void CnfStream::assertClause(TNode node, SatClause& c) {
         b << getNode(c[i]);
       }
       Node n = b;
-      Dump("clauses") << AssertCommand(BoolExpr(n.toExpr()));
+      Dump("clauses") << AssertCommand(Expr(n.toExpr()));
     }
   }
   d_satSolver->addClause(c, d_removable);
index 5efedd4ca6dda3881987d10fc7a1195a2baf6d70..a6e2b2e027caa5b6da58ed4244858a6dcd4aae2c 100644 (file)
@@ -30,6 +30,7 @@
 #include "expr/node.h"
 #include "prop/theory_proxy.h"
 #include "prop/registrar.h"
+#include "context/cdlist.h"
 
 #include <ext/hash_map>
 
index 5e19eb7762ae0b5d45531a4ca6af6f30f8583900..7fc7a1d9c6803d7b5e6462e86574b164cd7233a9 100644 (file)
@@ -349,11 +349,11 @@ 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;
+            vardata[x].trail_index = -1;
+            if ((phase_saving > 1 || (phase_saving == 1) && c > trail_lim.last()) && (polarity[x] & 0x2) == 0)
+              polarity[x] = sign(trail[c]);
             if(intro_level(x) != -1) {// might be unregistered
-              assigns [x] = l_Undef;
-              vardata[x].trail_index = -1;
-              if ((phase_saving > 1 || (phase_saving == 1) && c > trail_lim.last()) && (polarity[x] & 0x2) == 0)
-                polarity[x] = sign(trail[c]);
               insertVarOrder(x);
             }
         }
@@ -1409,6 +1409,9 @@ void Solver::push()
   trail_ok.push(ok);
   trail_user_lim.push(trail.size());
   assert(trail_user_lim.size() == assertionLevel);
+
+  context->push();
+
   Debug("minisat") << "MINISAT PUSH assertionLevel is " << assertionLevel << ", trail.size is " << trail.size() << std::endl;
 }
 
@@ -1438,10 +1441,10 @@ void Solver::pop()
   while(downto < trail.size()) {
     Debug("minisat") << "== unassigning " << trail.last() << std::endl;
     Var      x  = var(trail.last());
+    assigns [x] = l_Undef;
+    vardata[x].trail_index = -1;
+    polarity[x] = sign(trail.last());
     if(intro_level(x) != -1) {// might be unregistered
-      assigns [x] = l_Undef;
-      vardata[x].trail_index = -1;
-      polarity[x] = sign(trail.last());
       insertVarOrder(x);
     }
     trail.pop();
@@ -1458,9 +1461,12 @@ void Solver::pop()
     Debug("minisat") << "== unassigning " << l << std::endl;
     Var      x  = var(l);
     assigns [x] = l_Undef;
+    vardata[x].trail_index = -1;
     if (phase_saving >= 1 && (polarity[x] & 0x2) == 0)
       polarity[x] = sign(l);
-    insertVarOrder(x);
+    if(intro_level(x) != -1) {// might be unregistered
+      insertVarOrder(x);
+    }
     trail_user.pop();
   }
   trail_user.pop();
@@ -1470,6 +1476,8 @@ void Solver::pop()
 
   Debug("minisat") << "about to removeClausesAboveLevel(" << assertionLevel << ") in CNF" << std::endl;
 
+  context->pop();
+
   // Notify the cnf
   proxy->removeClausesAboveLevel(assertionLevel);
 }
index 973adc67f24fbe95d69119bc9a81979af79f1575..12e85de135ccf4087d089202b5630bb7822f74ee 100644 (file)
@@ -111,9 +111,9 @@ void PropEngine::assertLemma(TNode node, bool negated, bool removable) {
   Debug("prop::lemmas") << "assertLemma(" << node << ")" << endl;
 
   if(!d_inCheckSat && Dump.isOn("learned")) {
-    Dump("learned") << AssertCommand(BoolExpr(node.toExpr()));
+    Dump("learned") << AssertCommand(node.toExpr());
   } else if(Dump.isOn("lemmas")) {
-    Dump("lemmas") << AssertCommand(BoolExpr(node.toExpr()));
+    Dump("lemmas") << AssertCommand(node.toExpr());
   }
 
   // Assert as removable
index 878588d1572c8ea070d7b7c626b646bd63547e11..2d83b79600fbbd5903273f0a4629ad58ff2ef633 100644 (file)
@@ -1770,7 +1770,7 @@ void SmtEnginePrivate::processAssertions() {
     // Push the simplified assertions to the dump output stream
     for (unsigned i = 0; i < d_assertionsToCheck.size(); ++ i) {
       Dump("assertions")
-        << AssertCommand(BoolExpr(d_assertionsToCheck[i].toExpr()));
+        << AssertCommand(d_assertionsToCheck[i].toExpr());
     }
   }
 
@@ -1812,7 +1812,7 @@ void SmtEnginePrivate::addFormula(TNode n)
   }
 }
 
-void SmtEngine::ensureBoolean(const BoolExpr& e) throw(TypeCheckingException) {
+void SmtEngine::ensureBoolean(const Expr& e) throw(TypeCheckingException) {
   Type type = e.getType(options::typeChecking());
   Type boolType = d_exprManager->booleanType();
   if(type != boolType) {
@@ -1824,7 +1824,7 @@ void SmtEngine::ensureBoolean(const BoolExpr& e) throw(TypeCheckingException) {
   }
 }
 
-Result SmtEngine::checkSat(const BoolExpr& e) throw(TypeCheckingException) {
+Result SmtEngine::checkSat(const Expr& e) throw(TypeCheckingException) {
 
   Assert(e.isNull() || e.getExprManager() == d_exprManager);
 
@@ -1891,7 +1891,7 @@ Result SmtEngine::checkSat(const BoolExpr& e) throw(TypeCheckingException) {
   return r;
 }/* SmtEngine::checkSat() */
 
-Result SmtEngine::query(const BoolExpr& e) throw(TypeCheckingException) {
+Result SmtEngine::query(const Expr& e) throw(TypeCheckingException) {
 
   Assert(!e.isNull());
   Assert(e.getExprManager() == d_exprManager);
@@ -1955,7 +1955,7 @@ Result SmtEngine::query(const BoolExpr& e) throw(TypeCheckingException) {
   return r;
 }/* SmtEngine::query() */
 
-Result SmtEngine::assertFormula(const BoolExpr& e) throw(TypeCheckingException) {
+Result SmtEngine::assertFormula(const Expr& e) throw(TypeCheckingException) {
   Assert(e.getExprManager() == d_exprManager);
   SmtScope smts(this);
   finalOptionsAreSet();
index f30a98935c8f21c350c589e2273efacbc02bd285..df2e47b5b1e0814d371877856ce7461e29aec289 100644 (file)
@@ -263,7 +263,7 @@ class CVC4_PUBLIC SmtEngine {
    * Fully type-check the argument, and also type-check that it's
    * actually Boolean.
    */
-  void ensureBoolean(const BoolExpr& e) throw(TypeCheckingException);
+  void ensureBoolean(const Expr& e) throw(TypeCheckingException);
 
   void internalPush();
 
@@ -362,20 +362,20 @@ public:
    * literals and conjunction of literals.  Returns false iff
    * inconsistent.
    */
-  Result assertFormula(const BoolExpr& e) throw(TypeCheckingException);
+  Result assertFormula(const Expr& e) throw(TypeCheckingException);
 
   /**
    * Check validity of an expression with respect to the current set
    * of assertions by asserting the query expression's negation and
    * calling check().  Returns valid, invalid, or unknown result.
    */
-  Result query(const BoolExpr& e) throw(TypeCheckingException);
+  Result query(const Expr& e) throw(TypeCheckingException);
 
   /**
    * Assert a formula (if provided) to the current context and call
    * check().  Returns sat, unsat, or unknown result.
    */
-  Result checkSat(const BoolExpr& e = BoolExpr()) throw(TypeCheckingException);
+  Result checkSat(const Expr& e = Expr()) throw(TypeCheckingException);
 
   /**
    * Simplify a formula without doing "much" work.  Does not involve
index 61b66ba3e3e2f14530f31b07d0ba0207035fe789..de32409c56271438aa3c627ecb10e4f5db77c55e 100644 (file)
@@ -211,53 +211,15 @@ void TheoryEngine::dumpAssertions(const char* tag) {
           Node assertionNode = (*it).assertion;
           // Purify all the terms
 
-          BoolExpr assertionExpr(assertionNode.toExpr());
           if ((*it).isPreregistered) {
             Dump(tag) << CommentCommand("Preregistered");
           } else {
             Dump(tag) << CommentCommand("Shared assertion");
           }
-          Dump(tag) << AssertCommand(assertionExpr);
+          Dump(tag) << AssertCommand(assertionNode.toExpr());
         }
         Dump(tag) << CheckSatCommand();
 
-        // Check for any missed propagations of shared terms
-        if (d_logicInfo.isSharingEnabled()) {
-          Dump(tag) << CommentCommand("Shared term equalities");
-          context::CDList<TNode>::const_iterator it = theory->shared_terms_begin(), it_end = theory->shared_terms_end();
-          for (; it != it_end; ++ it) {
-            TNode t1 = (*it);
-            context::CDList<TNode>::const_iterator it2 = it;
-            for (++ it2; it2 != it_end; ++ it2) {
-              TNode t2 = (*it2);
-              if (t1.getType() == t2.getType()) {
-                Node equality = t1.eqNode(t2);
-                if (d_sharedTerms.isKnown(equality)) {
-                  continue;
-                }
-                Node disequality = equality.notNode();
-                if (d_sharedTerms.isKnown(disequality)) {
-                  continue;
-                }
-
-                // Check equality
-                Dump(tag) << PushCommand();
-                BoolExpr eqExpr(equality.toExpr());
-                Dump(tag) << AssertCommand(eqExpr);
-                Dump(tag) << CheckSatCommand();
-                Dump(tag) << PopCommand();
-
-                // Check disequality
-                Dump(tag) << PushCommand();
-                BoolExpr diseqExpr(disequality.toExpr());
-                Dump(tag) << AssertCommand(diseqExpr);
-                Dump(tag) << CheckSatCommand();
-                Dump(tag) << PopCommand();
-              }
-            }
-          }
-        }
-
         Dump(tag) << PopCommand();
       }
     }