omg_1_buechi.cpp
Go to the documentation of this file.
1 /** @file omg_1_buechi.cpp
2 
3 Tutorial on basic operations on Buechi automata
4 
5 @ingroup Tutorials
6 
7 @include omg_1_buechi.cpp
8 
9 */
10 
11 #include "libfaudes.h"
12 
13 
14 using namespace faudes;
15 
16 
17 
18 int main() {
19 
20  ///////////////////////////////////
21  // Buechi Trim
22  ///////////////////////////////////
23 
24  // read example generator for reachability analysis
25  Generator greach("data/omg_nottrim.gen");
26 
27  std::cout << "################################\n";
28  std::cout << "# tutorial, buechi trim \n";
29 
30  bool isotrim = IsBuechiTrim(greach);
31  if(isotrim)
32  std::cout << "w-trimness: ok [error]\n";
33  else
34  std::cout << "w-trimness: failed [expected]\n";
35  std::cout << "################################\n";
36 
37  // trim generator
38  Generator gbtrim;
39  BuechiTrim(greach,gbtrim);
40 
41  // write operand and results for html docu
42  greach.Write("tmp_omg_notbtrim.gen");
43  gbtrim.Write("tmp_omg_gobtrim.gen");
44 
45  // record test case
46  FAUDES_TEST_DUMP("buechi trim",isotrim);
47 
48 
49  ////////////////////////////
50  // synchronous composition
51  ////////////////////////////
52 
53  // read generators
54  Generator bparallel_g1("data/omg_bparallel_g1.gen");
55  Generator bparallel_g2("data/omg_bparallel_g2.gen");
56 
57  // perform composition w.r.t buechi acceptance
58  Generator bparallel_g1g2;
59  BuechiParallel(bparallel_g1, bparallel_g2, bparallel_g1g2);
60 
61  // write result and operands for html docu
62  bparallel_g1.Write("tmp_omg_bparallel_g1.gen");
63  bparallel_g2.Write("tmp_omg_bparallel_g2.gen");
64  bparallel_g1g2.Write("tmp_omg_bparallel_g1g2.gen");
65 
66  // Test protocol
67  FAUDES_TEST_DUMP("bparallel",bparallel_g1g2);
68  FAUDES_TEST_DUMP("buechi parallel",bparallel_g1g2);
69 
70 
71 
72  ////////////////////////////
73  // closure w.r.t. Buechi acceptance
74  ////////////////////////////
75 
76 
77  // Read generator and write for html docu
78  Generator closure_g("data/omg_bclosure_g.gen");
79  closure_g.Write("tmp_omg_bclosure_g.gen");
80 
81  // test buechi closure
82  bool isclosed_g = IsBuechiClosed(closure_g);
83 
84  // compute buechi closure
85  BuechiClosure(closure_g);
86  closure_g.Write("tmp_omg_bclosure_gRes.gen");
87 
88  // test buechi closure
89  bool isclosed_gRes = IsBuechiClosed(closure_g);
90 
91  // inspect on console
92  std::cout << "################################\n";
93  std::cout << "# buechi closure \n";
94  if(isclosed_g)
95  std::cout << "# argument was buechi closed (test case error!)\n";
96  else
97  std::cout << "# argument was not buechi closed (expected)\n";
98  if(isclosed_gRes)
99  std::cout << "# result is buechi closed (expected)\n";
100  else
101  std::cout << "# result is not buechi closed (test case error!)\n";
102  closure_g.DWrite();
103  std::cout << "################################\n";
104 
105  // Record test case
106  FAUDES_TEST_DUMP("buechi closure", closure_g);
107 
108 
109 
110 
111 }
#define FAUDES_TEST_DUMP(mes, dat)
Definition: cfl_utils.h:494
void DWrite(const Type *pContext=0) const
Definition: cfl_types.cpp:231
void Write(const Type *pContext=0) const
Definition: cfl_types.cpp:145
void BuechiParallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
bool BuechiTrim(vGenerator &rGen)
void BuechiClosure(Generator &rGen)
bool IsBuechiClosed(const Generator &rGen)
bool IsBuechiTrim(const vGenerator &rGen)
int main()

libFAUDES 2.33h --- 2025.06.18 --- c++ api documentaion by doxygen