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 rewriteIteTrue(const Expr& e);
00057     Theorem rewriteIteFalse(const Expr& e);
00058     Theorem rewriteIteSame(const Expr& e);
00059     Theorem rewriteIteThen(const Expr& e, const Theorem& thenThm);
00060     Theorem rewriteIteElse(const Expr& e, const Theorem& elseThm);
00061     Theorem rewriteIteBool(const Expr& c,
00062          const Expr& e1, const Expr& e2);
00063     Theorem orDistributivityRule(const Expr& e);
00064     Theorem andDistributivityRule(const Expr& e);
00065     Theorem rewriteImplies(const Expr& e);
00066     Theorem rewriteDistinct(const Expr& e);
00067     Theorem NotToIte(const Expr& not_e);
00068     Theorem OrToIte(const Expr& e);
00069     Theorem AndToIte(const Expr& e);
00070     Theorem IffToIte(const Expr& e);
00071     Theorem ImpToIte(const Expr& e);
00072     Theorem rewriteIteToNot(const Expr& e);
00073     Theorem rewriteIteToOr(const Expr& e);
00074     Theorem rewriteIteToAnd(const Expr& e);
00075     Theorem rewriteIteToIff(const Expr& e);
00076     Theorem rewriteIteToImp(const Expr& e);
00077     Theorem rewriteIteCond(const Expr& e);
00078     Theorem ifLiftUnaryRule(const Expr& e);
00079     Theorem iffOrDistrib(const Expr& iff);
00080     Theorem iffAndDistrib(const Expr& iff);
00081     Theorem rewriteAndSubterms(const Expr& e, int idx);
00082     Theorem rewriteOrSubterms(const Expr& e, int idx);
00083 
00084   }; // end of class CoreTheoremProducer
00085 
00086 } // end of namespace CVC3
00087 
00088 #endif

Generated on Tue Jul 3 14:33:36 2007 for CVC3 by  doxygen 1.5.1