00001 /*****************************************************************************/ 00002 /*! 00003 *\file uf_proof_rules.h 00004 *\brief Abstract interface for uninterpreted function/predicate proof rules 00005 * 00006 * Author: Clark Barrett 00007 * 00008 * Created: Tue Aug 31 23:12:01 2004 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: UFProofRules 00028 * 00029 */ 00030 /*****************************************************************************/ 00031 00032 #ifndef _cvcl__theory_uf__uf_proof_rules_h_ 00033 #define _cvcl__theory_uf__uf_proof_rules_h_ 00034 00035 namespace CVCL { 00036 00037 class Expr; 00038 class Theorem; 00039 00040 class UFProofRules { 00041 public: 00042 // Destructor 00043 virtual ~UFProofRules() { } 00044 00045 //////////////////////////////////////////////////////////////////// 00046 // Proof rules 00047 //////////////////////////////////////////////////////////////////// 00048 00049 virtual Theorem relToClosure(const Theorem& rel) = 0; 00050 virtual Theorem relTrans(const Theorem& t1, const Theorem& t2) = 0; 00051 00052 //! Beta reduction: |- (lambda x. f(x))(arg) = f(arg) 00053 virtual Theorem applyLambda(const Expr& e) = 0; 00054 //! Replace CONSTDEF and LETDECL in the operator with the definition 00055 virtual Theorem rewriteOpDef(const Expr& e) = 0; 00056 00057 }; // end of class UFProofRules 00058 00059 } // end of namespace CVCL 00060 00061 #endif