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

  FileName    [int2.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 - Dec 1, 2013.]

  Revision    [$Id: int2.h,v 1.00 2013/12/01 00:00:00 alanmi Exp $]

***********************************************************************/
 
#ifndef ABC__aig__int2__int_h
#define ABC__aig__int2__int_h


/* 
    The interpolation algorithm implemented here was introduced in the papers:
    K. L. McMillan. Interpolation and SAT-based model checking. CAV�03, pp. 1-13.
    C.-Y. Wu et al. A CEX-Guided Interpolant Generation Algorithm for 
    SAT-based Model Checking. DAC'13.
*/

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

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



ABC_NAMESPACE_HEADER_START


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

// simulation manager
typedef struct Int2_ManPars_t_ Int2_ManPars_t;
struct Int2_ManPars_t_
{
    int     nBTLimit;       // limit on the number of conflicts
    int     nFramesS;       // the starting number timeframes
    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     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       Int2_ManSetDefaultParams( Int2_ManPars_t * p );
extern int        Int2_ManPerformInterpolation( Gia_Man_t * p, Int2_ManPars_t * pPars );




ABC_NAMESPACE_HEADER_END



#endif

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