Added theory output channel interfaces and "Interrupted" exception.
authorMorgan Deters <mdeters@gmail.com>
Thu, 4 Feb 2010 02:46:17 +0000 (02:46 +0000)
committerMorgan Deters <mdeters@gmail.com>
Thu, 4 Feb 2010 02:46:17 +0000 (02:46 +0000)
Updated contrib/update-copyright to handle Antlr (.g) parser/lexer inputs.
Updated copyright year.

Added a new "bool" theory (right now just to hold a kind.h contribution).

Added "kinds" files to UF and the new "bool" theory.

14 files changed:
contrib/update-copyright.pl
src/theory/Makefile.am
src/theory/arith/Makefile.am [new file with mode: 0644]
src/theory/arith/kinds [new file with mode: 0644]
src/theory/bool/Makefile.am [new file with mode: 0644]
src/theory/bool/kinds [new file with mode: 0644]
src/theory/interrupted.h [new file with mode: 0644]
src/theory/output_channel.h [new file with mode: 0644]
src/theory/theory.cpp
src/theory/theory.h
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/uf/Makefile.am
src/theory/uf/kinds [new file with mode: 0644]

index 1548e3fa6bd85e47e237b740d386cc2a4219a8f8..948e276d152edba9b3fb91a7273df8f0c4c2dc13 100755 (executable)
 # .deps, etc.)
 #
 # It ignores any file not ending with one of:
-#   .c .cc .cpp .C .h .hh .hpp .H .y .yy .ypp .Y .l .ll .lpp .L
+#   .c .cc .cpp .C .h .hh .hpp .H .y .yy .ypp .Y .l .ll .lpp .L .g
 # (so, this includes emacs ~-backups, CVS detritus, etc.)
 #
 # It ignores any directory matching $excluded_directories
 # (so, you should add here any sources imported but not covered under
 # the license.)
 
-my $excluded_directories = '^(minisat|CVS)$';
+my $excluded_directories = '^(minisat|CVS|generated)$';
 
 # Years of copyright for the template.  E.g., the string
 # "1985, 1987, 1992, 1997, 2008" or "2006-2009" or whatever.
-my $years = '2009';
+my $years = '2009, 2010';
 
 my $standard_template = <<EOF;
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) $years The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) $years  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
@@ -43,7 +43,7 @@ EOF
 
 my $public_template = <<EOF;
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) $years The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) $years  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
@@ -102,7 +102,7 @@ sub recurse {
       next if $file =~ /$excluded_directories/;
       recurse($srcdir.'/'.$file);
     } else {
-      next if !($file =~ /\.(c|cc|cpp|C|h|hh|hpp|H|y|yy|ypp|Y|l|ll|lpp|L)$/);
+      next if !($file =~ /\.(c|cc|cpp|C|h|hh|hpp|H|y|yy|ypp|Y|l|ll|lpp|L|g)$/);
       print "$srcdir/$file...";
       my $infile = $srcdir.'/'.$file;
       my $outfile = $srcdir.'/#'.$file.'.tmp';
@@ -114,14 +114,19 @@ sub recurse {
       my $minor_contributors = <$AUTHOR>; chomp $minor_contributors;
       close $AUTHOR;
       $_ = <$IN>;
-      if(m,^(%{)?/\*\*\*\*\*,) {
+      if(m,^(%{)?/\*(\*| )\*\*\*,) {
         print "updating\n";
         if($file =~ /\.(y|yy|ypp|Y)$/) {
           print $OUT "%{/*******************                                           -*- C++ -*-  */\n";
+          print $OUT "/** $file\n";
+        } elsif($file =~ /\.g$/) {
+          # avoid javadoc-style comment here; antlr complains
+          print $OUT "/* *******************                                           -*- C++ -*-  */\n";
+          print $OUT "/*  $file\n";
         } else {
           print $OUT "/*********************                                           -*- C++ -*-  */\n";
+          print $OUT "/** $file\n";
         }
-        print $OUT "/** $file\n";
         print $OUT " ** Original author: $author\n";
         print $OUT " ** Major contributors: $major_contributors\n";
         print $OUT " ** Minor contributors (to current version): $minor_contributors\n";
index 4eba7811ca7ae6b6c029c6380e006d8eb5523d22..f6f4ae07e627a09b33d7af07d95be9aa26ef5ce0 100644 (file)
@@ -12,6 +12,8 @@ libtheory_la_SOURCES = \
        theory.cpp
 
 libtheory_la_LIBADD = \
+       @builddir@/bool/libbool.la
        @builddir@/uf/libuf.la
+       @builddir@/uf/libarith.la
 
-SUBDIRS = uf
+SUBDIRS = bool uf arith
diff --git a/src/theory/arith/Makefile.am b/src/theory/arith/Makefile.am
new file mode 100644 (file)
index 0000000..4616597
--- /dev/null
@@ -0,0 +1,10 @@
+AM_CPPFLAGS = \
+       -D__BUILDING_CVC4LIB \
+       -I@srcdir@/../../include -I@srcdir@/../..
+AM_CXXFLAGS = -Wall -fvisibility=hidden
+
+noinst_LTLIBRARIES = libarith.la
+
+libarith_la_SOURCES =
+
+EXTRA_DIST = kinds
diff --git a/src/theory/arith/kinds b/src/theory/arith/kinds
new file mode 100644 (file)
index 0000000..9944168
--- /dev/null
@@ -0,0 +1 @@
+PLUS
diff --git a/src/theory/bool/Makefile.am b/src/theory/bool/Makefile.am
new file mode 100644 (file)
index 0000000..9c8b836
--- /dev/null
@@ -0,0 +1,10 @@
+AM_CPPFLAGS = \
+       -D__BUILDING_CVC4LIB \
+       -I@srcdir@/../../include -I@srcdir@/../..
+AM_CXXFLAGS = -Wall -fvisibility=hidden
+
+noinst_LTLIBRARIES = libbool.la
+
+libbool_la_SOURCES =
+
+EXTRA_DIST = kinds
diff --git a/src/theory/bool/kinds b/src/theory/bool/kinds
new file mode 100644 (file)
index 0000000..7f12673
--- /dev/null
@@ -0,0 +1,8 @@
+FALSE
+TRUE
+NOT
+AND
+IFF
+IMPLIES
+OR
+XOR
diff --git a/src/theory/interrupted.h b/src/theory/interrupted.h
new file mode 100644 (file)
index 0000000..03bf466
--- /dev/null
@@ -0,0 +1,37 @@
+/*********************                                           -*- C++ -*-  */
+/** interrupted.h
+ ** Original author: 
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** The theory output channel interface.
+ **/
+
+#ifndef __CVC4__THEORY__INTERRUPTED_H
+#define __CVC4__THEORY__INTERRUPTED_H
+
+#include "util/exception.h"
+
+namespace CVC4 {
+namespace theory {
+
+class CVC4_PUBLIC Interrupted : public CVC4::Exception {
+public:
+
+  // Constructors
+  Interrupted() : CVC4::Exception("CVC4::Theory::Interrupted") {}
+  Interrupted(const std::string& msg) : CVC4::Exception(msg) {}
+  Interrupted(const char* msg) : CVC4::Exception(msg) {}
+
+};/* class Interrupted */
+
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
+
+#endif /* __CVC4__THEORY__INTERRUPTED_H */
diff --git a/src/theory/output_channel.h b/src/theory/output_channel.h
new file mode 100644 (file)
index 0000000..42e68b7
--- /dev/null
@@ -0,0 +1,90 @@
+/*********************                                           -*- C++ -*-  */
+/** output_channel.h
+ ** Original author: 
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
+ ** Courant Institute of Mathematical Sciences
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.
+ **
+ ** The theory output channel interface.
+ **/
+
+#ifndef __CVC4__THEORY__OUTPUT_CHANNEL_H
+#define __CVC4__THEORY__OUTPUT_CHANNEL_H
+
+#include "theory/interrupted.h"
+
+namespace CVC4 {
+namespace theory {
+
+/**
+ * Generic "theory output channel" interface.
+ */
+class OutputChannel {
+public:
+
+  /**
+   * With safePoint(), the theory signals that it is at a safe point
+   * and can be interrupted.
+   */
+  virtual void safePoint() throw(Interrupted&) {
+  }
+
+  /**
+   * Indicate a theory conflict has arisen.
+   *
+   * @param n - a conflict at the current decision level
+   * @param safe - whether it is safe to be interrupted
+   */
+  virtual void conflict(Node n, bool safe = false) throw(Interrupted&) = 0;
+
+  /**
+   * Propagate a theory literal.
+   *
+   * @param n - a theory consequence at the current decision level
+   * @param safe - whether it is safe to be interrupted
+   */
+  virtual void propagate(Node n, bool safe = false) throw(Interrupted&) = 0;
+
+  /**
+   * Tell the core that a valid theory lemma at decision level 0 has
+   * been detected.  (This request a split.)
+   *
+   * @param n - a theory lemma valid at decision level 0
+   * @param safe - whether it is safe to be interrupted
+   */
+  virtual void lemma(Node n, bool safe = false) throw(Interrupted&) = 0;
+
+};/* class OutputChannel */
+
+/**
+ * Generic "theory output channel" interface for explanations.
+ */
+class ExplainOutputChannel {
+public:
+
+  /**
+   * With safePoint(), the theory signals that it is at a safe point
+   * and can be interrupted.  The default implementation never
+   * interrupts.
+   */
+  virtual void safePoint() throw(Interrupted&) {
+  }
+
+  /**
+   * Provide an explanation in response to an explanation request.
+   *
+   * @param n - an explanation
+   * @param safe - whether it is safe to be interrupted
+   */
+  virtual void explanation(Node n, bool safe = false) throw(Interrupted&) = 0;
+};/* class ExplainOutputChannel */
+
+}/* CVC4::theory namespace */
+}/* CVC4 namespace */
+
+#endif /* __CVC4__THEORY__OUTPUT_CHANNEL_H */
index c4b2b8d836c882e75a3db94c911f4b2e346b1e40..2972b472228a0ca55388f8c08ba99ac366a28459 100644 (file)
@@ -4,7 +4,7 @@
  ** Major contributors: none
  ** Minor contributors (to current version): none
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
@@ -16,5 +16,7 @@
 #include "theory/theory.h"
 
 namespace CVC4 {
+namespace theory {
 
+}/* CVC4::theory namespace */
 }/* CVC4 namespace */
index f0db8a7aef505abb3a368094f1f02480fd17ff6b..dc862197ed4f8e2227521a31f66718ea617f6026 100644 (file)
@@ -4,7 +4,7 @@
  ** Major contributors: none
  ** Minor contributors (to current version): dejan
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
@@ -18,6 +18,7 @@
 
 #include "expr/node.h"
 #include "util/literal.h"
+#include "theory/output_channel.h"
 
 namespace CVC4 {
 namespace theory {
@@ -26,12 +27,14 @@ namespace theory {
  * Base class for T-solvers.  Abstract DPLL(T).
  */
 class Theory {
+
   /**
    * Return whether a node is shared or not.  Used by setup().
    */
   bool isShared(Node);
 
 public:
+
   /**
    * Subclasses of Theory may add additional efforts.  DO NOT CHECK
    * equality with one of these values (e.g. if STANDARD xxx) but
@@ -54,6 +57,12 @@ public:
   static bool standardEffortOnly(Effort e)   { return e >= STANDARD && e < FULL_EFFORT; }
   static bool fullEffort(Effort e)           { return e >= FULL_EFFORT; }
 
+  /**
+   * Construct a theory.
+   */
+  Theory() {
+  }
+
   /**
    * Prepare for a Node.
    */
@@ -62,30 +71,24 @@ public:
   /**
    * Assert a literal in the current context.
    */
-  void assert(Literal);
+  void assertLiteral(Literal);
 
   /**
    * Check the current assignment's consistency.
    */
-  virtual void check(Effort level = FULL_EFFORT) = 0;
+  virtual void check(OutputChannel& out, Effort level = FULL_EFFORT) = 0;
 
   /**
    * T-propagate new literal assignments in the current context.
    */
-  // TODO design decision: 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;
+  virtual void propagate(OutputChannel& out, Effort level = FULL_EFFORT) = 0;
 
   /**
-   * Return an explanation for the literal (which was previously
-   * propagated by this theory)..
+   * Return an explanation for the literal represented by parameter n
+   * (which was previously propagated by this theory).  Report
+   * explanations to an output channel.
    */
-  virtual Node explain(Literal) = 0;
+  virtual void explain(OutputChannel& out, Node n, Effort level = FULL_EFFORT) = 0;
 
 };/* class Theory */
 
index 2289f2fea9d0d179205da9bb8eb171a144d2f2e5..81bb38e687e4396d4f889ac7a7fffb58d6b77b18 100644 (file)
@@ -4,7 +4,7 @@
  ** Major contributors: none
  ** Minor contributors (to current version): none
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
index 65a31743306a3e0c849bb5caed4496620426782c..b4a9f8f919098577f43b2c3d7d74d6657bf644a7 100644 (file)
@@ -4,7 +4,7 @@
  ** Major contributors: none
  ** Minor contributors (to current version): none
  ** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010  The Analysis of Computer Systems Group (ACSys)
  ** Courant Institute of Mathematical Sciences
  ** New York University
  ** See the file COPYING in the top-level source directory for licensing
index 4b36d2fe891c9015c0d2f121e71649e689095526..7895803a6f84e56a56832ee2c6281881a593a97c 100644 (file)
@@ -6,3 +6,5 @@ AM_CXXFLAGS = -Wall -fvisibility=hidden
 noinst_LTLIBRARIES = libuf.la
 
 libuf_la_SOURCES =
+
+EXTRA_DIST = kinds
diff --git a/src/theory/uf/kinds b/src/theory/uf/kinds
new file mode 100644 (file)
index 0000000..5106136
--- /dev/null
@@ -0,0 +1 @@
+APPLY