CVC3
|
00001 /*****************************************************************************/ 00002 /*! 00003 * \file quant_proof_rules.h 00004 * 00005 * Author: Daniel Wichs 00006 * 00007 * Created: Jul 07 22:22:38 GMT 2003 00008 * 00009 * <hr> 00010 * 00011 * License to use, copy, modify, sell and/or distribute this software 00012 * and its documentation for any purpose is hereby granted without 00013 * royalty, subject to the terms and conditions defined in the \ref 00014 * LICENSE file provided with this distribution. 00015 * 00016 * <hr> 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 //! Destructor 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 //! ==> NOT EXISTS (vars): e IFF FORALL (vars) NOT e 00042 virtual Theorem rewriteNotExists(const Expr& e) = 0; 00043 00044 //! ==> NOT FORALL (vars): e IFF EXISTS (vars) NOT e 00045 virtual Theorem rewriteNotForall(const Expr& e) = 0; 00046 00047 //! Instantiate a universally quantified formula 00048 /*! From T|-FORALL(var): e generate T|-e' where e' is obtained 00049 * from e by instantiating bound variables with terms in 00050 * vector<Expr>& terms. The vector of terms should be the same 00051 * size as the vector of bound variables in e. Also elements in 00052 * each position i need to have matching types. 00053 * \param t1 is the quantifier (a Theorem) 00054 * \param terms are the terms to instantiate. 00055 * \param quantLevel is the quantification level for the theorem. 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 /*! @brief From T|- QUANTIFIER (vars): e we get T|-QUANTIFIER(vars') e 00071 * where vars' is obtained from vars by removing all bound variables 00072 * not used in e. If vars' is empty the produced theorem is just T|-e 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