1 | /**CHeaderFile***************************************************************** |
---|
2 | |
---|
3 | FileName [amc.h] |
---|
4 | |
---|
5 | PackageName [amc] |
---|
6 | |
---|
7 | Synopsis [Model Check using over(under)-approximation of the transition |
---|
8 | relation.] |
---|
9 | |
---|
10 | Description [The package implements the approximate_model_check command. |
---|
11 | The command is designed as a wrapper around the model_check command. |
---|
12 | The command contains dual algorithms. Predefined abstraction of the |
---|
13 | transition relation is performed in a controlled way to ensure that the result |
---|
14 | is reliable. By default, the command makes its effort to prove whether |
---|
15 | the given ACTL formula is positive. User must set an environment variable |
---|
16 | "amc_prove_false" when he/she wishes to prove whether the given ACTL formula |
---|
17 | is negative. When the formula is proven FALSE, then the error trace is |
---|
18 | returned as in the model_check command. |
---|
19 | Currently, one predefined approximation method, namely a "block-tearing" |
---|
20 | method, is implemented. The package manipulate the internal data structure |
---|
21 | of FSM to obtain over(under)-approximation of a given system. The algorithm |
---|
22 | begin with coarse approximation in which the degree of initial approximation |
---|
23 | is set by the user. Initial degree of approximation can be set by using |
---|
24 | "amc_sizeof_group" environment. When the initial attempt using the coarse |
---|
25 | approximation fails, the algorithm automatically combine subsystems(take |
---|
26 | synchronous product) to obtain refined approximations. The procedure is |
---|
27 | repeated until the approximation is good enough so that the result is |
---|
28 | reliable. |
---|
29 | ] |
---|
30 | |
---|
31 | |
---|
32 | Author [Woohyuk Lee] |
---|
33 | |
---|
34 | Copyright [This file was created at the University of Colorado at Boulder. |
---|
35 | The University of Colorado at Boulder makes no warranty about the suitability |
---|
36 | of this software for any purpose. It is presented on an AS IS basis.] |
---|
37 | |
---|
38 | Revision [$Id: amc.h,v 1.17 2002/09/08 23:15:15 fabio Exp $] |
---|
39 | |
---|
40 | ******************************************************************************/ |
---|
41 | |
---|
42 | #ifndef _AMC |
---|
43 | #define _AMC |
---|
44 | |
---|
45 | #include "part.h" |
---|
46 | |
---|
47 | /*---------------------------------------------------------------------------*/ |
---|
48 | /* Constant declarations */ |
---|
49 | /*---------------------------------------------------------------------------*/ |
---|
50 | |
---|
51 | |
---|
52 | /*---------------------------------------------------------------------------*/ |
---|
53 | /* Structure declarations */ |
---|
54 | /*---------------------------------------------------------------------------*/ |
---|
55 | |
---|
56 | /**Enum************************************************************************ |
---|
57 | |
---|
58 | Synopsis [Methods for Approximation.] |
---|
59 | |
---|
60 | Description [Currently, only Amc_Block_c is used. Amc_Block_c method |
---|
61 | implements the abstraction method called "block tearing". The blocks of |
---|
62 | subsystem is created by grouping the subset of vertices of the partition. |
---|
63 | Based on the initial grouping into blocks of subsystems, over(under)- |
---|
64 | approximation of the transition relation is created. The approximations of |
---|
65 | the transition relation is used to conservatively verify either true |
---|
66 | positive or true negative of a given ACTL formula.] |
---|
67 | |
---|
68 | ******************************************************************************/ |
---|
69 | typedef enum { |
---|
70 | Amc_Variable_c, |
---|
71 | Amc_Block_c, |
---|
72 | Amc_Default_c |
---|
73 | } Amc_MethodType; |
---|
74 | |
---|
75 | /**Enum************************************************************************ |
---|
76 | |
---|
77 | Synopsis [Verbosity Levels.] |
---|
78 | |
---|
79 | ******************************************************************************/ |
---|
80 | typedef enum { |
---|
81 | Amc_VerbosityNone_c, |
---|
82 | Amc_VerbositySpit_c, |
---|
83 | Amc_VerbosityVomit_c |
---|
84 | } Amc_VerbosityLevel; |
---|
85 | |
---|
86 | /**Enum************************************************************************ |
---|
87 | |
---|
88 | Synopsis [Quantification Mode.] |
---|
89 | |
---|
90 | ******************************************************************************/ |
---|
91 | typedef enum { |
---|
92 | Amc_PresentVars_c, |
---|
93 | Amc_NextVars_c, |
---|
94 | Amc_InputVars_c, |
---|
95 | Amc_User_c |
---|
96 | } Amc_QuantificationMode; |
---|
97 | |
---|
98 | /**Enum************************************************************************ |
---|
99 | |
---|
100 | Synopsis [Verification Results.] |
---|
101 | |
---|
102 | ******************************************************************************/ |
---|
103 | typedef enum { |
---|
104 | Amc_Verified_Unknown_c, |
---|
105 | Amc_Verified_True_c, |
---|
106 | Amc_Verified_False_c |
---|
107 | } Amc_Verified_Answer; |
---|
108 | |
---|
109 | /*---------------------------------------------------------------------------*/ |
---|
110 | /* Type declarations */ |
---|
111 | /*---------------------------------------------------------------------------*/ |
---|
112 | |
---|
113 | typedef struct AmcSubsystemInfo Amc_SubsystemInfo_t; |
---|
114 | typedef struct AmcInfoStruct Amc_Info_t; |
---|
115 | |
---|
116 | #include "mc.h" |
---|
117 | |
---|
118 | /*---------------------------------------------------------------------------*/ |
---|
119 | /* Variable declarations */ |
---|
120 | /*---------------------------------------------------------------------------*/ |
---|
121 | |
---|
122 | |
---|
123 | /*---------------------------------------------------------------------------*/ |
---|
124 | /* Macro declarations */ |
---|
125 | /*---------------------------------------------------------------------------*/ |
---|
126 | |
---|
127 | |
---|
128 | /**AutomaticStart*************************************************************/ |
---|
129 | |
---|
130 | /*---------------------------------------------------------------------------*/ |
---|
131 | /* Function prototypes */ |
---|
132 | /*---------------------------------------------------------------------------*/ |
---|
133 | |
---|
134 | EXTERN void Amc_AmcEvaluateFormula(Ntk_Network_t *network, Ctlp_Formula_t *formula, int verbosity); |
---|
135 | EXTERN Amc_Info_t * Amc_AmcInfoInitialize(Ntk_Network_t *network, Ctlp_Formula_t *formula, Amc_MethodType methodType, int verbosity); |
---|
136 | EXTERN mdd_t * Amc_AmcExistentialQuantifySubsystem(Amc_SubsystemInfo_t *subSystem, array_t *quantifyVars, Amc_QuantificationMode quantificationMode); |
---|
137 | EXTERN array_t * Amc_AmcExistentialQuantifySubsystemArray(array_t *subSystemArray, Amc_SubsystemInfo_t *currentSystem, array_t *quantifyVars, Amc_QuantificationMode quantificationMode); |
---|
138 | EXTERN Fsm_Fsm_t * Amc_AmcSubsystemReadFsm(Amc_SubsystemInfo_t *system); |
---|
139 | EXTERN void Amc_AmcSubsystemSetFsm(Amc_SubsystemInfo_t *system, Fsm_Fsm_t *info); |
---|
140 | EXTERN array_t * Amc_AmcSubsystemReadRelationArray(Amc_SubsystemInfo_t *system); |
---|
141 | EXTERN void Amc_AmcSubsystemSetRelationArray(Amc_SubsystemInfo_t *system, array_t *info); |
---|
142 | EXTERN mdd_t * Amc_AmcSubsystemReadNextStateVarSmoothen(Amc_SubsystemInfo_t *system); |
---|
143 | EXTERN void Amc_AmcSubsystemSetNextStateVarSmoothen(Amc_SubsystemInfo_t *system, mdd_t *info); |
---|
144 | EXTERN mdd_t * Amc_AmcSubsystemReadSatisfy(Amc_SubsystemInfo_t *system); |
---|
145 | EXTERN void Amc_AmcSubsystemSetSatisfy(Amc_SubsystemInfo_t *system, mdd_t *data); |
---|
146 | EXTERN st_table * Amc_AmcSubsystemReadVertexTable(Amc_SubsystemInfo_t *system); |
---|
147 | EXTERN void Amc_AmcSubsystemSetVertexTable(Amc_SubsystemInfo_t *system, st_table *data); |
---|
148 | EXTERN st_table * Amc_AmcSubsystemReadFanInTable(Amc_SubsystemInfo_t *system); |
---|
149 | EXTERN void Amc_AmcSubsystemSetFanInTable(Amc_SubsystemInfo_t *system, st_table *data); |
---|
150 | EXTERN st_table * Amc_AmcSubsystemReadFanOutTable(Amc_SubsystemInfo_t *system); |
---|
151 | EXTERN void Amc_AmcSubsystemSetFanOutTable(Amc_SubsystemInfo_t *system, st_table *data); |
---|
152 | EXTERN char * Amc_AmcSubsystemReadMethodSpecificData(Amc_SubsystemInfo_t *system); |
---|
153 | EXTERN void Amc_AmcSubsystemSetMethodSpecificData(Amc_SubsystemInfo_t *system, char *data); |
---|
154 | EXTERN mdd_t * Amc_AmcReadInitialStates(Amc_Info_t *system); |
---|
155 | EXTERN void Amc_AmcSetInitialStates(Amc_Info_t *system, mdd_t *data); |
---|
156 | EXTERN Amc_SubsystemInfo_t * Amc_AmcReadOptimalSystem(Amc_Info_t *system); |
---|
157 | EXTERN void Amc_AmcSetOptimalSystem(Amc_Info_t *system, Amc_SubsystemInfo_t *data); |
---|
158 | EXTERN void * Amc_AmcReadMethodData(Amc_Info_t *system); |
---|
159 | EXTERN void Amc_AmcSetMethodData(Amc_Info_t *system, void *data); |
---|
160 | EXTERN Amc_SubsystemInfo_t * Amc_AmcSubsystemAllocate(void); |
---|
161 | EXTERN Amc_SubsystemInfo_t * Amc_AmcSubsystemCreate(Fsm_Fsm_t *fsm, mdd_t *satisfyStates, st_table *vertexTable, st_table *fanInTable, st_table *fanOutTable); |
---|
162 | EXTERN Amc_SubsystemInfo_t * Amc_AmcSubsystemDuplicate(Ntk_Network_t *network, Amc_SubsystemInfo_t *subSystem); |
---|
163 | EXTERN void Amc_AmcSubsystemFree(Amc_SubsystemInfo_t *subSystem); |
---|
164 | EXTERN void Amc_AmcSubsystemFreeAlsoPartition(Amc_SubsystemInfo_t *subSystem); |
---|
165 | EXTERN Amc_SubsystemInfo_t * Amc_CombineSubsystems(Ntk_Network_t *network, Amc_SubsystemInfo_t *subSystem1, Amc_SubsystemInfo_t *subSystem2); |
---|
166 | EXTERN Img_ImageInfo_t * Amc_AmcReadOrCreateImageInfo(Fsm_Fsm_t *fsm); |
---|
167 | EXTERN mdd_t * Amc_AmcEvaluateCTLFormula(Amc_SubsystemInfo_t *subSystem, array_t *subSystemArray, Ctlp_Formula_t *ctlFormula, mdd_t *fairStates, Fsm_Fairness_t *fairCondition, mdd_t *modelCareStates, boolean lowerBound, array_t *quantifyVars, Mc_VerbosityLevel verbosity, Mc_DcLevel dcLevel); |
---|
168 | EXTERN mdd_t * Amc_AmcEvaluateEXFormula(Fsm_Fsm_t *modelFsm, array_t *subSystemArray, Amc_SubsystemInfo_t *subSystem, mdd_t *targetMdd, mdd_t *fairStates, mdd_t *careStates, boolean lowerBound, array_t *quantifyVars, Mc_VerbosityLevel verbosity, Mc_DcLevel dcLevel); |
---|
169 | EXTERN mdd_t * Amc_AmcEvaluateEUFormula(Fsm_Fsm_t *modelFsm, array_t *subSystemArray, Amc_SubsystemInfo_t *subSystem, mdd_t *invariantMdd, mdd_t *targetMdd, mdd_t *fairStates, mdd_t *careStates, array_t *onionRings, boolean lowerBound, array_t *quantifyVars, Mc_VerbosityLevel verbosity, Mc_DcLevel dcLevel); |
---|
170 | EXTERN mdd_t * Amc_AmcEvaluateEGFormula(Fsm_Fsm_t *modelFsm, array_t *subSystemArray, Amc_SubsystemInfo_t *subSystem, mdd_t *invariantMdd, mdd_t *fairStates, Fsm_Fairness_t *modelFairness, mdd_t *careStates, array_t *onionRingsArrayForDbg, boolean lowerBound, array_t *quantifyVars, Mc_VerbosityLevel verbosity, Mc_DcLevel dcLevel); |
---|
171 | EXTERN void Amc_Init(void); |
---|
172 | EXTERN void Amc_End(void); |
---|
173 | |
---|
174 | /**AutomaticEnd***************************************************************/ |
---|
175 | |
---|
176 | #endif /* _AMC */ |
---|