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  * Copyright (C) 2003 by the Board of Trustees of Leland Stanford
00011  * Junior University and by New York University. 
00012  *
00013  * License to use, copy, modify, sell and/or distribute this software
00014  * and its documentation for any purpose is hereby granted without
00015  * royalty, subject to the terms and conditions defined in the \ref
00016  * LICENSE file provided with this distribution.  In particular:
00017  *
00018  * - The above copyright notice and this permission notice must appear
00019  * in all copies of the software and related documentation.
00020  *
00021  * - THE SOFTWARE IS PROVIDED "AS-IS", WITHOUT ANY WARRANTIES,
00022  * EXPRESSED OR IMPLIED.  USE IT AT YOUR OWN RISK.
00023  * 
00024  * <hr>
00025  * 
00026  */
00027 /*****************************************************************************/
00028 // CLASS: CoreTheoremProducer
00029 //
00030 // AUTHOR: Sergey Berezin, 12/09/2002
00031 //
00032 // Description: Implementation of the proof rules for ground
00033 // equational logic (reflexivity, symmetry, transitivity, and
00034 // substitutivity).
00035 //
00036 ///////////////////////////////////////////////////////////////////////////////
00037 
00038 #ifndef _CVC_lite__core_theorem_producer_h_
00039 #define _CVC_lite__core_theorem_producer_h_
00040 
00041 #include "core_proof_rules.h"
00042 #include "theorem_producer.h"
00043 
00044 namespace CVCL {
00045 
00046   class TheoryCore;
00047 
00048   class CoreTheoremProducer: public CoreProofRules, public TheoremProducer {
00049   private:
00050     //! pointer to theory core
00051     TheoryCore* d_core;
00052 
00053   public:
00054     CoreTheoremProducer(TheoremManager* tm, TheoryCore* core)
00055       : TheoremProducer(tm), d_core(core) { }
00056     virtual ~CoreTheoremProducer() { }
00057 
00058     Theorem3 queryTCC(const Theorem& phi, const Theorem& D_phi);
00059     Theorem3 implIntro3(const Theorem3& phi,
00060                         const std::vector<Expr>& assump,
00061                         const std::vector<Theorem>& tccs);
00062     Theorem typePred(const Expr& e);
00063     Theorem rewriteLetDecl(const Expr& e);
00064     Theorem rewriteConstDef(const Expr& e);
00065     Theorem rewriteNotAnd(const Expr& e);
00066     Theorem rewriteNotOr(const Expr& e);
00067     Theorem rewriteNotIff(const Expr& e);
00068     Theorem rewriteNotIte(const Expr& e);
00069     Theorem rewriteIteTrue(const Expr& e);
00070     Theorem rewriteIteFalse(const Expr& e);
00071     Theorem rewriteIteSame(const Expr& e);
00072     Theorem rewriteIteThen(const Expr& e, const Theorem& thenThm);
00073     Theorem rewriteIteElse(const Expr& e, const Theorem& elseThm);
00074     Theorem rewriteIteBool(const Expr& c,
00075                            const Expr& e1, const Expr& e2);
00076     Theorem orDistributivityRule(const Expr& e);
00077     Theorem andDistributivityRule(const Expr& e);
00078     Theorem rewriteImplies(const Expr& e);
00079     Theorem NotToIte(const Expr& not_e);
00080     Theorem OrToIte(const Expr& e);
00081     Theorem AndToIte(const Expr& e);
00082     Theorem IffToIte(const Expr& e);
00083     Theorem ImpToIte(const Expr& e);
00084     Theorem rewriteIteToNot(const Expr& e);
00085     Theorem rewriteIteToOr(const Expr& e);
00086     Theorem rewriteIteToAnd(const Expr& e);
00087     Theorem rewriteIteToIff(const Expr& e);
00088     Theorem rewriteIteToImp(const Expr& e);
00089     Theorem rewriteIteCond(const Expr& e);
00090     Theorem ifLiftUnaryRule(const Expr& e);
00091     Theorem iffOrDistrib(const Expr& iff);
00092     Theorem iffAndDistrib(const Expr& iff);
00093     Theorem rewriteAndSubterms(const Expr& e, int idx);
00094     Theorem rewriteOrSubterms(const Expr& e, int idx);
00095 
00096   }; // end of class CoreTheoremProducer
00097 
00098 } // end of namespace CVCL
00099 
00100 #endif

Generated on Thu Apr 13 16:57:30 2006 for CVC Lite by  doxygen 1.4.4