| |
|
||||||
|
|
|||||||
|
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
207void 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++) {
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
687void 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)
715bool 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:102 const TaIndexSet< DiagLabelSet > & DiagnoserStateMap(void) const Definition diag_attrdiagstate.cpp:57 void AddStateLabelMap(Idx gstate, const DiagLabelSet &labels) Definition diag_attrdiagstate.cpp:85 Definition diag_attrlabelset.h:19 static Idx IndexOfLabelSpecViolated(void) Definition diag_attrlabelset.cpp:140 static Idx IndexOfLabelN(void) Definition diag_attrlabelset.cpp:125 static Idx IndexOfLabelRelN(void) Definition diag_attrlabelset.cpp:135 Definition cfl_exception.h:118 Definition cfl_indexset.h:78 Definition cfl_nameset.h:70 static SymbolTable * GlobalEventSymbolTablep(void) Definition cfl_symboltable.cpp:282 TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator Definition cfl_transset.h:279 const TaStateSet< StateAttr > & States(void) const Definition cfl_agenerator.h:1348 const TaEventSet< EventAttr > & Alphabet(void) const Definition cfl_agenerator.h:1343 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition cfl_agenerator.h:1182 void StateAttribute(Idx index, const StateAttr &rAttr) Definition cfl_agenerator.h:1312 void InjectAlphabet(const EventSet &rNewalphabet) Definition cfl_agenerator.h:1059 Definition cfl_indexset.h:351 const Attr & Attribute(const Idx &rElem) const Definition cfl_indexset.h:568 Definition cfl_cgenerator.h:76 EventSet UnobservableEvents(void) const Definition cfl_cgenerator.h:1074 EventSet ObservableEvents(void) const Definition cfl_cgenerator.h:1062 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:196 Definition cfl_generator.h:213 StateSet::Iterator StatesBegin(void) const Definition cfl_generator.cpp:1079 StateSet::Iterator InitStatesBegin(void) const Definition cfl_generator.cpp:1172 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition cfl_generator.cpp:1648 EventSet ActiveEventSet(Idx x1) const Definition cfl_generator.cpp:1960 TransSet::Iterator TransRelBegin(void) const Definition cfl_generator.cpp:1089 void ClrTransition(Idx x1, Idx ev, Idx x2) Definition cfl_generator.cpp:1682 void InsEvents(const EventSet &events) Definition cfl_generator.cpp:1232 bool MarkedStatesEmpty(void) const Definition cfl_generator.cpp:690 bool ExistsTransition(const std::string &rX1, const std::string &rEv, const std::string &rX2) const Definition cfl_generator.cpp:1146 void InjectMarkedStates(const StateSet &rNewMarkedStates) Definition cfl_generator.cpp:1557 TransSet ActiveTransSet(Idx x1) const Definition cfl_generator.cpp:1970 std::string TStr(const Transition &rTrans) const Definition cfl_generator.cpp:3970 StateSet::Iterator StatesEnd(void) const Definition cfl_generator.cpp:1084 TransSet::Iterator TransRelEnd(void) const Definition cfl_generator.cpp:1094 StateSet::Iterator InitStatesEnd(void) const Definition cfl_generator.cpp:1177 void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const Definition cfl_generator.cpp:3976 virtual void ClearAttributes(void) Definition cfl_generator.cpp:637 bool ExistsMarkedState(Idx index) const Definition cfl_generator.cpp:1828 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:1034 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:492 bool IsObs(const Generator &rLowGen, const EventSet &rHighAlph) Definition op_obserververification.cpp:38 Definition cfl_agenerator.h:43 bool IsLanguageDiagnosable(const System &rGen, const System &rSpec) Definition diag_languagediagnosis.cpp:20 void ComputeReachability(const System &rGen, const EventSet &rUnobsEvents, const EventSet &rFailures, Idx State, const AttributeFailureTypeMap &rAttrFTMap, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap) Definition diag_eventdiagnosis.cpp:703 void LabelPropagation(const DiagLabelSet &lastLabel, const DiagLabelSet &failureTypes, DiagLabelSet &newLabel) Definition diag_eventdiagnosis.cpp:1020 void ComputeReachabilityRecursive(const System &rGen, const EventSet &rUnobsEvents, const EventSet &rFailures, Idx State, const AttributeFailureTypeMap &rAttrFTMap, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap, const DiagLabelSet FToccurred) Definition diag_eventdiagnosis.cpp:729 void ComputeGobs(const System &rOrigGen, const string &rFailureType, const EventSet &rFailureEvents, Diagnoser &rGobs) Definition diag_eventdiagnosis.cpp:423 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 libFAUDES 2.34d --- 2026.03.11 --- c++ api documentaion by doxygen |