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