00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef _cvc3__sat__cnf_theorem_producer_h_
00023 #define _cvc3__sat__cnf_theorem_producer_h_
00024 
00025 #include "theorem_producer.h"
00026 #include "cnf_rules.h"
00027 #include "command_line_flags.h"
00028 
00029 namespace CVC3 {
00030 
00031   class CNF_TheoremProducer
00032     : public CNF_Rules,
00033       public TheoremProducer {
00034     const CLFlags& d_flags;
00035     const bool& d_smartClauses;
00036 
00037   public:
00038     CNF_TheoremProducer(TheoremManager* tm, const CLFlags& flags)
00039       : TheoremProducer(tm), d_flags(flags),
00040         d_smartClauses(flags["smart-clauses"].getBool()) { }
00041     ~CNF_TheoremProducer() { }
00042 
00043     void getSmartClauses(const Theorem& thm, std::vector<Theorem>& clauses);
00044 
00045     void learnedClauses(const Theorem& thm, std::vector<Theorem>& clauses,
00046                         bool newLemma);
00047     Theorem CNFAddUnit(const Theorem& thm);
00048     Theorem CNFConvert(const Expr & e, const Theorem& thm);
00049     Theorem ifLiftRule(const Expr& e, int itePos);
00050     Theorem CNFtranslate(const Expr& before, 
00051        const Expr& after, 
00052        std::string reason, 
00053        int pos) ;
00054     Theorem CNFITEtranslate(const Expr& before, 
00055           const std::vector<Expr>& after,
00056           const std::vector<Theorem>& thms,
00057           int pos) ;
00058     
00059     
00060   }; 
00061 } 
00062 #endif