[14] | 1 | /**CHeaderFile***************************************************************** |
---|
| 2 | |
---|
| 3 | FileName [ltlInt.h] |
---|
| 4 | |
---|
| 5 | PackageName [ltl] |
---|
| 6 | |
---|
| 7 | Synopsis [Internal declarations.] |
---|
| 8 | |
---|
| 9 | Author [Chao Wang<chao.wang@colorado.EDU>] |
---|
| 10 | |
---|
| 11 | Copyright [This file was created at the University of Colorado at Boulder. |
---|
| 12 | The University of Colorado at Boulder makes no warranty about the suitability |
---|
| 13 | of this software for any purpose. It is presented on an AS IS basis.] |
---|
| 14 | |
---|
| 15 | Revision [$Id: ltlInt.h,v 1.26 2008/04/22 21:21:45 fabio Exp $] |
---|
| 16 | |
---|
| 17 | ******************************************************************************/ |
---|
| 18 | |
---|
| 19 | #ifndef _LTLINT |
---|
| 20 | #define _LTLINT |
---|
| 21 | |
---|
| 22 | /*---------------------------------------------------------------------------*/ |
---|
| 23 | /* Nested includes */ |
---|
| 24 | /*---------------------------------------------------------------------------*/ |
---|
| 25 | #include "io.h" |
---|
| 26 | #include "ltl.h" |
---|
| 27 | #include "cmd.h" |
---|
| 28 | #include "ctlsp.h" |
---|
| 29 | #include "fsm.h" |
---|
| 30 | #include "ntk.h" |
---|
| 31 | #include "ord.h" |
---|
| 32 | #include "part.h" |
---|
| 33 | #include "mc.h" |
---|
| 34 | #include <string.h> |
---|
| 35 | |
---|
| 36 | |
---|
| 37 | /*---------------------------------------------------------------------------*/ |
---|
| 38 | /* Constant declarations */ |
---|
| 39 | /*---------------------------------------------------------------------------*/ |
---|
| 40 | typedef struct LtlMcOption LtlMcOption_t; |
---|
| 41 | typedef struct LtlTableauEntry LtlTableauEntry_t; |
---|
| 42 | typedef struct LtlTableauStruct LtlTableau_t; |
---|
| 43 | typedef struct LtlSetStruct LtlSet_t; |
---|
| 44 | typedef struct LtlPairStruct LtlPair_t; |
---|
| 45 | |
---|
| 46 | |
---|
| 47 | /**Enum************************************************************************ |
---|
| 48 | |
---|
| 49 | Synopsis [Level to which debugging of CTL formulae is performed.] |
---|
| 50 | |
---|
| 51 | ******************************************************************************/ |
---|
| 52 | |
---|
| 53 | typedef enum { |
---|
| 54 | LtlMcDbgLevelNone_c, |
---|
| 55 | LtlMcDbgLevelMin_c, |
---|
| 56 | LtlMcDbgLevelMinVerbose_c, |
---|
| 57 | LtlMcDbgLevelMax_c, |
---|
| 58 | LtlMcDbgLevelInteractive_c |
---|
| 59 | } LtlMcDbgLevel; |
---|
| 60 | |
---|
| 61 | /**Enum************************************************************************ |
---|
| 62 | |
---|
| 63 | Synopsis [Automaton->File Formats.] |
---|
| 64 | |
---|
| 65 | Description [] |
---|
| 66 | |
---|
| 67 | ******************************************************************************/ |
---|
| 68 | |
---|
| 69 | typedef enum { |
---|
| 70 | Aut2File_DOT_c, |
---|
| 71 | Aut2File_BLIFMV_c, |
---|
| 72 | Aut2File_VERILOG_c, |
---|
| 73 | Aut2File_ALL_c |
---|
| 74 | }Aut2FileType; |
---|
| 75 | |
---|
| 76 | /**Enum************************************************************************ |
---|
| 77 | |
---|
| 78 | Synopsis [LTL->Automaton Translation Algorithm.] |
---|
| 79 | |
---|
| 80 | Description [] |
---|
| 81 | |
---|
| 82 | ******************************************************************************/ |
---|
| 83 | |
---|
| 84 | typedef enum { |
---|
| 85 | Ltl2Aut_GPVW_c, |
---|
| 86 | Ltl2Aut_GPVWplus_c, |
---|
| 87 | Ltl2Aut_LTL2AUT_c, |
---|
| 88 | Ltl2Aut_WRING_c |
---|
| 89 | } Ltl2AutAlgorithm; |
---|
| 90 | |
---|
| 91 | |
---|
| 92 | /*---------------------------------------------------------------------------*/ |
---|
| 93 | /* Structure declarations */ |
---|
| 94 | /*---------------------------------------------------------------------------*/ |
---|
| 95 | |
---|
| 96 | |
---|
| 97 | /**Struct********************************************************************** |
---|
| 98 | |
---|
| 99 | Synopsis [A struct for keeping the command line options.] |
---|
| 100 | |
---|
| 101 | ******************************************************************************/ |
---|
| 102 | struct LtlMcOption { |
---|
| 103 | boolean printInputs; |
---|
| 104 | FILE *ltlFile; /* contains the ltl formulae */ |
---|
| 105 | FILE *debugFile; |
---|
| 106 | boolean useMore; /* use more as pipe for debug output */ |
---|
| 107 | boolean simValue; |
---|
| 108 | Mc_LeMethod_t leMethod; |
---|
| 109 | Mc_DcLevel dcLevel; |
---|
| 110 | LtlMcDbgLevel dbgLevel; |
---|
| 111 | Mc_GSHScheduleType schedule; |
---|
| 112 | Mc_FwdBwdAnalysis direction; |
---|
| 113 | int lockstep; |
---|
| 114 | Mc_VerbosityLevel verbosity; |
---|
| 115 | int timeOutPeriod; |
---|
| 116 | |
---|
| 117 | Ltl2AutAlgorithm algorithm; /* GPVW/GPVW+/LTL2AUT/WRING */ |
---|
| 118 | boolean booleanmin; /* use boolean minimization to simplify cover */ |
---|
| 119 | boolean rewriting; /* rewriting the fomula */ |
---|
| 120 | boolean prunefair; /* prune the fairness */ |
---|
| 121 | boolean iocompatible; /* minimization by io-compatible */ |
---|
| 122 | boolean directsim; /* minimization by direct simulation rln */ |
---|
| 123 | boolean reversesim; /* minimization by reverse simulation rln */ |
---|
| 124 | boolean directsimMaximize; /* adding arcs by direct simulation rln */ |
---|
| 125 | |
---|
| 126 | int noIncrementalPartition; /* ? build the parition of MxA incrementally */ |
---|
| 127 | int noStrengthReduction; /* ? use different decision procedures */ |
---|
| 128 | /* for different automaton strength */ |
---|
| 129 | int noShuffleToTop; /* ? shuffle automaton vars to the top */ |
---|
| 130 | |
---|
| 131 | Aut2FileType outputformat; /* write blifmv/verilog/smv/dot file as output */ |
---|
| 132 | char *outputfilename; |
---|
| 133 | }; |
---|
| 134 | |
---|
| 135 | |
---|
| 136 | /**Struct********************************************************************** |
---|
| 137 | |
---|
| 138 | Synopsis [A struct for holding the Tableau Rule Expansition of 1 Formula.] |
---|
| 139 | |
---|
| 140 | ******************************************************************************/ |
---|
| 141 | struct LtlTableauEntry { |
---|
| 142 | Ctlsp_Formula_t *F; /* the formula */ |
---|
| 143 | struct alpha { /* alpha[0].beta[0]*alpha[0].beta[1] + */ |
---|
| 144 | int B[2]; /* alpha[1].beta[0]*alpha[1].beta[1] */ |
---|
| 145 | int n; |
---|
| 146 | } A[2]; |
---|
| 147 | int notF_idx; /* negation of 'f' */ |
---|
| 148 | Ctlsp_Formula_t *notF; |
---|
| 149 | }; |
---|
| 150 | |
---|
| 151 | /**Struct********************************************************************** |
---|
| 152 | |
---|
| 153 | Synopsis [A struct for holding the Tableau Rule Expansition of All the |
---|
| 154 | sub-Formulae of the given LTL Formula F and its negation.] |
---|
| 155 | |
---|
| 156 | ******************************************************************************/ |
---|
| 157 | struct LtlTableauStruct { |
---|
| 158 | Ctlsp_Formula_t *F; /* Formula in NNF */ |
---|
| 159 | Ctlsp_Formula_t *notF; /* & its negation */ |
---|
| 160 | st_table *formulaUniqueTable; |
---|
| 161 | st_table *untilUniqueTable; |
---|
| 162 | |
---|
| 163 | int abIndex; /* Alpha_Beta_Table */ |
---|
| 164 | LtlTableauEntry_t *abTable; |
---|
| 165 | array_t *abTableNegate; /* provide Negate method, for set operation */ |
---|
| 166 | |
---|
| 167 | int labelIndex; /* label table: (ID/TRUE/FALSE) */ |
---|
| 168 | Ctlsp_Formula_t **labelTable; |
---|
| 169 | array_t *labelTableNegate; /*provide Negate method, for set operation */ |
---|
| 170 | |
---|
| 171 | int algorithm; /* algorithm GPVW/GPVW+/LTL2AUT/WRING */ |
---|
| 172 | int booleanmin; /* switch: for boolean minimization */ |
---|
| 173 | int verbosity; |
---|
| 174 | }; |
---|
| 175 | |
---|
| 176 | /**Struct********************************************************************** |
---|
| 177 | |
---|
| 178 | Synopsis [A struct for holding a set, in which each index corresponds to |
---|
| 179 | an elementary formula.] |
---|
| 180 | |
---|
| 181 | ******************************************************************************/ |
---|
| 182 | struct LtlSetStruct { |
---|
| 183 | var_set_t *e; |
---|
| 184 | }; |
---|
| 185 | |
---|
| 186 | |
---|
| 187 | /**Struct********************************************************************** |
---|
| 188 | |
---|
| 189 | Synopsis [The Buechi Automaton / Quotient Graph struct.] |
---|
| 190 | |
---|
| 191 | ******************************************************************************/ |
---|
| 192 | struct LtlAutomatonStruct { |
---|
| 193 | LtlTableau_t *tableau; /* <optional>, the tableau */ |
---|
| 194 | Ltl_Automaton_t *Q; /* <optional>, Quotion graph */ |
---|
| 195 | st_table *SCC; /* <optional>, SCC partitions */ |
---|
| 196 | int isQuotientGraph; |
---|
| 197 | /* in automaton graph, Q->SCC is (component, 0) */ |
---|
| 198 | /* in quotient graph, Q->SCC is a mapping (component, Q_vtx) */ |
---|
| 199 | |
---|
| 200 | /*--below are required fields-------------------------------------------*/ |
---|
| 201 | char *name; |
---|
| 202 | graph_t *G; |
---|
| 203 | st_table *Init; /* initial states (vertices) */ |
---|
| 204 | st_table *dontcare; /* these state can be in/out FairSets*/ |
---|
| 205 | lsList Fair; /* list of sets (hash tables) */ |
---|
| 206 | array_t *labelTable; /* unique table for propositionals (labels), |
---|
| 207 | 'node->Labes' is a var_set_t refer to it. |
---|
| 208 | Initially it's a Clone of |
---|
| 209 | 'tableau->labelTable', |
---|
| 210 | from which it shares nothing in common */ |
---|
| 211 | array_t *labelTableNegate; /* provide Negate method for each label item */ |
---|
| 212 | int node_idx; /* auxilary counter in creating nodes */ |
---|
| 213 | bdd_t *transitionRelation; /* Holds the bdd of the translation relation */ |
---|
| 214 | bdd_t *initialStates; /* Holds the bdd of the initial states */ |
---|
| 215 | bdd_t *fairSets; /* Holds the bdd of the fair states */ |
---|
| 216 | array_t *fairSetArray; /* Holda bdd of all fair sets.*/ |
---|
| 217 | st_table *psNsTable; /* Maps present state to next state*/ |
---|
| 218 | st_table *nsPsTable; /* Maps next state to present state*/ |
---|
| 219 | }; |
---|
| 220 | |
---|
| 221 | |
---|
| 222 | /**Struct********************************************************************** |
---|
| 223 | |
---|
| 224 | Synopsis [The struct for a node in the Buechi Automaton / Quotient |
---|
| 225 | graph. It's attached to each vertex (vertex->user_data).] |
---|
| 226 | |
---|
| 227 | ******************************************************************************/ |
---|
| 228 | struct LtlAutomatonNodeStruct { |
---|
| 229 | int index; |
---|
| 230 | LtlSet_t *Labels; /* a list of constant formulae, state labels */ |
---|
| 231 | |
---|
| 232 | LtlSet_t *CoverSet; /* <optional> */ |
---|
| 233 | st_table *Class; |
---|
| 234 | mdd_t *Encode; /* Encode the state of automaton */ |
---|
| 235 | int *cnfIndex; |
---|
| 236 | }; |
---|
| 237 | |
---|
| 238 | |
---|
| 239 | /**Struct********************************************************************** |
---|
| 240 | |
---|
| 241 | Synopsis [The struct for holding a Generic Pair (ordered).] |
---|
| 242 | |
---|
| 243 | ******************************************************************************/ |
---|
| 244 | struct LtlPairStruct { |
---|
| 245 | char *First; |
---|
| 246 | char *Second; |
---|
| 247 | }; |
---|
| 248 | |
---|
| 249 | /*---------------------------------------------------------------------------*/ |
---|
| 250 | /* Type declarations */ |
---|
| 251 | /*---------------------------------------------------------------------------*/ |
---|
| 252 | |
---|
| 253 | |
---|
| 254 | /*---------------------------------------------------------------------------*/ |
---|
| 255 | /* Variable declarations */ |
---|
| 256 | /*---------------------------------------------------------------------------*/ |
---|
| 257 | |
---|
| 258 | |
---|
| 259 | /*---------------------------------------------------------------------------*/ |
---|
| 260 | /* Macro declarations */ |
---|
| 261 | /*---------------------------------------------------------------------------*/ |
---|
| 262 | |
---|
| 263 | |
---|
| 264 | /**AutomaticStart*************************************************************/ |
---|
| 265 | |
---|
| 266 | /*---------------------------------------------------------------------------*/ |
---|
| 267 | /* Function prototypes */ |
---|
| 268 | /*---------------------------------------------------------------------------*/ |
---|
| 269 | |
---|
| 270 | EXTERN Ltl_Automaton_t * LtlMcFormulaToAutomaton(Ntk_Network_t *network, Ctlsp_Formula_t *Formula, LtlMcOption_t *options, int checkSemantics); |
---|
| 271 | EXTERN void LtlFsmLoadFairness(Fsm_Fsm_t *compFsm, Fsm_Fairness_t *designFairness, int NumberOfFairSets, int *AutomatonStrength); |
---|
| 272 | EXTERN LtlMcOption_t * LtlMcOptionAlloc(void); |
---|
| 273 | EXTERN void LtlMcOptionFree(LtlMcOption_t *result); |
---|
| 274 | EXTERN Ltl_Automaton_t * LtlAutomatonGeneration(LtlTableau_t *tableau); |
---|
| 275 | EXTERN int LtlAutomatonSetIsFair(LtlTableau_t *tableau, LtlSet_t *r); |
---|
| 276 | EXTERN LtlSet_t * LtlAutomatonVertexGetLabels(vertex_t *vtx); |
---|
| 277 | EXTERN LtlSet_t * LtlSetNew(int size); |
---|
| 278 | EXTERN void LtlSetFree(LtlSet_t *set); |
---|
| 279 | EXTERN LtlSet_t * LtlSetCopy(LtlSet_t *from); |
---|
| 280 | EXTERN void LtlSetAssign(LtlSet_t *to, LtlSet_t *from); |
---|
| 281 | EXTERN int LtlSetEqual(LtlSet_t *s1, LtlSet_t *s2); |
---|
| 282 | EXTERN int LtlSetCardinality(LtlSet_t *set); |
---|
| 283 | EXTERN int LtlSetCompareCardinality(const void *p1, const void *p2); |
---|
| 284 | EXTERN int LtlSetIsContradictory(LtlSet_t *set, array_t *Negate); |
---|
| 285 | EXTERN int LtlSetInclude(LtlSet_t *large, LtlSet_t *small); |
---|
| 286 | EXTERN void LtlSetOR(LtlSet_t *to, LtlSet_t *from1, LtlSet_t *from2); |
---|
| 287 | EXTERN void LtlSetClear(LtlSet_t *set); |
---|
| 288 | EXTERN void LtlSetSetElt(LtlSet_t *set, int index); |
---|
| 289 | EXTERN void LtlSetClearElt(LtlSet_t *set, int index); |
---|
| 290 | EXTERN int LtlSetGetElt(LtlSet_t *set, int index); |
---|
| 291 | EXTERN int LtlSetIsEmpty(LtlSet_t *set); |
---|
| 292 | EXTERN LtlSet_t * LtlSetIsInList(LtlSet_t *set, lsList list); |
---|
| 293 | EXTERN LtlSet_t * LtlSetToLabelSet(LtlTableau_t *tableau, LtlSet_t *set); |
---|
| 294 | EXTERN void LtlSetPrint(LtlTableau_t *tableau, LtlSet_t *set); |
---|
| 295 | EXTERN void LtlSetPrintIndex(int length, LtlSet_t *set); |
---|
| 296 | EXTERN LtlPair_t * LtlPairNew(char *First, char *Second); |
---|
| 297 | EXTERN void LtlPairFree(LtlPair_t *pair); |
---|
| 298 | EXTERN int LtlPairHash(char *key, int modulus); |
---|
| 299 | EXTERN int LtlPairCompare(const char *key1, const char *key2); |
---|
| 300 | EXTERN void LtlPairPrint(LtlPair_t *pair); |
---|
| 301 | EXTERN void LtlCoverPrintIndex(int length, lsList cover); |
---|
| 302 | EXTERN lsList LtlCoverCompleteSum(lsList Cover, array_t *Negate); |
---|
| 303 | EXTERN LtlSet_t * LtlSetConsensus(LtlSet_t *first, LtlSet_t *second, array_t *Negate); |
---|
| 304 | EXTERN lsList LtlCoverCofactor(lsList Cover, LtlSet_t *c, array_t *Negate); |
---|
| 305 | EXTERN int LtlCoverIsTautology(lsList Cover, array_t *Negate); |
---|
| 306 | EXTERN int LtlCoverIsImpliedBy(lsList Cover, LtlSet_t *term, array_t *Negate); |
---|
| 307 | EXTERN lsList LtlCoverPrimeAndIrredundant(LtlTableau_t *tableau, lsList Cover, array_t *Negate); |
---|
| 308 | EXTERN LtlSet_t * LtlCoverGetSuperCube(lsList Cover, array_t *Negate); |
---|
| 309 | EXTERN mdd_t * LtlSetModelCheckFormulae(LtlSet_t *set, array_t *labelTable, Fsm_Fsm_t *fsm); |
---|
| 310 | EXTERN LtlTableau_t * LtlTableauGenerateTableau(Ctlsp_Formula_t *formula); |
---|
| 311 | EXTERN LtlTableau_t * LtlTableauCreate(void); |
---|
| 312 | EXTERN void LtlTableauFree(LtlTableau_t *tableau); |
---|
| 313 | EXTERN void LtlTableauPrint(FILE *fp, LtlTableau_t *tableau); |
---|
| 314 | EXTERN Ctlsp_Formula_t * LtlTableauGetUniqueXFormula(LtlTableau_t *tableau, Ctlsp_Formula_t *F); |
---|
| 315 | |
---|
| 316 | /**AutomaticEnd***************************************************************/ |
---|
| 317 | |
---|
| 318 | #endif /* _LTLINT */ |
---|