00001 /*****************************************************************************/ 00002 /*! 00003 *\file theory_simulate.h 00004 *\brief Implementation of a symbolic simulator 00005 * 00006 * Author: Sergey Berezin 00007 * 00008 * Created: Tue Oct 7 10:13:15 2003 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 */ 00028 /*****************************************************************************/ 00029 00030 #ifndef _cvcl__include__theory_simulate_h_ 00031 #define _cvcl__include__theory_simulate_h_ 00032 00033 #include "theory.h" 00034 00035 namespace CVCL { 00036 00037 class SimulateProofRules; 00038 00039 /*****************************************************************************/ 00040 /*! 00041 * \class TheorySimulate 00042 * \ingroup Theories 00043 * \brief "Theory" of symbolic simulation. 00044 * 00045 * Author: Sergey Berezin 00046 * 00047 * Created: Tue Oct 7 10:13:15 2003 00048 * 00049 * This theory owns the SIMULATE operator. It's job is to replace the above 00050 * expressions by their definitions using rewrite rules. 00051 */ 00052 /*****************************************************************************/ 00053 00054 class TheorySimulate: public Theory { 00055 private: 00056 //! Our local proof rules 00057 SimulateProofRules* d_rules; 00058 //! Create proof rules for this theory 00059 SimulateProofRules* createProofRules(); 00060 public: 00061 //! Constructor 00062 TheorySimulate(TheoryCore* core); 00063 //! Destructor 00064 ~TheorySimulate(); 00065 // The required Theory API functions 00066 void assertFact(const Theorem& e) { } 00067 void checkSat(bool fullEffort) { } 00068 Theorem rewrite(const Expr& e); 00069 void computeType(const Expr& e); 00070 Expr computeTCC(const Expr& e); 00071 Expr TheorySimulate::parseExprOp(const Expr& e); 00072 ExprStream& print(ExprStream& os, const Expr& e); 00073 }; // end of class TheorySimulate 00074 00075 } // end of namespace CVCL 00076 00077 #endif