/**CFile****************************************************************

  FileName    [int.h]

  SystemName  [ABC: Logic synthesis and verification system.]

  PackageName [Interpolation engine.]

  Synopsis    [External declarations.]

  Author      [Alan Mishchenko]
  
  Affiliation [UC Berkeley]

  Date        [Ver. 1.0. Started - June 24, 2008.]

  Revision    [$Id: int.h,v 1.00 2005/06/20 00:00:00 alanmi Exp $]

***********************************************************************/
 
#ifndef ABC__aig__int__int_h
#define ABC__aig__int__int_h


/* 
    The interpolation algorithm implemented here was introduced in the paper:
    K. L. McMillan. Interpolation and SAT-based model checking. CAV’03, pp. 1-13.
*/

////////////////////////////////////////////////////////////////////////
///                          INCLUDES                                ///
////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
///                         PARAMETERS                               ///
////////////////////////////////////////////////////////////////////////



ABC_NAMESPACE_HEADER_START


////////////////////////////////////////////////////////////////////////
///                         BASIC TYPES                              ///
////////////////////////////////////////////////////////////////////////

// simulation manager
typedef struct Inter_ManParams_t_ Inter_ManParams_t;
struct Inter_ManParams_t_
{
    int  nBTLimit;      // limit on the number of conflicts
    int  nFramesMax;    // the max number timeframes to unroll
    int  nSecLimit;     // time limit in seconds
    int  nFramesK;      // the number of timeframes to use in induction
    int  fRewrite;      // use additional rewriting to simplify timeframes
    int  fTransLoop;    // add transition into the init state under new PI var
    int  fUsePudlak;    // use Pudluk interpolation procedure
    int  fUseOther;     // use other undisclosed option
    int  fUseMiniSat;   // use MiniSat-1.14p instead of internal proof engine
    int  fCheckKstep;   // check using K-step induction
    int  fUseBias;      // bias decisions to global variables
    int  fUseBackward;  // perform backward interpolation
    int  fUseSeparate;  // solve each output separately
    int  fUseTwoFrames; // create the OR of two last timeframes
    int  fDropSatOuts;  // replace by 1 the solved outputs
    int  fDropInvar;    // dump inductive invariant into file
    int  fVerbose;      // print verbose statistics
    int  iFrameMax;     // the time frame reached
    char * pFileName;   // file name to dump interpolant
};

////////////////////////////////////////////////////////////////////////
///                      MACRO DEFINITIONS                           ///
////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
///                    FUNCTION DECLARATIONS                         ///
////////////////////////////////////////////////////////////////////////

/*=== intCore.c ==========================================================*/
extern void       Inter_ManSetDefaultParams( Inter_ManParams_t * p );
extern int        Inter_ManPerformInterpolation( Aig_Man_t * pAig, Inter_ManParams_t * pPars, int * piFrame );




ABC_NAMESPACE_HEADER_END



#endif

////////////////////////////////////////////////////////////////////////
///                       END OF FILE                                ///
////////////////////////////////////////////////////////////////////////

