65   FD_DF(
"IsBuechiTrim(): result " << res);
 
   71   FD_DF(
"BuechiClosure("<< rGen.
Name() << 
")");
 
   85   FD_DF(
"IsBuechiClosed("<< rGen.
Name() << 
")");
 
   96     StateSet::Iterator sit_end = rGen.
States().
End();
 
   98     for(; sit!=sit_end; ++sit) {
 
   99       if(irrelevant.
Exists(*sit)) 
continue;
 
  102       for (; tit != tit_end; ++tit) {
 
  103         if(!irrelevant.
Exists(tit->X2)) 
break;
 
  115 #ifdef FAUDES_DEBUG_FUNCTION 
  116   FD_DF(
"IsBuechiClosed(..): irrelevant states "<< irrelevant.
ToString());
 
  121   std::list<StateSet> umsccs;
 
  125 #ifdef FAUDES_DEBUG_FUNCTION 
  126   std::list<StateSet>::iterator ssit=umsccs.begin();
 
  127   for(;ssit!=umsccs.end(); ++ssit) {
 
  128     FD_DF(
"IsBuechiClosed(): GPlant-marked scc without GCand-mark: " << ssit->ToString());
 
  132   return umsccs.empty();
 
  147     if (
q1 < other.
q1) 
return(
true);
 
  148     if (
q1 > other.
q1) 
return(
false);
 
  149     if (
q2 < other.
q2) 
return(
true);
 
  150     if (
q2 > other.
q2) 
return(
false);
 
  170   FD_DF(
"BuechiProduct(" << &rGen1 << 
"," << &rGen2 << 
")");
 
  174   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  175     pResGen= rResGen.
New();
 
  185   std::map< OPState, Idx> reverseCompositionMap;
 
  187   std::stack< OPState > todo;
 
  189   OPState currentstates, newstates;
 
  192   StateSet::Iterator lit1, lit2;
 
  194   std::map< OPState, Idx>::iterator rcit;
 
  196   FD_DF(
"BuechiProduct: adding all combinations of initial states to todo:");
 
  199       currentstates = 
OPState(*lit1, *lit2, 
true);
 
  200       todo.push(currentstates);
 
  201       reverseCompositionMap[currentstates] = pResGen->
InsInitState();
 
  202       FD_DF(
"BuechiProduct:   " << currentstates.
Str() << 
" -> " << reverseCompositionMap[currentstates]);
 
  207   FD_DF(
"BuechiProduct: processing reachable states:");
 
  208   while (! todo.empty()) {
 
  212     currentstates = todo.top();
 
  214     FD_DF(
"BuechiProduct: processing (" << currentstates.
Str() << 
" -> " << reverseCompositionMap[currentstates]);
 
  218     for(; tit1 != tit1_end; ++tit1) {
 
  221       tit2_end = rGen2.
TransRelEnd(currentstates.q2, tit1->Ev);
 
  222       for (; tit2 != tit2_end; ++tit2) {
 
  223         newstates = 
OPState(tit1->X2, tit2->X2,currentstates.m1required);
 
  225         if(currentstates.m1required) {
 
  233         rcit = reverseCompositionMap.find(newstates);
 
  234         if(rcit == reverseCompositionMap.end()) {
 
  235           todo.push(newstates);
 
  240           reverseCompositionMap[newstates] = tmpstate;
 
  241           FD_DF(
"BuechiProduct:   todo push: (" << newstates.
Str() << 
") -> " << reverseCompositionMap[newstates]);
 
  244           tmpstate = rcit->second;
 
  248         FD_DF(
"BuechiProduct:  add transition to new generator: " << 
 
  249         pResGen->
TStr(
Transition(reverseCompositionMap[currentstates], tit1->Ev, tmpstate)));
 
  259   for(rcit=reverseCompositionMap.begin(); rcit!=reverseCompositionMap.end(); rcit++) {
 
  260     Idx x1=rcit->first.q1;
 
  261     Idx x2=rcit->first.q2;
 
  262     bool m1requ=rcit->first.m1required;
 
  263     Idx x12=rcit->second;
 
  269     std::string name12 = name1 + 
"|" + name2;
 
  270     if(m1requ) name12 += 
"|r1m";
 
  271     else name12 +=
"|r2m";
 
  281   if(pResGen != &rResGen) {
 
  282     pResGen->
Move(rResGen);
 
  297   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  298     pResGen= rResGen.
New();
 
  308   if(pResGen != &rResGen) {
 
  309     pResGen->
Move(rResGen);
 
  320   FD_DF(
"BuechiParallel(" << &rGen1 << 
"," << &rGen2 << 
")");
 
  323   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  324     pResGen= rResGen.
New();
 
  335   FD_DF(
"BuechiParallel: shared events: " << sharedalphabet.
ToString());
 
  338   std::map< OPState, Idx> reverseCompositionMap;
 
  340   std::stack< OPState > todo;
 
  342   OPState currentstates, newstates;
 
  345   StateSet::Iterator lit1, lit2;
 
  347   std::map< OPState, Idx>::iterator rcit;
 
  349   FD_DF(
"BuechiParallel: adding all combinations of initial states to todo:");
 
  352       currentstates = 
OPState(*lit1, *lit2, 
true);
 
  358       todo.push(currentstates);
 
  359       reverseCompositionMap[currentstates] = tmpstate;
 
  360       FD_DF(
"BuechiParallel:   " << currentstates.
Str() << 
" -> " << tmpstate);
 
  365   FD_DF(
"BuechiParallel: processing reachable states:");
 
  366   while (! todo.empty()) {
 
  370     currentstates = todo.top();
 
  372     FD_DF(
"BuechiParallel: processing (" << currentstates.
Str() << 
" -> "  
  373         << reverseCompositionMap[currentstates]);
 
  378     for(; tit1 != tit1_end; ++tit1) {
 
  380       if(! sharedalphabet.
Exists(tit1->Ev)) {
 
  381         FD_DF(
"BuechiParallel:   exists only in rGen1");
 
  382         newstates = 
OPState(tit1->X2, currentstates.q2, currentstates.m1required);
 
  385         if(currentstates.m1required) {
 
  392         rcit = reverseCompositionMap.find(newstates);
 
  393         if (rcit == reverseCompositionMap.end()) {
 
  394           todo.push(newstates);
 
  397           reverseCompositionMap[newstates] = tmpstate;
 
  398           FD_DF(
"BuechiParallel:   todo push: " << newstates.
Str() << 
"|"  
  399               << reverseCompositionMap[newstates]);
 
  402           tmpstate = rcit->second;
 
  405         pResGen->
SetTransition(reverseCompositionMap[currentstates], tit1->Ev, 
 
  407         FD_DF(
"BuechiParallel:  add transition to new generator: " << 
 
  408         pResGen->
TStr(
Transition(reverseCompositionMap[currentstates], tit1->Ev, tmpstate)));
 
  412         FD_DF(
"BuechiParallel:   common event");
 
  415         tit2_end = rGen2.
TransRelEnd(currentstates.q2, tit1->Ev);
 
  416         for (; tit2 != tit2_end; ++tit2) {
 
  417           newstates = 
OPState(tit1->X2,tit2->X2,currentstates.m1required);
 
  420           if(currentstates.m1required) {
 
  432           rcit = reverseCompositionMap.find(newstates);
 
  433           if (rcit == reverseCompositionMap.end()) {
 
  434             todo.push(newstates);
 
  437             reverseCompositionMap[newstates] = tmpstate;
 
  438             FD_DF(
"BuechiParallel:   todo push: (" << newstates.
Str() << 
") -> "  
  439                 << reverseCompositionMap[newstates]);
 
  442             tmpstate = rcit->second;
 
  446           FD_DF(
"BuechiParallel:  add transition to new generator: " << 
 
  447     pResGen->
TStr(
Transition(reverseCompositionMap[currentstates], tit1->Ev, tmpstate)));
 
  455     for (; tit2 != tit2_end; ++tit2) {
 
  456       if (! sharedalphabet.
Exists(tit2->Ev)) {
 
  457         FD_DF(
"BuechiParallel:   exists only in rGen2: " << sharedalphabet.
Str(tit2->Ev));
 
  458         newstates = 
OPState(currentstates.q1, tit2->X2, currentstates.m1required);
 
  461         if(!currentstates.m1required) {
 
  467         FD_DF(
"BuechiParallel: set trans: " << currentstates.Str() << 
" " << newstates.
Str()); 
 
  469         rcit = reverseCompositionMap.find(newstates);
 
  470         if (rcit == reverseCompositionMap.end()) {
 
  471           todo.push(newstates);
 
  474           reverseCompositionMap[newstates] = tmpstate;
 
  475           FD_DF(
"BuechiParallel:   todo push: " << newstates.
Str() << 
" -> "  
  476               << reverseCompositionMap[newstates]);
 
  479           tmpstate = rcit->second;
 
  483         FD_DF(
"BuechiParallel:  add transition to new generator: " << 
 
  484         pResGen->
TStr(
Transition(reverseCompositionMap[currentstates], tit2->Ev, tmpstate)));
 
  493   for(rcit=reverseCompositionMap.begin(); rcit!=reverseCompositionMap.end(); rcit++) {
 
  494     Idx x1=rcit->first.q1;
 
  495     Idx x2=rcit->first.q2;
 
  496     bool m1requ=rcit->first.m1required;
 
  497     bool mres=rcit->first.mresolved;
 
  498     Idx x12=rcit->second;
 
  504     std::string name12 = name1 + 
"|" + name2 ;
 
  505     if(m1requ) name12 += 
"|r1m";
 
  506     else name12 +=
"|r2m";
 
  507     if(mres) name12 += 
"*";
 
  517   if(pResGen != &rResGen) {
 
  518     pResGen->
Move(rResGen);
 
  534   if(&rResGen== &rGen1 || &rResGen== &rGen2) {
 
  535     pResGen= rResGen.
New();
 
  545   if(pResGen != &rResGen) {
 
  546     pResGen->
Move(rResGen);
 
  556   FD_DF(
"IsBuechiRelativelyMarked(\"" <<  rGenPlant.
Name() << 
"\", \"" << rGenCand.
Name() << 
"\")");
 
  560     std::stringstream errstr;
 
  561     errstr << 
"Alphabets of generators do not match.";
 
  562     throw Exception(
"BuechiRelativelyMarked", errstr.str(), 100);
 
  565 #ifdef FAUDES_CHECKED 
  568     std::stringstream errstr;
 
  569     errstr << 
"Arguments are expected to be nonblocking.";
 
  570     throw Exception(
"IsBuechiRelativelyMarked", errstr.str(), 201);
 
  574 #ifdef FAUDES_CHECKED 
  577     std::stringstream errstr;
 
  578     errstr << 
"Arguments are expected to be deterministic.";
 
  579     throw Exception(
"IsBuechiRelativelyMarked", errstr.str(), 202);
 
  585   std::map< std::pair<Idx,Idx> , 
Idx> revmap;
 
  590   Product(rGenPlant,rGenCand,revmap,markPlant,markCand,product);
 
  595   std::list<StateSet> umsccs;
 
  600   std::list<StateSet>::iterator ssit=umsccs.begin();
 
  601   for(;ssit!=umsccs.end(); ++ssit) {
 
  602     FD_DF(
"IsBuechiRelativelyMarked(): GPlant-marked scc without GCand-mark: " << ssit->ToString());
 
  606   return umsccs.size()==0;
 
  617   FD_DF(
"IsBuechiRelativelyClosed(\"" <<  rGenPlant.
Name() << 
"\", \"" << rGenCand.
Name() << 
"\")");
 
  621     std::stringstream errstr;
 
  622     errstr << 
"Alphabets of generators do not match.";
 
  623     throw Exception(
"BuechiRelativelyClosed", errstr.str(), 100);
 
  626 #ifdef FAUDES_CHECKED 
  629     std::stringstream errstr;
 
  630     errstr << 
"Argument \"" << rGenCand.
Name() << 
"\" is not omegatrim.";
 
  631     throw Exception(
"IsBuechiRelativelyClosed", errstr.str(), 201);
 
  634     std::stringstream errstr;
 
  635     errstr << 
"Argument \"" << rGenPlant.
Name() << 
"\" is not omega-trim.";
 
  636     throw Exception(
"IsBuechiRelativelyClosed", errstr.str(), 201);
 
  643   if(rGenCand.
Empty()) {
 
  644     FD_DF(
"IsBuechiRelativelyClosed(..): empty candidate: pass");
 
  650   if(rGenPlant.
Empty()) {
 
  651     FD_DF(
"IsBuechiRelativelyClosed(..): non-empty candidate. empty plant: fail");
 
  655 #ifdef FAUDES_CHECKED 
  658     std::stringstream errstr;
 
  659     errstr << 
"Arguments are expected to be deterministic.";
 
  660     throw Exception(
"IsBuechiRelativelyClosed", errstr.str(), 202);
 
  673   std::map< std::pair<Idx,Idx> , 
Idx> revmap;
 
  683   std::stack< std::pair<Idx,Idx> > todo;
 
  685   std::pair<Idx,Idx> currentstates, newstates;
 
  689   StateSet::Iterator lit1, lit2;
 
  691   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rcit;
 
  693   bool inclusion12=
true;
 
  696   FD_DF(
"IsBuechiRelativelyClosed(): Product composition A");
 
  701       currentstates = std::make_pair(*lit1, *lit2);
 
  702       todo.push(currentstates);
 
  704       revmap[currentstates] = tmpstate;
 
  705       FD_DF(
"IsBuechiRelativelyClosed(): Product composition A:   (" << *lit1 << 
"|" << *lit2 << 
") -> "  
  706           << revmap[currentstates]);
 
  711   while (! todo.empty() && inclusion12) {
 
  715     currentstates = todo.top();
 
  717     FD_DF(
"IsBuechiRelativelyClosed(): Product composition B: (" << currentstates.first << 
"|"  
  718         << currentstates.second << 
") -> " << revmap[currentstates]);
 
  721     tit1_end = rGenCand.
TransRelEnd(currentstates.first);
 
  723     tit2_end = rGenPlant.
TransRelEnd(currentstates.second);
 
  725     bool resolved12=
true;
 
  726     while((tit1 != tit1_end) && (tit2 != tit2_end)) {
 
  728       if(tit1->Ev != curev1) {
 
  729         if(!resolved12) inclusion12=
false;
 
  734       if (tit1->Ev == tit2->Ev) {
 
  736         newstates = std::make_pair(tit1->X2, tit2->X2);
 
  738         rcit = revmap.find(newstates);
 
  739         if (rcit == revmap.end()) {
 
  740           todo.push(newstates);
 
  742           revmap[newstates] = tmpstate;
 
  743           FD_DF(
"IsBuechiRelativelyClosed(): Product composition C: (" << newstates.first << 
"|"  
  744              << newstates.second << 
") -> " << revmap[newstates]);
 
  747           tmpstate = rcit->second;
 
  749         product.
SetTransition(revmap[currentstates], tit1->Ev, tmpstate);
 
  754       else if (tit1->Ev < tit2->Ev) {
 
  758       else if (tit1->Ev > tit2->Ev) {
 
  763     if(!resolved12) inclusion12=
false;
 
  766 #ifdef FAUDES_DEBUG_FUNCTION 
  767   FD_DF(
"IsBuechiRelativelyClosed(): Product: done"); 
 
  769     FD_DF(
"IsBuechiRelativelyClosed(): Product: inclusion L(GenCand) <= L(GenPlant) not satisfied"); 
 
  774   if(!inclusion12) 
return false;
 
  777   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rit;
 
  778   for(rit=revmap.begin(); rit!=revmap.end(); ++rit){
 
  786   std::list<StateSet> umsccs12;
 
  788   ComputeScc(product,umfilter12,umsccs12,umroots12); 
 
  791   std::list<StateSet>::iterator ssit=umsccs12.begin();
 
  792   for(;ssit!=umsccs12.end(); ++ssit) {
 
  793     FD_DF(
"IsBuechiRelativelyClosed(): G2-marked scc without G1-mark: " << ssit->ToString());
 
  797   if(umsccs12.size()!=0) 
return false;
 
  802   std::list<StateSet> umsccs21;
 
  804   ComputeScc(product,umfilter21,umsccs21,umroots21); 
 
  807   ssit=umsccs21.begin();
 
  808   for(;ssit!=umsccs21.end(); ++ssit) {
 
  809     FD_DF(
"IsBuechiRelativelyClosed(): G1-marked scc without G2-mark: " << ssit->ToString());
 
  813   if(umsccs21.size()!=0) 
return false;
 
  816   FD_DF(
"IsBuechiRelativelyClosed(): pass");
 
  824   FD_DF(
"BuechiLanguageInclusion(\"" <<  rGen1.
Name() << 
"\", \"" << rGen2.
Name() << 
"\")");
 
  828     std::stringstream errstr;
 
  829     errstr << 
"Alphabets of generators do not match.";
 
  830     throw Exception(
"BuechiLanguageInclusion", errstr.str(), 100);
 
  833 #ifdef FAUDES_CHECKED 
  836     std::stringstream errstr;
 
  837     errstr << 
"Argument \"" << rGen1.
Name() << 
"\" is not omegatrim.";
 
  838     throw Exception(
"BuechiLanguageInclusion", errstr.str(), 201);
 
  841     std::stringstream errstr;
 
  842     errstr << 
"Argument \"" << rGen2.
Name() << 
"\" is not omega-trim.";
 
  843     throw Exception(
"BuechiLanguageInclusion", errstr.str(), 201);
 
  850     FD_DF(
"BuechiLanguageInclusion(..): empty candidate: pass");
 
  857     FD_DF(
"BuechiLanguageInclusion(..): non-empty candidate. empty plant: fail");
 
  861 #ifdef FAUDES_CHECKED 
  864     std::stringstream errstr;
 
  865     errstr << 
"Arguments are expected to be deterministic.";
 
  866     throw Exception(
"BuechiLanguageInclusion", errstr.str(), 202);
 
  871   std::map< std::pair<Idx,Idx> , 
Idx> revmap;
 
  881   std::stack< std::pair<Idx,Idx> > todo;
 
  883   std::pair<Idx,Idx> currentstates, newstates;
 
  887   StateSet::Iterator lit1, lit2;
 
  889   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rcit;
 
  891   bool inclusion12=
true;
 
  894   FD_DF(
"BuechiLanguageInclusion(): Product composition A");
 
  899       currentstates = std::make_pair(*lit1, *lit2);
 
  900       todo.push(currentstates);
 
  902       revmap[currentstates] = tmpstate;
 
  903       FD_DF(
"BuechiLanguageInclusion(): Product composition A:   (" << *lit1 << 
"|" << *lit2 << 
") -> "  
  904           << revmap[currentstates]);
 
  909   while (! todo.empty() && inclusion12) {
 
  913     currentstates = todo.top();
 
  915     FD_DF(
"BuechiLanguageInclusion(): Product composition B: (" << currentstates.first << 
"|"  
  916         << currentstates.second << 
") -> " << revmap[currentstates]);
 
  921     tit2_end = rGen2.
TransRelEnd(currentstates.second);
 
  923     bool resolved12=
true;
 
  924     while((tit1 != tit1_end) && (tit2 != tit2_end)) {
 
  926       if(tit1->Ev != curev1) {
 
  927         if(!resolved12) inclusion12=
false;
 
  932       if (tit1->Ev == tit2->Ev) {
 
  934         newstates = std::make_pair(tit1->X2, tit2->X2);
 
  936         rcit = revmap.find(newstates);
 
  937         if (rcit == revmap.end()) {
 
  938           todo.push(newstates);
 
  940           revmap[newstates] = tmpstate;
 
  941           FD_DF(
"BuechiLanguageInclusion(): Product composition C: (" << newstates.first << 
"|"  
  942              << newstates.second << 
") -> " << revmap[newstates]);
 
  945           tmpstate = rcit->second;
 
  947         product.
SetTransition(revmap[currentstates], tit1->Ev, tmpstate);
 
  952       else if (tit1->Ev < tit2->Ev) {
 
  956       else if (tit1->Ev > tit2->Ev) {
 
  961     if(!resolved12) inclusion12=
false;
 
  964 #ifdef FAUDES_DEBUG_FUNCTION 
  965   FD_DF(
"BuechiLanguageInclusion(): Product: done"); 
 
  967     FD_DF(
"BuechiLanguageInclusion(): Product: inclusion L(Gen1) <= L(Gen2) not satisfied"); 
 
  972   if(!inclusion12) 
return false;
 
  975   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rit;
 
  976   for(rit=revmap.begin(); rit!=revmap.end(); ++rit){
 
  984   std::list<StateSet> umsccs21;
 
  986   ComputeScc(product,umfilter21,umsccs21,umroots21); 
 
  989   std::list<StateSet>::iterator ssit=umsccs21.begin();
 
  990   for(;ssit!=umsccs21.end(); ++ssit) {
 
  991     FD_DF(
"BuechiLanguageInclusion(): G1-marked scc without G2-mark: " << ssit->ToString());
 
  995   if(umsccs21.size()!=0) 
return false;
 
  998   FD_DF(
"BuechiLanguageInclusion(): pass");
 
 1006   FD_DF(
"BuechiLanguageEquality(\"" <<  rGen1.
Name() << 
"\", \"" << rGen2.
Name() << 
"\")");
 
 1010     std::stringstream errstr;
 
 1011     errstr << 
"Alphabets of generators do not match.";
 
 1012     throw Exception(
"BuechiLanguageEquality", errstr.str(), 100);
 
 1015 #ifdef FAUDES_CHECKED 
 1018     std::stringstream errstr;
 
 1019     errstr << 
"Argument \"" << rGen1.
Name() << 
"\" is not omegatrim.";
 
 1020     throw Exception(
"BuechiLanguageEquality", errstr.str(), 201);
 
 1023     std::stringstream errstr;
 
 1024     errstr << 
"Argument \"" << rGen2.
Name() << 
"\" is not omega-trim.";
 
 1025     throw Exception(
"BuechiLanguageEquality", errstr.str(), 201);
 
 1032   bool empty1=rGen1.
Empty();
 
 1033   bool empty2=rGen2.
Empty();  
 
 1034   if( empty1 && empty2) {
 
 1035     FD_DF(
"BuechiLanguageEquality(..): empty candidates: pass");
 
 1038   if( empty1 != empty2) {
 
 1039     FD_DF(
"BuechiLanguageEquality(..): empty/non-empty candidates: fail");
 
 1043 #ifdef FAUDES_CHECKED 
 1046     std::stringstream errstr;
 
 1047     errstr << 
"Arguments are expected to be deterministic.";
 
 1048     throw Exception(
"BuechiLanguageEquality", errstr.str(), 202);
 
 1053   std::map< std::pair<Idx,Idx> , 
Idx> revmap;
 
 1063   std::stack< std::pair<Idx,Idx> > todo;
 
 1065   std::pair<Idx,Idx> currentstates, newstates;
 
 1069   StateSet::Iterator lit1, lit2;
 
 1071   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rcit;
 
 1076   FD_DF(
"BuechiLanguageEquality(): Product composition A");
 
 1081       currentstates = std::make_pair(*lit1, *lit2);
 
 1082       todo.push(currentstates);
 
 1084       revmap[currentstates] = tmpstate;
 
 1085       FD_DF(
"BuechiLanguageEquality(): Product composition A:   (" << *lit1 << 
"|" << *lit2 << 
") -> "  
 1086           << revmap[currentstates]);
 
 1091   while (! todo.empty() && equal12) {
 
 1095     currentstates = todo.top();
 
 1097     FD_DF(
"BuechiLanguageEquality(): Product composition B: (" << currentstates.first << 
"|"  
 1098         << currentstates.second << 
") -> " << revmap[currentstates]);
 
 1101     tit1_end = rGen1.
TransRelEnd(currentstates.first);
 
 1103     tit2_end = rGen2.
TransRelEnd(currentstates.second);
 
 1104     while((tit1 != tit1_end) && (tit2 != tit2_end)) {
 
 1106       if (tit1->Ev != tit2->Ev) {
 
 1111       newstates = std::make_pair(tit1->X2, tit2->X2);
 
 1113       rcit = revmap.find(newstates);
 
 1114       if (rcit == revmap.end()) {
 
 1115         todo.push(newstates);
 
 1117         revmap[newstates] = tmpstate;
 
 1118         FD_DF(
"BuechiLanguageEquality(): Product composition C: (" << newstates.first << 
"|"  
 1119            << newstates.second << 
") -> " << revmap[newstates]);
 
 1121         tmpstate = rcit->second;
 
 1123       product.
SetTransition(revmap[currentstates], tit1->Ev, tmpstate);
 
 1129 #ifdef FAUDES_DEBUG_FUNCTION 
 1130   FD_DF(
"BuechiLanguageEquality(): Product: done"); 
 
 1132     FD_DF(
"BuechiLanguageEquality(): Product: inclusion L(Gen1) == L(Gen2) not satisfied"); 
 
 1137   if(!equal12) 
return false;
 
 1140   std::map< std::pair<Idx,Idx>, 
Idx>::iterator rit;
 
 1141   for(rit=revmap.begin(); rit!=revmap.end(); ++rit){
 
 1149   std::list<StateSet> umsccs12;
 
 1151   ComputeScc(product,umfilter12,umsccs12,umroots12); 
 
 1154   std::list<StateSet>::iterator ssit=umsccs12.begin();
 
 1155   for(;ssit!=umsccs12.end(); ++ssit) {
 
 1156     FD_DF(
"BuechiLanguageEquality(): G1-marked scc without G2-mark: " << ssit->ToString());
 
 1160   if(umsccs12.size()!=0) 
return false;
 
 1165   std::list<StateSet> umsccs21;
 
 1167   ComputeScc(product,umfilter21,umsccs21,umroots21); 
 
 1170   ssit=umsccs21.begin();
 
 1171   for(;ssit!=umsccs21.end(); ++ssit) {
 
 1172     FD_DF(
"BuechiLanguageEquality(): G2-marked scc without G1-mark: " << ssit->ToString());
 
 1176   if(umsccs21.size()!=0) 
return false;
 
 1179   FD_DF(
"BuechiLanguageEquality(): pass");
 
const std::string & Name(void) const
 
bool Exists(const Idx &rIndex) const
 
virtual std::string Str(const Idx &rIndex) const
 
bool operator<(const OPState &other) const
 
OPState(const Idx &rq1, const Idx &rq2, const bool &rf)
 
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator
 
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
 
StateSet::Iterator InitStatesBegin(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)
 
std::string MarkedStatesToString(void) const
 
const StateSet & InitStates(void) const
 
TransSet::Iterator TransRelBegin(void) const
 
bool IsAccessible(void) const
 
void InsEvents(const EventSet &events)
 
bool IsComplete(void) const
 
virtual vGenerator * New(void) const
 
void InjectMarkedStates(const StateSet &rNewMarkedStates)
 
StateSet AccessibleSet(void) const
 
bool ExistsState(Idx index) const
 
bool IsCoaccessible(void) const
 
std::string TStr(const Transition &rTrans) const
 
std::string StateName(Idx index) const
 
TransSet::Iterator TransRelEnd(void) const
 
StateSet TerminalStates(void) const
 
void SetMarkedState(Idx index)
 
virtual void EventAttributes(const EventSet &rEventSet)
 
bool StateNamesEnabled(void) const
 
StateSet::Iterator InitStatesEnd(void) const
 
StateSet CoaccessibleSet(void) 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
 
virtual void InsertSet(const TBaseSet &rOtherSet)
 
bool EqualAttributes(const TBaseSet &rOtherSet) const
 
Iterator Begin(void) const
 
virtual void EraseSet(const TBaseSet &rOtherSet)
 
bool ComputeScc(const Generator &rGen, const SccFilter &rFilter, std::list< StateSet > &rSccList, StateSet &rRoots)
 
void Product(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
 
bool IsDeterministic(const vGenerator &rGen)
 
void aBuechiProduct(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
 
void BuechiProduct(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
 
void BuechiParallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
 
void aBuechiParallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
 
bool BuechiTrim(vGenerator &rGen)
 
void BuechiClosure(Generator &rGen)
 
bool IsBuechiClosed(const Generator &rGen)
 
void LoopCallback(bool pBreak(void))
 
bool BuechiLanguageInclusion(const Generator &rGen1, const Generator &rGen2)
 
bool BuechiLanguageEquality(const Generator &rGen1, const Generator &rGen2)
 
bool IsBuechiTrim(const vGenerator &rGen)
 
bool IsBuechiRelativelyClosed(const Generator &rGenPlant, const Generator &rGenCand)
 
std::string ToStringInteger(Int number)
 
bool IsBuechiRelativelyMarked(const Generator &rGenPlant, const Generator &rGenCand)
 
std::string CollapsString(const std::string &rString, unsigned int len)
 
bool IsBuechiRelativelyClosedUnchecked(const Generator &rGenPlant, const Generator &rGenCand)