omg_rabinctrl.h
Go to the documentation of this file.
1/** @file omg_rabinctrl.h Controller synthesis for Rabin automata */
2
3/* FAU Discrete Event Systems Library (libfaudes)
4
5 Copyright (C) 2010, 2025 Thomas Moor
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public
18 License along with this library; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
20
21
22#ifndef FAUDES_OMG_RABINCTRL_H
23#define FAUDES_OMG_RABINCTRL_H
24
25#include "corefaudes.h"
26#include "omg_rabinaut.h"
27
28namespace faudes {
29
30
31
32/**
33 * Controllability prefix for Rabin automata.
34 *
35 * Computation of the controllability prefix as proposed by
36 * Thistle/Wonham in "Supervision of infinite behavior of Discrete Event Systems, 1994,
37 * using the fixpoint iteration from "Control of w-Automata, Church's Problem, and the
38 * Emptiness Problem for Tree w-Automata", 1992.
39 *
40 * @param rRAut
41 * Automaton to control
42 * @param rSigmaCtrl
43 * Set of controllable events
44 * @param rCtrlPfx
45 * State set that marks the controllability prefix.
46 *
47 * @ingroup OmgPlugin
48 */
49extern FAUDES_API void RabinCtrlPfx(
50 const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
51 StateSet& rCtrlPfx);
52
53/**
54 * Controllability prefix for Rabin automata.
55 *
56 * API wrapper to return the controllability prefix as generator.
57 *
58 * @param rRAut
59 * Automaton to control
60 * @param rSigmaCtrl
61 * Set of controllable events
62 * @param rCtrlPfx
63 * Generator that marks the controllability prefix.
64 *
65 * @ingroup OmgPlugin
66 */
67extern FAUDES_API void RabinCtrlPfx(
68 const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
69 Generator& rCtrlPfx);
70
71
72/**
73 * Controllability prefix for Rabin automata.
74 *
75 * API wrapper to return a controller
76 *
77 * @param rRAut
78 * Automaton to control
79 * @param rSigmaCtrl
80 * Set of controllable events
81 * @param rController
82 * Map from states to enabled events.
83 *
84 * @ingroup OmgPlugin
85 */
86extern FAUDES_API void RabinCtrlPfx(
87 const RabinAutomaton& rRAut, const EventSet& rSigmaCtrl,
88 TaIndexSet<EventSet>& rController);
89
90
91/**
92 * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
93 *
94 * Computation of the supremal oemga-controllable sublanguage as proposed by
95 * Thistle/Wonham in "Control of w-Automata, Church's Problem, and the Emptiness
96 * Problem for Tree w-Automata", 1992, and, here, applied to the specific case
97 * of deterministic Buechi plangt and a Rabin specification.
98 *
99 * Parameter restrictions: both generators must be deterministic and
100 * refer to the same alphabet.
101 *
102 *
103 * @param rBPlant
104 * Plant to accept L w.r.t. Buechi acceptance
105 * @param rCAlph
106 * Controllable events
107 * @param rRSpec
108 * Specification to accept E w.r.t. Rabin acceptance
109 * @param rRes
110 * Resulting RabinAutomaton to accept the
111 * supremal controllable sunlanguage
112 *
113 * @exception Exception
114 * - alphabets of generators don't match (id 100)
115 * - plant nondeterministic (id 201)
116 * - spec nondeterministic (id 203)
117 * - plant and spec nondeterministic (id 204)
118 *
119 * @ingroup OmgPlugin
120 *
121 */
122extern FAUDES_API void SupRabinCon(
123 const Generator& rBPlant,
124 const EventSet& rCAlph,
125 const RabinAutomaton& rRSpec,
126 RabinAutomaton& rRes);
127
128
129
130/**
131 * Omega-synthesis w.r.t. Buechi acceptance
132 *
133 * This is the RTI wrapper for
134 * SupRabinCon(const Generator&, const EventSet&, const Generator&, Generator&).
135 * Controllability attributes are taken from the plant argument.
136 * Attributes will be copied from the plant argument.
137 *
138 *
139 * @param rBPlant
140 * System to accept L w.r.t. Buechi acceptance
141 * @param rRSpec
142 * Specification to accept E w.r.t. Rabin acceptance
143 * @param rResGen
144 * Reference to resulting RabinAutomaton to accept the
145 * supremal controllable sunlanguage
146 *
147 * @exception Exception
148 * Alphabets of generators don't match (id 100)
149 * plant nondeterministic (id 201)
150 * spec nondeterministic (id 203)
151 * plant and spec nondeterministic (id 204)
152 *
153 * @ingroup OmgPlugin
154 */
155extern FAUDES_API void SupRabinCon(
156 const System& rBPlant,
157 const RabinAutomaton& rRSpec,
158 RabinAutomaton& rRes);
159
160
161/**
162 * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
163 *
164 * Computation of the "greedy" controller that runs for early acceptance.
165 * The result is a Buechi automaton of the closed-loop behaviour under
166 * greedy control. The closure is readily utilised as a controller.
167 *
168 * Parameter restrictions: both generators must be deterministic and
169 * refer to the same alphabet.
170 *
171 * @param rBPlant
172 * Plant to accept L w.r.t. Buechi acceptance
173 * @param rCAlph
174 * Controllable events
175 * @param rRSpec
176 * Specification to accept E w.r.t. Rabin acceptance
177 * @param rRes
178 * Closed-loop behaviour under greedy control.
179 *
180 * @exception Exception
181 * - alphabets of generators don't match (id 100)
182 * - plant nondeterministic (id 201)
183 * - spec nondeterministic (id 203)
184 * - plant and spec nondeterministic (id 204)
185 *
186 * @ingroup OmgPlugin
187 *
188 */
189extern FAUDES_API void RabinCtrl(
190 const Generator& rBPlant,
191 const EventSet& rCAlph,
192 const RabinAutomaton& rRSpec,
193 Generator& rRes);
194
195
196/**
197 * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
198 *
199 * Computation of the "greedy" supervisor that runs for early acceptance; this
200 * variant retrieves controllabillity arguments from the specified plant.
201 * The result is a Buechi automaton of the closed-loop behaviour under
202 * greedy control. The closure is readily utilised as a controller.
203 *
204 * Parameter restrictions: both generators must be deterministic and
205 * refer to the same alphabet.
206 *
207 * @param rBPlant
208 * Plant to accept L w.r.t. Buechi acceptance
209 * @param rRSpec
210 * Specification to accept E w.r.t. Rabin acceptance
211 * @param rRes
212 * Closed-loop behaviour udner greedy control.
213 *
214 * @exception Exception
215 * - alphabets of generators don't match (id 100)
216 * - plant nondeterministic (id 201)
217 * - spec nondeterministic (id 203)
218 * - plant and spec nondeterministic (id 204)
219 *
220 *
221 * @ingroup OmgPlugin
222 *
223 */
224extern FAUDES_API void RabinCtrl(
225 const System& rBPlant,
226 const RabinAutomaton& rRSpec,
227 Generator& rRes);
228
229
230/**
231 * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
232 *
233 * Computation of a controller that respects next to the common upper bound
234 * specification also a lower bound. Only on exit of the lower-bound, the greedy
235 * controlle is activated.
236 * The result returned is a Buechi automaton of the closed-loop behaviour. The
237 * closure is readily utilised as a controller.
238 *
239 * Parameter restrictions: both generators must be deterministic and
240 * refer to the same alphabet. The lower bound argument is interpreted as the generated
241 * omega-language intersected with the plant behaviour. The effective lower bound
242 * must not exceed the supremal omega-controllable sublanguage of the upper bound
243 * specification. This is currently not checked.
244 *
245 * @param rBPlant
246 * Plant to accept L w.r.t. Buechi acceptance
247 * @param rGLSpec
248 * Specification to be generate the lower bound A
249 * @param rRUSpec
250 * Specification to accept the upper bound E w.r.t. Rabin acceptance
251 * @param rRes
252 * Closed-loop behaviour.
253 *
254 * @exception Exception
255 * - alphabets of generators don't match (id 100)
256 * - plant nondeterministic (id 201)
257 * - spec nondeterministic (id 203)
258 * - plant and spec nondeterministic (id 204)
259 *
260 *
261 * @ingroup OmgPlugin
262 *
263 */
264extern FAUDES_API void RabinCtrl(
265 const Generator& rBPlant,
266 const EventSet& rCAlph,
267 const Generator& rGLSpec,
268 const RabinAutomaton& rRUSpec,
269 Generator& rRes);
270
271/**
272 * Omega-synthesis w.r.t. Buechi/Rabin acceptance condition
273 *
274 * Computation of a controller that respects next to the common upper bound
275 * specification also a lower bound. Only on exit of the lower-bound, the greedy
276 * controlle is activated. This is an API wrapper to obtain controllability attributes
277 * from the plant parameter.
278 * The result returned is a Buechi automaton of the closed-loop behaviour. The
279 * closure is readily utilised as a controller.
280 *
281 * Parameter restrictions: both generators must be deterministic and
282 * refer to the same alphabet. The lower bound argument is interpreted as the generated
283 * omega-language intersected with the plant behaviour. The effective lower bound
284 * must not exceed the supremal omega-controllable sublanguage of the upper bound
285 * specification. This is currently not checked.
286 *
287 * @param rBPlant
288 * System to accept L w.r.t. Buechi acceptance
289 * @param rGLSpec
290 * Specification to be generate the lower bound A
291 * @param rRUSpec
292 * Specification to accept the upper bound E w.r.t. Rabin acceptance
293 * @param rRes
294 * Closed-loop behaviour.
295 *
296 * @exception Exception
297 * - alphabets of generators don't match (id 100)
298 * - plant nondeterministic (id 201)
299 * - spec nondeterministic (id 203)
300 * - plant and spec nondeterministic (id 204)
301 *
302 *
303 * @ingroup OmgPlugin
304 *
305 */
306extern FAUDES_API void RabinCtrl(
307 const System& rBPlant,
308 const Generator& rGLSpec,
309 const RabinAutomaton& rRUSpec,
310 Generator& rRes);
311
312
313} // namespace faudes
314
315#endif
316
#define FAUDES_API
IndexSet StateSet
NameSet EventSet
vGenerator Generator
TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > System
void SupRabinCon(const Generator &rBPlant, const EventSet &rCAlph, const RabinAutomaton &rRSpec, RabinAutomaton &rRes)
void RabinCtrlPfx(const RabinAutomaton &rRAut, const EventSet &rSigmaCtrl, StateSet &rCtrlPfx)
void RabinCtrl(const Generator &rBPlant, const EventSet &rCAlph, const RabinAutomaton &rRSpec, Generator &rRes)
TrGenerator< RabinAcceptance, AttributeVoid, AttributeCFlags, AttributeVoid > RabinAutomaton

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