|
|
Go to the documentation of this file.
2#include "syn_include.h"
3#include "omg_include.h"
13 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...)");
18 rQErr. Name( "ErrorStates");
20 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...): testing completeness");
23 StateSet::Iterator sit=acc. Begin();
24 StateSet::Iterator sit_end=acc. End();
25 for(;sit!=sit_end;sit++){
29 if(tit==tit_end) rQErr. Insert(*sit);
34 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...): not complete");
42 EventSet::Iterator eit_end= rIoSystem. AlphabetEnd();
43 for(; eit != eit_end; ++eit) {
56 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...): not a u-y partition of events");
59 for(; tit!=tit_end; tit++)
64 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...): trivial partition");
68 FD_DIO( "IsIoSystem("<< rIoSystem. Name() << ",...): i/o alternation");
72 for(; sit != sit_end; ++sit) {
76 for(; tit!=tit_end; tit++) {
87 for(; sit != sit_end; ++sit) {
93 while(!todo.empty()) {
94 const Idx current = todo.top();
96 bool uok = rQU. Exists(current);
97 bool yok = rQY. Exists(current);
101 for(; tit!=tit_end; tit++) {
106 if(!uok) rQErr. Insert(current);
110 if(!yok) rQErr. Insert(current);
125 bool res= IsIoSystem(rIoSystem, QU, QY, QErr);
141 FD_DIO( "IsInputLocallyFree("<< rIoSystem. Name() << ",...)");
150 FD_DIO( "IsInputLocallyFree("<< rIoSystem. Name() << ",...)");
153 rQErr. Name( "ErrorStates");
158 StateSet::Iterator sit_end= rIoSystem. StatesEnd();
159 for(; sit != sit_end; ++sit) {
164 for(; tit!=tit_end; tit++)
168 if(lsigu. Empty()) continue;
170 if(lsigu == sigu) continue;
175 return rQErr. Empty();
181 FD_DIO( "IsInputOmegaFree("<< rIoSystem. Name() << ",...)");
190 FD_DIO( "IsInputOmegaFree("<< rIoSystem. Name() << ",...)");
195 FD_DIO( "IsInputOmegaFree("<< rIoSystem. Name() << ",...): failed for locally free");
203 rQErr. Name( "ErrorStates");
208 FD_DIO( "IsInputOmegaFree(...): iterate over good states");
210 StateSet::Iterator sit = rQErr. Begin();
211 while(sit!=rQErr. End()) {
213 StateSet::Iterator cit=sit++;
215 if(goodstates. Exists(*cit)) continue;
220 if(tit==tit_end) continue;
223 for(; tit!=tit_end; ++tit) {
224 if(goodstates. Exists(tit->X2)) { exgood= true; continue; };
225 if(!yalph. Exists(tit->Ev)) break;
228 if(exgood && (tit==tit_end)) {
229 FD_DIO( "IsInputOmegaFree(): ins good state " << rIoSystem. SStr(*cit));
241 FD_DIO( "IsInputOmegaFree(): accessible <= good: passed");
246 FD_DIO( "IsInputOmegaFree(): accessible <= good: failed");
258 FD_DIO( "IoFreeInput("<< rGen. Name() << ",...)");
261 std::stringstream errstr;
262 errstr << "Input alphabet must be contained in generator alphabet";
263 throw Exception( "IoFreeInput(..)", errstr.str(), 100);
269 EventSet::Iterator eit;
270 EventSet::Iterator eit_end;
273 StateSet::Iterator sit_end= rGen. StatesEnd();
274 for(; sit != sit_end; ++sit) {
279 for(; tit!=tit_end; tit++)
282 if(lsigu. Empty()) continue;
284 if(lsigu == rUAlph) continue;
293 for(; eit!=eit_end; eit++) {
302 eit_end=rUAlph. End();
303 for(; eit!=eit_end; eit++)
312 FD_DIO( "RemoveIoDummyStates("<< rIoSystem. Name() << ",...)");
324 StateSet::Iterator sit_end= rIoSystem. StatesEnd();
325 for(; sit != sit_end; ++sit) {
332 for(; tit!=tit_end; tit++) {
333 if(qsuc==0) qsuc=tit->X2;
334 if(qsuc!=tit->X2) { qunique= false; break;}
338 if(!qunique || qsuc==0) continue;
340 if(!(lsig == sigy)) continue;
345 FD_DIO( "RemoveIoDummyStates(): Candidates type 1 " << qerr1. ToString());
346 FD_DIO( "RemoveIoDummyStates(): Candidates type 2 " << qerr2. ToString());
350 sit_end= qerr2. End();
351 for(; sit != sit_end; ++sit) {
358 for(; tit!=tit_end; tit++) {
359 if(qsuc==0) qsuc=tit->X2;
360 if(qsuc!=tit->X2) { qunique= false; break;}
364 if(!qunique) continue;
366 if(!qerr1. Exists(qsuc)) continue;
368 if(!(lsig == sigu)) continue;
372 FD_DIO( "RemoveIoDummyStates(): Candidates type 2 (approved) " << qerr2a. ToString());
377 sit_end= qerr1. End();
378 for(; sit != sit_end; ++sit) {
381 if(tit==tit_end) { qrm1. Insert(*sit); break;}
382 if(!qerr2a. Exists(tit->X2)) { qrm1. Insert(*sit); break;}
386 sit = qerr2a. Begin();
387 sit_end= qerr2a. End();
388 for(; sit != sit_end; ++sit) {
391 if(tit==tit_end) { qrm2. Insert(*sit); break;}
401 for(; sit != sit_end; ++sit)
403 FD_DIO( "RemoveIoDummyStates(): done");
422 FD_DIO( "IoSynthesisClosed");
const std::string & Name(void) const
bool Exists(const Idx &rIndex) const
bool Insert(const Idx &rIndex)
bool InputEvent(Idx index) const
StateSet InputStates(void) const
StateSet OutputStates(void) const
StateSet ErrorStates(void) const
bool OutputEvent(Idx index) const
EventSet OutputEvents(void) const
EventSet InputEvents(void) const
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const
StateSet::Iterator StatesBegin(void) const
StateSet::Iterator InitStatesBegin(void) const
bool SetTransition(Idx x1, Idx ev, Idx x2)
const StateSet & MarkedStates(void) const
const EventSet & Alphabet(void) const
TransSet::Iterator TransRelBegin(void) const
EventSet::Iterator AlphabetBegin(void) const
StateSet AccessibleSet(void) const
StateSet::Iterator StatesEnd(void) const
TransSet::Iterator TransRelEnd(void) const
StateSet::Iterator InitStatesEnd(void) const
EventSet::Iterator AlphabetEnd(void) const
StateSet CoaccessibleSet(void) const
std::string SStr(Idx index) const
bool Exists(const T &rElem) const
Iterator Begin(void) const
virtual bool Erase(const T &rElem)
virtual void EraseSet(const TBaseSet &rOtherSet)
void RemoveIoDummyStates(IoSystem &rIoSystem)
bool IsInputOmegaFree(IoSystem &rIoSystem)
bool IsInputLocallyFree(IoSystem &rIoSystem)
bool IsIoSystem(const IoSystem &rIoSystem, StateSet &rQU, StateSet &rQY, StateSet &rQErr)
void IoFreeInput(IoSystem &rIoSystem)
void SupBuechiCon(const Generator &rPlantGen, const EventSet &rCAlph, const Generator &rSpecGen, Generator &rResGen)
void SupConCmplClosed(const Generator &rPlantGen, const EventSet &rCAlph, const Generator &rSpecGen, Generator &rResGen)
void IoSynthesisClosed(const IoSystem &rPlant, const Generator &rSpec, IoSystem &rSup)
void IoStatePartition(IoSystem &rIoSystem)
void IoSynthesis(const IoSystem &rPlant, const Generator &rSpec, IoSystem &rSup)
libFAUDES 2.33k
--- 2025.09.16
--- c++ api documentaion by doxygen
|