00001 /*****************************************************************************/ 00002 /*! 00003 *\file datatype_theorem_producer.h 00004 *\brief TRUSTED implementation of recursive datatype proof rules 00005 * 00006 * Author: Clark Barrett 00007 * 00008 * Created: Mon Jan 10 15:42:22 2005 00009 * 00010 * <hr> 00011 * Copyright (C) 2003 by the Board of Trustees of Leland Stanford 00012 * Junior University and by New York University. 00013 * 00014 * License to use, copy, modify, sell and/or distribute this software 00015 * and its documentation for any purpose is hereby granted without 00016 * royalty, subject to the terms and conditions defined in the \ref 00017 * LICENSE file provided with this distribution. In particular: 00018 * 00019 * - The above copyright notice and this permission notice must appear 00020 * in all copies of the software and related documentation. 00021 * 00022 * - THE SOFTWARE IS PROVIDED "AS-IS", WITHOUT ANY WARRANTIES, 00023 * EXPRESSED OR IMPLIED. USE IT AT YOUR OWN RISK. 00024 * 00025 * <hr> 00026 * 00027 * CLASS: DatatypeTheoremProducer 00028 * 00029 */ 00030 /*****************************************************************************/ 00031 #ifndef _cvcl__theory_datatype__datatype_theorem_producer_h_ 00032 #define _cvcl__theory_datatype__datatype_theorem_producer_h_ 00033 00034 #include "datatype_proof_rules.h" 00035 #include "theorem_producer.h" 00036 #include "theory_datatype.h" 00037 #include "theory_core.h" 00038 00039 namespace CVCL { 00040 00041 class DatatypeTheoremProducer: public DatatypeProofRules, public TheoremProducer { 00042 TheoryDatatype* d_theoryDatatype; 00043 private: 00044 public: 00045 //! Constructor 00046 DatatypeTheoremProducer(TheoryDatatype* theoryDatatype) : 00047 TheoremProducer(theoryDatatype->theoryCore()->getTM()), 00048 d_theoryDatatype(theoryDatatype) { } 00049 00050 Theorem dummyTheorem(const CDList<Theorem>& facts, const Expr& e); 00051 Theorem rewriteSelCons(const CDList<Theorem>& facts, const Expr& e); 00052 Theorem rewriteTestCons(const Expr& e); 00053 Theorem decompose(const Theorem& e); 00054 Theorem noCycle(const Expr& e); 00055 00056 }; // end of class DatatypeTheoremProducer 00057 } // end of namespace CVCL 00058 00059 #endif 00060