** Major contributors: dejan
** Minor contributors (to current version): cconway, mdeters
** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009, 2010 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010, 2011 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
namespace CVC4 {
namespace prop {
-CnfStream::CnfStream(SatInputInterface *satSolver, theory::Registrar reg) :
- d_satSolver(satSolver), d_registrar(reg) {
+CnfStream::CnfStream(SatInputInterface *satSolver, theory::Registrar registrar) :
+ d_satSolver(satSolver), d_registrar(registrar) {
}
void CnfStream::recordTranslation(TNode node) {
}
-TseitinCnfStream::TseitinCnfStream(SatInputInterface* satSolver, theory::Registrar reg) :
- CnfStream(satSolver, reg) {
+TseitinCnfStream::TseitinCnfStream(SatInputInterface* satSolver, theory::Registrar registrar) :
+ CnfStream(satSolver, registrar) {
}
void CnfStream::assertClause(TNode node, SatClause& c) {
/*! \file cnf_stream.h
** \verbatim
** Original author: taking
- ** Major contributors: dejan
- ** Minor contributors (to current version): mdeters, cconway
+ ** Major contributors: mdeters, dejan
+ ** Minor contributors (to current version): cconway
** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009, 2010 The Analysis of Computer Systems Group (ACSys)
+ ** Copyright (c) 2009, 2010, 2011 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
protected:
+ /** The "registrar" for pre-registration of terms */
theory::Registrar d_registrar;
/** Top level nodes that we translated */
* set of clauses and sends them to the given sat solver.
* @param satSolver the sat solver to use
*/
- CnfStream(SatInputInterface* satSolver, theory::Registrar r);
+ CnfStream(SatInputInterface* satSolver, theory::Registrar registrar);
/**
* Destructs a CnfStream. This implementation does nothing, but we
* Constructs the stream to use the given sat solver.
* @param satSolver the sat solver to use
*/
- TseitinCnfStream(SatInputInterface* satSolver, theory::Registrar reg);
+ TseitinCnfStream(SatInputInterface* satSolver, theory::Registrar registrar);
private:
/*! \file prop_engine.cpp
** \verbatim
** Original author: mdeters
- ** Major contributors: cconway, dejan
- ** Minor contributors (to current version): taking
+ ** Major contributors: taking, cconway, dejan
+ ** Minor contributors (to current version): none
** 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
** See the file COPYING in the top-level source directory for licensing
** information.\endverbatim
**
- ** \brief Implementation of the propositional engine of CVC4.
+ ** \brief Implementation of the propositional engine of CVC4
**
** Implementation of the propositional engine of CVC4.
**/
d_theoryEngine(te),
d_context(context) {
Debug("prop") << "Constructing the PropEngine" << endl;
+
d_satSolver = new SatSolver(this, d_theoryEngine, d_context);
- theory::Registrar reg(d_theoryEngine);
- d_cnfStream = new CVC4::prop::TseitinCnfStream(d_satSolver, reg);
+
+ theory::Registrar registrar(d_theoryEngine);
+ d_cnfStream = new CVC4::prop::TseitinCnfStream(d_satSolver, registrar);
+
d_satSolver->setCnfStream(d_cnfStream);
}
+/********************* */
+/*! \file registrar.h
+ ** \verbatim
+ ** Original author: taking
+ ** Major contributors: mdeters
+ ** Minor contributors (to current version): none
+ ** 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
+ ** New York University
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.\endverbatim
+ **
+ ** \brief Class to encapsulate preregistration duties
+ **
+ ** Class to encapsulate preregistration duties. This class permits the
+ ** CNF stream implementation to reach into the theory engine to
+ ** preregister only those terms with an associated SAT literal (at the
+ ** point when they get the SAT literal), without having to refer to the
+ ** TheoryEngine class directly.
+ **/
+
#include "cvc4_private.h"
-#ifndef __CVC4__THEORY_REGISTRAR_H
-#define __CVC4__THEORY_REGISTRAR_H
+#ifndef __CVC4__THEORY__REGISTRAR_H
+#define __CVC4__THEORY__REGISTRAR_H
+
#include "theory/theory_engine.h"
namespace CVC4 {
TheoryEngine* d_theoryEngine;
public:
- Registrar() : d_theoryEngine(NULL){ }
- Registrar(TheoryEngine* te) : d_theoryEngine(te){ }
+ Registrar(TheoryEngine* te) : d_theoryEngine(te) { }
- void preRegister(Node n){
- if(d_theoryEngine != NULL){
- d_theoryEngine->preRegister(n);
- }
+ void preRegister(Node n) {
+ d_theoryEngine->preRegister(n);
}
};/* class Registrar */
-
}/* CVC4::theory namespace */
}/* CVC4 namespace */
-#endif /* __CVC4__THEORY_REGISTRAR_H */
+#endif /* __CVC4__THEORY__REGISTRAR_H */
d_incomplete(ctxt, false),
d_statistics() {
+ for(unsigned theoryId = 0; theoryId < theory::THEORY_LAST; ++theoryId) {
+ d_theoryTable[theoryId] = NULL;
+ }
+
Rewriter::init();
d_sharedTermManager = new SharedTermManager(this, ctxt);
TheoryEngine::~TheoryEngine() {
Assert(d_hasShutDown);
- for(unsigned theoryId = 0; theoryId < theory::THEORY_LAST; ++ theoryId) {
- if (d_theoryTable[theoryId]) {
+ for(unsigned theoryId = 0; theoryId < theory::THEORY_LAST; ++theoryId) {
+ if(d_theoryTable[theoryId]) {
delete d_theoryTable[theoryId];
}
}
d_engine(engine),
d_context(context),
d_conflictNode(context),
- d_explanationNode(context){
+ d_explanationNode(context) {
}
void newFact(TNode n);
d_hasShutDown = true;
// Shutdown all the theories
- for(unsigned theoryId = 0; theoryId < theory::THEORY_LAST; ++ theoryId) {
- if (d_theoryTable[theoryId]) {
+ for(unsigned theoryId = 0; theoryId < theory::THEORY_LAST; ++theoryId) {
+ if(d_theoryTable[theoryId]) {
d_theoryTable[theoryId]->shutdown();
}
}
#include "smt/smt_engine.h"
#include "theory/registrar.h"
+#include "theory/theory.h"
+#include "theory/theory_engine.h"
+
+#include "theory/builtin/theory_builtin.h"
+#include "theory/booleans/theory_bool.h"
+#include "theory/arith/theory_arith.h"
+
using namespace CVC4;
using namespace CVC4::context;
using namespace CVC4::prop;
class CnfStreamBlack : public CxxTest::TestSuite {
/** The SAT solver proxy */
- FakeSatSolver *d_satSolver;
+ FakeSatSolver* d_satSolver;
+
+ /** The theory engine */
+ TheoryEngine* d_theoryEngine;
+
+ /** The output channel */
+ theory::OutputChannel* d_outputChannel;
/** The CNF converter in use */
CnfStream* d_cnfStream;
+ /** The context */
Context* d_context;
- /* ExprManager *d_exprManager; */
- NodeManager *d_nodeManager;
+ /** The node manager */
+ NodeManager* d_nodeManager;
void setUp() {
d_context = new Context;
d_nodeManager = new NodeManager(d_context);
+ NodeManagerScope nms(d_nodeManager);
d_satSolver = new FakeSatSolver;
- d_cnfStream = new CVC4::prop::TseitinCnfStream(d_satSolver, theory::Registrar());
+ d_theoryEngine = new TheoryEngine(d_context);
+ d_theoryEngine->addTheory<theory::builtin::TheoryBuiltin>();
+ d_theoryEngine->addTheory<theory::booleans::TheoryBool>();
+ d_theoryEngine->addTheory<theory::arith::TheoryArith>();
+ theory::Registrar registrar(d_theoryEngine);
+ d_cnfStream = new CVC4::prop::TseitinCnfStream(d_satSolver, registrar);
}
void tearDown() {
NodeManagerScope nms(d_nodeManager);
delete d_cnfStream;
+ d_theoryEngine->shutdown();
+ delete d_theoryEngine;
delete d_satSolver;
delete d_nodeManager;
+ delete d_context;
}
public: