/*****************************************************************************/
/*!
 *\file uf_proof_rules.h
 *\brief Abstract interface for uninterpreted function/predicate proof rules
 *
 * Author: Clark Barrett
 *
 * Created: Tue Aug 31 23:12:01 2004
 *
 * <hr>
 *
 * 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.
 * 
 * <hr>
 * 
 * CLASS: UFProofRules
 * 
 */
/*****************************************************************************/

#ifndef _cvc3__theory_uf__uf_proof_rules_h_
#define _cvc3__theory_uf__uf_proof_rules_h_

namespace CVC3 {

  class Expr;
  class Theorem;

  class UFProofRules {
  public:
    // Destructor
    virtual ~UFProofRules() { }

    ////////////////////////////////////////////////////////////////////
    // Proof rules
    ////////////////////////////////////////////////////////////////////

    virtual Theorem relToClosure(const Theorem& rel) = 0;
    virtual Theorem relTrans(const Theorem& t1, const Theorem& t2) = 0;

    //! Beta reduction: |- (lambda x. f(x))(arg) = f(arg)
    virtual Theorem applyLambda(const Expr& e) = 0;
    //! Replace LETDECL in the operator with the definition
    virtual Theorem rewriteOpDef(const Expr& e) = 0;

  }; // end of class UFProofRules

} // end of namespace CVC3

#endif


syntax highlighted by Code2HTML, v. 0.9.1