op_ex_bisim.cpp
Go to the documentation of this file.
1/** @file op_ex_bisim.cpp
2
3Tutorial, computation of the coarsest quasi-congruence
4
5This tutorial demonstrates the use of the Bisimulation class for computing the
6coarsest quasi-congruence on a given automaton. The theoretical background for the
7provided methods can be found in
8J.-C. Fernandez, "An implementation of an efficient algorithm for
9bisimulation equivalence," Science of Computer Programming, vol. 13,
10pp. 219-236, 1990.
11
12@ingroup Tutorials
13
14@include op_ex_bisim.cpp
15*/
16
17
18
19#include <stdio.h>
20#include <iostream>
21#include "libfaudes.h"
22
23using namespace faudes;
24
25
26int main(int argc, char* argv[]) {
27
28 // read original generator from file input
29 Generator genOrig("data/ex_bisim/ex_bisim.gen");
30 // Write the original generator to console
31 std::cout << "#####################\n";
32 std::cout << "# original generator \n";
33 std::cout << "#####################\n";
34 genOrig.DWrite();
35 // create an empty map<Idx,Idx>
36 // it is passed by reference to the fuction ComputeBisimulation and will map the index of
37 // each state (first Idx) to the index of its equivalence class (second Idx)
38 std::map<Idx,Idx> mapStateToPartition;
39
40 // create an empty Generator. It is passed by reference to the function ComputeBisimulation
41 // and will hold the coarsest quasi-congruence on genOrig, where each equivalence class is represented by a state
42 Generator genPart;
43
44 // call the function ComputeBisimulation which computes the coarses quasi-congruence
45 ComputeBisimulation(genOrig, mapStateToPartition, genPart);
46
47 // Write the resulting generator that holds the quasi-congruence to console
48 std::cout << "#########################################\n";
49 std::cout << "# generator holding the quasi-congruence\n";
50 std::cout << "#########################################\n";
51 genPart.DWrite();
52 // Write the resulting generator to file output
53 genPart.Write("./results/ex_bisim/genPart.gen");
54 // output the map from states in the original generator to equivalence classes (states in genPart)
55 std::map<Idx,Idx>::const_iterator mIt, mEndIt;
56 mIt = mapStateToPartition.begin();
57 mEndIt = mapStateToPartition.end();
58 std::cout << "##################################################\n";
59 std::cout << "# map from original states to equivalence classes\n";
60 for( ; mIt != mEndIt; mIt++){
61 std::cout << "state: " << mIt->first << " class: " << mIt->second << "\n";
62 }
63 std::cout << "##################################################\n";
64
65 return 0;
66}
int main()
void DWrite(const Type *pContext=0) const
void Write(const Type *pContext=0) const
void ComputeBisimulation(const Generator &rGenOrig, map< Idx, Idx > &rMapStateToPartition)

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