00001 /*****************************************************************************/ 00002 /*! 00003 * \file core_theorem_producer.h 00004 * 00005 * Author: Sergey Berezin 00006 * 00007 * Created: Feb 05 03:40:36 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 // CLASS: CoreTheoremProducer 00021 // 00022 // AUTHOR: Sergey Berezin, 12/09/2002 00023 // 00024 // Description: Implementation of the proof rules for ground 00025 // equational logic (reflexivity, symmetry, transitivity, and 00026 // substitutivity). 00027 // 00028 /////////////////////////////////////////////////////////////////////////////// 00029 00030 #ifndef _cvc3__core_theorem_producer_h_ 00031 #define _cvc3__core_theorem_producer_h_ 00032 00033 #include "core_proof_rules.h" 00034 #include "theorem_producer.h" 00035 00036 namespace CVC3 { 00037 00038 class TheoryCore; 00039 00040 class CoreTheoremProducer: public CoreProofRules, public TheoremProducer { 00041 private: 00042 //! pointer to theory core 00043 TheoryCore* d_core; 00044 00045 public: 00046 CoreTheoremProducer(TheoremManager* tm, TheoryCore* core) 00047 : TheoremProducer(tm), d_core(core) { } 00048 virtual ~CoreTheoremProducer() { } 00049 00050 Theorem typePred(const Expr& e); 00051 Theorem rewriteLetDecl(const Expr& e); 00052 Theorem rewriteNotAnd(const Expr& e); 00053 Theorem rewriteNotOr(const Expr& e); 00054 Theorem rewriteNotIff(const Expr& e); 00055 Theorem rewriteNotIte(const Expr& e); 00056 Theorem rewriteIteThen(const Expr& e, const Theorem& thenThm); 00057 Theorem rewriteIteElse(const Expr& e, const Theorem& elseThm); 00058 Theorem rewriteIteBool(const Expr& c, 00059 const Expr& e1, const Expr& e2); 00060 Theorem orDistributivityRule(const Expr& e); 00061 Theorem andDistributivityRule(const Expr& e); 00062 Theorem rewriteImplies(const Expr& e); 00063 Theorem rewriteDistinct(const Expr& e); 00064 Theorem NotToIte(const Expr& not_e); 00065 Theorem OrToIte(const Expr& e); 00066 Theorem AndToIte(const Expr& e); 00067 Theorem IffToIte(const Expr& e); 00068 Theorem ImpToIte(const Expr& e); 00069 Theorem rewriteIteToNot(const Expr& e); 00070 Theorem rewriteIteToOr(const Expr& e); 00071 Theorem rewriteIteToAnd(const Expr& e); 00072 Theorem rewriteIteToIff(const Expr& e); 00073 Theorem rewriteIteToImp(const Expr& e); 00074 Theorem rewriteIteCond(const Expr& e); 00075 Theorem ifLiftUnaryRule(const Expr& e); 00076 Theorem iffOrDistrib(const Expr& iff); 00077 Theorem iffAndDistrib(const Expr& iff); 00078 Theorem rewriteAndSubterms(const Expr& e, int idx); 00079 Theorem rewriteOrSubterms(const Expr& e, int idx); 00080 Theorem dummyTheorem(const Expr& e); 00081 00082 }; // end of class CoreTheoremProducer 00083 00084 } // end of namespace CVC3 00085 00086 #endif