additional headers and modifications; now passes syntax check
authorMorgan Deters <mdeters@gmail.com>
Tue, 3 Nov 2009 03:37:08 +0000 (03:37 +0000)
committerMorgan Deters <mdeters@gmail.com>
Tue, 3 Nov 2009 03:37:08 +0000 (03:37 +0000)
16 files changed:
DESIGN_QUESTIONS
src/include/attr_type.h
src/include/context.h
src/include/decision_engine.h
src/include/expr_attribute.h
src/include/expr_builder.h
src/include/expr_manager.h
src/include/kind.h
src/include/literal.h [new file with mode: 0644]
src/include/model.h [new file with mode: 0644]
src/include/parser.h
src/include/prop_engine.h
src/include/prover.h
src/include/result.h
src/include/theory.h
src/include/vc.h

index 12704c6bfeb9ae0428d3c7fdcfabe4e42d7382b0..670089c3401023b4b53adf7bfed008f54e039158 100644 (file)
@@ -25,6 +25,13 @@ expr_builder.h
   // the expr is created?  (we'd have to do that since we don't know
   // it's hash code yet)
 
+expr_builder.h
+
+  /* TODO design: these modify ExprBuilder */
+  ExprBuilder& operator!() { return notExpr(); }
+  ExprBuilder& operator&&(const Expr& right) { return andExpr(right); }
+  ExprBuilder& operator||(const Expr& right) { return orExpr(right);  }
+
 prover.h
 
 // TODO: SAT layer (esp. CNF- versus non-clausal solvers under the
@@ -47,3 +54,15 @@ prover.h
    * preprocessing (certain contexts need more/less ?).
    */
 
+theory.h
+
+  // TODO: these use the current EM (but must be renamed)
+
+  // TODO design decisoin: instead of returning a set of literals
+  // here, perhaps we have an interface back into the prop engine
+  // where we assert directly.  we might sometimes unknowingly assert
+  // something clearly inconsistent (esp. in a parallel context).
+  // This would allow the PropEngine to cancel our further work since
+  // we're already inconsistent---also could strategize dynamically on
+  // whether enough theory prop work has occurred.
+  virtual void propagate(Effort level = FULL_EFFORT) = 0;
index a546d7dab773405cbd8573e60406c65f05a1121a..e5eb222fe8c9ade97ac0dded500512995ad39c6e 100644 (file)
 #ifndef __CVC4_ATTR_TYPE_H
 #define __CVC4_ATTR_TYPE_H
 
+#include "expr_attribute.h"
+
 namespace CVC4 {
 
+class Type;
+
 // an "attribute type" for types
 // this is essentially a traits structure
 class Type_attr {
 public:
   enum { hash_value = 11 }; // could use typeid but then different on different machines/compiles
-  typedef value_type Type;//Expr?
+  typedef Type value_type;//Expr?
   static const Type_attr marker;
 };
 
-AttributeTable<Type_attr>
+extern AttrTable<Type_attr> type_table;
 
 } /* CVC4 namespace */
 
index 845660ed78f63173f2e1f9ec9bbcfdb9d42d089a..1997e63d6d534753aa3f26d693ad8118ce3a5458 100644 (file)
@@ -12,6 +12,8 @@
 
 namespace CVC4 {
 
+class Context;
+
 class ContextManager {
 public:
   void switchContext(Context);
@@ -24,6 +26,18 @@ public:
   void restore();
 };/* class ContextObject */
 
+template <class T>
+class CDO;
+
+template <class T>
+class CDMap;
+
+template <class T>
+class CDList;
+
+template <class T>
+class CDSet;
+
 }/* CVC4 namespace */
 
 #endif /* __CVC4_CONTEXT_H */
index 6ff8d7f297c144332f6e4aeae06f1f6ea65d0fba..8745adad5ec36c4505cc458d1d771b7861f2df2f 100644 (file)
@@ -7,6 +7,8 @@
  ** New York University
  **/
 
+#include "literal.h"
+
 #ifndef __CVC4_DECISION_ENGINE_H
 #define __CVC4_DECISION_ENGINE_H
 
index b5f7dfe135c4459321851e3b2ac1486987ea145e..1c10a6663b768810b95525e6d3a3b6a8246c6084 100644 (file)
 #ifndef __CVC4_EXPR_ATTRIBUTE_H
 #define __CVC4_EXPR_ATTRIBUTE_H
 
+// TODO WARNING this file needs work !
+
+#include <stdint.h>
+#include "config.h"
+#include "context.h"
+#include "expr.h"
+
 namespace CVC4 {
 
 template <class value_type>
 class AttrTables;
 
 // global (or TSS)
-extern CDMap<uint_64t> g_hash_bool;
-extern CDMap<uint_64t> g_hash_int;
+extern CDMap<uint64_t> g_hash_bool;
+extern CDMap<uint64_t> g_hash_int;
 extern CDMap<Expr>     g_hash_expr;
 extern CDMap<void*>    g_hash_ptr;
 
+template <class T>
+class AttrTable;
+
 template <>
 class AttrTable<bool> {
 public:
@@ -33,7 +43,7 @@ public:
   };
 
   // bool specialization
-  static CDMap<uint_64t> *s_hash;
+  static CDMap<uint64_t> *s_hash;
 
   template <class Attr>
   BitAccessor& find(Expr e, const Attr&);
@@ -43,12 +53,12 @@ public:
 };
 
 template <>
-class AttrTable<uint_64t> {
+class AttrTable<uint64_t> {
 public:  
   // int(egral) specialization
   static CDMap<uint64_t> *s_hash;
-  uint_64t& find(x);
-  uint_64t& find(x) const;
+  uint64_t& find(Expr);
+  uint64_t& find(Expr) const;
 };
 
 template <class T>
@@ -63,13 +73,15 @@ class AttrTable<Expr> {
 public:
   // Expr specialization
   static CDMap<Expr> *s_hash;
-  find(x)
+  Expr find(Expr);
 };
 
-template <> AttrTable<bool>::s_hash     = &g_hash_bool;
-template <> AttrTable<uint_64t>::s_hash = &g_hash_int;
-template <> AttrTable<Expr>::s_hash     = &g_hash_expr;
-template <> AttrTable<void*>::s_hash    = &g_hash_ptr;
+CDMap<uint64_t>* AttrTable<bool>::s_hash     = &g_hash_bool;
+CDMap<uint64_t>* AttrTable<uint64_t>::s_hash = &g_hash_int;
+CDMap<Expr>*     AttrTable<Expr>::s_hash     = &g_hash_expr;
+
+template <class T>
+CDMap<void*>*    AttrTable<T*>::s_hash       = &g_hash_ptr;
 
 template <class Attr>
 class AttributeTable {
index 2e9bf49a473d91955dc75d66b42ab369f3a54a6b..59503aa4f7e7c4cb02f3c51597986fc4ded57324 100644 (file)
 #ifndef __CVC4_EXPR_BUILDER_H
 #define __CVC4_EXPR_BUILDER_H
 
+#include <vector>
+#include "expr_manager.h"
+#include "kind.h"
+
 namespace CVC4 {
 
 class AndExprBuilder;
@@ -33,8 +37,8 @@ class ExprBuilder {
 
   unsigned d_nchildren;
   union {
-    Expr         u_arr[10];
-    vector<Expr> u_vec;
+    ExprValue*         u_arr[10];
+    std::vector<Expr>* u_vec;
   } d_children;
 
 public:
@@ -52,18 +56,21 @@ public:
   ExprBuilder& skolemExpr(int i);
   ExprBuilder& substExpr(const std::vector<Expr>& oldTerms,
                          const std::vector<Expr>& newTerms);
+  /*
   ExprBuilder& substExpr(const ExprHashMap<Expr>& oldToNew);
+  */
 
-  ExprBuilder& operator!() const { return notExpr(); }
-  ExprBuilder& operator&&(const Expr& right) const { return andExpr(right); }
-  ExprBuilder& operator||(const Expr& right) const { return orExpr(right);  }
+  /* TODO design: these modify ExprBuilder */
+  ExprBuilder& operator!() { return notExpr(); }
+  ExprBuilder& operator&&(const Expr& right) { return andExpr(right); }
+  ExprBuilder& operator||(const Expr& right) { return orExpr(right);  }
 
   // "Stream" expression constructor syntax
-  ExprBuilder& operator<<(const Op& op);
+  ExprBuilder& operator<<(const Kind& op);
   ExprBuilder& operator<<(const Expr& child);
 
   // For pushing sequences of children
-  ExprBuilder& append(const vector<Expr>& children) { return append(children.begin(), children.end()); }
+  ExprBuilder& append(const std::vector<Expr>& children) { return append(children.begin(), children.end()); }
   template <class Iterator> ExprBuilder& append(const Iterator& begin, const Iterator& end);
 
   operator Expr();// not const
index f492358310d40c956b6c491780fd0bd669a4040d..0c265f57f00f4022b3db06a0732029d01d1a084f 100644 (file)
 #ifndef __CVC4_EXPR_MANAGER_H
 #define __CVC4_EXPR_MANAGER_H
 
+#include <vector>
+#include "expr.h"
+#include "kind.h"
+
 namespace CVC4 {
 
 class ExprManager {
-  static __thread ExprManager* current;
+  static __thread ExprManager* s_current;
 
 public:
-  static ExprManager* currentEM() { return d_current; }
+  static ExprManager* currentEM() { return s_current; }
 
   // general expression-builders
   Expr build(Kind kind);
@@ -31,9 +35,10 @@ public:
   Expr build(Kind kind, Expr child1, Expr child2, Expr child3, Expr child4, Expr child5, Expr child6, Expr child7, Expr child8, Expr child9);
   Expr build(Kind kind, Expr child1, Expr child2, Expr child3, Expr child4, Expr child5, Expr child6, Expr child7, Expr child8, Expr child9, Expr child10);
   // N-ary version
-  Expr build(Kind kind, vector<Expr> children);
+  Expr build(Kind kind, std::vector<Expr> children);
 
-  // these use the current EM
+  // TODO: these use the current EM (but must be renamed)
+  /*
   static Expr build(Kind kind)
   { currentEM()->build(kind); }
   static Expr build(Kind kind, Expr child1);
@@ -59,6 +64,7 @@ public:
   // N-ary version
   static Expr build(Kind kind, vector<Expr> children)
   { currentEM()->build(kind, children); }
+  */
 
   // do we want a varargs one?  perhaps not..
 };
index f45495bb0223b3f82f310ad751267f7f437cf893..9307cc6777bce3e6853cc19456bef0bee8e6d836 100644 (file)
@@ -26,3 +26,5 @@ enum Kind {
 };/* enum Kind */
 
 }/* CVC4 namespace */
+
+#endif /* __CVC4_KIND_H */
diff --git a/src/include/literal.h b/src/include/literal.h
new file mode 100644 (file)
index 0000000..93855ed
--- /dev/null
@@ -0,0 +1,19 @@
+/*********************                                           -*- C++ -*-  */
+/** literal.h
+ ** This file is part of the CVC4 prototype.
+ **
+ ** The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ **/
+
+#ifndef __CVC4_LITERAL_H
+#define __CVC4_LITERAL_H
+
+namespace CVC4 {
+
+class Literal;
+
+}/* CVC4 namespace */
+
+#endif /* __CVC4_LITERAL_H */
diff --git a/src/include/model.h b/src/include/model.h
new file mode 100644 (file)
index 0000000..205dcf1
--- /dev/null
@@ -0,0 +1,20 @@
+/*********************                                           -*- C++ -*-  */
+/** model.h
+ ** This file is part of the CVC4 prototype.
+ **
+ ** The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ **/
+
+#ifndef __CVC4_MODEL_H
+#define __CVC4_MODEL_H
+
+namespace CVC4 {
+
+class Model {
+};/* class Model */
+
+}/* CVC4 namespace */
+
+#endif /* __CVC4_MODEL_H */
index 8f1032286833eb5b7817e29866c33beaf78485f1..c5af769e37eedc3d6ca9f81f153363dbe435ab9d 100644 (file)
 #ifndef __CVC4_PARSER_H
 #define __CVC4_PARSER_H
 
+#include <iostream>
+#include "vc.h"
+#include "expr.h"
+
 namespace CVC4 {
 
 // In terms of abstraction, this is below (and provides services to)
index 1ec0316a961f7ca956d195796613109df204ecc9..90d07a47bb42d05b17cb671face96ae9447c9469 100644 (file)
 #ifndef __CVC4_PROP_ENGINE_H
 #define __CVC4_PROP_ENGINE_H
 
+#include "expr.h"
+#include "decision_engine.h"
+#include "theory_engine.h"
+
 namespace CVC4 {
 
 // In terms of abstraction, this is below (and provides services to)
index 7abfafe63d075d2eb95db233dd82e31a2ebf0a4e..e48d6336c7970a78a354fa9ad3af12014f562a6b 100644 (file)
 #ifndef __CVC4_PROVER_H
 #define __CVC4_PROVER_H
 
+#include <vector>
+#include "expr.h"
+#include "result.h"
+#include "model.h"
+
 // In terms of abstraction, this is below (and provides services to)
 // ValidityChecker and above (and requires the services of)
 // PropEngine.
index 1cecc53013afb2a95c3396f2ee4e2cc2b9778305..cfabd3be2e4f82d8bda5f3c229824206c18b7bbb 100644 (file)
@@ -23,39 +23,41 @@ namespace CVC4 {
  */
 class Result {
 public:
-  enum {
+  enum SAT {
     UNSAT = 0,
     SAT = 1,
-    UNKNOWN = 2
-  } SAT;
+    SAT_UNKNOWN = 2
+  };
 
-  enum {
+  enum Validity {
     INVALID = 0,
     VALID = 1,
-    UNKNOWN = 2
-  } Validity;
+    VALIDITY_UNKNOWN = 2
+  };
 
-  enum {
+  enum UnknownExplanation {
     REQUIRES_FULL_CHECK,
     INCOMPLETE,
     TIMEOUT,
     BAIL,
     OTHER
-  } UnknownExplanation;
+  };
 
 private:
-  SAT      d_sat;
-  Validity d_validity;
-  enum { SAT, VALIDITY } d_which;
+  enum SAT      d_sat;
+  enum Validity d_validity;
+  enum { TYPE_SAT, TYPE_VALIDITY } d_which;
 
 public:
-  Result(SAT);
-  Result(Validity);
+  Result(enum SAT);
+  Result(enum Validity);
 
-  SAT isSAT();
-  Validity isValid();
-  UnknownExplanation whyUnknown();
+  enum SAT isSAT();
+  enum Validity isValid();
+  enum UnknownExplanation whyUnknown();
 
 };/* class Result */
 
 }/* CVC4 namespace */
+
+#endif /* __CVC4_RESULT_H */
index b08e9e7bab41d18fc257a246d94550fa1b19c6a6..6659dc68044e1706d50832a1beec6beef8ae6b8b 100644 (file)
@@ -10,6 +10,9 @@
 #ifndef __CVC4_THEORY_H
 #define __CVC4_THEORY_H
 
+#include "expr.h"
+#include "literal.h"
+
 namespace CVC4 {
 
 /**
@@ -57,7 +60,14 @@ public:
   /**
    * T-propagate new literal assignments in the current context.
    */
-  virtual LiteralSet propagate();
+  // TODO design decisoin: instead of returning a set of literals
+  // here, perhaps we have an interface back into the prop engine
+  // where we assert directly.  we might sometimes unknowingly assert
+  // something clearly inconsistent (esp. in a parallel context).
+  // This would allow the PropEngine to cancel our further work since
+  // we're already inconsistent---also could strategize dynamically on
+  // whether enough theory prop work has occurred.
+  virtual void propagate(Effort level = FULL_EFFORT) = 0;
 
   /**
    * Return an explanation for the literal (which was previously propagated by this theory)..
index a75aa054869004fac8e40ca9149540331811be7a..57d8a957e11649441a74df4bb538349a64c8facb 100644 (file)
@@ -10,6 +10,9 @@
 #ifndef __CVC4_VC_H
 #define __CVC4_VC_H
 
+#include "command.h"
+#include "expr.h"
+
 /* TODO provide way of querying whether you fall into a fragment /
  * returning what fragment you're in */