00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _cvc3__quant_proof_rules_h_
00021 #define _cvc3__quant_proof_rules_h_
00022
00023 #include <vector>
00024
00025 namespace CVC3 {
00026
00027 class Expr;
00028 class Theorem;
00029
00030 class QuantProofRules {
00031 public:
00032
00033 virtual ~QuantProofRules() { }
00034
00035 virtual Theorem addNewConst(const Expr& e) =0;
00036
00037 virtual Theorem newRWThm(const Expr& e, const Expr& newE) = 0 ;
00038
00039 virtual Theorem normalizeQuant(const Expr& e) =0;
00040
00041
00042 virtual Theorem rewriteNotExists(const Expr& e) = 0;
00043
00044
00045 virtual Theorem rewriteNotForall(const Expr& e) = 0;
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 virtual Theorem universalInst(const Theorem& t1, const std::vector<Expr>& terms, int quantLevel, Expr gterm ) = 0 ;
00058
00059 virtual Theorem universalInst(const Theorem& t1,
00060 const std::vector<Expr>& terms, int quantLevel) = 0;
00061
00062 virtual Theorem universalInst(const Theorem& t1,
00063 const std::vector<Expr>& terms) = 0;
00064
00065
00066 virtual Theorem partialUniversalInst(const Theorem& t1,
00067 const std::vector<Expr>& terms,
00068 int quantLevel) = 0;
00069
00070
00071
00072
00073
00074 virtual Theorem boundVarElim(const Theorem& t1) = 0;
00075
00076 virtual Theorem packVar(const Theorem& t1) = 0;
00077
00078 virtual Theorem pullVarOut(const Theorem& t1) = 0;
00079
00080 virtual Theorem adjustVarUniv(const Theorem& t1,
00081 const std::vector<Expr>& newBvs) = 0;
00082
00083 };
00084 }
00085 #endif