About
User Reference
C++ API
luafaudes
Developer
Links
libFAUDES online
libFAUDES

Sections

Index

cfl_omega.h

Go to the documentation of this file.
00001 /** @file cfl_omega.h 
00002 
00003 Operations on omega languages.
00004 
00005 */
00006 
00007 /* FAU Discrete Event Systems Library (libfaudes)
00008 
00009    Copyright (C) 2010 Thomas Moor
00010 
00011    This library is free software; you can redistribute it and/or
00012    modify it under the terms of the GNU Lesser General Public
00013    License as published by the Free Software Foundation; either
00014    version 2.1 of the License, or (at your option) any later version.
00015 
00016    This library is distributed in the hope that it will be useful,
00017    but WITHOUT ANY WARRANTY; without even the implied warranty of
00018    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019    Lesser General Public License for more details.
00020 
00021    You should have received a copy of the GNU Lesser General Public
00022    License along with this library; if not, write to the Free Software
00023    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
00024 
00025 
00026 #ifndef FAUDES_OMEGA_H
00027 #define FAUDES_OMEGA_H
00028 
00029 #include "cfl_definitions.h"
00030 #include "cfl_generator.h"
00031 
00032 namespace faudes {
00033 
00034 
00035 /**
00036  * Parallel composition with relaxed acceptance condition.
00037  *
00038  * This version of the parallel composition relaxes the synchronisation of the acceptance
00039  * condition (marking). It requires that the omega extension of the generated language
00040  * has infinitely many prefixes that comply to the marked languages of G1 and G2, each.
00041  * It does however not require the synchronous acceptance.
00042  *
00043  * @param rGen1
00044  *   First generator
00045  * @param rGen2
00046  *   Second generator
00047  * @param rResGen
00048  *   Reference to resulting parallel composition generator
00049  *
00050  *
00051  * @ingroup GeneratorFunctions
00052  *
00053  */
00054 void OmegaParallel(const Generator& rGen1, const Generator& rGen2, Generator& rResGen);
00055 
00056 
00057 /**
00058  * Parallel composition with relaxed acceptance condition.
00059  *
00060  * See also OmegaParallel(const Generator&, const Generator&, Generator&).
00061  * This version tries to be transparent on event attributes: if
00062  * argument attributes match and if the result can take the respective
00063  * attributes, then they are copied; it is considered an error if 
00064  * argument attributes do not match.
00065  *
00066  * @param rGen1
00067  *   First generator
00068  * @param rGen2
00069  *   Second generator
00070  * @param rResGen
00071  *   Reference to resulting composition generator
00072  *
00073  * @ingroup GeneratorFunctions
00074  */
00075 void aOmegaParallel(const Generator& rGen1, const Generator& rGen2, Generator& rResGen);
00076 
00077 /**
00078  * Topological closure.
00079  *
00080  * This function computes the topological closure the omega language 
00081  * Bm realized by rGen. 
00082  *
00083  * Method:
00084  * First, OmegaTrim is called to erase all states of rGen that do not
00085  * contribute to Bm. Then, all remaining states are marked.
00086  *
00087  * No restrictions on parameter.
00088  *
00089  *
00090  * @param rGen
00091  *   Generator that realizes Bm to which omega closure is applied
00092  *
00093  * <h4>Example:</h4>
00094  * <table>
00095  * <tr> <td> Generator G </td> <td> PrefixClosure(G) </td> </tr>
00096  * <tr>
00097  * <td> @image html tmp_omegaclosure_g.png </td>
00098  * <td> @image html tmp_omegaclosure_gRes.png </td>
00099  * </tr>
00100  * </table>
00101  *
00102  * @ingroup GeneratorFunctions
00103  */
00104 void OmegaClosure(Generator& rGen);
00105 
00106 
00107 /**
00108  * Test for  topologically closed omega language.
00109  *
00110  * This function tests whether the omega language Bm(G) realized by the specified generator G
00111  * is topologically closed. 
00112  *
00113  * Method:
00114  * First, compute the omega-trim state set and restrict the discussion to that set.
00115  * Then, omega-closedness is equivalent to the non-existence on a non-trivial SCC 
00116  * with no marked states. 
00117  *
00118  * @param rGen
00119  *   Generator that realizes Bm to which omega closure is applied
00120  * @return
00121  *   True <> Bm(G) is omega closed
00122  *
00123  * @ingroup GeneratorFunctions
00124  */
00125 bool IsOmegaClosed(const Generator& rGen);
00126 
00127 
00128 
00129 
00130 } // namespace faudes
00131 
00132 #endif 
00133 

libFAUDES 2.22k --- 2013.04.02 --- c++ source docu by doxygen