| |
libFAUDES
Sections
Index
|
General Purpose FunctionsDetailed DescriptionThis module collects general purpose functions on Generators.It includes functions related to regular expressions, projection, parallel composition and basic controller synthesis.
Function Documentation
RTI wrapper function. See also vGenerator::Accessible(). Definition at line 2851 of file vgenerator.cpp.
RTI wrapper function. See also vGenerator::Accessible(). Definition at line 2846 of file vgenerator.cpp.
Make generator deterministic. See also Deterministic(const vGenerator&, vGenerator&). This version maintains event attributes provided they can be castes to the result type.
Definition at line 72 of file project.cpp.
Inverse projection. This adds selfloop transition at every state for all missing events. This version tries to ne transparent to attributes.
Definition at line 703 of file project.cpp.
Inverse projection. This adds selfloop transition at every state for all missing events. This version tries to ne transparent to attributes.
Definition at line 683 of file project.cpp.
Alphabet Language, L(G)=Lm(G)=Sigma. Construct generator generating and marking an alphabet as languages, that is L(G)=Lm(G)=Sigma. Method: this function creates a generator with one init state and one marked state. For each event from rAlphabet, a transition is inserted leading from the init state to the marked state. No restrictions on parameters.
Example:
Definition at line 526 of file regular.cpp.
Parallel composition with relaxed acceptance condition. See also OmegaParallel(const vGenerator&, const vGenerator&, vGenerator&). This version tries to be transparent on event attributes: if argument attributes match and if the result can take the respective attributes, then they are copied; it is considered an error if argument attributes do not match.
Definition at line 449 of file parallel.cpp.
Parallel composition. See also Parallel(const vGenerator&, const vGenerator&, vGenerator&). This version tries to be transparent on event attributes: if argument attributes match and if the result can take the respective attributes, then they are copied; it is considered an error if argument attributes do not match.
Definition at line 51 of file parallel.cpp.
Product composition. See also Product(const vGenerator&, const vGenerator&, vGenerator&). This version tries to be transparent on event attributes: if argument attributes match and if the result can take the respective attributes, then they are copied; it is considered an error if argument attributes do not match.
Definition at line 277 of file parallel.cpp.
Minimized deterministic projection. See also Project(const vGenerator&, const EventSet&, vGenerator&). This version tries to be transparent on event attributes: if argument attributes match and if the result can take the respective attributes, then they are copied; it is considered an error if argument attributes do not match.
Definition at line 599 of file project.cpp.
Language projection. See also aProjectNonDet(const vGenerator&, const EventSet&). This version tries to be transparent on event attributes: result maintains its attributes.
Definition at line 485 of file project.cpp.
State set minimization. See also StateMin(const vGenerator&, vGenerator&). This version maintains event attributes provided they can be casted to the result type.
Definition at line 38 of file statemin.cpp.
Convert generator to automaton wrt specified alphabet. Convert a generator marking the language Lm into a formal automaton recognizing Lm with a dump state representing Sigma*-PrefixClosure(Lm(rGen)). In this function, Sigma is given by the parameter rAlphabet. For information about automata, see [Wonham. Supervisory Control of Discrete Event Systems]. The original generated language is ignored. Note: An automaton is a deterministic transition structure according to the formal definition; see also "Determinism" below. Method: Uncoaccessible states are erased, as the language generated by rGen is not examined in this function. A dump state representing "Sigma*-PrefixClosure(Lm)" is created. Then, the transition relation is completed such that it is fully defined for each state of rGen and each event of rAlphabet. Formerly undefined transitions lead to the dump state. Determinism: Input parameter has to be deterministic for correct result. If not, then the (also nondeterministic) result recognizes the correct language, but the dump state does not represent "Sigma*-PrefixClosure(Lm)" as it should; see also example ExAutomaton_basic(). If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. No further restrictions on parameters.
Definition at line 186 of file regular.cpp.
Convert generator to automaton. Convert a generator marking the language Lm into a formal automaton recognizing Lm with a dump state representing Sigma*-PrefixClosure(Lm). In this function, Sigma is given by the alphabet of rGen; see also Automaton(rGen,rAlphabet). For information about automata, see [Wonham. Supervisory Control of Discrete Event Systems]. The original generated language is ignored. Note: An automaton is a deterministic transition structure according to the formal definition; see also "Determinism" below. Method: Uncoaccessible states are erased, as the language generated by rGen is not examined in this function. A dump state representing "Sigma*-PrefixClosure(Lm)" is created. Then, the transition relation is completed such that it is fully defined for each state and each event. Formerly undefined transitions lead to the dump state. Determinism: Input parameter has to be deterministic for correct result. If not, then the (also nondeterministic) result recognizes the correct language, but the dump state does not represent "Sigma*-PrefixClosure(Lm)" as it should; see also example ExAutomaton_basic(). If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. No further restrictions on parameter.
Example:
Definition at line 257 of file regular.cpp.
RTI wrapper function. See also vGenerator::Coaccessible(). Definition at line 2862 of file vgenerator.cpp.
RTI wrapper function. See also vGenerator::Coaccessible(). Definition at line 2857 of file vgenerator.cpp.
Compute strongly connected components (SCC). This partitions the stateset of a generator into equivalenc classes such that states x1 and x2 are equivalent iff there is a path from x1 to x2 AND a path from x2 to x1. Technically, this function is a API wrapper that calls the recursive implementation SearchScc() as presented in -- Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms --
Definition at line 295 of file graphfncts.cpp.
Compute strongly connected components (SCC). This partitions the stateset of a generator into equivalenc classes such that states x1 and x2 are equivalent iff there is a path from x1 to x2 AND a path from x2 to x1. You may specify the filter condition rFilter to ignore certain transitions and/or SCCs; see also SccFilter. Technically, this function is a API wrapper that calls the recursive implementation SearchScc() as presented in -- Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms --
Definition at line 256 of file graphfncts.cpp.
Make generator deterministic. Constructs a deterministic generator while preserving the generated and marked languages. The implementation is based on the so called multiway merge variant of subset construction, in which the new state set becomes a subset of the power set og the given state set. It is of exponential complexity. For details on the multiway merge algorithm see "Ted Leslie, Efficient Approaches to Subset Construction, Computer Science, University of Waterloo, 1995". See also Deterministic(const vGenerator&,std::map<Idx,StateSet>&,vGenerator& rResGen) and Deterministic(const vGenerator&,std::vector<StateSet>&,std::vector<Idx>&,vGenerator& rResGen). Technical detail: if the input has no initial state, then so has the output. In this aspect this function does not match the test IsDeterministic(). See also UniqueInit().
Example:
Definition at line 63 of file project.cpp.
Empty language Lm(G)={}. Construct generator and marking the empty language, that is Lm(G)={}. Method: this function creates a deterministic generator with one initial state that is not marked. The alphabet is set as specified. No restrictions on parameters.
Definition at line 597 of file regular.cpp.
Test for empty language intersection (same as Disjoind()). This function checks if the intersection of two languages marked by two generators is empty that is the two languages are disjoint. The involved generated (prefix-closed) languages are not considered. This function is identical to Disjoint(). Method: This function checks if the Product() of both automata marks the empty language. ToDo: modify such that the product is computed only to the necessary extend, i.e. do not store product in temporary generator and return false as soon as a common transition is found. No restrictions on parameters.
Definition at line 165 of file regular.cpp.
Empty string language, L(G)=Lm(G)={epsilon}. Construct generator generating and marking the empty string, that is L(G)=Lm(G)={epsilon}. Method: this function creates a generator with one marked init state and the alphabet rAlphabet. No restrictions on parameters.
Example:
Definition at line 568 of file regular.cpp.
Full Language, L(G)=Lm(G)=Sigma*. Construct generator generating and marking full language Sigma* from alphabet Sigma. Method: this function creates a generator with one state that is marked and init state. This state is selflooped with all events from rAlphabet.
Example:
Definition at line 492 of file regular.cpp.
Test for strongly connected components (SCC). This functions searchs for the first SCC of the generator rGen while applying the filter rFilter; see SCCFilter for details. Technically, this function is a API wrapper that calls the recursive implementation SearchScc() as presented in -- Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms --
Definition at line 353 of file graphfncts.cpp.
Test for strongly connected components (SCC). This functions searchs for the first SCC of the generator rGen while applying the filter rFilter; see SCCFilter for details. Technically, this function is a API wrapper that calls the recursive implementation SearchScc() as presented in -- Aho, Hopcroft, Ullman: The Design and Analysis of Computer Algorithms --
Definition at line 311 of file graphfncts.cpp.
Inverse projection. This adds selfloop transition at every state for all missing events.
Definition at line 661 of file project.cpp.
RTI wrapper function. See also vGenerator::IsAccessible(). Definition at line 2815 of file vgenerator.cpp.
RTI wrapper function. See also vGenerator::IsCoaccessible(). Definition at line 2820 of file vgenerator.cpp.
RTI wrapper function. See also vGenerator::IsComplete(). Definition at line 2830 of file vgenerator.cpp.
RTI wrapper function. See also vGenerator::IsDeterministic(). Definition at line 2840 of file vgenerator.cpp.
Test for Empty language Lm(G)=={}. Tests if the language marked by rGen is empty, that is if Lm(G)=={}. The generated language L(G) is not considered. Method: This function tests if a) the set of marked states is empty or else b) the intersection of the set of accessible states and the set of marked states is empty, i.e. if there is no marked state or if no marked state is accessible (reachable). No restrictions on parameter.
Definition at line 615 of file regular.cpp.
RTI wrapper function. See also mtcGenerator::IsStronglyCoaccessible(). Definition at line 32 of file mtc_generator.cpp.
RTI wrapper function. See also mtcGenerator::IsStronglyTrim(). Definition at line 37 of file mtc_generator.cpp.
RTI wrapper function. See also vGenerator::IsTrim(). Definition at line 2825 of file vgenerator.cpp.
Kleene Closure. This function computes the Kleene Closure ( ()* - operator) of the language marked by rGen. The generated language is not considered. Method: KleeneClosureNonDet() is called, which, for all transitions leading from a state x to a marked state, inserts a transition with the same event starting from x and leading to (one of) the initial state(s). As this step causes nondeterminism, the function Deterministic() is called. See also KleeneClosureNonDet(). No restrictions on parameter.
Example:
Definition at line 645 of file regular.cpp.
Kleene Closure, nondeterministic version. This function computes the Kleene Closure ( ()* - operator) of the language marked by rGen. The generated language is not considered. Method: KleeneClosureNonDet() is called, which, for all transitions leading from a state x to a marked state, inserts a transition with the same event starting from x and leading to (one of) the initial state(s).
Definition at line 667 of file regular.cpp.
Language Complement (uniform API wrapper).
Definition at line 301 of file regular.cpp.
Language Complement (uniform API wrapper).
Definition at line 294 of file regular.cpp.
Language complement wrt specified alphabet. Convert generator marking the language Lm into generator marking the language complement of Lm which is defined as Sigma*-Lm. In this function, Sigma is given by the parameter rAlphabet. The original generated language is ignored. Method: This function calls Automaton() first and then inverts the marking of the states of the result. Determinism: Input parameter has to be deterministic for correct result, see Automaton() for explanations. If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. (by function Automaton()). No further restrictions on parameter.
Definition at line 265 of file regular.cpp.
Language complement. Convert generator marking the language Lm into generator marking the language complement of Lm which is defined as Sigma*-Lm. In this function, Sigma is given by the alphabet of rGen; see also LanguageComplement(rGen,rAlphabet). The original generated language is ignored. Method: This function calls Automaton() first and then inverts the marking of the states of the result. Determinism: Input parameter has to be deterministic for correct result, see Automaton() for explanations. If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. (by function Automaton()). No further restrictions on parameter.
Example:
Definition at line 285 of file regular.cpp.
Language concatenation, deterministic version. With the languages Lm1 and Lm2 marked by rGen1 and rGen2, respectively, the result rResGen marks the concatenation LmRes=Lm1Lm2. The languages generated by rGen1 and rGen2 are ignored. It would be possible to let the result also generate the concatenation of the generated languages; however, this can produce disproportionate computational overhead, if only the marked languages shall be concatenated. Method: rGen2 is appended to rGen1: first, the initial states of rGen2 are erased. Then, transitions, that formerly started from the initial state(s) of rGen2, are redirected and multiplied such that they start from each marked state of rGen1. The marked states corresponding to rGen2 remain marked. The marked states of rGen1 remain marked only if rGen2 has at least one marked initial state (i.e. if epsilon is concatenated to Lm1.) Determinism: Input parameters may be nondeterministic. This function calls LanguageUnionNonDet() and then Deterministic() to convert the result into a deterministic generator. Note that this conversion is usually straightforward, but there exist theoretical worst-case examples of exponential complexity. No restrictions on parameters.
Example:
Definition at line 471 of file regular.cpp.
Language concatenation, nondeterministic version. With the languages Lm1 and Lm2 marked by rGen1 and rGen2, respectively, the result rResGen marks the concatenation LmRes=Lm1Lm2. The languages generated by rGen1 and rGen2 are ignored. It would be possible to let the result also generate the concatenation of the generated languages; however, this can produce disproportionate computational overhead, if only the marked languages shall be concatenated. Method: rGen2 is appended to rGen1: first, the initial states of rGen2 are erased. Then, transitions, that formerly started from the initial state(s) of rGen2, are redirected and multiplied such that they start from each marked state of rGen1. The marked states corresponding to rGen2 remain marked. The marked states of rGen1 remain marked only if rGen2 has at least one marked initial state (i.e. if epsilon is concatenated to Lm1.) Determinism: Input parameters may be nondeterministic. Result can be nondeterministic even if input parameters are deterministic; see also LanguageConcatenate(). No restrictions on parameters.
Definition at line 355 of file regular.cpp.
Language difference (set-theoretic difference). This function calculates Lm1-Lm2 (sometimes also denoted by Lm1\Lm2), that is the set of all strings included in Lm1 but not in Lm2. Method: The language difference is computed by taking the intersection of Lm1 with the complement of Lm2. Determinism: Due to the use of LanguageComplement(), rGen2 has to be deterministic. Result can be nondeterministic only if rGen1 is nondeterministic. Restrictions on prameters: rGen2 has to be deterministic.
Example:
Definition at line 310 of file regular.cpp.
Test whether two languages are disjoint. This function tests whether the intersection of two languages marked by two generators is empty, ie the two languages are disjoint. The involved generated (prefix-closed) languages are not considered. This function is identical to EmptyLanguageIntersection(). Method: This function checks if the Product() of both automata marks the empty language. ToDo: modify such that the product is computed only to the necessary extend, i.e. do not store product in temporary generator and return false as soon as a common transition is found. No restrictions on parameters.
Definition at line 179 of file regular.cpp.
Language equality, Lm1==Lm2. Test if the language Lm1 marked by rGen1 equals the language Lm2 marked by rGen2. The generated languages are not considered. Method: This function checks mutual inclusion of Lm1 in Lm2 and of Lm2 in Lm1 using the function LanguageInclusion(). Restrictions on parameters: rGen1 and rGen2 have to be deterministic! If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. (by function Automaton()). ToDo: implement faster, version using a variant of Product(): compute product without storing result, return false as soon as rGen1 and rGen2 "disagree" on the occurrence of some event.
Definition at line 636 of file regular.cpp.
Test language inclusion, Lm1<=Lm2. Test if language Lm1 marked by rGen1 is included in language Lm2 marked by rGen2. The generated languages are not considered. Method: This function checks if there is no string in Lm1 that is not in Lm2 by testing if the intersection of Lm1 and the language complement of Lm2 is empty. Restrictions on parameters: rGen2 has to be deterministic! If FAUDES_CHECKED is defined a warning on non-deterministic input is issued. (by function Automaton()). Determinism: correctness in case of nondeterministic parameter rGen1 has been tested with an example (see ExInclusion_simple), but not proven. ToDo: implement faster version using a variant of Product(): compute product without storing result, return false as soon as some event is possible in Lm2 but not in Lm1.
Definition at line 623 of file regular.cpp.
Language intersection. This function performs the intersection of two languages marked by two generators; the resulting generator marks the resulting language. Moreover, the same is done for the involved generated (prefix-closed) languages. The resulting languages are defined over the intersection of the involved alphabets. Method: This function calls Product(). In the product of two automata, an event occurs if and only if it occurs in both automata rGen1 and rGen2. The result generates/marks the intersection of the involved languages, see e.g. [Cassandras, Lafortune. Introduction to Discrete Event Systems, p.84] Determinism: Input parameters may be nondeterministic. Result can be nondeterministic only if input parameters are nondeterministic. No restrictions on parameters.
Example:
Definition at line 149 of file regular.cpp.
Language union, deterministic version. This function performs the union of two languages marked by two generators; the resulting generator marks the resulting language. Moreover, the same is done for the involved generated (prefix-closed) |languages. Method: This function implements the textbook version (which textbook??) in taking unions of all generator entities (alphabets, initial states, ...). State sets are taken as disjoint by definition and thus reindexed and renamed to achieve disjoint union. The resulting language is defined over the union of the alphabets of the original languages. Determinism: Input parameters may be nondeterministic. This function calls LanguageUnionNonDet() and then Deterministic() to convert the result into a deterministic generator. Note that this conversion is usually straightforward, but there exist theoretical worst-case examples of exponential complexity. No restrictions on parameters. ToDo: a version similar to parallel composition that produces a deterministic result by construction. (?)
Example:
Definition at line 121 of file regular.cpp.
Language union, nondeterministic version. This function performs the union of two languages marked by two generators; the resulting generator marks the resulting language. Moreover, the same is done for the involved generated (prefix-closed) languages. Method: This function implements the textbook version in taking unions of all generator entities (alphabets, initial states, ...) of rGen1 and rGen2. State sets are taken as disjoint by definition and thus reindexed and renamed to achieve disjoint union. The resulting language is defined over the union of the alphabets of the original languages; original languages defined over different alphabets are treated as if they were defined over the union of both alphabets. Determinism: Input parameters may be nondeterministic. This function is more economical than the deterministic version, but likely to produce a non-deterministic result; see also LanguageUnion(). No restrictions on parameters.
Definition at line 39 of file regular.cpp.
Parallel composition with relaxed acceptance condition. This version of the parallel composition relaxes the synchronisation of the acceptance condition (marking). It requires that the omega extension of the generated language has infinitely many prefixes that comply to the marked languages of G1 and G2, each. It does however not require the synchronous acceptance.
Definition at line 484 of file parallel.cpp.
Parallel composition. Constructs the parallel composition of two generators, where shared events are synchronised while non-shared events are executed independantly. The resulting generators alphabet is the union of the argument alphabets. In this implementation, only accessible states are generated. On deterministic input this functions constructs a deterministic output. See also Parallel(const vGenerator&,std::map< std::pair<Idx,Idx>, Idx>&,const vGenerator&, vGenerator&).
Example:
Definition at line 28 of file parallel.cpp.
Prefix Closure. This function computes the prefix closure the language Lm marked by rGen. A language Lm is prefix closed if each string of Lm implies that all its prefixes are also element of Lm. The prefix closure of a language marked by a generator is always a subset of the generated language and is represented by the set of coaccessible states of the generator. Method: First, Coaccessible() is called to erase all states of rGen that do not represent prefixes of marked strings. Then, all remaining states are marked. No restrictions on parameter. ToDo: (slightly) more efficient version: implement generator function CoAccessibleSet() similar to AccessibleSet() and call InjectMarkedStates(AccessibleSet()).
Example:
Definition at line 707 of file regular.cpp.
Product composition. The product composition executes shared events only. The resulting generators alphabet is the interscetion of the argument alphabets. In this implementation, only accessible states are generated. Assumes deterministic input generators, result is deterministic.
Definition at line 270 of file parallel.cpp.
Minimized deterministic projection. Projects the generated and marked languages to a subalphabet of the original alphabet, and subsequently calls Deterministic and StateMin to construct a deterministic minimal realisation of the result. The input generator does not need to be deterministic.
Example:
Definition at line 575 of file project.cpp.
Language projection. Projects the generated and marked languages to another alphabet. Transitions with events not in the projection alphabet are considered invisible and therefor acordingly relinked with a visible lable to the appropriate successor state. The projection alphabet is intended (but not required) to be a subset of the original alphabet. The results in general is nondeterministic. The input generator does not need to be deterministic. See Project(const vGenerator&,const EventSet&, vGenerator&) for a version with deterministic result.
Definition at line 369 of file project.cpp.
Self-loop specified states. This function selfoops the states rStates of rGen with the events from rAlphabet. Method: The alphabet of rGen is extended by rAlphabet. For each state x of rStates and each event alpha of rAlphabet, a transition (x,alpha,x) is inserted, irrespective of whether this event was already active in x before. See also SelfLoop(rGen,rAlphabet) and SelfLoopMarkedStates(rGen,rAlphabet). No restrictions on parameter. Determinism: resulting generator is nondeterministic, if it was nondeterministic before, or if rGen already contains one or more (non selfloop) transitions starting from a state of rState with events from rAlphabet.
Example:
Definition at line 782 of file regular.cpp.
Self-loop all states. This function selfoops all states of rGen with the events from rAlphabet. Method: The alphabet of rGen is extended by rAlphabet. For each state x of rGen and each event alpha of rAlphabet, a transition (x,alpha,x) is inserted, irrespective of whether this event was already active in x before. See also SelfLoop(rGen,rAlphabet,rStates) and SelfLoopMarkedStates(rGen,rAlphabet). No restrictions on parameter. Determinism: resulting generator is nondeterministic, if it was nondeterministic before, or if rGen already contains one or more (non selfloop) transitions with events from rAlphabet.
Example:
Definition at line 726 of file regular.cpp.
Self-loop all marked states. This function selfoops all marked states of rGen with the events from rAlphabet. Method: The alphabet of rGen is extended by rAlphabet. For each marked state x of rGen and each event alpha of rAlphabet, a transition (x,alpha,x) is inserted, irrespective of whether this event was already active in x before. See also SelfLoop(rGen,rAlphabet) and SelfLoop(rGen,rAlphabet,rStates). No restrictions on parameter. Determinism: resulting generator is nondeterministic, if it was nondeterministic before, or if rGen already contains one or more (non selfloop) transitions starting from a marked state with events from rAlphabet.
Example:
Definition at line 753 of file regular.cpp.
State set minimization. Constructs a generator with minimal stateset while preserving the generated und marked languages. This function implements the (n*log n) set partitioning algorithm by John E. Hopcroft. The algorithm expects an accessible input generator. To have a const interface, the argument is copied. See also StateMin(vGenerator&,vGenerator&).
Example:
Definition at line 30 of file statemin.cpp.
RTI wrapper function. See also mtcGenerator::Coaccessible(). Definition at line 47 of file mtc_generator.cpp.
RTI wrapper function. See also mtcGenerator::Coaccessible(). Definition at line 42 of file mtc_generator.cpp.
RTI wrapper function. See also mtcGenerator::Trim(). Definition at line 58 of file mtc_generator.cpp.
RTI wrapper function. See also mtcGenerator::Trim(). Definition at line 53 of file mtc_generator.cpp.
Make initial states unique. If the argument generator has precisely one initial state, this function does nothing. Else, this function introduces a new and unique initial state and relinks transitions accordinly. If the argument generator used to have more than one initial state, this operation may render the output nondeterministic. If the argument generator used to have no initial state, the output generator will generate the empty string language as opposed to the empty language. Otherwise, generated and marked languages are preserved. Note: call this function followed by determine to convert the generator to a deterministic generator with exactly one initial state.
Definition at line 28 of file project.cpp.
|
libFAUDES 2.14g --- 2009-12-3 --- c++ source docu by doxygen 1.5.6