summaryrefslogtreecommitdiff
path: root/src/prop/cnf_stream.h
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@gmail.com>2011-09-02 20:41:08 +0000
committerMorgan Deters <mdeters@gmail.com>2011-09-02 20:41:08 +0000
commit1d18e5ebed9a5b20ed6a8fe21d11842acf6fa7ea (patch)
tree7074f04453914bc377ff6aeb307dd17b82b76ff3 /src/prop/cnf_stream.h
parent74770f1071e6102795393cf65dd0c651038db6b4 (diff)
Merge from my post-smtcomp branch. Includes:
Dumping infrastructure. Can dump preprocessed queries and clauses. Can also dump queries (for testing with another solver) to see if any conflicts are missed, T-propagations are missed, all lemmas are T-valid, etc. For a full list of options see --dump=help. CUDD building much cleaner. Documentation and assertion fixes. Printer improvements, printing of commands in language-defined way, etc. Typechecker stuff in expr package now autogenerated, no need to manually edit the expr package when adding a new theory. CVC3 compatibility layer (builds as libcompat). SWIG detection and language binding support (infrastructure). Support for some Z3 extended commands (like datatypes) in SMT-LIBv2 mode (when not in compliance mode). Copyright and file headers regenerated.
Diffstat (limited to 'src/prop/cnf_stream.h')
-rw-r--r--src/prop/cnf_stream.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/prop/cnf_stream.h b/src/prop/cnf_stream.h
index fd0ab6291..ecb0fd2fb 100644
--- a/src/prop/cnf_stream.h
+++ b/src/prop/cnf_stream.h
@@ -3,7 +3,7 @@
** \verbatim
** Original author: taking
** Major contributors: mdeters, dejan
- ** Minor contributors (to current version): cconway
+ ** Minor contributors (to current version): barrett, cconway
** This file is part of the CVC4 prototype.
** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys)
** Courant Institute of Mathematical Sciences
@@ -77,6 +77,24 @@ protected:
/** Top level nodes that we translated */
std::vector<TNode> d_translationTrail;
+ /**
+ * How many literals were already mapped at the top-level when we
+ * tried to convertAndAssert() something. This
+ * achieves early detection of units and leads to fewer
+ * clauses. It's motivated by the following pattern:
+ *
+ * ASSERT BIG FORMULA => x
+ * (and then later...)
+ * ASSERT BIG FORMULA
+ *
+ * With the first assert, BIG FORMULA is clausified, and a literal
+ * is assigned for the top level so that the final clause for the
+ * implication is "lit => x". But without "fortunate literal
+ * detection," when BIG FORMULA is later asserted, it is clausified
+ * separately, and "lit" is never asserted as a unit clause.
+ */
+ KEEP_STATISTIC(IntStat, d_fortunateLiterals, "prop::CnfStream::fortunateLiterals", 0);
+
/** Remove nots from the node */
TNode stripNot(TNode node) {
while (node.getKind() == kind::NOT) {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback