00001 /*****************************************************************************/ 00002 /*! 00003 * \file cnf_rules.h 00004 * \brief Abstract proof rules for CNF conversion 00005 * 00006 * Author: Clark Barrett 00007 * 00008 * Created: Thu Jan 5 05:24:45 2006 00009 * 00010 * <hr> 00011 * Copyright (C) 2006 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__sat__cnf_rules_h_ 00031 #define _cvcl__sat__cnf_rules_h_ 00032 00033 namespace CVCL { 00034 00035 class Theorem; 00036 00037 /*! \defgroup CNF_Rules Proof Rules for the Search Engines 00038 * \ingroup CNF 00039 */ 00040 //! API to the CNF proof rules 00041 /*! \ingroup CNF_Rules */ 00042 class CNF_Rules { 00043 /*! \addtogroup CNF_Rules 00044 * @{ 00045 */ 00046 public: 00047 //! Destructor 00048 virtual ~CNF_Rules() { } 00049 00050 // A_1,...,A_n |- B ==> |- (OR !A_1 ... !A_n B) 00051 /*! @brief Learned clause rule: 00052 \f[\frac{A_1,\ldots,A_n\vdash B} 00053 {\vdash\neg A_1\vee\cdots\vee \neg A_n\vee B}\f] 00054 * 00055 * \param thm is the theorem 00056 * \f$ A_1,\ldots,A_n\vdash B\f$ 00057 * Each \f$A_i\f$ and \f$B\f$ should be literals 00058 * \f$B\f$ can also be \f$\mathrm{FALSE}\f$ 00059 */ 00060 virtual Theorem learnedClause(const Theorem& thm) = 0; 00061 00062 //! |- P(_, ITE(cond,a,b), _) <=> ITE(cond,Pred(_, a, _),Pred(_, b, _)) 00063 virtual Theorem ifLiftRule(const Expr& e, int itePos) = 0; 00064 00065 /*! @} */ // end of CNF_Rules 00066 }; // end of class CNF_Rules 00067 00068 } // end of namespace CVCL 00069 00070 #endif