00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef _CVC_lite__core_theorem_producer_h_
00039 #define _CVC_lite__core_theorem_producer_h_
00040
00041 #include "core_proof_rules.h"
00042 #include "theorem_producer.h"
00043
00044 namespace CVCL {
00045
00046 class TheoryCore;
00047
00048 class CoreTheoremProducer: public CoreProofRules, public TheoremProducer {
00049 private:
00050
00051 TheoryCore* d_core;
00052
00053 public:
00054 CoreTheoremProducer(TheoremManager* tm, TheoryCore* core)
00055 : TheoremProducer(tm), d_core(core) { }
00056 virtual ~CoreTheoremProducer() { }
00057
00058 Theorem3 queryTCC(const Theorem& phi, const Theorem& D_phi);
00059 Theorem3 implIntro3(const Theorem3& phi,
00060 const std::vector<Expr>& assump,
00061 const std::vector<Theorem>& tccs);
00062 Theorem typePred(const Expr& e);
00063 Theorem rewriteLetDecl(const Expr& e);
00064 Theorem rewriteConstDef(const Expr& e);
00065 Theorem rewriteNotAnd(const Expr& e);
00066 Theorem rewriteNotOr(const Expr& e);
00067 Theorem rewriteNotIff(const Expr& e);
00068 Theorem rewriteNotIte(const Expr& e);
00069 Theorem rewriteIteTrue(const Expr& e);
00070 Theorem rewriteIteFalse(const Expr& e);
00071 Theorem rewriteIteSame(const Expr& e);
00072 Theorem rewriteIteThen(const Expr& e, const Theorem& thenThm);
00073 Theorem rewriteIteElse(const Expr& e, const Theorem& elseThm);
00074 Theorem rewriteIteBool(const Expr& c,
00075 const Expr& e1, const Expr& e2);
00076 Theorem orDistributivityRule(const Expr& e);
00077 Theorem andDistributivityRule(const Expr& e);
00078 Theorem rewriteImplies(const Expr& e);
00079 Theorem NotToIte(const Expr& not_e);
00080 Theorem OrToIte(const Expr& e);
00081 Theorem AndToIte(const Expr& e);
00082 Theorem IffToIte(const Expr& e);
00083 Theorem ImpToIte(const Expr& e);
00084 Theorem rewriteIteToNot(const Expr& e);
00085 Theorem rewriteIteToOr(const Expr& e);
00086 Theorem rewriteIteToAnd(const Expr& e);
00087 Theorem rewriteIteToIff(const Expr& e);
00088 Theorem rewriteIteToImp(const Expr& e);
00089 Theorem rewriteIteCond(const Expr& e);
00090 Theorem ifLiftUnaryRule(const Expr& e);
00091 Theorem iffOrDistrib(const Expr& iff);
00092 Theorem iffAndDistrib(const Expr& iff);
00093 Theorem rewriteAndSubterms(const Expr& e, int idx);
00094 Theorem rewriteOrSubterms(const Expr& e, int idx);
00095
00096 };
00097
00098 }
00099
00100 #endif