diff options
author | Morgan Deters <mdeters@gmail.com> | 2011-09-02 20:41:08 +0000 |
---|---|---|
committer | Morgan Deters <mdeters@gmail.com> | 2011-09-02 20:41:08 +0000 |
commit | 1d18e5ebed9a5b20ed6a8fe21d11842acf6fa7ea (patch) | |
tree | 7074f04453914bc377ff6aeb307dd17b82b76ff3 /src/prop/cnf_stream.h | |
parent | 74770f1071e6102795393cf65dd0c651038db6b4 (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.h | 20 |
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) { |