Finish off SEXPR kind work.
authorMorgan Deters <mdeters@gmail.com>
Wed, 26 Sep 2012 22:00:19 +0000 (22:00 +0000)
committerMorgan Deters <mdeters@gmail.com>
Wed, 26 Sep 2012 22:00:19 +0000 (22:00 +0000)
(this commit was certified error- and warning-free by the test-and-commit script.)

src/compat/cvc3_compat.cpp
src/expr/command.cpp
src/expr/type_node.cpp
src/printer/cvc/cvc_printer.cpp
src/printer/smt2/smt2_printer.cpp
src/smt/smt_engine.cpp

index 2c5bc0170b5c2acbcdf25f14f87ffc9b39c7b19b..b7c7013d21887252d4df4f484d6e917aa36b1fd4 100644 (file)
@@ -1304,47 +1304,38 @@ Expr ValidityChecker::idExpr(const std::string& name) {
 }
 
 Expr ValidityChecker::listExpr(const std::vector<Expr>& kids) {
-  // list exprs aren't supported by CVC4; make a tuple if two or more
-  CheckArgument(kids.size() > 0, kids);
-  return (kids.size() == 1) ? kids[0] : Expr(d_em->mkExpr(CVC4::kind::TUPLE, vector<CVC4::Expr>(kids.begin(), kids.end())));
+  return d_em->mkExpr(CVC4::kind::SEXPR, vector<CVC4::Expr>(kids.begin(), kids.end()));
 }
 
 Expr ValidityChecker::listExpr(const Expr& e1) {
-  // list exprs aren't supported by CVC4; just return e1
-  return e1;
+  return d_em->mkExpr(CVC4::kind::SEXPR, e1);
 }
 
 Expr ValidityChecker::listExpr(const Expr& e1, const Expr& e2) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, e1, e2);
+  return d_em->mkExpr(CVC4::kind::SEXPR, e1, e2);
 }
 
 Expr ValidityChecker::listExpr(const Expr& e1, const Expr& e2, const Expr& e3) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, e1, e2, e3);
+  return d_em->mkExpr(CVC4::kind::SEXPR, e1, e2, e3);
 }
 
 Expr ValidityChecker::listExpr(const std::string& op,
                                const std::vector<Expr>& kids) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, d_em->mkConst(op), vector<CVC4::Expr>(kids.begin(), kids.end()));
+  return d_em->mkExpr(CVC4::kind::SEXPR, d_em->mkConst(op), vector<CVC4::Expr>(kids.begin(), kids.end()));
 }
 
 Expr ValidityChecker::listExpr(const std::string& op, const Expr& e1) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, d_em->mkConst(op), e1);
+  return d_em->mkExpr(CVC4::kind::SEXPR, d_em->mkConst(op), e1);
 }
 
 Expr ValidityChecker::listExpr(const std::string& op, const Expr& e1,
                                const Expr& e2) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, d_em->mkConst(op), e1, e2);
+  return d_em->mkExpr(CVC4::kind::SEXPR, d_em->mkConst(op), e1, e2);
 }
 
 Expr ValidityChecker::listExpr(const std::string& op, const Expr& e1,
                                const Expr& e2, const Expr& e3) {
-  // list exprs aren't supported by CVC4; just return a tuple
-  return d_em->mkExpr(CVC4::kind::TUPLE, d_em->mkConst(op), e1, e2, e3);
+  return d_em->mkExpr(CVC4::kind::SEXPR, d_em->mkConst(op), e1, e2, e3);
 }
 
 void ValidityChecker::printExpr(const Expr& e) {
index 99662cb99bbdd655b70b3858595ac6341f5cf458..938f286352b3d86c9a0961b6eba8c86db984e904 100644 (file)
@@ -790,9 +790,9 @@ void GetValueCommand::invoke(SmtEngine* smtEngine) throw() {
       smt::SmtScope scope(smtEngine);
       Node request = Node::fromExpr(options::expandDefinitions() ? smtEngine->expandDefinitions(*i) : *i);
       Node value = Node::fromExpr(smtEngine->getValue(*i));
-      result.push_back(nm->mkNode(kind::TUPLE, request, value));
+      result.push_back(nm->mkNode(kind::SEXPR, request, value));
     }
-    Node n = nm->mkNode(kind::TUPLE, result);
+    Node n = nm->mkNode(kind::SEXPR, result);
     d_result = nm->toExpr(n);
     d_commandStatus = CommandSuccess::instance();
   } catch(exception& e) {
index 2676fd6b24ffbbfc2f55ff2c732e505f53238935..b681f70d4394acac43c137c4890263762aa75ec5 100644 (file)
@@ -246,6 +246,9 @@ TypeNode TypeNode::leastCommonTypeNode(TypeNode t0, TypeNode t1){
         }
       case kind::FUNCTION_TYPE:
         return TypeNode(); // Not sure if this is right
+      case kind::SEXPR_TYPE:
+        Unimplemented("haven't implemented leastCommonType for symbolic expressions yet");
+        return TypeNode(); // Not sure if this is right
       case kind::TUPLE_TYPE:
         Unimplemented("haven't implemented leastCommonType for tuples yet");
         return TypeNode(); // Not sure if this is right
index a6693dd2271249fdcba7c479d73b436e4ee3484c..56d9a20b0350e35435e33ca423bdebd294ecce6e 100644 (file)
@@ -198,6 +198,7 @@ void CvcPrinter::toStream(std::ostream& out, TNode n, int depth, bool types, boo
       return;
       break;
     case kind::TUPLE_TYPE:
+    case kind::SEXPR_TYPE:
       out << '[';
       for (unsigned i = 0; i < n.getNumChildren(); ++ i) {
         if (i > 0) {
@@ -209,6 +210,7 @@ void CvcPrinter::toStream(std::ostream& out, TNode n, int depth, bool types, boo
       return;
       break;
     case kind::TUPLE:
+    case kind::SEXPR:
       // no-op
       break;
     case kind::LAMBDA:
index 7f973aaeec03bd6c267e3e730b99cc06c70f1ce1..5d9a13786d89228a22977c277b1fc921c755d8ee 100644 (file)
@@ -210,6 +210,7 @@ void Smt2Printer::toStream(std::ostream& out, TNode n,
   case kind::DISTINCT: out << smtKindString(k) << " "; break;
   case kind::CHAIN: break;
   case kind::TUPLE: break;
+  case kind::SEXPR: break;
 
     // bool theory
   case kind::NOT:
@@ -355,7 +356,9 @@ static string smtKindString(Kind k) throw() {
   case kind::APPLY: break;
   case kind::EQUAL: return "=";
   case kind::DISTINCT: return "distinct";
+  case kind::CHAIN: break;
   case kind::TUPLE: break;
+  case kind::SEXPR: break;
 
     // bool theory
   case kind::NOT: return "not";
index ad72e07377884db8f4884dfc465603ca15232276..2db746c0a593fce75f8230c65306bd5edf637666 100644 (file)
@@ -1888,11 +1888,6 @@ Expr SmtEngine::getValue(const Expr& e)
       "Cannot get value unless immediately preceded by SAT/INVALID or UNKNOWN response.";
     throw ModalException(msg);
   }
-  if(type.isSort() || type.isSortConstructor()) {
-    const char* msg =
-      "Cannot get value of a sort.";
-    throw ModalException(msg);
-  }
 
   // do not need to apply preprocessing substitutions (should be recorded in model already)