/*****************************************************************************/
/*!
* \file cnf_rules.h
* \brief Abstract proof rules for CNF conversion
*
* Author: Clark Barrett
*
* Created: Thu Jan 5 05:24:45 2006
*
*
*
* License to use, copy, modify, sell and/or distribute this software
* and its documentation for any purpose is hereby granted without
* royalty, subject to the terms and conditions defined in the \ref
* LICENSE file provided with this distribution.
*
*
*
*/
/*****************************************************************************/
#ifndef _cvc3__sat__cnf_rules_h_
#define _cvc3__sat__cnf_rules_h_
namespace CVC3 {
class Theorem;
/*! \defgroup CNF_Rules Proof Rules for the Search Engines
* \ingroup CNF
*/
//! API to the CNF proof rules
/*! \ingroup CNF_Rules */
class CNF_Rules {
/*! \addtogroup CNF_Rules
* @{
*/
public:
//! Destructor
virtual ~CNF_Rules() { }
// A_1,...,A_n |- B ==> |- (OR !A_1 ... !A_n B)
/*! @brief Learned clause rule:
\f[\frac{A_1,\ldots,A_n\vdash B}
{\vdash\neg A_1\vee\cdots\vee \neg A_n\vee B}\f]
*
* \param thm is the theorem
* \f$ A_1,\ldots,A_n\vdash B\f$
* Each \f$A_i\f$ and \f$B\f$ should be literals
* \f$B\f$ can also be \f$\mathrm{FALSE}\f$
*/
virtual Theorem learnedClause(const Theorem& thm) = 0;
//! |- P(_, ITE(cond,a,b), _) <=> ITE(cond,Pred(_, a, _),Pred(_, b, _))
virtual Theorem ifLiftRule(const Expr& e, int itePos) = 0;
/*! @} */ // end of CNF_Rules
}; // end of class CNF_Rules
} // end of namespace CVC3
#endif