CVC3

core_theorem_producer.h

Go to the documentation of this file.
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