| 
 | 
Go to the documentation of this file.
   38   FD_DF( "SupNorm(" << rK. Name() <<  "," << rL. Name() <<  "," << rOAlph. Name() <<  ")");  
   53   std::string rLname=rL. Name();  
   69   FD_DF( "SupNorm: sizeof L U complement(K)=L-K: "<<tempgen. Size());  
   72   Project(tempgen,rOAlph,rResult);  
   74   FD_DF( "SupNorm: sizeof p(L-K): "<< rResult. Size());  
   76   FD_DF( "SupNorm: sizeof pinv(p(L-K)): "<<rResult. Size());  
   85   FD_DF( "SupNorm: sizeof K - pinv(p(L-K)) (result): "<<rResult. Size());  
  109   FD_DF( "CompleteClosedSynth(" << rPlant. Name() <<  "," << rSpec. Name()<<  ")");  
  116       FD_DF( "CompleteSynth::empty language specification: empty closed loop.");  
  117     rClosedLoop. Name( "CompeleteSynth("+rPlant. Name()+ ", "+rSpec. Name()+ ")");  
  127     FD_DF( "CompleteSynth:: spec size " << ClosedLoopCand. Size());  
  130     SupConClosed(rPlant, rCAlph, ClosedLoopCand, rClosedLoop);  
  132     FD_DF( "CompleteSynth: size of current result after SupCon: "<<rClosedLoop. Size());  
  137       FD_DF( "CompleteSynth:: failed: empty language result.");  
  139       rClosedLoop. Name( "CompeleteSynth("+rPlant. Name()+ ", "+rSpec. Name()+ ")");  
  143     FD_DF( "CompleteSynth:: candidate size " << rClosedLoop. Size());  
  147     if(dead_ends. Empty()) {  
  149       FD_DF( "CompleteSynth:: done");  
  150       rClosedLoop. Name( "CompeleteSynth("+rPlant. Name()+ ", "+rSpec. Name()+ ")");  
  155     FD_DF( "CompleteSynth:: eliminating following " << dead_ends. Size() <<  " dead ends");  
  161     ClosedLoopCand=rClosedLoop;  
  164     FD_DF( "CompleteSynth:: size of result after removing dead ends: "<<rClosedLoop. Size());  
  169       FD_DF( "CompleteSynth:: failed: empty language result.");  
  170       rClosedLoop. Name( "CompeleteSynth("+rPlant. Name()+ ", "+rSpec. Name()+ ")");  
  185   FD_DF( "NormalCompleteClosedSynth(" << rPlant. Name() <<  "," << rSpec. Name()<<  ")");  
  197     FD_DF( "NormalCompleteSynth:: failed: empty result after CompleteSynth().");  
  198       std::cout<<std::endl<< "NormalCompleteSynth:: failed: empty result after CompleteSynth().";  
  199     rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  204     if( IsNormal(rPlant,rOAlph,rClosedLoop)) {  
  205       FD_DF( "NormalCompleteSynth:: candidate supervisor is normal. success.");  
  206     rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  212     FD_DF( "NormalCompleteSynth:: candidate supervisor not normal. running SupNorm");  
  213     if(! SupNormSP(rPlant, rOAlph, rClosedLoop, Spec)) {  
  214       FD_DF( "NormalCompleteSynth:: failed: empty result after SupNorm().");  
  215       std::cout<<std::endl<< "NormalCompleteSynth:: failed: empty result after SupNorm().";  
  217     rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  224     FD_DF( "NormalCompleteSynth:: size of result after SupNorm(): "<<Spec. Size());  
  237   FD_DF( "NormalCompleteSynth(" << rPlant. Name() <<  "," << rSpec. Name()<<  ")");  
  248       FD_DF( "NormalCompleteClosedSynth:: failed: empty result after NormalCompleteSynth().");  
  249       std::cout<<std::endl<< "NormalCompleteSynth:: failed: empty result after NormalCompleteSynth().";  
  250     rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  255     if(rClosedLoop. IsTrim()) {  
  256       FD_DF( "NormalCompleteSynth:: candidate supervisor is trim. success.");  
  257     rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  263     FD_DF( "NormalCompleteSynth:: candidate supervisor not Trim. running Trim()");  
  266       FD_DF( "NormalCompleteSynth:: failed: empty result after Trim().");  
  267       std::cout<<std::endl<< "NormalCompleteSynth:: failed: empty result after Trim().";  
  269       rClosedLoop. Name( "NormalCompleteSynth(" + rPlant. Name() +  "," + rSpec. Name()+  ")");  
  274     FD_DF( "NormalCompleteSynth:: size of result after Trim():"<<Spec. Size());  
  288     FD_DF( "HioSortCL(...)");  
  290   #ifdef FAUDES_CHECKED 
  293       std::stringstream errstr;  
  294       errstr <<  "At least one empty parameter.";  
  295       throw Exception( "HioSortCL", errstr.str(), 0);  
  304     EventSet::Iterator evit;  
  306     for (evit = rUc. Begin(); evit != rUc. End(); ++evit) {  
  310     for (evit = rYp. Begin(); evit != rYp. End(); ++evit) {  
  314     for (evit = rUp. Begin(); evit != rUp. End(); ++evit) {  
  318     for (evit = rYe. Begin(); evit != rYe. End(); ++evit) {  
  322     for (evit = rUe. Begin(); evit != rUe. End(); ++evit) {  
  326   #ifdef FAUDES_CHECKED 
  328   if (!errevents. Empty()){  
  329     std::stringstream errstr;  
  330     errstr <<  "Non-disjoint parameters; ambiguous events:\n" <<errevents. ToString();  
  331     throw Exception( "HioSortCL", errstr.str(), 0);  
  353     for (evit = rYp. Begin(); evit != rYp. End(); ++evit) {  
  357     for (evit = rYc. Begin(); evit != rYc. End(); ++evit) {  
  361     for (evit = rUc. Begin(); evit != rUc. End(); ++evit) {  
  365     for (evit = rUp. Begin(); evit != rUp. End(); ++evit) {  
  370     for (evit = rYe. Begin(); evit != rYe. End(); ++evit) {  
  374     for (evit = rUe. Begin(); evit != rUe. End(); ++evit) {  
  386   const std::string& rErrState1,   
  387   const std::string& rErrState2,  
  389   Idx& rErrState2Idx) {  
  390   FD_DF( "HioFreeInput( [generator] " << rGen. Name() <<  ")");  
  393   if(&rResGen== &rGen) {  
  394     pResGen= rResGen. New();  
  397   #ifdef FAUDES_CHECKED 
  399   if(rInput. Empty() || !((rInput*rOutput).Empty())) {  
  400       std::stringstream errstr;  
  401       errstr <<  "Empty Input-alphabet or non-disjoint Input and Output.\n";  
  402       errstr <<  "Input: "<< rInput. ToString()<< "\n";  
  403       errstr <<  "Output: "<< rOutput. ToString()<< "\n";  
  404       errstr <<  "Input*Output: "<< (rInput*rOutput).ToString()<< "\n";  
  405       throw Exception( "HioFreeInput", errstr.str(), 0);   
  412   if(!StateNamesEnabled && (!rErrState1.empty()||!rErrState2.empty())) {  
  413     FD_WARN( "HioFreeInput: state names disabled in rResGen: error state names ignored.");  
  419   pResGen-> Name( "HioFreeInput("+rGen. Name()+ ")");  
  422   std::string errstate1;  
  423   if(StateNamesEnabled) {  
  433   EventSet::Iterator evit;  
  434   bool InputInserted =  false;  
  440     if( (disabledInput!=rInput) && !disabledInput. Empty()) {  
  441       FD_DF( "HioFreeInput: " << *sit <<  " disabledInput: " << disabledInput. ToString());   
  442       InputInserted =  true;  
  443       for (evit = disabledInput. Begin(); evit != disabledInput. End(); ++evit) {  
  451     if(StateNamesEnabled) {  
  452      FD_DF( "HioFreeInput(...): inserted error state 1: " << errstate1 <<  " with Idx: " << rErrState1Idx);  
  455      FD_DF( "HioFreeInput(...): inserted error state 1 with Idx: " << rErrState1Idx);  
  457     if(!rOutput. Empty()) {   
  459        std::string errstate2;  
  460        if(StateNamesEnabled) {  
  463          FD_DF( "HioFreeInput(...): inserted error state 2: " << errstate2);  
  467           FD_DF( "HioFreeInput(...): inserted error state 2 with Idx: " << rErrState2Idx);  
  471          for (evit = rInput. Begin(); evit != rInput. End(); ++evit) {  
  475          for (evit = rOutput. Begin(); evit != rOutput. End(); ++evit) {  
  485   if(pResGen != &rResGen) {  
  486     pResGen-> Move(rResGen);  
  497   const std::string& rErrState1,   
  498   const std::string& rErrState2) {  
  499   Idx errstate1,errstate2;  
  500   HioFreeInput(rGen,rInput,rOutput,rResGen,rErrState1,rErrState2,errstate1,errstate2);  
  511   std::string ErrState1,ErrState2;  
  512   HioFreeInput(rGen,rInput,rOutput,rResGen,ErrState1,ErrState2);  
  521   FD_DF( "HioFreeInput( [plant] " << rPlant. Name() <<  ")");  
  525   Idx errstateUp,errstateUe,errstate2;  
  526   std::string ErrState1,ErrState2;  
  535   HioFreeInput(rPlant,uP,NoOutput,rResPlant,ErrState1,ErrState2,errstateUp,errstate2);  
  538   HioFreeInput(rResPlant,uE,NoOutput,rResPlant,ErrState1,ErrState2,errstateUe,errstate2);  
  557   FD_DF( "HioFreeInput( [controller] " << rController. Name() <<  ")");  
  560   if(&rResController== &rController) {  
  561     pResController=rResController. New();  
  568   std::string errStr1, errStr2;  
  571   Idx errIdx1, errIdx2;  
  574   pResController-> Assign(rController);  
  578   pResController-> Name( "HioFreeInput("+rController. Name()+ ")");  
  587   if(StateNamesEnabled) {  
  595   pResController-> SetErr(errIdx1);  
  598   pResController-> SetQUp(errIdx1);  
  601   StateSet::Iterator sit=pResController-> StatesBegin();  
  602   EventSet::Iterator evit;  
  603   bool InputInserted =  false;  
  604   for(;sit!=pResController-> StatesEnd();sit++){  
  608     disabledInput = UcEvents - active;  
  611     if( (disabledInput!=UcEvents) && !disabledInput. Empty()) {  
  613       InputInserted =  true;  
  614       for (evit = disabledInput. Begin(); evit != disabledInput. End(); ++evit) {  
  619   disabledInput = YpEvents - active;  
  622     if( (disabledInput!=YpEvents) && !disabledInput. Empty()) {  
  624       InputInserted =  true;  
  625       for (evit = disabledInput. Begin(); evit != disabledInput. End(); ++evit) {  
  634    std::string errstate2;  
  635    if(StateNamesEnabled) {  
  636      FD_DF( "HioFreeInput(...): inserted error state 1: " << errStr1);  
  639      FD_DF( "HioFreeInput(...): inserted error state 2: " << errStr2);  
  642      FD_DF( "HioFreeInput(...): inserted error state 1 with Idx: " << errIdx1);  
  644      FD_DF( "HioFreeInput(...): inserted error state 2 with Idx: " << errIdx2);  
  648    pResController-> SetErr(errIdx2);  
  650    pResController-> SetQYp(errIdx2);  
  653      for (evit = UpEvents. Begin(); evit != UpEvents. End(); ++evit) {  
  657      for (evit = YpEvents. Begin(); evit != YpEvents. End(); ++evit) {  
  668   if(pResController != &rResController) {  
  669     pResController-> Move(rResController);  
  670     delete pResController;  
  673    rResController. SetYc(YcEvents);  
  674    rResController. SetUc(UcEvents);  
  675    rResController. SetYp(YpEvents);  
  676    rResController. SetUp(UpEvents);  
  684   FD_DF( "HioFreeInput( [environment] " << rEnvironment. Name() <<  ")");  
  687   if(&rResEnvironment== &rEnvironment) {  
  688     pResEnvironment=rResEnvironment. New();  
  695   std::string errStr1, errStr2;  
  698   Idx errIdx1, errIdx2;  
  701   pResEnvironment-> Assign(rEnvironment);  
  705   pResEnvironment-> Name( "HioFreeInput("+rEnvironment. Name()+ ")");  
  714   if(StateNamesEnabled) {  
  723   pResEnvironment-> SetErr(errIdx1);  
  725   pResEnvironment-> SetQUe(errIdx1);  
  728   StateSet::Iterator sit=pResEnvironment-> StatesBegin();  
  729   EventSet::Iterator evit;  
  730   bool InputInserted =  false;  
  731   for(;sit!=pResEnvironment-> StatesEnd();sit++){  
  735     disabledInput = UlEvents - active;  
  738     if( (disabledInput!=UlEvents) && !disabledInput. Empty()) {  
  740       InputInserted =  true;  
  741       for (evit = disabledInput. Begin(); evit != disabledInput. End(); ++evit) {  
  746   disabledInput = YeEvents - active;  
  749     if( (disabledInput!=YeEvents) && !disabledInput. Empty()) {  
  751       InputInserted =  true;  
  752       for (evit = disabledInput. Begin(); evit != disabledInput. End(); ++evit) {  
  761    std::string errstate2;  
  762    if(StateNamesEnabled) {  
  763      FD_DF( "HioFreeInput(...): inserted error state 1: " << errStr1);  
  766      FD_DF( "HioFreeInput(...): inserted error state 2: " << errStr2);  
  769      FD_DF( "HioFreeInput(...): inserted error state 1 with Idx: " << errIdx1);  
  771      FD_DF( "HioFreeInput(...): inserted error state 2 with Idx: " << errIdx2);  
  775    pResEnvironment-> SetErr(errIdx2);  
  777    pResEnvironment-> SetQYe(errIdx2);  
  780      for (evit = UeEvents. Begin(); evit != UeEvents. End(); ++evit) {  
  784      for (evit = YeEvents. Begin(); evit != YeEvents. End(); ++evit) {  
  794   if(pResEnvironment != &rResEnvironment) {  
  795     pResEnvironment-> Move(rResEnvironment);  
  796     delete pResEnvironment;  
  799    rResEnvironment. SetYl(YlEvents);  
  800    rResEnvironment. SetUl(UlEvents);  
  801    rResEnvironment. SetYe(YeEvents);  
  802    rResEnvironment. SetUe(UeEvents);  
  812   Idx errstate1,errstate2;  
  813   std::string ErrState1= "Y-Error";  
  814   std::string ErrState2= "ErrorQY";  
  818   HioFreeInput(rConstraint,y,u,rResConstraint,ErrState1,ErrState2,errstate1,errstate2);  
  820   rResConstraint. SetErr(errstate1);  
  821   rResConstraint. SetErr(errstate2);  
  823   rResConstraint. SetY(y);  
  824   rResConstraint. SetU(u);  
  829   FD_DF( "HioFreeInput( [single arg plant] " << rPlant. Name() <<  ")");  
  864   const std::map< std::pair<Idx,Idx>,  Idx >& rMapOrigToResult,  
  868   std::map< Idx, std::pair<Idx,Idx> > mapResultToOrig;  
  869   std::map< std::pair<Idx,Idx>,  Idx >::const_iterator iter;   
  870     for( iter = rMapOrigToResult.begin(); iter != rMapOrigToResult.end(); ++iter ) {  
  871       mapResultToOrig.insert(std::make_pair( iter->second, iter->first ));  
  876   StateSet::Iterator sit;  
  877   std::map< Idx, Idx > rGen1Clones,rGen2Clones;  
  878   for(sit = nonmarked. Begin(); sit != nonmarked. End(); sit ++) {  
  894   std::map<Idx,Idx>::iterator cloneit;  
  895   bool x1hasGen1Clone,x1hasGen2Clone, x2hasClone;  
  896   for(;tit!=tit_end;tit++) {  
  898     x1hasGen1Clone= false;  
  899     x1hasGen2Clone= false;  
  907     cloneit=rGen1Clones.find(tit->X1);  
  908     if(cloneit!=rGen1Clones.end()) x1hasGen1Clone= true;  
  909     cloneit=rGen2Clones.find(tit->X1);  
  910     if(cloneit!=rGen2Clones.end()) x1hasGen2Clone= true;  
  916       cloneit=rGen1Clones.find(tit->X2);  
  917       if(cloneit!=rGen1Clones.end()) {  
  920         TransToClear. Insert(*tit);  
  921         TransToSet. Insert(tit->X1,tit->Ev,rGen1Clones[tit->X2]);  
  924             TransToSet. Insert(rGen1Clones[tit->X1],tit->Ev,rGen1Clones[tit->X2]);  
  927             TransToSet. Insert(rGen2Clones[tit->X1],tit->Ev,rGen1Clones[tit->X2]);  
  935       cloneit=rGen2Clones.find(tit->X2);  
  936       if(cloneit!=rGen2Clones.end()) {  
  939         TransToClear. Insert(*tit);  
  940         TransToSet. Insert(tit->X1,tit->Ev,cloneit->second);  
  943             TransToSet. Insert(rGen1Clones[tit->X1],tit->Ev,rGen2Clones[tit->X2]);  
  946             TransToSet. Insert(rGen2Clones[tit->X1],tit->Ev,rGen2Clones[tit->X2]);  
  955     if( (x1hasGen1Clone||x1hasGen2Clone) && !x2hasClone ) {  
  956       if(x1hasGen1Clone) TransToSet. Insert(rGen1Clones[tit->X1],tit->Ev,tit->X2);  
  957       if(x1hasGen2Clone) TransToSet. Insert(rGen2Clones[tit->X1],tit->Ev,tit->X2);  
  962   tit=TransToClear. Begin();  
  963   tit_end=TransToClear. End();  
  967   tit=TransToSet. Begin();  
  968   tit_end=TransToSet. End();  
  982   FD_DF( "MarkAlternationAB()");  
  984   #ifdef FAUDES_CHECKED 
  987     std::stringstream errstr;  
  988     errstr <<  "Empty parameter rAset.";  
  989     throw Exception( "CheapAltAnB", errstr.str(), 0);  
  992       std::stringstream errstr;  
  993       errstr <<  "Empty parameter rBset.";  
  994       throw Exception( "CheapAltAnB", errstr.str(), 0);  
 1009     EventSet::Iterator evit=rAset. Begin();  
 1010     EventSet::Iterator evit_end=rAset. End();  
 1011     for(;evit!=evit_end;++evit) {  
 1019     evit_end=rBset. End();  
 1020     for(;evit!=evit_end;++evit) {  
 1039   FD_DF( "HioShuffle()");  
 1048   std::map< std::pair<Idx,Idx>,  Idx > MapOrigToResult;  
 1049   Parallel(rPlantA,rPlantB,MapOrigToResult,parallel1);  
 1056   Idx state1,state2,state3;  
 1061   EventSet::Iterator evit;  
 1062   for (evit = A. Begin(); evit != A. End(); ++evit) {  
 1066   for (evit = B. Begin(); evit != B. End(); ++evit) {  
 1070   Parallel(parallel1,EventPairs,parallel2);  
 1071   parallel1 = parallel2;  
 1112   FD_DF( "------ HioShuffle with Environment-First-Policy! -----");  
 1116   StateSet::Iterator sit_end = parallel1. StatesEnd();  
 1118   for(; sit != sit_end; sit++)  
 1127         if (!(ActiveYe. Empty())&& !(ActiveYp. Empty()))  
 1132             for(;tit!=tit_end;tit++)  
 1135                 if(ActiveYp. Exists(tit->Ev))  
 1137                     TransToClear. Insert(*tit);  
 1140             tit=TransToClear. Begin();  
 1141             tit_end=TransToClear. End();  
 1142             for(;tit!=tit_end;tit++)  
 1162   HioFreeInput(parallel1, rUp, rYp, parallel2,  "errYp_Ye",  "errUp");  
 1165   HioFreeInput(parallel2, rUe, rYe, parallel1,  "errYp_Ye",  "errUe");  
 1172   Parallel(parallel2,parallel1,parallel1);  
 1174   rIOShuffAB = parallel1;  
 1175   rIOShuffAB. Name( "HioShuffle("+rPlantA. Name()+rPlantB. Name()+ ")");  
 1191   #ifdef FAUDES_CHECKED 
 1194    std::stringstream errstr;  
 1195    errstr <<  "Empty Yp alphabet\n";  
 1196    throw Exception( "HioShuffle", errstr.str(), 0);  
 1199    std::stringstream errstr;  
 1200    errstr <<  "Empty Up alphabet\n";  
 1201    throw Exception( "HioShuffle", errstr.str(), 0);  
 1204    std::stringstream errstr;  
 1205    errstr <<  "Empty Ye alphabet\n";  
 1206    throw Exception( "HioShuffle", errstr.str(), 0);  
 1209    std::stringstream errstr;  
 1210    errstr <<  "Empty Ue alphabet\n";  
 1211    throw Exception( "HioShuffle", errstr.str(), 0);  
 1215   EventSet alphabet,alphabetA,alphabetB,errevents;  
 1221   EventSet::Iterator evit;  
 1223   for (evit = rUp. Begin(); evit != rUp. End(); ++evit) {  
 1227   for (evit = rYe. Begin(); evit != rYe. End(); ++evit) {  
 1231   for (evit = rUe. Begin(); evit != rUe. End(); ++evit) {  
 1235   if (!errevents. Empty()){  
 1236     std::stringstream errstr;  
 1237     errstr <<  "Non-disjoint parameters; ambiguous events:\n" <<errevents. ToString();  
 1238   throw Exception( "HioShuffle", errstr.str(), 0);  
 1244   errevents=alphabetA+alphabetB-alphabet;  
 1245   if (!errevents. Empty()){  
 1246     std::stringstream errstr;  
 1247     errstr <<  "Plant A- or plant B-events missing in Yp,Up,Ye or Ue:\n" <<errevents. ToString();  
 1248   throw Exception( "HioShuffle", errstr.str(), 0);  
 1252   HioPlant hioPlantA= HioPlant(rPlantA,rYp*alphabetA,rUp*alphabetA,rYe*alphabetA,rUe*alphabetA);  
 1255     std::stringstream errstr;  
 1256     errstr <<  "plant A not in HioPlantForm:\n" <<  report;  
 1257   throw Exception( "HioShuffle", errstr.str(), 0);  
 1260   HioPlant hioPlantB= HioPlant(rPlantB,rYp*alphabetB,rUp*alphabetB,rYe*alphabetB,rUe*alphabetB);  
 1263     std::stringstream errstr;  
 1264     errstr <<  "plant B not in HioPlantForm:\n" <<  report;  
 1265   throw Exception( "HioShuffle", errstr.str(), 0);  
 1288   HioShuffle(rPlantA, rPlantB, yp, up, ye, ue, rIOShuffAB);  
 1291   rIOShuffAB. SetYp(yp);  
 1292   rIOShuffAB. SetUp(up);  
 1293   rIOShuffAB. SetYe(ye);  
 1294   rIOShuffAB. SetUe(ue);  
 1307   FD_DF( "CheapAltAnB()");  
 1311       std::stringstream errstr;  
 1312       errstr <<  "Parameter Depth must be 1 or greater.";  
 1313       throw Exception( "CheapAltAnB", errstr.str(), 0);  
 1315   #ifdef FAUDES_CHECKED 
 1317       std::stringstream errstr;  
 1318       errstr <<  "Empty parameter rAset.";  
 1319       throw Exception( "CheapAltAnB", errstr.str(), 0);  
 1322       std::stringstream errstr;  
 1323       errstr <<  "Empty parameter rBset.";  
 1324       throw Exception( "CheapAltAnB", errstr.str(), 0);  
 1340   EventSet::Iterator evit;  
 1341   for (evit = rBset. Begin(); evit != rBset. End(); ++evit) {  
 1346   for ( int i=0; i!=Depth; ++i) {  
 1350     for (evit = rAset. Begin(); evit != rAset. End(); ++evit) {  
 1355     for (evit = rBset. Begin(); evit != rBset. End(); ++evit) {  
 1369   FD_DF( "CheapAltAB()");  
 1391   FD_DF( "HioShuffle()");  
 1400   Parallel(rPlantA,rPlantB,parallel1);  
 1406   Idx state1,state2,state3;  
 1411   EventSet::Iterator evit;  
 1412   for (evit = A. Begin(); evit != A. End(); ++evit) {  
 1416   for (evit = B. Begin(); evit != B. End(); ++evit) {  
 1420   Parallel(parallel1,EventPairs,parallel2);  
 1475   Parallel(parallel2, AltAB, parallel1);  
 1528   HioFreeInput(parallel1, rUp, rYp, parallel2,  "errYp_Ye",  "errUp");  
 1531   HioFreeInput(parallel2, rUe, rYe, parallel1,  "errYp_Ye",  "errUe");  
 1534   rIOShuffAB = parallel1;  
 1576   const bool UnMarkedOnly,  
 1578   std::stack<Idx>& rSTACK,   
 1580   std::map<const Idx, int>& rDFN,  
 1581   std::map<const Idx, int>& rLOWLINK,  
 1582   std::set<StateSet>& rSccSet,  
 1585   FD_DF( "SerchYclessScc: -- search from state "<< state <<  "--");  
 1588   rNewStates. Erase(state);  
 1597   rLOWLINK[state]=rDFN[state];  
 1602   rStackStates. Insert(state);  
 1608   for (; it != it_end; ++it) {  
 1611         SuccStates. Insert(it->X2);  
 1616   StateSet::Iterator sit = SuccStates. Begin();  
 1617   StateSet::Iterator sit_end = SuccStates. End();  
 1618   for (; sit != sit_end; ++sit)  
 1621       if(rNewStates. Exists(*sit))  
 1625     SearchYclessScc(*sit, rcount, rGen, rYc, UnMarkedOnly, rNewStates, rSTACK, rStackStates, rDFN, rLOWLINK, rSccSet, rRoots);  
 1627     if(rLOWLINK[*sit]<rLOWLINK[state])  
 1629         rLOWLINK[state]=rLOWLINK[*sit];  
 1636     if((rDFN[*sit]<rDFN[state])&&(rStackStates. Exists(*sit)))  
 1639         if(rDFN[*sit]<rLOWLINK[state])  
 1641       rLOWLINK[state]=rDFN[*sit];  
 1647   if(rLOWLINK[state]==rDFN[state])  
 1652       bool realscc=rSTACK.top()!=state;   
 1657     for (; it != it_end; ++it)  
 1659         if((it->X2==state)&&(!rYc. Exists(it->Ev)))  
 1675       bool purelyUnMarked= true;  
 1681     Idx top=rSTACK.top();  
 1688     rStackStates. Erase(top);  
 1698           if(!purelyUnMarked || UnMarkedOnly)  
 1700               rSccSet.insert(Scc);  
 1717   std::set<StateSet>& rSccSet,  
 1720   FD_DF( "YclessScc(" << rGen. Name() <<  ")");  
 1729   std::stack<Idx> STACK;  
 1737   std::map<const Idx, int> DFN;  
 1739   std::map<const Idx, int> LOWLINK;  
 1744   while(!NewStates. Empty()) {  
 1746     if(NewStates. Exists(InitState)) {  
 1747       SearchYclessScc(InitState, count, rGen, rYc,  false, NewStates, STACK, StackStates, DFN, LOWLINK, rSccSet, rRoots);  
 1749       SearchYclessScc(*NewStates. Begin(), count, rGen, rYc,  false, NewStates, STACK, StackStates, DFN, LOWLINK, rSccSet, rRoots);  
 1753   return !rSccSet.empty();  
 1761   std::set<StateSet>& rSccSet,  
 1764   FD_DF( "YclessScc(" << rGen. Name() <<  ")");  
 1773   std::stack<Idx> STACK;  
 1781   std::map<const Idx, int> DFN;  
 1783   std::map<const Idx, int> LOWLINK;  
 1788   while(!NewStates. Empty()) {  
 1790     if(NewStates. Exists(InitState)) {  
 1791       SearchYclessScc(InitState, count, rGen, rYc,  true, NewStates, STACK, StackStates, DFN, LOWLINK, rSccSet, rRoots);  
 1793       SearchYclessScc(*NewStates. Begin(), count, rGen, rYc,  true, NewStates, STACK, StackStates, DFN, LOWLINK, rSccSet, rRoots);  
 1797   return !rSccSet.empty();  
 1806   std::set<StateSet>& rSccSet)  
 1808   FD_DF( "YclessScc(" << rGen. Name() <<  ")");  
 1814   return YclessScc(rGen,rYc,rSccSet,Roots);  
 1822   FD_DF( "IsYcLive(" << rGen. Name() <<  ")");  
 1824   std::set<StateSet> rSccSet;  
 1828   return rSccSet.size()==0;  
 1834   const std::set<StateSet>& rStateSets)  
 1836   FD_DF( "WriteStateSets()");  
 1837   std::cout<<std::endl;  
 1838   if(rStateSets.empty()) {  
 1839     std::cout<< "WriteStateSets: Set of state sets is empty."<<std::endl;  
 1840     FD_DF( "WriteStateSets: Set of state sets is empty.");  
 1843   std::cout<< ">WriteStateSets: Set of state sets begin:"<< std::endl;  
 1844   std::set<StateSet>::iterator StateSetit = rStateSets.begin();  
 1845   std::set<StateSet>::iterator StateSetit_end = rStateSets.end();  
 1846   for (; StateSetit != StateSetit_end; ++StateSetit) {  
 1847     std::cout<<std::endl<< "  >> State set begin:"<< std::endl;  
 1848     StateSet::Iterator sit = StateSetit->Begin();  
 1849     StateSet::Iterator sit_end = StateSetit->End();  
 1850     for (; sit != sit_end; ++sit) {  
 1851       std::cout<< "  >> "<<*sit<<std::endl;  
 1853     std::cout<< "  >> State set end."<< std::endl;  
 1855   std::cout<<std::endl<< ">WriteStateSets: Set of state sets end."<<std::endl;  
 1863   const std::set<StateSet>& rStateSets)  
 1865   FD_DF( "WriteStateSets()");  
 1866   std::cout<<std::endl;  
 1867   if(rStateSets.empty()) {  
 1868     std::cout<< "WriteStateSets: Set of state sets is empty."<<std::endl;  
 1869     FD_DF( "WriteStateSets: Set of state sets is empty.");  
 1872   std::cout<< ">WriteStateSets: Set of state sets begin:"<< std::endl;  
 1873   std::set<StateSet>::iterator StateSetit = rStateSets.begin();  
 1874   std::set<StateSet>::iterator StateSetit_end = rStateSets.end();  
 1875   for (; StateSetit != StateSetit_end; ++StateSetit) {  
 1876     std::cout<<std::endl<< "  >> State set begin:"<< std::endl;  
 1878     std::cout<< "  >> State set end."<< std::endl;  
 1880   std::cout<<std::endl<< ">WriteStateSets: Set of state sets end."<<std::endl;  
 1886   const std::set<StateSet>& rSccSet,  
 1890   FD_DF( "SccEntries(...)");  
 1893   rEntryStates. Clear();  
 1894   rEntryTransSet. Clear();  
 1899   FD_DF( "SccEntries: Entry states of all SCCs:");  
 1902   std::set<StateSet>::iterator sccit = rSccSet.begin();  
 1903   std::set<StateSet>::iterator sccit_end = rSccSet.end();  
 1904   for ( int i=0; sccit != sccit_end; ++sccit, i++) {  
 1905     FD_DF( "SccEntries: SCC " << i <<  " begin:");  
 1907     StateSet::Iterator sit = sccit->Begin();  
 1908     StateSet::Iterator sit_end = sccit->End();  
 1909     for (; sit != sit_end; ++sit) {  
 1912         rEntryStates. Insert(*sit);  
 1917       for(;tit!=tit_end;tit++) {  
 1921         if(!sccit->Exists(tit->X1)) {  
 1923           rEntryTransSet. Insert(*tit);  
 1925           if(!rEntryStates. Exists(*sit)) {  
 1929             FD_DF( "SccEntries: Entry state:" <<*sit);  
 1930             rEntryStates. Insert(*sit);  
 1935     FD_DF( "SccEntries: SCC " << i <<  " end:");  
 1937   FD_DF( "SccEntries: done");  
 1944   std::set<StateSet>& rSccSet,  
 1945   const Idx EntryState,   
 1949   FD_DF( "CloneScc(...)");  
 1951   std::map<const Idx, Idx> clone;  
 1955   StateSet::Iterator sit=rScc. Begin();  
 1956   StateSet::Iterator sit_end=rScc. End();  
 1957   for(;sit!=sit_end;sit++) {  
 1975   for(;sit!=sit_end;sit++) {  
 1978     for(;tit!=tit_end;tit++) {  
 1980       if(rScc. Exists(tit->X2)) {  
 1989         if(rEntryStates. Exists(tit->X2)) {  
 1990           rEntryTransSet. Insert(clone[*sit],tit->Ev,tit->X2);  
 1997   TransSet TransToClear, EntryTransToInsert;  
 2000   for(;tit!=tit_end;tit++) {  
 2005     EntryTransToInsert. Insert(tit->X1,tit->Ev,clone[EntryState]);  
 2007     TransToClear. Insert(*tit);  
 2012   for(;tit2!=tit2_end;tit2++) {  
 2015     rEntryTransSet. Erase(*tit2);  
 2020   for(;tit3!=tit3_end;tit3++) {  
 2022     rEntryTransSet. Insert(*tit3);  
 2025   rEntryStates. Erase(EntryState);   
 2026   rEntryStates. Insert(clone[EntryState]);   
 2033   const Idx EntryState,   
 2037   FD_DF( "CloneUnMarkedScc(...)");  
 2039   std::map<const Idx, Idx> clone;  
 2043   StateSet::Iterator sit=rScc. Begin();  
 2044   StateSet::Iterator sit_end=rScc. End();  
 2045   for(;sit!=sit_end;sit++) {  
 2046       if(*sit != EntryState) {  
 2050       else clone[*sit]=*sit;   
 2062   bool isEntryState= false;  
 2064   for(;sit!=sit_end;sit++) {  
 2065     isEntryState=(*sit==EntryState);  
 2068     for(;tit!=tit_end;tit++) {  
 2070       if(rScc. Exists(tit->X2)) {  
 2075           TransToClear. Insert(*tit);  
 2084         if(rEntryStates. Exists(tit->X2)) {  
 2085           rEntryTransSet. Insert(clone[*sit],tit->Ev,tit->X2);  
 2093   tit=TransToClear. Begin();  
 2094   tit_end=TransToClear. End();  
 2095   for(;tit!=tit_end;tit++) {  
 2110   FD_DF( "YcAcyclic: Statesize before: "<<rGen. Size()<< " - starting...");  
 2112   std::set<StateSet> SccSet,UnMarkedSccSet;  
 2114   StateSet Scc,Roots,EntryStates,notRoots,UnMarkedRoots;  
 2127     if(! YclessScc(rResGen,rYc,SccSet,Roots)) {  
 2132       FD_DF( "YcAcyclic: Statesize of result: "<<rResGen. Size());  
 2148     SccEntries(rResGen,SccSet,EntryStates,EntryTransSet);  
 2152     notRoots=EntryStates - Roots;  
 2161     StateSet::Iterator sit=notRoots. Begin();  
 2162     StateSet::Iterator sit_end=notRoots. End();  
 2163     for(;sit!=sit_end;sit++)  
 2166     std::set<StateSet>::iterator sccit = SccSet.begin();  
 2167     std::set<StateSet>::iterator sccit_end = SccSet.end();  
 2168         for (; sccit != sccit_end; ++sccit)  
 2170             if(sccit->Exists(*sit))  
 2179         CloneScc(rResGen,Scc,SccSet,*sit,EntryStates,EntryTransSet);  
 2198         std::set<StateSet>::iterator sccit = UnMarkedSccSet.begin();  
 2199         std::set<StateSet>::iterator sccit_end = UnMarkedSccSet.end();  
 2200         for (; sccit != sccit_end; ++sccit) {  
 2202             if(  !( ((*sccit)*EntryStates).Empty() )  ) {  
 2203                  Idx EntryState=*(((*sccit)*EntryStates).Begin());  
 2217     std::set<StateSet>::iterator sccit = SccSet.begin();  
 2218     std::set<StateSet>::iterator sccit_end = SccSet.end();  
 2220     for (; sccit != sccit_end; ++sccit)  
 2223         StateSet::Iterator sit = sccit-> Begin();  
 2224         StateSet::Iterator sit_end = sccit->End();  
 2225         for (; sit != sit_end; ++sit)  
 2231             for(;tit!=tit_end;tit++)  
 2235                 if(sccit->Exists(tit->X2) && EntryStates. Exists(tit->X2)  
 2239                     TransToClear. Insert(*tit);  
 2248     for(;tit!=tit_end;tit++)  
 2289     FD_DF( "ConstrSynth_Beta(...)");  
 2296   rOpConstraint. Clear();  
 2299   Parallel(rPlant,rLocConstr,rOpConstraint);  
 2303   rOpConstraint. Clear();  
 2311   Project(rOpConstraint,sigmap,tmpGen);  
 2312   rOpConstraint. Clear();  
 2322   HioFreeInput(tmpGen, rYp, rUp, rOpConstraint,  "errUp", "errYp");  
 2324   rOpConstraint. Name( "ConstrSynth_Beta("+rPlant. Name()+ ")");  
 2343   FD_DF( "HioSynth(...)");  
 2345   rController. Clear();  
 2353   sigmacp. InsertSet(rUc + rYc + rUp + rYp);  
 2355   sigmace. InsertSet(rUc + rYc + rUel + rYel);  
 2377   minhio =  HioSortCL(rYc,rUc,rYp,rUp,rYel,rUel);  
 2392   FD_DF( "Size of plantspec: "<<plantspec. Size()<< " - Statemin...");  
 2394   FD_DF( "done. New Statesize: "<<plantspec. Size()<< ".");  
 2397   FD_DF( "******************** computing YcAcyclic(plantspec):");  
 2401   YcAcyclic(plantspec,rYc,yclifeplantspec);  
 2407   Parallel(yclifeplantspec,minhio,plantspec);  
 2408   yclifeplantspec. Clear();  
 2410   Parallel(plantspec,rLocConstr,plantspec);  
 2412   plantspec. Name( "actualspec");  
 2423   FD_DF( "size of closed loop before StateMin: "<<loop. Size()<< ", starting StateMin...");  
 2425   FD_DF( "...size of closed loop after StateMin (tmp_closedloop.gen): "<<loop. Size());  
 2429   FD_DF( "********* IsYcLive(closed loop): "<< IsYcLive(loop,rYc));  
 2433   FD_DF( "******************** external closed loop: tmp_extloop.gen");  
 2435   Project(loop,sigmace,extloop);  
 2436   FD_DF( "size of external closed loop: "<<extloop. Size());  
 2450   FD_DF( "******************** project closed loop: tmp_controller.gen");  
 2453   Project(loop,sigmacp,controller);  
 2459   HioFreeInput(controller, rYp, rUp, rController,  "errUp", "errYp");  
 2461   FD_DF( "size of marked IO controller: "<<rController. Size()<< ". PrefixClosure, StateMin...");  
 2467   FD_WARN( "Careful: marking information of the specification has been erased from the resulting controller.");  
 2471   FD_DF( "...size of prefix-closed IO controller after StateMin: "<<rController. Size());  
 2473   rController. Name( "HioSynth("+rPlant. Name()+ ","+rSpec. Name()+ ")");  
 2474   FD_DF( "IO controller synthesis done. ******************** " );  
 2492   rController. Clear();  
 2494   #ifdef FAUDES_CHECKED 
 2497    std::stringstream errstr;  
 2498    errstr <<  "Empty Yc alphabet\n";  
 2499    throw Exception( "HioSynth", errstr.str(), 0);  
 2502    std::stringstream errstr;  
 2503    errstr <<  "Empty Uc alphabet\n";  
 2504    throw Exception( "HioSynth", errstr.str(), 0);  
 2507    std::stringstream errstr;  
 2508    errstr <<  "Empty Yp alphabet\n";  
 2509    throw Exception( "HioSynth", errstr.str(), 0);  
 2512    std::stringstream errstr;  
 2513    errstr <<  "Empty Up alphabet\n";  
 2514    throw Exception( "HioSynth", errstr.str(), 0);  
 2517    std::stringstream errstr;  
 2518    errstr <<  "Empty Ye alphabet\n";  
 2519    throw Exception( "HioSynth", errstr.str(), 0);  
 2522    std::stringstream errstr;  
 2523    errstr <<  "Empty Ue alphabet\n";  
 2524    throw Exception( "HioSynth", errstr.str(), 0);  
 2532   EventSet::Iterator evit;  
 2534   for (evit = rUc. Begin(); evit != rUc. End(); ++evit) {  
 2538   for (evit = rYp. Begin(); evit != rYp. End(); ++evit) {  
 2542   for (evit = rUp. Begin(); evit != rUp. End(); ++evit) {  
 2546   for (evit = rYel. Begin(); evit != rYel. End(); ++evit) {  
 2550   for (evit = rUel. Begin(); evit != rUel. End(); ++evit) {  
 2554   if (!errevents. Empty()){  
 2555      std::stringstream errstr;  
 2556      errstr <<  "Non-disjoint parameters; ambiguous events:\n" <<errevents. ToString();  
 2557    throw Exception( "HioSynth", errstr.str(), 0);  
 2564   if (!(plantEvents*specEvents==rYel+rUel)){  
 2565      std::stringstream errstr;  
 2566      errstr <<  "Alphabet mismatch between plant and spec:\n";  
 2567      errstr <<  "plant: " << plantEvents. ToString() <<  "\n";  
 2568      errstr <<  "spec: " << specEvents. ToString() <<  "\n";  
 2569      errstr <<  "Yel+Uel:   " << (rYel+rUel).ToString() <<  "\n";  
 2570    throw Exception( "HioSynth", errstr.str(), 0);    
 2573   if (!(rExtConstr. Alphabet()<=specEvents)){  
 2574     std::stringstream errstr;  
 2575     errstr <<  "Alphabet mismatch between external constraints and spec.\n";  
 2576   throw Exception( "HioSynth", errstr.str(), 0);  
 2579   if (!(rLocConstr. Alphabet()<=plantEvents)){  
 2580     std::stringstream errstr;  
 2581     errstr <<  "Alphabet mismatch between internal constraints and plant.\n";  
 2582   throw Exception( "HioSynth", errstr.str(), 0);  
 2586   HioPlant spec(rSpec,rYc,rUc,rYel,rUel);  
 2589     std::stringstream errstr;  
 2590     errstr <<  "Spec not in HioPlantForm:\n" <<  report;  
 2591   throw Exception( "HioSynth", errstr.str(), 0);  
 2597   HioSynthUnchecked(rPlant,rSpec,rExtConstr,rLocConstr,rYc,rUc,rYp,rUp,rYel,rUel,rController);  
 2609   rController. Clear();  
 2611   #ifdef FAUDES_CHECKED 
 2617     std::stringstream errstr;  
 2618     errstr <<  "Plant not in HioPlantForm:\n" <<  report;  
 2619   throw Exception( "HioSynthMonolithic", errstr.str(), 0);  
 2639   HioSynth(rPlant,rSpec,extConstr,rSp,yc,uc,yp,up,ye,ue,rController);  
 2642   rController. SetYc(yc);  
 2643   rController. SetUc(uc);  
 2644   rController. SetYp(yp);  
 2645   rController. SetUp(up);  
 2659   rController. Clear();  
 2661   #ifdef FAUDES_CHECKED 
 2667     std::stringstream errstr;  
 2668     errstr <<  "HioShuffle not in HioPlantForm:\n" <<  report;  
 2669   throw Exception( "HioSynthHierarchical", errstr.str(), 0);  
 2678     std::stringstream errstr;  
 2679     errstr <<  "Environment not in HioEnvironmentForm:\n" <<  report;  
 2680   throw Exception( "HioSynthHierarchical", errstr.str(), 0);  
 2687     std::stringstream errstr;  
 2688     errstr <<  "Alphabet mismatch between I/O-shuffle and environment.\n";  
 2689   throw Exception( "HioSynthHierarchical", errstr.str(), 0);  
 2693     std::stringstream errstr;  
 2694     errstr <<  "Alphabet mismatch between specification and environment.\n";  
 2695   throw Exception( "HioSynthHierarchical", errstr.str(), 0);  
 2703   Parallel(rHioShuffle,rEnvironment,ioShuffParEnv);  
 2719   HioSynth(ioShuffParEnv,rSpec,extConstr,rIntConstr,yc,uc,yp,up,ye,ue,rController);   
 2722   rController. SetYc(yc);  
 2723   rController. SetUc(uc);  
 2724   rController. SetYp(yp);  
 2725   rController. SetUp(up);  
 2742   FD_DF( "HioShuffle()_Musunoi");  
 2745   EventSet A,B,SigmaP, Yp, Up, Ye, Ue;  
 2756   Parallel(rPlantA,rPlantB,parallel1);  
 2762   Idx state1,state2,state3;  
 2767   EventSet::Iterator evit;  
 2768   for (evit = A. Begin(); evit != A. End(); ++evit) {  
 2772   for (evit = B. Begin(); evit != B. End(); ++evit) {  
 2776   Parallel(parallel1,EventPairs,parallel2);  
 2811   Parallel(parallel2, AltAB, parallel1);  
 2823   StateSet::Iterator sit_end = parallel1. StatesEnd();  
 2825   for(; sit != sit_end; sit++)  
 2835         if (!(ActiveYe. Empty())&& !(ActiveYp. Empty()))  
 2840             for(;tit!=tit_end;tit++)  
 2843                 if(ActiveYp. Exists(tit->Ev))  
 2845                     TransToClear. Insert(*tit);  
 2848             tit=TransToClear. Begin();  
 2849             tit_end=TransToClear. End();  
 2850             for(;tit!=tit_end;tit++)  
 2865   HioFreeInput(parallel1, Up, Yp, parallel2,  "errYp_Ye",  "errUp");  
 2868   HioFreeInput(parallel2, Ue, Ye, parallel1,  "errYp_Ye",  "errUe");  
 2871   rIOShuffAB = parallel1;  
 2892 locconstr = rLocConstr;  
 2904 sigmacp. InsertSet(rUc + rYc + rUp + rYp);  
 2906 sigmace. InsertSet(rUc + rYc + rUe + rYe);  
 2920  FD_DF( "******************** actual plant: composition with environment constraint: tmp_cplant.gen ");  
 2927  FD_DF( "******************** mininmal hio structure: tmp_minhio.gen, composition with plant: tmp_hioplant.gen ");  
 2937  FD_DF( "******************** composition plant-specification: tmp_plantspec.gen ");  
 2941 Parallel(hiocplant,spec,plantspec);  
 2945  FD_DF( "Size of plantspec: "<<plantspec. Size()<< " - Statemin...");  
 2949  FD_DF( "done. New Statesize: "<<plantspecMin. Size()<< ".");  
 2950 plantspec=plantspecMin;  
 2951 plantspecMin. Clear();  
 2953  FD_DF( "******************** computing YcAcyclic(plantspec):");  
 2957 YcAcyclic(plantspec,yc,yclifeplantspec);  
 2962 yclifeplantspecMin=yclifeplantspec;  
 2966  FD_DF( "******************** actual spec: composition yclifeplantspec||minhio||locconstr (tmp_actualspec.gen)");  
 2968 Parallel(yclifeplantspecMin,minhio,plantspec);  
 2972 Parallel(plantspec,locconstr,actualspec);  
 2975  FD_DF( "******************** closed loop synthesis: tmp_closedloop.gen/.dot");  
 2978 FD_DF( "Starting NormalCompleteSynth....");  
 2986  FD_DF( "size of closed loop before StateMin: "<<loop. Size()<< ", starting StateMin...");  
 2989 FD_DF( "Starting NormalCompleteSynth....done... starting StateMin");  
 2993  FD_DF( "...size of closed loop after StateMin (tmp_closedloop.gen): "<<minloop. Size());  
 2999 minlooptest=minloop;  
 3000  std::set<StateSet> SccSet;  
 3003  FD_DF( "*********number of Yc-less strongly connencted components in closed loop (should be zero): " 
 3009  FD_DF( "******************** external closed loop: tmp_extloop.gen/.dot");  
 3011 Project(minloop,sigmace,extloop);  
 3012  FD_DF( "size of external closed loop: "<<extloop. Size());;  
 3016   FD_DF( "External closed loop meets specification.");  
 3019   FD_DF( "External closed loop EQUALS specification.");  
 3026  FD_DF( "******************** project closed loop: tmp_controller.gen/.dot ");  
 3029 Project(minloop,sigmacp,controller);  
 3034  FD_DF( "******************** extend to IO controller: tmp_IOcontroller.gen/.dot ");  
 3043  FD_DF( "...size of IO controller after StateMin: "<<minIOcontroller. Size());  
 3048 rController = minIOcontroller;  
 3066  FD_DF( "IO controller synthesis done. ******************** " );  
const std::string & Name(void) const  
bool Exists(const Idx &rIndex) const  
void SymbolicName(Idx index, const std::string &rName)  
virtual void InsertSet(const NameSet &rOtherSet)  
bool Insert(const Idx &rIndex)  
void RestrictSet(const NameSet &rOtherSet)  
EventSet UEvents(void) const  
EventSet YEvents(void) const  
EventSet YcEvents(void) const  
EventSet UcEvents(void) const  
EventSet YpEvents(void) const  
THioController * New(void) const  
EventSet UpEvents(void) const  
EventSet UeEvents(void) const  
EventSet YeEvents(void) const  
EventSet LEvents(void) const  
EventSet UlEvents(void) const  
EventSet YlEvents(void) const  
THioEnvironment * New(void) const  
EventSet EEvents(void) const  
EventSet EEvents(void) const  
EventSet UeEvents(void) const  
EventSet UpEvents(void) const  
EventSet YpEvents(void) const  
EventSet YeEvents(void) const  
Iterator Begin(void) const  
EventSet ActiveEvents(Idx x1, SymbolTable *pSymTab=NULL) const  
Iterator BeginByX2(Idx x2) const  
bool Insert(const Transition &rTransition)  
Iterator EndByX2(Idx x2) const  
bool Erase(const Transition &t)  
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator  
virtual TaGenerator & Assign(const Type &rSrc)  
virtual void Move(TaGenerator &rGen)  
const TaEventSet< EventAttr > & Alphabet(void) const  
bool SetTransition(Idx x1, Idx ev, Idx x2)  
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const  
StateSet::Iterator StatesBegin(void) const  
StateSet::Iterator InitStatesBegin(void) const  
const TransSet & TransRel(void) const  
bool SetTransition(Idx x1, Idx ev, Idx x2)  
const StateSet & MarkedStates(void) const  
const EventSet & Alphabet(void) const  
virtual void Move(vGenerator &rGen)  
bool InitStatesEmpty(void) const  
EventSet ActiveEventSet(Idx x1) const  
TransSet::Iterator TransRelBegin(void) const  
void ClrTransition(Idx x1, Idx ev, Idx x2)  
virtual vGenerator * New(void) const  
void InjectMarkedStates(const StateSet &rNewMarkedStates)  
Idx MarkedStatesSize(void) const  
StateSet AccessibleSet(void) const  
bool ExistsState(Idx index) const  
std::string StateSetToString(const StateSet &rStateSet) const  
StateSet::Iterator StatesEnd(void) const  
void DelStates(const StateSet &rDelStates)  
TransSet::Iterator TransRelEnd(void) const  
StateSet TerminalStates(void) const  
void SetMarkedState(Idx index)  
bool StateNamesEnabled(void) const  
bool ExistsInitState(Idx index) const  
bool ExistsMarkedState(Idx index) const  
std::string UniqueStateName(const std::string &rName) const  
const StateSet & States(void) const  
void InjectAlphabet(const EventSet &rNewalphabet)  
bool Exists(const T &rElem) const  
Iterator Begin(void) const  
virtual bool Erase(const T &rElem)  
void StateMin(const Generator &rGen, Generator &rResGen)  
bool LanguageInclusion(const Generator &rGen1, const Generator &rGen2)  
void PrefixClosure(Generator &rGen)  
bool LanguageEquality(const Generator &rGen1, const Generator &rGen2)  
void LanguageIntersection(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)  
void Project(const Generator &rGen, const EventSet &rProjectAlphabet, Generator &rResGen)  
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)  
void InvProject(Generator &rGen, const EventSet &rProjectAlphabet)  
void LanguageComplement(Generator &rGen, const EventSet &rAlphabet)  
bool IsNormal(const Generator &rL, const EventSet &rOAlph, const Generator &rK)  
void SupConClosed(const Generator &rPlantGen, const EventSet &rCAlph, const Generator &rSpecGen, Generator &rResGen)  
void CheapAltAnB(const EventSet rAset, const EventSet rBset, const int Depth, Generator &rAltAnB)  
void ConstrSynth_Beta(Generator &rPlant, const EventSet &rYp, const EventSet &rUp, const Generator &rLocConstr, Generator &rOpConstraint)  
void SccEntries(const Generator &rGen, const std::set< StateSet > &rSccSet, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)  
bool CompleteClosedSynth(const Generator &rPlant, const EventSet rCAlph, const Generator &rSpec, Generator &rClosedLoop)  
void MarkAlternationAB(const EventSet rAset, const EventSet rBset, Generator &rAltAB)  
void HioSynthMonolithic(const HioPlant &rPlant, const HioPlant &rSpec, const HioConstraint &rSc, const HioConstraint &rSp, const HioConstraint &rSe, HioController &rController)  
bool NormalCompleteClosedSynth(Generator &rPlant, const EventSet &rCAlph, const EventSet &rOAlph, const Generator &rSpec, Generator &rClosedLoop)  
void SearchYclessScc(const Idx state, int &rcount, const Generator &rGen, const EventSet &rYc, const bool UnMarkedOnly, StateSet &rNewStates, std::stack< Idx > &rSTACK, StateSet &rStackStates, std::map< const Idx, int > &rDFN, std::map< const Idx, int > &rLOWLINK, std::set< StateSet > &rSccSet, StateSet &rRoots)  
void HioFreeInput(const Generator &rGen, const EventSet &rInput, const EventSet &rOutput, Generator &rResGen, const std::string &rErrState1, const std::string &rErrState2, Idx &rErrState1Idx, Idx &rErrState2Idx)  
void CheapAltAB(const EventSet rAset, const EventSet rBset, const int Depth, Generator &rAltAB)  
void HioSynth(const Generator &rPlant, const Generator &rSpec, const Generator &rExtConstr, const Generator &rLocConstr, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYel, const EventSet &rUel, Generator &rController)  
void WriteStateSets(const std::set< StateSet > &rStateSets)  
Generator HioSortCL(const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe)  
bool YclessUnmarkedScc(const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet, StateSet &rRoots)  
void YcAcyclic(const Generator &rGen, const EventSet &rYc, Generator &rResGen)  
void HioShuffleUnchecked(const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)  
void HioSynthUnchecked(const Generator &rPlant, const Generator &rSpec, const Generator &rExtConstr, const Generator &rLocConstr, const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYel, const EventSet &rUel, Generator &rController)  
void CloneScc(Generator &rGen, const StateSet &rScc, std::set< StateSet > &rSccSet, const Idx EntryState, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)  
void MarkHioShuffle(const Generator &rGen1, const Generator &rGen2, const std::map< std::pair< Idx, Idx >, Idx > &rMapOrigToResult, Generator &rShuffle)  
bool IsYcLive(const Generator &rGen, const EventSet &rYc)  
bool NormalCompleteSynth(Generator &rPlant, const EventSet &rCAlph, const EventSet &rOAlph, const Generator &rSpec, Generator &rClosedLoop)  
void CloneUnMarkedScc(Generator &rGen, const StateSet &rScc, const Idx EntryState, const StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)  
void HioSynthHierarchical(const HioPlant &rHioShuffle, const HioEnvironment &rEnvironment, const HioPlant &rSpec, const Generator &rIntConstr, const HioConstraint &rSc, const HioConstraint &rSl, HioController &rController)  
bool YclessScc(const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet, StateSet &rRoots)  
void HioShuffle(const Generator &rPlantA, const Generator &rPlantB, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe, Generator &rIOShuffAB)  
void HioShuffleTU(const Generator &rPlantA, const Generator &rPlantB, const EventSet &rUp, const EventSet &rYp, const EventSet &rYe, const EventSet &rUe, const int Depth, Generator &rIOShuffAB)  
static int report(lua_State *L, int status)  
THioController< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioController  
void NormalityConsistencyCheck(const Generator &rL, const EventSet &rOAlph, const Generator &rK)  
bool IsHioEnvironmentForm(HioEnvironment &rHioEnvironment, StateSet &rQYe, StateSet &rQUe, StateSet &rQUl, StateSet &rQYlUe, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)  
bool IsHioControllerForm(HioController &rHioController, StateSet &rQUc, StateSet &rQYP, StateSet &rQUp, StateSet &rQYcUp, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)  
THioPlant< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioPlant  
void HioSynth_Musunoi(const Generator &rPlant, const HioPlant &rSpec, const Generator &rConstr, const Generator &rLocConstr, const EventSet &rYp, const EventSet &rUp, Generator &rController)  
std::string ToStringInteger(Int number)  
bool IsHioPlantForm(HioPlant &rHioPlant, StateSet &rQYpYe, StateSet &rQUp, StateSet &rQUe, EventSet &rErrEvSet, TransSet &rErrTrSet, StateSet &rErrStSet, std::string &rReportStr)  
void HioShuffle_Musunoi(const HioPlant &rPlantA, const HioPlant &rPlantB, int depth, Generator &rIOShuffAB)  
bool SupNormSP(Generator &rL, const EventSet &rOAlph, const Generator &rK, Generator &rResult)  
  
 
 
libFAUDES 2.33l 
--- 2025.09.16  
--- c++ api documentaion by doxygen
 
 |