|
|
||||||
|
diag_languagediagnosis.cpp
Go to the documentation of this file.
34 map<Idx,multimap<Idx,DiagLabelSet> > reachMap; // maps executable events to all reachable states and occuring relative failure types
62 for (initStateIt = rGenMarkedNonSpecBehaviour.InitStatesBegin(); initStateIt != rGenMarkedNonSpecBehaviour.InitStatesEnd(); initStateIt++) {
67 // create newAttr with state index of current initial state of rGenMarkedNonSpecBehaviour and label "N"
71 // if newAttr equals any existing state attribute then use this state and make it an initial state
76 FD_DD("Statelabel " << *initStateIt << "N already exists at state " << *stateIt << " --> make it init state.");
108 FD_DD("_" << rGenMarkedNonSpecBehaviour.EventName(it->first) << " ("<< it->second.size() << " state estimates)");
139 // if newAttr equals any existing state attribute then we create a transition to this very state
159 FD_DD("Create new state " << nextDState << " and transition " << currDState << " --" << rGenMarkedNonSpecBehaviour.EventName(it->first) << "--> " << nextDState);
207 void ComputeReachabilityRecursive(const System& rGen, const EventSet& rUnobsEvents, Idx State, StateSet done,
213 multimap<Idx,DiagLabelSet> stateFailureTypeMap; // maps generator states onto occurred failures types (=labels), part of rReachabilityMap
244 for (mmLabelIt = stateFailureTypeMap.begin(); mmLabelIt != stateFailureTypeMap.end(); mmLabelIt++) {
260 for (mmLabelIt = stateFailureTypeMap.lower_bound(tIt->X2); mmLabelIt != stateFailureTypeMap.upper_bound(tIt->X2); mmLabelIt++) {
393 newDAttr.AddStateLabelMap(rcmap.Arg1State(*lit), sestimate.DiagnoserStateMap().Attribute(*lit));
409 FD_DD("LanguageDiagnoser(): insert diag transition " << rDiagGen.TStr(Transition(dstate,ev,*sit)));
427 FD_DD("LanguageDiagnoser(): insert diag transition " << rDiagGen.TStr(Transition(dstate,ev,newDState)));
467 VerifierState newVerifierState = VerifierState(rSpec.InitState(), rSpec.InitState(), rGen.InitState(),NORMAL);
484 FD_DD("currentState: " + ToStringInteger(currentState.first) + " VerifierState: (" + rSpec.StateName(currentState.second.mSpec1State) + "," + rSpec.StateName(currentState.second.mSpec2State) + "," + rGen.StateName(currentState.second.mPlantState) + "," + ToStringInteger(currentState.second.mLabel) + ")");
494 newVerifierState = VerifierState(tIt->X2, currentState.second.mSpec2State, currentState.second.mPlantState, NORMAL);
497 newVerifierState = VerifierState(tIt->X2, currentState.second.mSpec2State, currentState.second.mPlantState, CONFUSED);
523 newVerifierState = VerifierState(currentState.second.mSpec1State, currentState.second.mSpec2State, X2, CONFUSED);
526 if(tIt == rSpec.TransRelEnd(currentState.second.mSpec2State,*eIt) ){ // violation of the specification
527 newVerifierState = VerifierState(currentState.second.mSpec1State, currentState.second.mSpec2State, X2, CONFUSED);
547 if(newVerifierState.mLabel == NORMAL || (currentState.second.mLabel == CONFUSED && newVerifierState.mPlantState == currentState.second.mPlantState) ){ // normal behavior or confused behavior extended in the specification (rule 3 or 4)
563 if(tIt != rSpec.TransRelEnd(currentState.second.mSpec1State, *eIt) && plantIt != rGen.TransRelEnd(currentState.second.mPlantState, *eIt) ){ // event occurs in the potentially confused specification and in the plant
564 if(currentState.second.mLabel == NORMAL && specIt != rSpec.TransRelEnd(currentState.second.mSpec2State, *eIt) ){ // no confusion (rule 6)
569 newVerifierState = VerifierState(tIt->X2, currentState.second.mSpec2State, plantIt->X2, CONFUSED);
573 newVerifierState = VerifierState(tIt->X2, currentState.second.mSpec2State, plantIt->X2, CONFUSED);
597 if(rGen.TransRelBegin(currentState.second.mPlantState) == rGen.TransRelEnd(currentState.second.mPlantState) && currentState.second.mLabel == CONFUSED){
629 if(tIt != verifier.TransRelEnd(*stIt, negEvent) && sccIt->Exists(tIt->X2) ){ // there is a transition with negEvent within the SCC
687 void LoopPreservingObserver(const System& rGen, const EventSet& rInitialHighAlph, EventSet& rHighAlph){
688 // Verify if the projection with the given initial alphabet is already a loop-preserving observer
702 for(Idx numberEvents = 1; numberEvents <= diffVector.size(); numberEvents++){// number events that are chosen in this step
707 if(rec_ComputeLoopPreservingObserver(rGen,rInitialHighAlph,rHighAlph,diffVector,numberEvents,currentNumberEvents,currentLocation,chosenEvents) == true)
715 bool rec_ComputeLoopPreservingObserver(const System& rGen, const EventSet& rInitialHighAlph, EventSet& rHighAlph, const std::vector<Idx>& rDiffVector, Idx numberEvents, Idx currentNumberEvents, Idx currentLocation, EventSet chosenEvents){
719 FD_DD("currentNumberEvents: " + ToStringInteger(currentNumberEvents) + "currentLocation: " + ToStringInteger(i) + " event: " + SymbolTable::GlobalEventSymbolTablep()->Symbol(rDiffVector[i]));
728 else if(rDiffVector.size() - 1 - i < numberEvents - currentNumberEvents){ // not enough events left to find numberEvents
733 valid = rec_ComputeLoopPreservingObserver(rGen,rInitialHighAlph,rHighAlph,rDiffVector,numberEvents,currentNumberEvents + 1,i + 1, chosenEvents);
std::string Str(void) const Definition: diag_attrdiagstate.cpp:88 const TaIndexSet< DiagLabelSet > & DiagnoserStateMap(void) const Definition: diag_attrdiagstate.cpp:43 void AddStateLabelMap(Idx gstate, const DiagLabelSet &labels) Definition: diag_attrdiagstate.cpp:71 Definition: diag_attrlabelset.h:19 Definition: cfl_exception.h:118 Definition: cfl_indexset.h:78 Definition: cfl_nameset.h:69 Definition: cfl_parallel.h:43 Idx Arg1State(Idx s12) const Definition: cfl_parallel.cpp:820 TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator Definition: cfl_transset.h:273 const TaStateSet< StateAttr > & States(void) const Definition: cfl_agenerator.h:1365 const TaEventSet< EventAttr > & Alphabet(void) const Definition: cfl_agenerator.h:1360 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition: cfl_agenerator.h:1199 void StateAttribute(Idx index, const StateAttr &rAttr) Definition: cfl_agenerator.h:1329 void InjectAlphabet(const EventSet &rNewalphabet) Definition: cfl_agenerator.h:1076 Definition: cfl_indexset.h:318 const Attr & Attribute(const Idx &rElem) const Definition: cfl_indexset.h:535 Definition: cfl_cgenerator.h:278 EventSet UnobservableEvents(void) const Definition: cfl_cgenerator.h:1259 EventSet ObservableEvents(void) const Definition: cfl_cgenerator.h:1247 Definition: diag_generator.h:26 void InsStateLabelMapping(Idx dStateIndex, Idx gStateIndex, Idx labelIndex) Definition: diag_generator.h:299 Definition: cfl_transset.h:57 std::string ToString(const std::string &rLabel="", const Type *pContext=0) const Definition: cfl_types.cpp:170 Definition: cfl_generator.h:213 StateSet::Iterator StatesBegin(void) const Definition: cfl_generator.cpp:1057 StateSet::Iterator InitStatesBegin(void) const Definition: cfl_generator.cpp:1150 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition: cfl_generator.cpp:1626 EventSet ActiveEventSet(Idx x1) const Definition: cfl_generator.cpp:1938 TransSet::Iterator TransRelBegin(void) const Definition: cfl_generator.cpp:1067 void ClrTransition(Idx x1, Idx ev, Idx x2) Definition: cfl_generator.cpp:1660 void InsEvents(const EventSet &events) Definition: cfl_generator.cpp:1210 bool MarkedStatesEmpty(void) const Definition: cfl_generator.cpp:668 bool ExistsTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2) const Definition: cfl_generator.cpp:1124 void InjectMarkedStates(const StateSet &rNewMarkedStates) Definition: cfl_generator.cpp:1535 TransSet ActiveTransSet(Idx x1) const Definition: cfl_generator.cpp:1948 std::string TStr(const Transition &rTrans) const Definition: cfl_generator.cpp:3841 std::string StateName(Idx index) const Definition: cfl_generator.cpp:949 StateSet::Iterator StatesEnd(void) const Definition: cfl_generator.cpp:1062 TransSet::Iterator TransRelEnd(void) const Definition: cfl_generator.cpp:1072 StateSet::Iterator InitStatesEnd(void) const Definition: cfl_generator.cpp:1155 void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const Definition: cfl_generator.cpp:3847 std::string EventName(Idx index) const Definition: cfl_generator.cpp:839 virtual void ClearAttributes(void) Definition: cfl_generator.cpp:615 bool ExistsMarkedState(Idx index) const Definition: cfl_generator.cpp:1806 void LanguageDiagnoser(const System &rGen, const System &rSpec, Diagnoser &rDiagGen) Definition: diag_languagediagnosis.cpp:275 void LoopPreservingObserver(const System &rGen, const EventSet &rInitialHighAlph, EventSet &rHighAlph) Definition: diag_languagediagnosis.cpp:687 bool IsLoopPreservingObserver(const System &rGen, const EventSet &rHighAlph) Definition: diag_languagediagnosis.cpp:645 void SelfLoop(Generator &rGen, const EventSet &rAlphabet) Definition: cfl_regular.cpp:1018 bool ComputeScc(const Generator &rGen, const SccFilter &rFilter, std::list< StateSet > &rSccList, StateSet &rRoots) Definition: cfl_graphfncts.cpp:347 void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen) Definition: cfl_parallel.cpp:33 void LanguageComplement(Generator &rGen, const EventSet &rAlphabet) Definition: cfl_regular.cpp:477 bool IsObs(const Generator &rLowGen, const EventSet &rHighAlph) Definition: op_obserververification.cpp:38 Definition: cfl_agenerator.h:43 void ComputeReachability(const System &rGen, const EventSet &rUnobsEvents, Idx State, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap) Definition: diag_languagediagnosis.cpp:180 void ComputeReachabilityRecursive(const System &rGen, const EventSet &rUnobsEvents, Idx State, StateSet done, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap) Definition: diag_languagediagnosis.cpp:207 void ComputeGobs(const System &rGenMarkedNonSpecBehaviour, Diagnoser &rGobs) Definition: diag_languagediagnosis.cpp:27 bool IsLanguageDiagnosable(const System &rGen, const System rSpec, std::string &rReportString) Definition: diag_languagediagnosis.cpp:445 void LabelPropagation(const DiagLabelSet &lastLabel, const DiagLabelSet &failureTypes, DiagLabelSet &newLabel) Definition: diag_eventdiagnosis.cpp:1020 bool rec_ComputeLoopPreservingObserver(const System &rGen, const EventSet &rInitialHighAlph, EventSet &rHighAlph, const std::vector< Idx > &rDiffVector, Idx numberEvents, Idx currentNumberEvents, Idx currentLocation, EventSet chosenEvents) Definition: diag_languagediagnosis.cpp:715 Definition: diag_languagediagnosis.h:90 libFAUDES 2.33c --- 2025.05.15 --- c++ api documentaion by doxygen |