summaryrefslogtreecommitdiff
path: root/src/proof/proof_manager.h
diff options
context:
space:
mode:
authorlianah <lianahady@gmail.com>2013-10-09 15:48:42 -0400
committerlianah <lianahady@gmail.com>2013-10-09 15:48:42 -0400
commit44485520fae92b34e4385d4d2c4774c9dd7d0dc0 (patch)
tree6a3608afa6276e11e1a72504c439a4991e9dea41 /src/proof/proof_manager.h
parent08c8433e4ab849024930a8c4dbe8756e13d08099 (diff)
cleaned up proof code
Diffstat (limited to 'src/proof/proof_manager.h')
-rw-r--r--src/proof/proof_manager.h69
1 files changed, 55 insertions, 14 deletions
diff --git a/src/proof/proof_manager.h b/src/proof/proof_manager.h
index d4f1d6528..7642ba776 100644
--- a/src/proof/proof_manager.h
+++ b/src/proof/proof_manager.h
@@ -50,6 +50,7 @@ class LFSCTheoryProof;
namespace prop {
typedef uint64_t SatVariable;
class SatLiteral;
+typedef std::vector<SatLiteral> SatClause;
}
// different proof modes
@@ -60,11 +61,29 @@ enum ProofFormat {
std::string append(const std::string& str, uint64_t num);
+typedef __gnu_cxx::hash_map < ClauseId, const prop::SatClause* > IdToClause;
+typedef __gnu_cxx::hash_set<prop::SatVariable > VarSet;
+typedef __gnu_cxx::hash_set<Expr, ExprHashFunction > ExprSet;
+
+typedef int ClauseId;
+
+enum ClauseKind {
+ INPUT,
+ THEORY_LEMMA,
+ LEARNT
+};
+
class ProofManager {
- SatProof* d_satProof;
- CnfProof* d_cnfProof;
+ SatProof* d_satProof;
+ CnfProof* d_cnfProof;
TheoryProof* d_theoryProof;
+ // information that will need to be shared across proofs
+ IdToClause d_inputClauses;
+ IdToClause d_theoryLemmas;
+ ExprSet d_inputFormulas;
+ VarSet d_propVars;
+
Proof* d_fullProof;
ProofFormat d_format;
@@ -74,22 +93,44 @@ class ProofManager {
~ProofManager();
public:
static ProofManager* currentPM();
- static void initSatProof(Minisat::Solver* solver);
- static void initCnfProof(CVC4::prop::CnfStream* cnfStream);
- static void initTheoryProof();
- static Proof* getProof();
- static SatProof* getSatProof();
- static CnfProof* getCnfProof();
+ // initialization
+ static void initSatProof(Minisat::Solver* solver);
+ static void initCnfProof(CVC4::prop::CnfStream* cnfStream);
+ static void initTheoryProof();
+
+ static Proof* getProof();
+ static SatProof* getSatProof();
+ static CnfProof* getCnfProof();
static TheoryProof* getTheoryProof();
+ // iterators over data shared by proofs
+ typedef IdToClause::const_iterator clause_iterator;
+ typedef ExprSet::const_iterator assertions_iterator;
+ typedef VarSet::const_iterator var_iterator;
+
+ clause_iterator begin_input_clauses() const { return d_inputClauses.begin(); }
+ clause_iterator end_input_clauses() const { return d_inputClauses.end(); }
+
+ clause_iterator begin_lemmas() const { return d_theoryLemmas.begin(); }
+ clause_iterator end_lemmas() const { return d_theoryLemmas.end(); }
+
+ assertions_iterator begin_assertions() const { return d_inputFormulas.begin(); }
+ assertions_iterator end_assertions() const { return d_inputFormulas.end(); }
+
+ var_iterator begin_vars() const { return d_propVars.begin(); }
+ var_iterator end_vars() const { return d_propVars.end(); }
+
+ void addAssertion(Expr formula);
+ void addClause(ClauseId id, const prop::SatClause* clause, ClauseKind kind);
+
// variable prefixes
- static std::string printInputClauseName(ClauseId id);
- static std::string printLemmaClauseName(ClauseId id);
- static std::string printLearntClauseName(ClauseId id);
+ static std::string getInputClauseName(ClauseId id);
+ static std::string getLemmaClauseName(ClauseId id);
+ static std::string getLearntClauseName(ClauseId id);
- static std::string printVarName(prop::SatVariable var);
- static std::string printAtomName(prop::SatVariable var);
- static std::string printLitName(prop::SatLiteral lit);
+ static std::string getVarName(prop::SatVariable var);
+ static std::string getAtomName(prop::SatVariable var);
+ static std::string getLitName(prop::SatLiteral lit);
};/* class ProofManager */
class LFSCProof : public Proof {
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback