hio_functions.h
Go to the documentation of this file.
1/** @file hio_functions.h Algorithms for hierarchical discrete event systems with inputs and outputs */
2
3/* Hierarchical IO Systems Plug-In for FAU Discrete Event Systems Library (libfaudes)
4
5 Copyright (C) 2006 Sebastian Perk
6 Copyright (C) 2006 Thomas Moor
7 Copyright (C) 2006 Klaus Schmidt
8
9*/
10
11
12#ifndef FAUDES_HIO_FUNCTIONS_H
13#define FAUDES_HIO_FUNCTIONS_H
14
15#include "hio_constraint.h"
16#include "hio_plant.h"
17#include "hio_controller.h"
18#include "hio_environment.h"
19#include "corefaudes.h"
20#include <vector>
21#include <stack>
22#include <map>
23
24namespace faudes {
25
26/**
27 * CompleteClosedSynth: compute supremal complete and
28 * controllable (and closed) sublanguage.
29 * Computes the supremal complete and
30 * controllable (and closed) sublanguage of the
31 * language generated by rSpec wrt the language
32 * generated by rPlant and the controllable events
33 * rCalph.
34 * Method: iteration of SupCon() and erasing of dead
35 * states found by IsComplete until a fix point is
36 * reached.
37 * Leads to maximal solution as shown in:
38 * Kumar, Garg, Marcus. "On Supervisory Control of
39 * sequential behaviors" IEEE Transactions On
40 * Automatic Control, Vol. 37, 1992, pp. 1978-1985
41 *
42 * More concise version SupConCmplClosed() is provided
43 * with the synthesis plig-in.
44 *
45 * @param rPlant
46 * plant generator
47 * @param rCAlph
48 * controllable events
49 * @param rSpec
50 * specification generator
51 * @param rClosedLoop
52 * reference to result
53 *
54 * @return
55 * success (true) for nonempty result
56 *
57 * @exception Exception
58 * - see exceptions of SupCon()
59 *
60 * @ingroup hiosysplugin
61 */
62
64 const Generator& rPlant,
65 const EventSet rCAlph,
66 const Generator& rSpec,
67 Generator& rClosedLoop);
68
69/**
70 * NormalCompleteClosedSynth: compute normal, complete
71 * and controllable (and closed) sublanguage.
72 * Computes the supremal normal, complete and
73 * controllable (and closed) sublanguage of the
74 * language generated by rSpec wrt the language
75 * generated by rPlant, the controllable events
76 * rCalph and the observable events rOAlph.
77 * Method: iteration of CompleteClosedSynth() and SupNorm()
78 * until a fix point is reached.
79 * Note: Supremality (if existent at all) has not yet been
80 * considered. The proof of existence and construction
81 * of both
82 * -the supremal normal and complete sublanguage and
83 * -the supremal normal and controllable sublanguage
84 * can be found in literature, which gives reason for
85 * hope.
86 *
87 * @param rPlant
88 * plant generator
89 * @param rCAlph
90 * controllable events
91 * @param rOAlph
92 * observable events
93 * @param rSpec
94 * specification generator
95 * @param rClosedLoop
96 * reference to result
97 *
98 * @return
99 * success (true) for nonempty closed loop language
100 *
101 * @exception Exception
102 * - see exceptions of SupCon() and SupNorm()
103 *
104 * @ingroup hiosysplugin
105 *
106 */
107
109 Generator& rPlant,
110 const EventSet& rCAlph,
111 const EventSet& rOAlph,
112 const Generator& rSpec,
113 Generator& rClosedLoop);
114
115/**
116 * NormalCompleteSynth: compute normal, complete,
117 * controllable and nonblocking sublanguage.
118 * Computes a normal, complete, controllable and
119 * nonblocking (and closed) sublanguage of
120 * of the language marked by rSpec wrt the language
121 * marked by rPlant, the controllable events
122 * rCalph and the observable events rOAlph.
123 * Method: iteration of CompleteSynth(), SupNorm()
124 * and Trim() until a fix point is reached.
125 * Note: Supremality (if existent at all) has not yet been
126 * considered.
127 *
128 * @param rPlant
129 * plant generator
130 * @param rCAlph
131 * controllable events
132 * @param rOAlph
133 * observable events
134 * @param rSpec
135 * specification generator
136 * @param rClosedLoop
137 * reference to result
138 *
139 * @return
140 * success (true) for nonempty closed loop language
141 *
142 * @exception Exception
143 * - see exceptions of SupCon() and SupNorm()
144 *
145 * @ingroup hiosysplugin
146 *
147 */
149 Generator& rPlant,
150 const EventSet& rCAlph,
151 const EventSet& rOAlph,
152 const Generator& rSpec,
153 Generator& rClosedLoop);
154
155/**
156 * IoSortCL: returns IO-sorting structure required
157 * for closed loops. This structure is the prefix closure of
158 * the language structure [(Yp(Up+YcUcUp))*(YeUe)*]*
159 *
160 * @param rYc
161 * alphabet Yc
162 * @param rUc
163 * alphabet Uc
164 * @param rYp
165 * alphabet Yp
166 * @param rUp
167 * alphabet Up
168 * @param rYe
169 * alphabet Ye
170 * @param rUe
171 * alphabet Ue
172 *
173 * @return
174 * IO-sorting language generator
175 *
176 * @exception Exception
177 * - empty parameter(s) (id 0)
178 * - non-disjoint parameters (id 0)
179 *
180 * @ingroup hiosysplugin
181 *
182 */
183
185 const EventSet& rYc,
186 const EventSet& rUc,
187 const EventSet& rYp,
188 const EventSet& rUp,
189 const EventSet& rYe,
190 const EventSet& rUe);
191
192/**
193 * HioFreeInput: extend generator by obviously missing
194 * input transitions. States of the generator in which a
195 * strict but nonempty subset of the alphabet Input is active
196 * are extended by transitions to an error state (ErrState1,
197 * flag Err) such that now the whole Input alphabet is active in
198 * that state. If the alphabet Output is nonempty, an error
199 * behaviour (Output Input)* is concatenated to the error state
200 * using a second error state (ErrState2, flag Err).
201 * Note that this method only helps making the input free in an
202 * hio system but does not guarantee a free input.
203 * Method: the transition relation of all states with at least
204 * one active AND at least one inactive Input-event is
205 * extended by transitions such that formerly inactive Input-
206 * events lead to the first error state in the result. If the
207 * parameter Output is nonempty, transitions with all
208 * Output-events from first error state to the second error
209 * state, and transitions with all Input-events back to the
210 * first error state are inserted.
211 * Note: states with NO active Input-event are ignored.
212 *
213 * @param rGen
214 * generator
215 * @param rInput
216 * alphabet Input
217 * @param rOutput
218 * alphabet Output
219 * @param rResGen
220 * reference to extended generator (result)
221 * @param rErrState1
222 * symbolic name of first error state; ignored if not
223 * rGen.StateNamesEnabled()
224 * @param rErrState2
225 * symbolic name of second error state; ignored if not
226 * rGen.StateNamesEnabled()
227 * @param rErrState1Idx
228 * index of first error state (result)
229 * @param rErrState2Idx
230 * index of second error state if inserted (result)
231 *
232 * @exception Exception
233 * - empty Input-alphabet or non-disjoint Input and Output (id 0)
234 *
235 * @ingroup hiosysplugin
236 *
237 */
238
239extern FAUDES_API void HioFreeInput(
240 const Generator& rGen,
241 const EventSet& rInput,
242 const EventSet& rOutput,
243 Generator& rResGen,
244 const std::string& rErrState1,
245 const std::string& rErrState2,
246 Idx& rErrState1Idx,
247 Idx& rErrState2Idx);
248
249/**
250 * HioFreeInput: extend generator by obviously missing
251 * input transitions. States of the generator in which a
252 * strict but nonempty subset of the alphabet Input is active
253 * are extended by transitions to an error state (ErrState1,
254 * flag Err) such that now the whole Input alphabet is active in
255 * that state. If the alphabet Output is nonempty, an error
256 * behaviour (Output Input)* is concatenated to the error state
257 * using a second error state (ErrState2, flag Err).
258 * Note that this method only helps making the input free in an
259 * hio system but does not guarantee a free input.
260 * Method: the transition relation of all states with at least
261 * one active AND at least one inactive Input-event is
262 * extended by transitions such that formerly inactive Input-
263 * events lead to the first error state in the result. If the
264 * parameter Output is nonempty, transitions with all
265 * Output-events from first error state to the second error
266 * state, and transitions with all Input-events back to the
267 * first error state are inserted.
268 * Note: states with NO active Input-event are ignored.
269 *
270 * @param rGen
271 * generator
272 * @param rInput
273 * alphabet Input
274 * @param rOutput
275 * alphabet Output
276 * @param rResGen
277 * reference to extended generator (result)
278 * @param rErrState1
279 * symbolic name of first error state; ignored if not
280 * rGen.StateNamesEnabled()
281 * @param rErrState2
282 * symbolic name of second error state; ignored if not
283 * rGen.StateNamesEnabled()
284 *
285 * @exception Exception
286 * - empty Input-alphabet or non-disjoint Input and Output (id 0)
287 *
288 * @ingroup hiosysplugin
289 *
290 */
291
292extern FAUDES_API void HioFreeInput(
293 const Generator& rGen,
294 const EventSet& rInput,
295 const EventSet& rOutput,
296 Generator& rResGen,
297 const std::string& rErrState1,
298 const std::string& rErrState2);
299
300/**
301 * HioFreeInput: extend generator by obviously missing
302 * input transitions. States of the generator in which a
303 * strict but nonempty subset of the alphabet Input is active
304 * are extended by transitions to an error state (flag Err)
305 * such that now the whole Input alphabet is active in
306 * that state. If the alphabet Output is nonempty, an error
307 * behaviour (Output Input)* is concatenated to the error state
308 * using a second error state (flag Err).
309 * Note that this method only helps making the input free in an
310 * hio system but does not guarantee a free input.
311 * Method: the transition relation of all states with at least
312 * one active AND at least one inactive Input-event is
313 * extended by transitions such that formerly inactive Input-
314 * events lead to the first error state in the result. If the
315 * parameter Output is nonempty, transitions with all
316 * Output-events from first error state to the second error
317 * state, and transitions with all Input-events back to the
318 * first error state are inserted.
319 * Note: states with NO active Input-event are ignored.
320 *
321 * @param rGen
322 * generator
323 * @param rInput
324 * alphabet Input
325 * @param rOutput
326 * alphabet Output
327 * @param rResGen
328 * reference to extended generator (result)
329 *
330 * @exception Exception
331 * - empty Input-alphabet or non-disjoint Input and Output (id 0)
332 *
333 * @ingroup hiosysplugin
334 *
335 */
336extern FAUDES_API void HioFreeInput(
337 const Generator& rGen,
338 const EventSet& rInput,
339 const EventSet& rOutput,
340 Generator& rResGen);
341
342/**
343 * HioFreeInput: extend HioPlant by obviously missing
344 * input transitions. States of the HioPlant in which a
345 * strict but nonempty subset of the Up- or Ue-alphabet is active
346 * are extended by transitions to an error state such that
347 * now the whole Up- or Ue-alphabet is active in that state.
348 * Note that this method only helps making the input free in an
349 * hio system but does not guarantee a free input.
350 * Method: the transition relation of all states with at least
351 * one active AND at least one inactive Up- or Ue-event is
352 * extended by transitions such that formerly inactive Up- or Ue-
353 * events lead to the Up- or Ue-error state in the result.
354 * Note: states with NO active Up- or Ue-event are ignored.
355 *
356 * @param rPlant
357 * HioPlant
358 * @param rResPlant
359 * reference to extended HioPlant (result)
360 *
361 * @ingroup hiosysplugin
362 *
363 */
364extern FAUDES_API void HioFreeInput(
365 const HioPlant& rPlant,
366 HioPlant& rResPlant);
367
368/**
369 * HioFreeInput: extend HioController by obviously missing
370 * input transitions. States of the HioController in which a
371 * strict but nonempty subset of the Uc- or Yp-alphabet is active
372 * are extended by transitions to an error state such that
373 * now the whole Uc- or Yp-alphabet is active in that state. To
374 * avoid an additional deadlock violating completeness, an error
375 * behaviour (Up Yp)* is concatenated to the error state
376 * using a second error state.
377 * Note that this method only helps making the input free in an
378 * hio system but does not guarantee a free input.
379 * Method: the transition relation of all states with at least
380 * one active AND at least one inactive Uc- or Yp-event is
381 * events lead to the Uc- or Yp-error state in the result.
382 * For each Up-event, a transition to a second error state, and
383 * for each Yp-event, a transition from the second to the first
384 * error state is inserted to realise the error behaviour.
385 * Note: states with NO active Uc- or Yp-event are ignored.
386 *
387 * @param rController
388 * HioController
389 * @param rResController
390 * reference to extended HioController (result)
391 *
392 * @ingroup hiosysplugin
393 *
394 */
395extern FAUDES_API void HioFreeInput(
396 const HioController& rController,
397 HioController& rResController);
398
399/**
400 * HioFreeInput: extend HioEnvironment by obviously missing
401 * input transitions. States of the HioEnvironment in which a
402 * strict but nonempty subset of the Ul- or Ye-alphabet is active
403 * are extended by transitions to an error state such that
404 * now the whole Ul- or Ye-alphabet is active in that state.To
405 * avoid an additional deadlock violating completeness, an error
406 * behaviour (Ue Ye)* is concatenated to the error state
407 * using a second error state.
408 * Note that this method only helps making the input free in an
409 * hio system but does not guarantee a free input.
410 * Method: the transition relation of all states with at least
411 * one active AND at least one inactive Ul- or Ye-event is
412 * events lead to the Ul- or Ye-error state in the result.
413 * For each Ue-event, a transition to a second error state, and
414 * for each Ye-event, a transition from the second to the first
415 * error state is inserted to realise the error behaviour.
416 * Note: states with NO active Ul- or Ye-event are ignored.
417 *
418 * @param rEnvironment
419 * HioEnvironment
420 * @param rResEnvironment
421 * reference to extended HioEnvironment (result)
422 *
423 * @ingroup hiosysplugin
424 *
425 */
426extern FAUDES_API void HioFreeInput(
427 const HioEnvironment& rEnvironment,
428 HioEnvironment& rResEnvironment);
429
430/**
431 * HioFreeInput: extend HioConstraint by obviously missing
432 * input transitions. States of the HioConstraint in which a
433 * strict but nonempty subset of the U-alphabet is active
434 * are extended by transitions to an error state such that
435 * now the whole U-alphabet is active in that state.To
436 * avoid an additional deadlock violating completeness, an error
437 * behaviour (U Y)* is concatenated to the error state
438 * using a second error state.
439 * Note that this method only helps making the input free in an
440 * hio system but does not guarantee a free input.
441 * Method: the transition relation of all states with at least
442 * one active AND at least one inactive U-event is
443 * events lead to the U-error state in the result.
444 * For each U-event, a transition to a second error state, and
445 * for each Y-event, a transition from the second to the first
446 * error state is inserted to realise the error behaviour.
447 * Note: states with NO active U-event are ignored.
448 *
449 * @param rConstraint
450 * HioConstraint
451 * @param rResConstraint
452 * reference to extended HioConstraint (result)
453 *
454 * @ingroup hiosysplugin
455 *
456 */
457extern FAUDES_API void HioFreeInput(
458 const HioConstraint& rConstraint,
459 HioConstraint& rResConstraint);
460
461/**
462 * HioFreeInput: convenience interface to faudes::HioFreeInput(const HioPlant&, HioPlant)
463 *
464 * @param rPlant
465 * HioPlant
466 * @ingroup hiosysplugin
467 *
468 */
469extern FAUDES_API void HioFreeInput(HioPlant& rPlant);
470
471/**
472 * HioFreeInput: convenience interface to faudes::HioFreeInput(const HioController&, HioController)
473 *
474 * @param rController
475 * HioController
476 * @ingroup hiosysplugin
477 *
478 */
479extern FAUDES_API void HioFreeInput(HioController& rController);
480
481/**
482 * HioFreeInput: convenience interface to faudes::HioFreeInput(const HioEnvironment&, HioEnvironment)
483 *
484 * @param rEnvironment
485 * HioEnvironment
486 * @ingroup hiosysplugin
487 *
488 */
489extern FAUDES_API void HioFreeInput(HioEnvironment& rEnvironment);
490
491/**
492 * HioFreeInput: convenience interface to faudes::HioFreeInput(const HioConstraint&, HioConstraint)
493 *
494 * @param rConstraint
495 * HioConstraint
496 * @ingroup hiosysplugin
497 *
498 */
499extern FAUDES_API void HioFreeInput(HioConstraint& rConstraint);
500
501
502//**********************************************************
503//******************** IO-shuffle ************************
504//**********************************************************
505
506/**
507 * MarkHioShuffle: marking rule for HioShuffle() in case of
508 * marked parameters rGen1 and rGen2 - UNDER CONSTRUCTION.
509 *
510 * Method:
511 * Strings ending with events from rGen1 are marked according
512 * to rGen1, strings ending with events from rGen2 are marked
513 * according to rGen2.
514 *
515 * @param rGen1
516 * First generator
517 * @param rGen2
518 * Second generator
519 * @param rReverseCompositionMap
520 * map from rGen1 and rGen2 state indeces to respective
521 * state indeces of result
522 * @param rShuffle
523 * Shuffle of rGen1 and rGen2 that shall receive marking
524 *
525 * @ingroup hiosysplugin
526 *
527 */
528extern FAUDES_API void MarkHioShuffle(
529 const Generator& rGen1,
530 const Generator& rGen2,
531 const std::map< std::pair<Idx,Idx>, Idx >& rReverseCompositionMap,
532 Generator& rShuffle);
533
534/**
535 * CheapAltAnB: returns Generator of the following
536 * specification: "After a maximum of n (=depth) pairs of
537 * A-transitions, a B-transition has to occur!".
538 *
539 * @param rAset
540 * alphabet A
541 * @param rBset
542 * alphabet B
543 * @param Depth
544 * depth of alternation
545 * @param rAltAnB
546 * generator of AnB-specification
547 *
548 * @exception Exception
549 * - n less than 1 (id 0)
550 * - rAset empty (id 0)
551 * - rBset empty (id 0)
552 *
553 * @ingroup hiosysplugin
554 *
555 */
556extern FAUDES_API void CheapAltAnB(
557 const EventSet rAset,
558 const EventSet rBset,
559 const int Depth,
560 Generator& rAltAnB);
561
562/**
563 * CheapAltAB: returns Generator of the following
564 * specification: "After a maximum of n (=depth) pairs of
565 * A-transitions, a B-transition has to occur and vice-versa!".
566 *
567 * @param rAset
568 * alphabet A
569 * @param rBset
570 * alphabet B
571 * @param Depth
572 * depth of alternation
573 * @param rAltAB
574 * generator of AB-specification
575 *
576 * @exception Exception
577 * - n less than 1 (id 0)
578 * - rAset empty (id 0)
579 * - rBset empty (id 0)
580 *
581 * @ingroup hiosysplugin
582 *
583 */
584extern FAUDES_API void CheapAltAB(
585 const EventSet rAset,
586 const EventSet rBset,
587 const int Depth,
588 Generator& rAltAB);
589
590/**
591 * MarkAlternationAB: returns Generator marking the
592 * alternation of Aset-transitions with Bset-transitions.
593 * More docu will be provided soon.
594 *
595 * @param rAset
596 * alphabet A
597 * @param rBset
598 * alphabet B
599 * @param rAltAB
600 * recognizer of AB-alternation
601 *
602 * @exception Exception
603 * - rAset empty (id 0)
604 * - rBset empty (id 0)
605 *
606 * @ingroup hiosysplugin
607 *
608 */
609extern FAUDES_API void MarkAlternationAB(
610 const EventSet rAset,
611 const EventSet rBset,
612 Generator& rAltAB);
613
614/**
615 * HioShuffleUnchecked: IO-shuffle of rPlantA and rPlantB
616 * according to definition, no parameter check. Moreover: marking
617 * of alternation according to MarkAlternationAB().
618 *
619 * TODO: 'checked' version
620 *
621 * @param rPlantA
622 * plant A generator
623 * @param rPlantB
624 * plant B generator
625 * @param rYp
626 * alphabet Yp
627 * @param rUp
628 * alphabet Up
629 * @param rYe
630 * alphabet Ye
631 * @param rUe
632 * alphabet Ue
633 * @param rIOShuffAB
634 * reference to I/O-shuffle generator
635 *
636 * @ingroup hiosysplugin
637 *
638 */
640 const Generator& rPlantA,
641 const Generator& rPlantB,
642 const EventSet& rYp,
643 const EventSet& rUp,
644 const EventSet& rYe,
645 const EventSet& rUe,
646 Generator& rIOShuffAB);
647
648/**
649 * HioShuffle: IO-shuffle of rPlantA and rPlantB according
650 * to definition. Moreover: marking of alternation
651 * according to MarkAlternationAB().
652 *
653 *
654 * @param rPlantA
655 * plant A generator
656 * @param rPlantB
657 * plant B generator
658 * @param rYp
659 * alphabet Yp
660 * @param rUp
661 * alphabet Up
662 * @param rYe
663 * alphabet Ye
664 * @param rUe
665 * alphabet Ue
666 * @param rIOShuffAB
667 * reference to I/O-shuffle generator
668 *
669 * @exception Exception
670 * - empty or non-disjoint alphabets rYp, rUp, rYe, rUe (id 0).
671 * - plant A or plant B not in HioPlantForm (id 0).
672 *
673 * @ingroup hiosysplugin
674 *
675 */
676extern FAUDES_API void HioShuffle(
677 const Generator& rPlantA,
678 const Generator& rPlantB,
679 const EventSet& rYp,
680 const EventSet& rUp,
681 const EventSet& rYe,
682 const EventSet& rUe,
683 Generator& rIOShuffAB);
684
685/**
686 * HioShuffle: IO-shuffle of rPlantA and rPlantB according
687 * to definition. Moreover: alternation of depth
688 * Depth (see CheapAltAB()) between A- and B-events (no
689 * alternation for Depth=1) and marking of alternation
690 * according to MarkAlternationAB().
691 *
692 * @param rPlantA
693 * HioPlant A
694 * @param rPlantB
695 * HioPlant B
696 * @param rIOShuffAB
697 * reference to composed HioPlant
698 *
699 * @exception Exception
700 * - todo...
701 *
702 * @ingroup hiosysplugin
703 *
704 */
705extern FAUDES_API void HioShuffle(
706 const HioPlant& rPlantA,
707 const HioPlant& rPlantB,
708 HioPlant& rIOShuffAB);
709
710//******************** old version: no marking, forced alternation ************************
711/**
712 * HioShuffleTU: IO-shuffle of rPlantA and rPlantB according
713 * to definition with additional forced alternation of depth
714 * Depth (see CheapAltAB()) between A- and B-events.
715 * -> frozen version for transport unit example
716 *
717 * @param rPlantA
718 * plant A generator
719 * @param rPlantB
720 * plant B generator
721 * @param rYp
722 * alphabet Yp
723 * @param rUp
724 * alphabet Up
725 * @param rYe
726 * alphabet Ye
727 * @param rUe
728 * alphabet Ue
729 * @param Depth
730 * depth of alternation
731 * @param rIOShuffAB
732 * reference to I/O-shuffle generator
733 *
734 * @exception Exception
735 * - todo...
736 *
737 * @ingroup hiosysplugin
738 *
739 */
740extern FAUDES_API void HioShuffleTU(
741 const Generator& rPlantA,
742 const Generator& rPlantB,
743 const EventSet& rYp,
744 const EventSet& rUp,
745 const EventSet& rYe,
746 const EventSet& rUe,
747 const int Depth,
748 Generator& rIOShuffAB);
749
750//**********************************************************
751//******************** Cycles ************************
752//**********************************************************
753
754/**
755 * SearchYclessSCC: Search for strongly connected ycless
756 * components (YC-less SCC's). This function partitions the
757 * stateset of a generator into equivalent classes such that
758 * states x1 and x2 are equivalent iff there is a ycless
759 * path from x1 to x2 and a ycless path from x2 to x1.
760 * "Trivial" SCC's consisting of one state without non-Yc-
761 * selfloop are omitted, SCC's consisting exclusively of
762 * unmarked states are stored in rUnMarkedSccSet; all OTHER
763 * SCC's are collected in rSccSet. Their roots (i.e. that
764 * state of each SCC that has been visited first during depth
765 * first search of the generator) are collected in rRoots.
766 * This function is built on the algorithm based on a depth
767 * first search presented in:
768 * "Aho, Hopcroft, Ullman:
769 * The Design and Analysis of Computer Algorithms"
770 * Most of the comments in this function have been literally
771 * taken from this book!
772 * An api with generator and Yc-events as input parameters
773 * and the set of YC-less SCC's as output parameters is
774 * provided right below this method.
775 *
776 * @param state
777 * State, from which the current recursion is started.
778 * @param rcount
779 * Denotes the current depth of the recursion.
780 * @param rGen
781 * investigated generator
782 * @param rYc
783 * alphabet Yc
784 * @param UnMarkedOnly
785 * if set true, being unmarked is an additional condition for equivalence of states
786 * @param rNewStates
787 * Set of states that up to now were not found by the
788 * depth first search.
789 * @param rSTACK
790 * Stack of state indeces.
791 * @param rStackStates
792 * Set of states whose indeces are on STACK.
793 * @param rDFN
794 * Map assigning to each state idx its Depth-First Number.
795 * @param rLOWLINK
796 * Map assigning to each state its LOWLINK Number.
797 * @param rSccSet
798 * Set of YC-less strongly connected components (result).
799 * @param rRoots
800 * Set of states that each are root of some SCC (result).
801 *
802 * @exception Exception
803 * - todo...
804 *
805 * @ingroup hiosysplugin
806 *
807 */
808extern FAUDES_API void SearchYclessScc(
809 const Idx state,
810 int& rcount, // why is this a ref?
811 const Generator& rGen,
812 const EventSet& rYc,
813 const bool UnMarkedOnly,
814 StateSet& rNewStates,
815 std::stack<Idx>& rSTACK,
816 StateSet& rStackStates,
817 std::map<const Idx, int>& rDFN,
818 std::map<const Idx, int>& rLOWLINK,
819 std::set<StateSet>& rSccSet,
820 StateSet& rRoots);
821
822/**
823 * YclessSCC: Search for strongly connected ycless
824 * components (YC-less SCC's) - convenience api. See
825 * SearchYclessSCC() for docu.
826 *
827 * @param rGen
828 * investigated generator
829 * @param rYc
830 * alphabet Yc
831 * @param rSccSet
832 * Set of YC-less strongly connected components (result).
833 * @param rRoots
834 * Set of states that each are root of some SCC (result).
835 *
836 * @return
837 * true if YclessSCC's have been found, false if not.
838 *
839 * @exception Exception
840 * - todo...
841 *
842 * @ingroup hiosysplugin
843 *
844 */
845extern FAUDES_API bool YclessScc(
846 const Generator& rGen,
847 const EventSet& rYc,
848 std::set<StateSet>& rSccSet,
849 StateSet& rRoots);
850
851
852/**
853 * YclessUnmarkedSCC: Search for strongly connected ycless
854 * components (YC-less SCC's) consisting of unmarked states only.
855 * Uses SearchYclessSCC().
856 *
857 * @param rGen
858 * investigated generator
859 * @param rYc
860 * alphabet Yc
861 * @param rSccSet
862 * Set of unmarked YC-less strongly connected components (result).
863 * @param rRoots
864 * Set of states that each are root of some SCC (result).
865 *
866 * @return
867 * true if unmarked YclessSCC's have been found, false if not.
868 *
869 * @exception Exception
870 * - todo...
871 *
872 * @ingroup hiosysplugin
873 *
874 */
875extern FAUDES_API bool YclessUnmarkedScc(
876 const Generator& rGen,
877 const EventSet& rYc,
878 std::set<StateSet>& rSccSet,
879 StateSet& rRoots);
880
881/**
882 * YclessSCC: Search for strongly connected ycless
883 * components (YC-less SCC's) - convenience api. See
884 * SearchYclessSCC() for docu.
885 *
886 * @param rGen
887 * investigated generator
888 * @param rYc
889 * alphabet Yc
890 * @param rSccSet
891 * Set of YC-less strongly connected components (result).
892 *
893 * @return
894 * true if YclessSCC's have been found, false if not.
895 *
896 * @exception Exception
897 * - todo...
898 *
899 * @ingroup hiosysplugin
900 *
901 */
903 const Generator& rGen,
904 const EventSet& rYc,
905 std::set<StateSet>& rSccSet);
906
907/**
908 * IsYcLive: This function checks if generator is Yc-live.
909 * Method: using YclessSCC(), the function checks if no Yc-less
910 * SCC is found.
911 *
912 * @param rGen
913 * investigated generator
914 * @param rYc
915 * alphabet Yc
916 *
917 * @return
918 * true if Generator is YcLive.
919 *
920 * @exception Exception
921 * - todo...
922 *
923 * @ingroup hiosysplugin
924 *
925 */
926extern FAUDES_API bool IsYcLive(
927 const Generator& rGen,
928 const EventSet& rYc);
929
930/**
931 * WriteStateSets: Write set of StateSet's to console (indeces).
932 * Useful to output partitions over statesets like e.g. the
933 * set of strongly connected components. Also serves as
934 * template for walkthrough through each state of a set of
935 * statesets.
936 *
937 * @param rStateSets
938 * Reference to set of StateSets (result).
939 *
940 * @exception Exception
941 * - todo?
942 *
943 * @ingroup hiosysplugin
944 *
945 */
946extern FAUDES_API void WriteStateSets(
947 const std::set<StateSet>& rStateSets);
948
949/**
950 * WriteStateSets: Write set of StateSet's to console (symbolic
951 * state names taken from rGen).
952 * Useful to output partitions over statesets like e.g. the
953 * set of strongly connected components. Also serves as
954 * template for walkthrough through each state of a set of
955 * statesets.
956 *
957 * @param rGen
958 * Generator holding symbolic state names.
959 * @param rStateSets
960 * Reference to set of StateSets (result).
961 *
962 * @exception Exception
963 * - todo?
964 *
965 * @ingroup hiosysplugin
966 *
967 */
968extern FAUDES_API void WriteStateSets(
969 const Generator& rGen,
970 const std::set<StateSet>& rStateSets);
971
972/**
973 * SCCEntries: figure entry states and entry transitions of
974 * strongly connected components rSccSet of rGen. Entry
975 * states are the set of states of the SCC that are initial
976 * state or direct successor of some state not belonging to
977 * this SCC (i.e. belonging to a different or no SCC). Entry
978 * transitions are the set of respective transitions leading
979 * to an entrystate of some SCC from a state not belonging
980 * to this SCC.
981 *
982 * @param rGen
983 * generator holding SCC's of rSccSet
984 * @param rSccSet
985 * generator holding SCC's of rSccSet
986 * @param rEntryStates
987 * reference to set of entry states of all SCC's (result)
988 * @param rEntryTransSet
989 * reference to set of entry transitions, sorted by X2
990 * (result)
991 *
992 * @exception Exception
993 * - todo: if FAUDES_CHECKED: check if elements of rSccSet
994 * are all subsets of StateSet of rGen.
995 *
996 * @ingroup hiosysplugin
997 *
998 */
999extern FAUDES_API void SccEntries(
1000 const Generator& rGen,
1001 const std::set<StateSet>& rSccSet,
1002 StateSet& rEntryStates,
1003 TransSetX2EvX1& rEntryTransSet);
1004
1005/**
1006 * cloneSCC: makes a copy (clone) of strongly connected
1007 * component (rSCC) of the generator and moves all
1008 * transitions leading to some entry state EntryState of
1009 * this SCC to the copy of EntryState. If this is carried
1010 * out for n-1 of all n entry states of the SCC, then, in
1011 * the generator, this one SCC is transformed into n SCC's
1012 * with one unique entry state each.
1013 * The set of SCC's is extended by the clone-SCC. The set of
1014 * entry states is extended by the (unique) entry state of
1015 * the clone-SCC.
1016 * Note: all added states are equivalent to some state in
1017 * the original generator, the behaviour is not changed.
1018 * The basic idea of this algorithm id taken from
1019 * [Jeron,Marchand,Rusu,Tschaen] "Ensuring the conformance
1020 * of reactive discrete-event systems using supervisory
1021 * control" (CDC'03)
1022 * todo: check const parameters
1023 *
1024 * @param rGen
1025 * generator holding SCC's of rSccSet
1026 * @param rScc
1027 * SCC of rGen that is to be cloned // Perk: check if idx of rSccSet is better?
1028 * @param rSccSet
1029 * set of all SCC's of rGen
1030 * @param EntryState
1031 * one of the entry states of this SCC
1032 * @param rEntryStates
1033 * set of entry states of this SCC
1034 * @param rEntryTransSet
1035 * set of respective transitions to the entry states,
1036 * sorted by X2
1037 *
1038 * @exception Exception
1039 * - todo: exceptions, e.g. for rEntryState not subset of
1040 * rEntryStates not subset of rScc not element of rSccSet,
1041 * elements of rSccSet not subset of rGen.States() etc.
1042 *
1043 * @ingroup hiosysplugin
1044 *
1045 */
1046
1047extern FAUDES_API void CloneScc(
1048 Generator& rGen,
1049 const StateSet& rScc,
1050 std::set<StateSet>& rSccSet,
1051 const Idx EntryState,
1052 StateSet& rEntryStates,
1053 TransSetX2EvX1& rEntryTransSet);
1054
1055/**
1056 * CloneUnMarkedSCC: makes a copy (clone) of strongly connected
1057 * unmarked component (rSCC) of rGen.
1058 *
1059 * @ingroup hiosysplugin
1060*/
1061
1062extern FAUDES_API void CloneUnMarkedScc(
1063 Generator& rGen,
1064 const StateSet& rScc,
1065 const Idx EntryState,
1066 const StateSet& rEntryStates,
1067 TransSetX2EvX1& rEntryTransSet);
1068
1069/**
1070 * YcAcyclic: Computes the supremal(?) Yc-acyclic
1071 * sublanguage of L(Gen). Procedure:
1072 * 1) Find Yc-less SCC's with YclessScc(...)
1073 * 2) transform SCC's with n entry states to n SCC's with
1074 * one unique entry state.
1075 * 3) erase transitions leading from a state of some SCC to
1076 * the entry state of this SCC's.
1077 * 4) repeat 1)-3) until no more Yc-less SCC is found, i.e.
1078 * rResGen generates the supremal YcAcyclic sublanguage of
1079 * the language generated by rGen.
1080 *
1081 * @param rGen
1082 * input generator
1083 * @param rYc
1084 * alphabet Yc
1085 * @param rResGen
1086 * generator of supremal YcAcyclic sublanguage
1087 *
1088 * @exception Exception
1089 * - todo: rYc must be subset of rGen.Alphabet()
1090 *
1091 * @ingroup hiosysplugin
1092 *
1093*/
1094extern FAUDES_API void YcAcyclic(
1095 const Generator& rGen,
1096 const EventSet& rYc,
1097 Generator& rResGen);
1098
1099//**********************************************************
1100//******************** hio synthesis ************************
1101//**********************************************************
1102
1103/**
1104 * ConstrSynth_Beta: compute operator constraint Sp for plant under
1105 * environment constraint Sl such that plant is complete & Yp-live wrt
1106* both constraints - Beta Version. Plant can be individual or
1107 * composed, ie Plant=Lpe || Le, or Plant=Lpe1 ||io Lpe2 || Lel || Ll,
1108 * ie composition of plant and envconstr, or composition of HioShuffle
1109 * of two plants with environment and envconstr.
1110 * Parameter rLocConstr is optional and may contain environment
1111 * constraints for Lpe1 and Lpe2; rOpConstraint is computed such that
1112 * rLocConstr is met under rOpConstraint.
1113 * More and better docu will follow in future version.
1114 *
1115 * @param rPlant
1116 * model of plant under environment constraint.
1117 * @param rYp
1118 * alphabet YP
1119 * @param rUp
1120 * alphabet UP
1121 * @param rLocConstr
1122 * reference to optional local constraints
1123 * @param rOpConstraint
1124 * reference to operator constraint
1125 *
1126 * @ingroup hiosysplugin
1127 *
1128*/
1129extern FAUDES_API void ConstrSynth_Beta(
1130 Generator& rPlant,
1131 const EventSet& rYp,
1132 const EventSet& rUp,
1133 const Generator& rLocConstr,
1134 Generator& rOpConstraint);
1135
1136/**
1137 * HioSynthUnchecked: I/O controller synthesis procedure, no
1138 * parameter check. Main hio synthesis algorithm suitable for both
1139 * the monolithic and the hierarchical case, see also respective api's
1140 * HioSynth(with parameter check), HioSynthMonolithic and
1141 * HioSynthHierarchical. The result rController realises a solution to
1142 * the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).
1143 *
1144 * @param rPlant
1145 * plant model generator:
1146 * - monolithic case: I/O plant to be controlled;
1147 * - hierarchical case: parallel composition of group
1148 * (I/O-shuffle) of n I/O plants S_PEi (or their
1149 * abstractions) with the environment model S_EL for
1150 * this group.
1151 * @param rSpec
1152 * generator of desired behaviour of the external closed
1153 * loop over alphabet SigmaCE. Must be in I/O plant form.
1154 * @param rConstr
1155 * external constraint that may be assumed:
1156 * - monolithic case: composition of constraints S_C and
1157 * S_E
1158 * - hierarchical case: composition of constraints S_C and
1159 * S_L
1160 * @param rLocConstr
1161 * internal constraint that has to be achieved by the I/O
1162 * controller for the closed loop:
1163 * - monolithic case: generator of constraint S_P
1164 * - hierarchical case: parallel composition of
1165 * constraints S_Pi and S_Ei
1166 * @param rYc
1167 * alphabet YC
1168 * @param rUc
1169 * alphabet UC
1170 * @param rYp
1171 * alphabet YP
1172 * @param rUp
1173 * alphabet UP
1174 * @param rYel
1175 * monolithic: alphabet YE, hierarchical: alphabet YL
1176 * @param rUel
1177 * monolithic: alphabet UE, hierarchical: alphabet UL
1178 * @param rController
1179 * reference to I/O controller(result)
1180 *
1181 * @ingroup hiosysplugin
1182 *
1183*/
1184extern FAUDES_API void HioSynthUnchecked(
1185 const Generator& rPlant,
1186 const Generator& rSpec,
1187 const Generator& rConstr,
1188 const Generator& rLocConstr,
1189 const EventSet& rYc,
1190 const EventSet& rUc,
1191 const EventSet& rYp,
1192 const EventSet& rUp,
1193 const EventSet& rYel,
1194 const EventSet& rUel,
1195 Generator& rController);
1196
1197/**
1198 * HioSynthUnchecked: I/O controller synthesis procedure.
1199 * Main hio synthesis algorithm suitable for both
1200 * the monolithic and the hierarchical case, see also respective api's
1201 * HioSynthMonolithic and HioSynthHierarchical.
1202 * The result rController realises a solution to the I/O controller
1203 * synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).
1204 *
1205 * @param rPlant
1206 * plant model generator:
1207 * - monolithic case: I/O plant to be controlled;
1208 * - hierarchical case: parallel composition of group
1209 * (I/O-shuffle) of n I/O plants S_PEi (or their
1210 * abstractions) with the environment model S_EL for
1211 * this group.
1212 * @param rSpec
1213 * generator of desired behaviour of the external closed
1214 * loop. Must be in I/O plant form.
1215 * @param rConstr
1216 * external constraint that may be assumed:
1217 * - monolithic case: composition of constraints S_C and
1218 * S_E
1219 * - hierarchical case: composition of constraints S_C and
1220 * S_L
1221 * @param rLocConstr
1222 * internal constraint that has to be achieved by the I/O
1223 * controller for the closed loop:
1224 * - monolithic case: generator of constraint S_P
1225 * - hierarchical case: parallel composition of
1226 * constraints S_Pi and S_Ei
1227 * @param rYc
1228 * alphabet YC
1229 * @param rUc
1230 * alphabet UC
1231 * @param rYp
1232 * alphabet YP
1233 * @param rUp
1234 * alphabet UP
1235 * @param rYel
1236 * monolithic: alphabet YE, hierarchical: alphabet YL
1237 * @param rUel
1238 * monolithic: alphabet UE, hierarchical: alphabet UL
1239 * @param rController
1240 * reference to I/O controller(result)
1241 *
1242 * @exception Exception
1243 * - empty or non-disjoint alphabets rYc, rUc, rYp, rUp, rYel, rUel (id 0).
1244 * - rSpec not in HioPlantForm (id 0).
1245 * - alphabet mismatch between plant or constraints and spec (id 0).
1246 *
1247 * @ingroup hiosysplugin
1248 *
1249*/
1250extern FAUDES_API void HioSynth(
1251 const Generator& rPlant,
1252 const Generator& rSpec,
1253 const Generator& rConstr,
1254 const Generator& rLocConstr,
1255 const EventSet& rYc,
1256 const EventSet& rUc,
1257 const EventSet& rYp,
1258 const EventSet& rUp,
1259 const EventSet& rYel,
1260 const EventSet& rUel,
1261 Generator& rController);
1262
1263/**
1264 * HioSynthMonolithic: I/O controller synthesis procedure for
1265 * monolithic plant. The result rController realises a solution to
1266 * the I/O controller synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE).
1267 *
1268 * @param rPlant
1269 * I/O plant to be controlled; must be in I/O plant form (tested if
1270 * FAUDES_CHECKED); must be complete and Yp-live wrt. Sp and
1271 * Se (not tested).
1272 * @param rSpec
1273 * I/O plant model of desired behaviour of the external closed
1274 * loop. Must be in I/O plant form (tested if FAUDES_CHECKED);
1275 * must be complete and Yp-live wrt. Sc and Se (not tested).
1276 * @param rSc
1277 * external operator constraint that may be assumed; I/O constraint form
1278 * is recommended.
1279 * @param rSp
1280 * operator constraint for rPlant; is met by admissibility of rController;
1281 * I/O constraint form is recommended.
1282 * @param rSe
1283 * environment constraint that may be assumed; I/O constraint form
1284 * is recommended.
1285 * @param rController
1286 * I/O controller solving the I/O controller synthesis problem (result)
1287 *
1288 * @exception Exception
1289 * - plant or spec not in HioPlantForm (id 0).
1290 * - alphabet mismatch between plant or constraints and spec (id 0).
1291 *
1292 * @ingroup hiosysplugin
1293 *
1294*/
1295extern FAUDES_API void HioSynthMonolithic(
1296 const HioPlant& rPlant,
1297 const HioPlant& rSpec,
1298 const HioConstraint& rSc,
1299 const HioConstraint& rSp,
1300 const HioConstraint& rSe,
1301 HioController& rController);
1302
1303/**
1304 * HioSynthHierarchical: I/O controller synthesis procedure for
1305 * I/O-shuffle of i plants and their interaction via an I/O environment.
1306 * The result rController realises a solution to the I/O controller
1307 * synthesis problem (S_PE,S_C,S_P,S_E,S_SpecCE) with the external
1308 * behaviour S_PE of the I/Oshuffle-environment-composition and respects
1309 * internal constraints Sp_i and Se_i preserving liveness of the
1310 * individual plants.
1311 *
1312 * @param rHioShuffle
1313 * I/O plant or group of I/O plants composed by I/O shuffle
1314 * @param rEnvironment
1315 * environment model for rHioShuffle
1316 * @param rSpec
1317 * I/O plant model of desired behaviour of the external closed
1318 * loop. Must be in I/O plant form (tested if FAUDES_CHECKED);
1319 * must be complete and Yp-live wrt. Sc and Se (not tested).
1320 * @param rIntConstr
1321 * parallel composition of constraints Sp_i and Se_i of the
1322 * individual plants composed to rHioShuffle
1323 * @param rSc
1324 * external operator constraint that may be assumed; I/O constraint form
1325 * is recommended.
1326 * @param rSl
1327 * environment constraint that may be assumed; I/O constraint form
1328 * is recommended.
1329 * @param rController
1330 * I/O controller solving the I/O controller synthesis problem (result)
1331 *
1332 * @exception Exception
1333 * - HioShuffle or spec not in HioPlantForm (id 0).
1334 * - Environment not in HioEnvironmentForm (id 0).
1335 * - alphabet mismatch between plant, environment, spec and constraints (id 0).
1336 *
1337 * @ingroup hiosysplugin
1338 *
1339*/
1341 const HioPlant& rHioShuffle,
1342 const HioEnvironment& rEnvironment,
1343 const HioPlant& rSpec,
1344 const Generator& rIntConstr,
1345 const HioConstraint& rSc,
1346 const HioConstraint& rSl,
1347 HioController& rController);
1348
1349//#####################################
1350// #### end of hio_functions - below just archive ########
1351//#####################################
1352
1353 //HioShuffle_Musunoi() - special version for HioModule. Will be changed to std HioShuffle.
1355 const HioPlant& rPlantA,
1356 const HioPlant& rPlantB,
1357 int depth,
1358 Generator& rIOShuffAB) ;
1359
1360//HioSynth_Musunoi() - special version for HioModule. Will be changed to std HioSynth.
1361void HioSynth_Musunoi(
1362 const Generator& rPlant,
1363 const HioPlant& rSpec,
1364 const Generator& rConstr,
1365 const Generator& rLocConstr,
1366 const EventSet& rYp,
1367 const EventSet& rUp,
1368 Generator& rController);
1369
1370}// namespace
1371#endif // include
#define FAUDES_API
IndexSet StateSet
NameSet EventSet
vGenerator Generator
void CheapAltAnB(const EventSet rAset, const EventSet rBset, const int Depth, Generator &rAltAnB)
void CloneScc(Generator &rGen, const StateSet &rScc, std::set< StateSet > &rSccSet, const Idx EntryState, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
void ConstrSynth_Beta(Generator &rPlant, const EventSet &rYp, const EventSet &rUp, const Generator &rLocConstr, Generator &rOpConstraint)
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)
FAUDES_API bool YclessSCC(const Generator &rGen, const EventSet &rYc, std::set< StateSet > &rSccSet)
Generator HioSortCL(const EventSet &rYc, const EventSet &rUc, const EventSet &rYp, const EventSet &rUp, const EventSet &rYe, const EventSet &rUe)
void SccEntries(const Generator &rGen, const std::set< StateSet > &rSccSet, StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
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 CloneUnMarkedScc(Generator &rGen, const StateSet &rScc, const Idx EntryState, const StateSet &rEntryStates, TransSetX2EvX1 &rEntryTransSet)
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 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 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)
uint32_t Idx
THioController< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioController
THioConstraint< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioConstraint
THioEnvironment< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioEnvironment
THioPlant< AttributeVoid, HioStateFlags, HioEventFlags, AttributeVoid > HioPlant
Definition hio_plant.h:880
void HioSynth_Musunoi(const Generator &rPlant, const HioPlant &rSpec, const Generator &rConstr, const Generator &rLocConstr, const EventSet &rYp, const EventSet &rUp, Generator &rController)
void HioShuffle_Musunoi(const HioPlant &rPlantA, const HioPlant &rPlantB, int depth, Generator &rIOShuffAB)

libFAUDES 2.33k --- 2025.09.16 --- c++ api documentaion by doxygen