You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
12 KiB
281 lines
12 KiB
/**
|
|
@file
|
|
|
|
@ingroup nanotrav
|
|
|
|
@brief Simple-minded package to do traversal.
|
|
|
|
@author Fabio Somenzi
|
|
|
|
@copyright@parblock
|
|
Copyright (c) 1995-2015, Regents of the University of Colorado
|
|
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
Neither the name of the University of Colorado nor the names of its
|
|
contributors may be used to endorse or promote products derived from
|
|
this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
POSSIBILITY OF SUCH DAMAGE.
|
|
@endparblock
|
|
|
|
*/
|
|
|
|
#ifndef _NTR
|
|
#define _NTR
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Nested includes */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#include "dddmp.h"
|
|
#include "bnet.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Constant declarations */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#define PI_PS_FROM_FILE 0
|
|
#define PI_PS_DFS 1
|
|
#define PI_PS_GIVEN 2
|
|
|
|
#define NTR_IMAGE_MONO 0
|
|
#define NTR_IMAGE_PART 1
|
|
#define NTR_IMAGE_CLIP 2
|
|
#define NTR_IMAGE_DEPEND 3
|
|
|
|
#define NTR_UNDER_APPROX 0
|
|
#define NTR_OVER_APPROX 1
|
|
|
|
#define NTR_FROM_NEW 0
|
|
#define NTR_FROM_REACHED 1
|
|
#define NTR_FROM_RESTRICT 2
|
|
#define NTR_FROM_COMPACT 3
|
|
#define NTR_FROM_SQUEEZE 4
|
|
#define NTR_FROM_UNDERAPPROX 5
|
|
#define NTR_FROM_OVERAPPROX 6
|
|
|
|
#define NTR_GROUP_NONE 0
|
|
#define NTR_GROUP_DEFAULT 1
|
|
#define NTR_GROUP_FIXED 2
|
|
|
|
#define NTR_SHORT_NONE 0
|
|
#define NTR_SHORT_BELLMAN 1
|
|
#define NTR_SHORT_FLOYD 2
|
|
#define NTR_SHORT_SQUARE 3
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Stucture declarations */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Type declarations */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
@brief Options for nanotrav.
|
|
*/
|
|
typedef struct NtrOptions {
|
|
long initialTime; /**< this is here for convenience */
|
|
int verify; /**< read two networks and compare them */
|
|
char *file1; /**< first network file name */
|
|
char *file2; /**< second network file name */
|
|
int second; /**< a second network is given */
|
|
int traverse; /**< do reachability analysis */
|
|
int depend; /**< do latch dependence analysis */
|
|
int image; /**< monolithic, partitioned, or clip */
|
|
double imageClip; /**< clipping depth in image computation */
|
|
int approx; /**< under or over approximation */
|
|
int threshold; /**< approximation threshold */
|
|
int from; /**< method to compute from states */
|
|
int groupnsps; /**< group present state and next state vars */
|
|
int closure; /**< use transitive closure */
|
|
double closureClip; /**< clipping depth in closure computation */
|
|
int envelope; /**< compute outer envelope */
|
|
int scc; /**< compute strongly connected components */
|
|
int zddtest; /**< do zdd test */
|
|
int printcover; /**< print ISOP covers when testing ZDDs */
|
|
int maxflow; /**< compute maximum flow in network */
|
|
int shortPath; /**< compute shortest paths in network */
|
|
int selectiveTrace; /**< use selective trace in shortest paths */
|
|
char *sinkfile; /**< file for externally provided sink node */
|
|
int partition; /**< test McMillan conjunctive partitioning */
|
|
int char2vect; /**< test char-to-vect decomposition */
|
|
int density; /**< test density-related functions */
|
|
double quality; /**< quality parameter for density functions */
|
|
int decomp; /**< test decomposition functions */
|
|
int cofest; /**< test cofactor estimation */
|
|
double clip; /**< test clipping functions */
|
|
int dontcares; /**< test equivalence and containment with DCs */
|
|
int closestCube; /**< test Cudd_bddClosestCube */
|
|
int clauses; /**< test extraction of two-literal clauses */
|
|
int noBuild; /**< do not build BDDs; just echo order */
|
|
int stateOnly; /**< ignore primary outputs */
|
|
char *node; /**< only node for which to build %BDD */
|
|
int locGlob; /**< build global or local BDDs */
|
|
int progress; /**< report output names while building BDDs */
|
|
int cacheSize; /**< computed table initial size */
|
|
size_t maxMemory; /**< target maximum memory */
|
|
size_t maxMemHard; /**< maximum allowed memory */
|
|
unsigned int maxLive; /**< maximum number of nodes */
|
|
int slots; /**< unique subtable initial slots */
|
|
int ordering; /**< FANIN DFS ... */
|
|
char *orderPiPs; /**< file for externally provided order */
|
|
Cudd_ReorderingType reordering; /**< NONE RANDOM PIVOT SIFTING ... */
|
|
int autoDyn; /**< ON OFF */
|
|
Cudd_ReorderingType autoMethod; /**< RANDOM PIVOT SIFTING CONVERGE ... */
|
|
char *treefile; /**< file name for variable tree */
|
|
int firstReorder; /**< when to do first reordering */
|
|
int countDead; /**< count dead nodes toward triggering
|
|
reordering */
|
|
int maxGrowth; /**< maximum growth during reordering (%) */
|
|
Cudd_AggregationType groupcheck; /**< grouping function */
|
|
int arcviolation; /**< percent violation of arcs in
|
|
extended symmetry check */
|
|
int symmviolation; /**< percent symm violation in
|
|
extended symmetry check */
|
|
int recomb; /**< recombination parameter for grouping */
|
|
int nodrop; /**< don't drop intermediate BDDs ASAP */
|
|
int signatures; /**< computation of signatures */
|
|
int gaOnOff; /**< whether to run GA at the end */
|
|
int populationSize; /**< population size for GA */
|
|
int numberXovers; /**< number of crossovers for GA */
|
|
int bdddump; /**< ON OFF */
|
|
int dumpFmt; /**< 0 -> dot 1 -> blif 2 ->daVinci 3 -> DDcal
|
|
** 4 -> factored form */
|
|
char *dumpfile; /**< filename for dump */
|
|
int store; /**< iteration at which to store Reached */
|
|
char *storefile; /**< filename for storing Reached */
|
|
int load; /**< load initial states from file */
|
|
char *loadfile; /**< filename for loading states */
|
|
int verb; /**< level of verbosity */
|
|
int32_t seed; /**< seed for random number generator */
|
|
} NtrOptions;
|
|
|
|
/**
|
|
@brief Type of entry of NtrHeap.
|
|
*/
|
|
typedef struct NtrHeapSlot NtrHeapSlot;
|
|
|
|
/**
|
|
@brief Type of heap-based priority queue.
|
|
*/
|
|
typedef struct NtrHeap NtrHeap;
|
|
|
|
/**
|
|
@brief Data structure for partitioned transition relation.
|
|
*/
|
|
typedef struct NtrPartTR {
|
|
int nparts; /**< number of parts */
|
|
DdNode **part; /**< array of parts */
|
|
DdNode **icube; /**< quantification cubes for image */
|
|
DdNode **pcube; /**< quantification cubes for preimage */
|
|
DdNode **nscube; /**< next state variables in each part */
|
|
DdNode *preiabs; /**< present state vars and inputs in no part */
|
|
DdNode *prepabs; /**< inputs in no part */
|
|
DdNode *xw; /**< cube of all present states and PIs */
|
|
NtrHeap *factors; /**< factors extracted from the image */
|
|
int nlatches; /**< number of latches */
|
|
DdNode **x; /**< array of present state variables */
|
|
DdNode **y; /**< array of next state variables */
|
|
} NtrPartTR;
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Variable declarations */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Macro declarations */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef TRUE
|
|
# define TRUE 1
|
|
#endif
|
|
#ifndef FALSE
|
|
# define FALSE 0
|
|
#endif
|
|
|
|
/**
|
|
@brief Returns 1 if the two arguments are identical strings.
|
|
|
|
@sideeffect none
|
|
|
|
*/
|
|
#define STRING_EQUAL(s1,s2) (strcmp((s1),(s2)) == 0)
|
|
|
|
|
|
/** \cond */
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Function prototypes */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
extern int Ntr_buildDDs (BnetNetwork *net, DdManager *dd, NtrOptions *option, BnetNetwork *net2);
|
|
extern NtrPartTR * Ntr_buildTR (DdManager *dd, BnetNetwork *net, NtrOptions *option, int image);
|
|
extern DdNode * Ntr_TransitiveClosure (DdManager *dd, NtrPartTR *TR, NtrOptions *option);
|
|
extern int Ntr_Trav (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern int Ntr_SCC (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern int Ntr_ClosureTrav (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern void Ntr_freeTR (DdManager *dd, NtrPartTR *TR);
|
|
extern NtrPartTR * Ntr_cloneTR (NtrPartTR *TR);
|
|
extern DdNode * Ntr_initState (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern DdNode * Ntr_getStateCube (DdManager *dd, BnetNetwork *net, char *filename, int pr);
|
|
extern int Ntr_Envelope (DdManager *dd, NtrPartTR *TR, FILE *dfp, NtrOptions *option);
|
|
extern int Ntr_TestMinimization (DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option);
|
|
extern int Ntr_TestDensity (DdManager *dd, BnetNetwork *net1, NtrOptions *option);
|
|
extern int Ntr_TestDecomp (DdManager *dd, BnetNetwork *net1, NtrOptions *option);
|
|
extern int Ntr_VerifyEquivalence (DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option);
|
|
extern int Ntr_TestCofactorEstimate (DdManager * dd, BnetNetwork * net, NtrOptions * option);
|
|
extern int Ntr_TestClipping (DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option);
|
|
extern int Ntr_TestEquivAndContain (DdManager *dd, BnetNetwork *net1, BnetNetwork *net2, NtrOptions *option);
|
|
extern int Ntr_TestClosestCube (DdManager * dd, BnetNetwork * net, NtrOptions * option);
|
|
extern int Ntr_TestTwoLiteralClauses (DdManager * dd, BnetNetwork * net1, NtrOptions * option);
|
|
extern int Ntr_TestCharToVect(DdManager * dd, BnetNetwork * net1, NtrOptions * option);
|
|
extern int Ntr_maxflow (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern double Ntr_maximum01Flow (DdManager *bdd, DdNode *sx, DdNode *ty, DdNode *E, DdNode **F, DdNode **cut, DdNode **x, DdNode **y, DdNode **z, int n, int pr);
|
|
extern int Ntr_testZDD (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern int Ntr_testISOP (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
extern NtrHeap * Ntr_InitHeap (int size);
|
|
extern void Ntr_FreeHeap (NtrHeap *heap);
|
|
extern int Ntr_HeapInsert (NtrHeap *heap, void *item, int key);
|
|
extern int Ntr_HeapExtractMin (NtrHeap *heap, void *item, int *key);
|
|
extern int Ntr_HeapCount (NtrHeap *heap);
|
|
extern NtrHeap * Ntr_HeapClone (NtrHeap *source);
|
|
extern void Ntr_HeapForeach (NtrHeap *heap, void (*f)(void *e, void *arg), void *arg);
|
|
extern int Ntr_TestHeap (NtrHeap *heap, int i);
|
|
extern int Ntr_ShortestPaths (DdManager *dd, BnetNetwork *net, NtrOptions *option);
|
|
|
|
/** \endcond */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _NTR */
|