cfl_bisimulation.h
Go to the documentation of this file.
1/** @file cfl_bisimulation.h Bisimulation relations
2
3 Functions to compute bisimulation relations on dynamic systems (represented
4 by non-deterministic finite automata).
5
6 The relevant algorithms are described in J.-C. Fernandez, "An implementation
7 of an efficient algorithm for bisimulation equivalence", Science of Computer
8 Programming, vol. 13, pp. 219-236, 1990.
9
10 This code was originally part of the observer-plugin and moved in revised
11 form to corefaudes by Version 2.26
12
13**/
14
15/* FAU Discrete Event Systems Library (libfaudes)
16
17 Copyright (C) 2009, Christian Breindl
18 Copyright (C) 2015, Thomas Moor
19 Exclusive copyright is granted to Klaus Schmidt
20
21 This library is free software; you can redistribute it and/or
22 modify it under the terms of the GNU Lesser General Public
23 License as published by the Free Software Foundation; either
24 version 2.1 of the License, or (at your option) any later version.
25
26 This library is distributed in the hope that it will be useful,
27 but WITHOUT ANY WARRANTY; without even the implied warranty of
28 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29 Lesser General Public License for more details.
30
31 You should have received a copy of the GNU Lesser General Public
32 License along with this library; if not, write to the Free Software
33 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
34
35
36#ifndef FAUDES_CFL_BISIMULATION_H
37#define FAUDES_CFL_BISIMULATION_H
38
39#include "cfl_definitions.h"
40#include "cfl_generator.h"
41
42#include <vector>
43#include <map>
44
45
46
47namespace faudes {
48
49/**
50* Computation of the coarsest bisimulation relation for a specified generator.
51*
52* This funtcion creates an instance of the class Bisimulation and triggers the computation
53* of the coarsest quasi-congruence on the given generator by calling the function Bisimulation::partition.
54* The result is returned as a map from original state idicess to partion indicees.
55* The implementation is derived from J.-C. Fernandez, “An implementation of an efficient
56* algorithm for bisimulation equivalence,” Science of Computer Programming, vol. 13, pp. 219-236, 1990.
57*
58* This interface is neither used nor tested.
59* Use ComputeBisimulation(Generator& , std::map<Idx,Idx>& , Generator& ) instead.
60*
61* @param rGenOrig
62* Original generator
63* @param rMapStateToPartition
64* Maps each state to its equivalence class
65*
66* @ingroup GeneratorFunctions
67*/
68extern FAUDES_API void ComputeBisimulation(const Generator& rGenOrig, std::map<Idx,Idx>& rMapStateToPartition);
69
70
71/**
72* Computation of the coarsest bisimulation relation for a specified generator.
73*
74* This is a convenience wrapper for ComputeBisimulation(Generator&, std::map<Idx,Idx>&) to
75* return the quitient generator to represent the result.
76*
77* See ComputeBisimulation(const Generator&, std::map<Idx,Idx>).
78*
79* @param rGenOrig
80* Original generator
81* @param rMapStateToPartition
82* Maps each state to its equivalence class
83* @param rGenPart
84* Quotient automaton representing the result of the computation. Each state corresponds to an
85* equivalence class
86*
87* @ingroup GeneratorFunctions
88*/
89extern FAUDES_API void ComputeBisimulation(const Generator& rGenOrig, std::map<Idx,Idx>& rMapStateToPartition, Generator& rGenPart);
90
91
92/**
93* Computation of the coarsest bisimulation relation for a specified generator.
94*
95* This is a convenience wrapper for ComputeBisimulation(Generator&, std::map<Idx,Idx>&) to
96* return a list of nontrivial equivalence classes (singletons are not reported)
97*
98* See ComputeBisimulation(const Generator&, std::map<Idx,Idx>).
99*
100* @param rGenOrig
101* Original generator
102* @param rPartitions
103* list of equivalent states
104*
105* @ingroup GeneratorFunctions
106*/
107extern FAUDES_API void ComputeBisimulation(const Generator& rGenOrig, std::list< StateSet >& rPartitions);
108
109
110}
111
112#endif
113
#define FAUDES_API
vGenerator Generator
void ComputeBisimulation(const Generator &rGenOrig, map< Idx, Idx > &rMapStateToPartition)

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