00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _cvc3__quant_theorem_producer_h_
00021 #define _cvc3__quant_theorem_producer_h_
00022
00023 #include "quant_proof_rules.h"
00024 #include "theorem_producer.h"
00025 #include "theory_quant.h"
00026
00027 namespace CVC3 {
00028
00029 class QuantTheoremProducer: public QuantProofRules, public TheoremProducer {
00030 TheoryQuant* d_theoryQuant;
00031 std::map<Expr,int> d_typeFound;
00032 private:
00033
00034
00035 void recFindBoundVars(const Expr& e,
00036 ExprMap<bool> & boundVars, ExprMap<bool> &visited);
00037 public:
00038
00039 QuantTheoremProducer(TheoremManager* tm, TheoryQuant* theoryQuant):
00040 TheoremProducer(tm), d_theoryQuant(theoryQuant) { d_typeFound.clear(); }
00041
00042 virtual Theorem addNewConst(const Expr& e) ;
00043 virtual Theorem newRWThm(const Expr& e, const Expr& newE) ;
00044 virtual Theorem normalizeQuant(const Expr& e) ;
00045
00046
00047 virtual Theorem rewriteNotExists(const Expr& e);
00048
00049 virtual Theorem rewriteNotForall(const Expr& e);
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 virtual Theorem universalInst(const Theorem& t1,
00063 const std::vector<Expr>& terms, int quantLevel ,
00064 Expr gterm);
00065
00066 virtual Theorem universalInst(const Theorem& t1,
00067 const std::vector<Expr>& terms, int quantLevel);
00068
00069 virtual Theorem universalInst(const Theorem& t1,
00070 const std::vector<Expr>& terms);
00071
00072
00073 virtual Theorem partialUniversalInst(const Theorem& t1,
00074 const std::vector<Expr>& terms,
00075 int quantLevel) ;
00076
00077
00078
00079
00080
00081
00082 virtual Theorem boundVarElim(const Theorem& t1);
00083
00084 virtual Theorem adjustVarUniv(const Theorem& t1,
00085 const std::vector<Expr>& newBvs);
00086
00087 virtual Theorem packVar(const Theorem& t1);
00088
00089 virtual Theorem pullVarOut(const Theorem& t1);
00090
00091
00092 };
00093
00094 }
00095
00096 #endif