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 */
 |