mCRL2
Loading...
Searching...
No Matches
lts_lts.h
Go to the documentation of this file.
1// Author(s): Jan Friso Groote
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9
10/** \file lts_lts.h
11 *
12 * \brief This file contains a class that contains labelled transition systems in lts (mcrl2) format.
13 * \details A labelled transition system in lts/mcrl2 format is a transition system
14 * with as state labels vectors of strings, and as transition labels strings.
15 * \author Jan Friso Groote
16 */
17
18
19#ifndef MCRL2_LTS_LTS_MCRL2_H
20#define MCRL2_LTS_LTS_MCRL2_H
21
22#include "mcrl2/lps/parse.h"
23#include "mcrl2/lps/print.h"
24#include "mcrl2/lps/state.h"
25#include "mcrl2/lps/probabilistic_data_expression.h"
26#include "mcrl2/lts/probabilistic_lts.h"
27
28namespace mcrl2
29{
30namespace lts
31{
32
33/** \brief This class contains state labels for an labelled transition system in .lts format.
34 \details A state label in .lts format consists of lists of balanced tree of data expressions.
35 These represent sets of state vectors. The reason for the sets is that states can
36 be merged by operations on state spaces, and if so, the sets of labels can easily
37 be joined.
38*/
40{
41 public:
43
44 /** \brief Default constructor.
45 */
47 {}
48
49 /** \brief Copy constructor. */
51
52 /** \brief Copy assignment. */
54
55 /** \brief Construct a single state label out of the elements in a container.
56 */
57 template < class CONTAINER >
58 explicit state_label_lts(const CONTAINER& l)
59 {
60 static_assert(std::is_same<typename CONTAINER::value_type, data::data_expression>::value,"Value type must be a data_expression");
61 this->push_front(lps::state(l.begin(),l.size()));
62 }
63
64 /** \brief Construct a state label out of a balanced tree of data expressions, representing a state label.
65 */
66 explicit state_label_lts(const lps::state& l)
67 {
68 this->push_front(l);
69 }
70
71 /** \brief Construct a state label out of list of balanced trees of data expressions, representing a state label.
72 */
73 explicit state_label_lts(const super& l)
74 : super(l)
75 {
76 }
77
78 /** \brief An operator to concatenate two state labels.
79 \details Is optimal whenever |l| is smaller than the left operand, i.e. |l| < |this|.
80 */
82 {
83 // The order of the state labels should not matter. For efficiency the elements of l are inserted in front of the aterm_list.
84 state_label_lts result(*this);
85
86 for (const lps::state& el : l)
87 {
88 result.push_front(el);
89 }
90
91 return result;
92 }
93
94 /** \brief Create a state label consisting of a number as the only list element.
95 */
96 static state_label_lts number_to_label(const std::size_t n)
97 {
98 return state_label_lts(lps::state(mcrl2::data::sort_nat::nat(n)));
99 }
100};
101
102/** \brief Pretty print a state value of this LTS.
103 \details The label is printed as (t1,...,tn) if it consists of a single label.
104 Otherwise the labels are printed with square brackets surrounding it.
105 \param[in] label The state value to pretty print.
106 \return The pretty-printed representation of value. */
107
108inline std::string pp(const state_label_lts& label)
109{
110 std::string s;
111 if (label.size()!=1)
112 {
113 s += "[";
114 }
115 bool first=true;
116 for(const lps::state& l: label)
117 {
118 if (!first)
119 {
120 s += ", ";
121 }
122 first = false;
123 s += "(";
124 for (lps::state::iterator i=l.begin(); i!=l.end(); ++i)
125 {
126 if (i!=l.begin())
127 {
128 s += ",";
129 }
130 s += data::pp(*i);
131 }
132 s += ")";
133 }
134 if (label.size()!=1)
135 {
136 s += "]";
137 }
138 return s;
139}
140
141/** \brief A class containing the values for action labels for the .lts format.
142 \details An action label is a multi_action. */
143class action_label_lts: public mcrl2::lps::multi_action
144{
145 public:
146
147 /** \brief Default constructor. */
149 {}
150
151 /** \brief Copy constructor. */
153
154 /** \brief Copy assignment. */
156
157 /** \brief Constructor. */
158 explicit action_label_lts(const mcrl2::lps::multi_action& a)
160 {
161 }
162
163 /** \brief Hide the actions with labels in tau_actions.
164 \return Returns whether the hidden action becomes empty, i.e. a tau or hidden action.
165 */
166 void hide_actions(const std::vector<std::string>& tau_actions)
167 {
168 process::action_vector new_multi_action;
169 for (const process::action& a: this->actions())
170 {
171 if (std::find(tau_actions.begin(),tau_actions.end(),
172 std::string(a.label().name()))==tau_actions.end()) // this action must not be hidden.
173 {
174 new_multi_action.push_back(a);
175 }
176 }
177 *this= action_label_lts(lps::multi_action(process::action_list(new_multi_action.begin(), new_multi_action.end()),time()));
178 }
179
180 /* \brief The action label that represents the internal action.
181 */
183 {
184 static action_label_lts tau_action=action_label_lts();
185 return tau_action;
186 }
187
188 protected:
189 /// A function to sort a multi action to guarantee that multi-actions are compared properly.
190 static mcrl2::lps::multi_action sort_multiactions(const mcrl2::lps::multi_action& a)
191 {
192 if (a.actions().size()<=1)
193 {
194 return a;
195 }
196 std::multiset<process::action> sorted_actions(a.actions().begin(), a.actions().end());
197 return mcrl2::lps::multi_action(process::action_list(sorted_actions.begin(),sorted_actions.end()),a.time());
198 }
199};
200
201/** \brief Print the action label to string. */
202inline std::string pp(const action_label_lts& l)
203{
204 return lps::pp(mcrl2::lps::multi_action(l));
205}
206
207/** \brief Parse a string into an action label.
208 \details The string is typechecked against the data specification and
209 list of declared actions. If parsing or type checking fails, an
210 mcrl2::runtime_error is thrown.
211 \param[in] multi_action_string The string to be parsed.
212 \param[in] data_spec The data specification used for parsing.
213 \param[in] act_decls Action declarations.
214 \return The parsed and type checked multi action. */
215inline action_label_lts parse_lts_action(
216 const std::string& multi_action_string,
217 const data::data_specification& data_spec,
218 lps::multi_action_type_checker& typechecker)
219{
220 std::string l(multi_action_string);
221 lps::multi_action al;
222 // Find an @ symbol in the action, in which case it is timed.
223 size_t position_of_at=l.find_first_of('@');
224 std::string time_expression_string;
225 if (position_of_at!=std::string::npos)
226 {
227 // The at symbol is found. It is a timed action.
228 time_expression_string=l.substr(position_of_at+1,l.size());
229 l=l.substr(0,position_of_at-1);
230 }
231 try
232 {
233 al=lps::parse_multi_action(l, typechecker, data_spec);
234 }
235 catch (mcrl2::runtime_error& e)
236 {
237 throw mcrl2::runtime_error("Parse error in action label " + multi_action_string + ".\n" + e.what());
238 }
239
240 if (time_expression_string.size()>0)
241 {
242 try
243 {
244 data::data_expression time=parse_data_expression(time_expression_string,data::variable_list(),data_spec);
245 // Translate the sort of time to a real.
247 {
248#ifdef MCRL2_ENABLE_MACHINENUMBERS
249 time = data::sort_nat::pos2nat(time);
250#else
251 time = data::sort_nat::cnat(time);
252#endif
253 }
255 {
256 time = data::sort_int::cint(time);
257 }
259 {
261 }
263 {
264 throw mcrl2::runtime_error("The time is not of sort Pos, Nat, Int or Real\n");
265 }
267 }
268 catch (mcrl2::runtime_error& e)
269 {
270 throw mcrl2::runtime_error("Parse error in the time expression " + multi_action_string + ".\n" + e.what());
271 }
272 }
273 return action_label_lts(al);
274}
275
276namespace detail
277{
278
279/** \brief a base class for lts_lts_t and probabilistic_lts_t.
280 */
282{
283 protected:
287
288 public:
289 /// \brief Default constructor
291 {}
292
293 /// \brief Standard equality function;
294 bool operator==(const lts_lts_base& other) const
295 {
296 return m_data_spec==other.m_data_spec &&
297 m_parameters==other.m_parameters &&
298 m_action_decls==other.m_action_decls;
299 }
300
302 {
303 const data::data_specification auxd=m_data_spec;
304 m_data_spec=l.m_data_spec;
305 l.m_data_spec=auxd;
306 m_parameters.swap(l.m_parameters);
307 m_action_decls.swap(l.m_action_decls);
308 }
309
310 /** \brief Yields the type of this lts, in this case lts_lts. */
311 static lts_type type()
312 {
313 return lts_lts;
314 }
315
316 /** \brief Returns the mCRL2 data specification of this LTS.
317 */
318 const data::data_specification& data() const
319 {
320 return m_data_spec;
321 }
322
323 /** \brief Return action label declarations stored in this LTS.
324 */
326 {
327 return m_action_decls;
328 }
329
330 /** \brief Set the action label information for this LTS.
331 * \param[in] decls The action labels to be set in this lts.
332 */
334 {
335 m_action_decls=decls;
336 }
337
338 /** \brief Set the mCRL2 data specification of this LTS.
339 * \param[in] spec The mCRL2 data specification for this LTS.
340 */
342 {
343 m_data_spec=spec;
344 }
345
346 /** \brief Return the process parameters stored in this LTS.
347 */
349 {
350 return m_parameters;
351 }
352
353 /** \brief Returns the i-th parameter of the state vectors stored in this LTS.
354 * \return The state parameters stored in this LTS.
355 */
356 const data::variable& process_parameter(std::size_t i) const
357 {
358 assert(i<m_parameters.size());
359 data::variable_list::const_iterator j=m_parameters.begin();
360 for(std::size_t c=0; c!=i; ++j, ++c)
361 {}
362 return *j;
363 }
364
365
366 /** \brief Set the state parameters for this LTS.
367 * \param[in] params The state parameters for this lts.
368 */
370 {
371 m_parameters=params;
372 }
373
374};
375
376} // namespace detail
377
378
379/** \brief This class contains labelled transition systems in .lts format.
380 \details In this .lts format, an action label is a multi action, and a
381 state label is an expression of the form STATE(t1,...,tn) where
382 ti are data expressions.
383*/
385{
386 public:
387 /** \brief Creates an object containing no information. */
389
390 /** \brief Load the labelled transition system from file.
391 * \details If the filename is empty, the result is read from stdout.
392 * \param[in] filename Name of the file to which this lts is written.
393 */
394 void load(const std::string& filename);
395
396 /** \brief Save the labelled transition system to file.
397 * \details If the filename is empty, the result is read from stdin.
398 * \param[in] filename Name of the file from which this lts is read.
399 */
400 void save(const std::string& filename) const;
401};
402
403/** \brief This class contains probabilistic labelled transition systems in .lts format.
404 \details In this .lts format, an action label is a multi action, and a
405 state label is an expression of the form STATE(t1,...,tn) where
406 ti are data expressions.
407*/
413{
414 public:
415 /** \brief Creates an object containing no information. */
417
418 /** \brief Load the labelled transition system from file.
419 * \details If the filename is empty, the result is read from stdout.
420 * \param[in] filename Name of the file to which this lts is written.
421 */
422 void load(const std::string& filename);
423
424 /** \brief Save the labelled transition system to file.
425 * \details If the filename is empty, the result is read from stdin.
426 * \param[in] filename Name of the file from which this lts is read.
427 */
428 void save(const std::string& filename) const;
429};
430} // namespace lts
431} // namespace mcrl2
432
433namespace std
434{
435
436/// \brief specialization of the standard std::hash function for an action_label_string.
437template<>
438struct hash< mcrl2::lts::action_label_lts >
439{
440 std::size_t operator()(const mcrl2::lts::action_label_lts& as) const
441 {
442 hash<mcrl2::lps::multi_action> hasher;
443 return hasher(as);
444 }
445};
446
447} // namespace std
448
449
450#endif
const aterm & operator[](const size_type i) const
Returns the i-th argument.
Definition aterm.h:187
const function_symbol & function() const
Returns the function symbol belonging to an aterm.
Definition aterm.h:144
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
bool operator==(const function_symbol &f) const
Equality test.
A list of aterm objects.
Definition aterm_list.h:24
void swap(unprotected_aterm_core &t) noexcept
Swaps this term with its argument.
Definition aterm_core.h:152
bool operator==(const unprotected_aterm_core &t) const
Comparison operator.
Definition aterm_core.h:83
bool operator!=(const unprotected_aterm_core &t) const
Inequality operator on two unprotected aterms.
Definition aterm_core.h:92
action_formula(action_formula &&) noexcept=default
action_formula & operator=(const action_formula &) noexcept=default
action_formula(const atermpp::aterm &term)
action_formula(const data::data_expression &x)
\brief Constructor Z6.
action_formula(const action_formula &) noexcept=default
Move semantics.
action_formula & operator=(action_formula &&) noexcept=default
action_formula(const data::untyped_data_parameter &x)
\brief Constructor Z6.
action_formula()
\brief Default constructor X3.
action_formula(const process::untyped_multi_action &x)
\brief Constructor Z6.
\brief The and operator for action formulas
and_ & operator=(const and_ &) noexcept=default
and_ & operator=(and_ &&) noexcept=default
and_(const action_formula &left, const action_formula &right)
\brief Constructor Z14.
and_()
\brief Default constructor X3.
and_(and_ &&) noexcept=default
const action_formula & left() const
and_(const atermpp::aterm &term)
and_(const and_ &) noexcept=default
Move semantics.
const action_formula & right() const
\brief The at operator for action formulas
at(const atermpp::aterm &term)
const data::data_expression & time_stamp() const
at & operator=(at &&) noexcept=default
const action_formula & operand() const
at(const at &) noexcept=default
Move semantics.
at(at &&) noexcept=default
at()
\brief Default constructor X3.
at & operator=(const at &) noexcept=default
at(const action_formula &operand, const data::data_expression &time_stamp)
\brief Constructor Z14.
\brief The existential quantification operator for action formulas
exists(const atermpp::aterm &term)
exists & operator=(exists &&) noexcept=default
exists(exists &&) noexcept=default
exists(const exists &) noexcept=default
Move semantics.
exists()
\brief Default constructor X3.
const data::variable_list & variables() const
exists & operator=(const exists &) noexcept=default
const action_formula & body() const
exists(const data::variable_list &variables, const action_formula &body)
\brief Constructor Z14.
\brief The value false for action formulas
false_(const atermpp::aterm &term)
false_()
\brief Default constructor X3.
false_(false_ &&) noexcept=default
false_(const false_ &) noexcept=default
Move semantics.
false_ & operator=(const false_ &) noexcept=default
false_ & operator=(false_ &&) noexcept=default
\brief The universal quantification operator for action formulas
forall & operator=(const forall &) noexcept=default
const action_formula & body() const
forall & operator=(forall &&) noexcept=default
forall(const atermpp::aterm &term)
const data::variable_list & variables() const
forall()
\brief Default constructor X3.
forall(const data::variable_list &variables, const action_formula &body)
\brief Constructor Z14.
forall(const forall &) noexcept=default
Move semantics.
forall(forall &&) noexcept=default
\brief The implication operator for action formulas
const action_formula & left() const
imp(const imp &) noexcept=default
Move semantics.
imp(imp &&) noexcept=default
imp & operator=(imp &&) noexcept=default
imp(const action_formula &left, const action_formula &right)
\brief Constructor Z14.
imp()
\brief Default constructor X3.
imp & operator=(const imp &) noexcept=default
imp(const atermpp::aterm &term)
const action_formula & right() const
\brief The multi action for action formulas
multi_action(const multi_action &) noexcept=default
Move semantics.
multi_action(multi_action &&) noexcept=default
multi_action(const process::action_list &actions)
\brief Constructor Z14.
multi_action(const atermpp::aterm &term)
multi_action & operator=(const multi_action &) noexcept=default
multi_action()
\brief Default constructor X3.
const process::action_list & actions() const
multi_action & operator=(multi_action &&) noexcept=default
\brief The not operator for action formulas
not_(const action_formula &operand)
\brief Constructor Z14.
not_()
\brief Default constructor X3.
const action_formula & operand() const
not_(const atermpp::aterm &term)
not_(not_ &&) noexcept=default
not_(const not_ &) noexcept=default
Move semantics.
not_ & operator=(const not_ &) noexcept=default
not_ & operator=(not_ &&) noexcept=default
\brief The or operator for action formulas
or_ & operator=(const or_ &) noexcept=default
or_(or_ &&) noexcept=default
or_()
\brief Default constructor X3.
or_ & operator=(or_ &&) noexcept=default
or_(const action_formula &left, const action_formula &right)
\brief Constructor Z14.
or_(const atermpp::aterm &term)
or_(const or_ &) noexcept=default
Move semantics.
const action_formula & right() const
const action_formula & left() const
\brief The value true for action formulas
true_(true_ &&) noexcept=default
true_ & operator=(const true_ &) noexcept=default
true_()
\brief Default constructor X3.
true_(const true_ &) noexcept=default
Move semantics.
true_(const atermpp::aterm &term)
true_ & operator=(true_ &&) noexcept=default
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
Definition data.cpp:108
\brief A data variable
Definition variable.h:28
logger(const log_level_t l)
Default constructor.
Definition logger.h:164
\brief A timed multi-action
multi_action(const multi_action &) noexcept=default
Move semantics.
const process::action_list & actions() const
const data::data_expression & time() const
multi_action(multi_action &&) noexcept=default
multi_action(const process::action_list &actions=process::action_list(), data::data_expression time=data::undefined_real())
Constructor.
A class containing the values for action labels for the .lts format.
Definition lts_lts.h:144
action_label_lts & operator=(const action_label_lts &)=default
Copy assignment.
static mcrl2::lps::multi_action sort_multiactions(const mcrl2::lps::multi_action &a)
A function to sort a multi action to guarantee that multi-actions are compared properly.
Definition lts_lts.h:190
void hide_actions(const std::vector< std::string > &tau_actions)
Hide the actions with labels in tau_actions.
Definition lts_lts.h:166
action_label_lts(const action_label_lts &)=default
Copy constructor.
static const action_label_lts & tau_action()
Definition lts_lts.h:182
action_label_lts()
Default constructor.
Definition lts_lts.h:148
action_label_lts(const mcrl2::lps::multi_action &a)
Constructor.
Definition lts_lts.h:158
This class contains strings to be used as values for action labels in lts's.
mcrl2::state_formulas::state_formula conjunction(std::set< mcrl2::state_formulas::state_formula > terms) const
conjunction Creates a conjunction of state formulas
regular_formulas::regular_formula create_regular_formula(const mcrl2::lts::action_label_string &a) const
create_regular_formula Creates a regular formula that represents action a
regular_formulas::regular_formula create_regular_formula(const mcrl2::lps::multi_action &a) const
create_regular_formula Creates a regular formula that represents action a
std::vector< bool > block_is_in_to_be_processed
std::map< block_index_type, block_index_type > right_child
std::vector< block_index_type > BL
bool in_same_class(const std::size_t s, const std::size_t t) const
Returns whether two states are in the same bisimulation equivalence class.
mcrl2::state_formulas::state_formula until_formula(const mcrl2::state_formulas::state_formula &phi1, const label_type &a, const mcrl2::state_formulas::state_formula &phi2)
until_formula Creates a state formula that corresponds to the until operator phi1phi2 from HMLU
std::size_t get_eq_class(const std::size_t s) const
Gives the bisimulation equivalence class number of a state.
bisim_partitioner(LTS_TYPE &l, const bool branching=false, const bool preserve_divergence=false, const bool generate_counter_examples=false)
Creates a bisimulation partitioner for an LTS.
~bisim_partitioner()=default
Destroys this partitioner.
std::map< block_index_type, std::set< block_index_type > > r_tauP
std::map< block_index_type, label_type > split_by_action
std::size_t num_eq_classes() const
Gives the number of bisimulation equivalence classes of the LTS.
void order_recursively_on_tau_reachability(const state_type s, std::map< state_type, std::vector< state_type > > &inert_transition_map, std::vector< non_bottom_state > &new_non_bottom_states, std::set< state_type > &visited)
std::vector< block_index_type > to_be_processed
std::map< block_index_type, block_index_type > split_by_block
void replace_transition_system(const bool branching, const bool preserve_divergences)
Replaces the transition relation of the current lts by the transitions of the bisimulation reduced tr...
void order_on_tau_reachability(std::vector< non_bottom_state > &non_bottom_states)
void split_the_blocks_in_BL(bool &partition_is_unstable, const label_type splitter_label, const block_index_type splitter_block)
void refine_partition_until_it_becomes_stable(const bool branching, const bool preserve_divergence)
void create_initial_partition(const bool branching, const bool preserve_divergences)
std::vector< state_type > block_index_of_a_state
std::map< block_index_type, std::set< block_index_type > > r_alpha
mcrl2::state_formulas::state_formula counter_formula_aux(const block_index_type B1, const block_index_type B2)
mcrl2::state_formulas::state_formula counter_formula(const std::size_t s, const std::size_t t)
Creates a state formula that distinguishes state s from state t.
void check_internal_consistency_of_the_partitioning_data_structure(const bool branching, const bool preserve_divergence) const
outgoing_transitions_per_state_action_t outgoing_transitions
A class that can be used to store counterexample trees and.
std::pair< label_type, state_type > label_state_pair
indexed_sorted_vector_for_transitions(const std::vector< transition > &transitions, state_type num_states, bool outgoing)
const std::vector< CONTENT > & get_transitions() const
a base class for lts_lts_t and probabilistic_lts_t.
Definition lts_lts.h:282
static lts_type type()
Yields the type of this lts, in this case lts_lts.
Definition lts_lts.h:311
void set_process_parameters(const data::variable_list &params)
Set the state parameters for this LTS.
Definition lts_lts.h:369
bool operator==(const lts_lts_base &other) const
Standard equality function;.
Definition lts_lts.h:294
process::action_label_list m_action_decls
Definition lts_lts.h:286
void swap(lts_lts_base &l)
Definition lts_lts.h:301
void set_action_label_declarations(const process::action_label_list &decls)
Set the action label information for this LTS.
Definition lts_lts.h:333
const data::variable & process_parameter(std::size_t i) const
Returns the i-th parameter of the state vectors stored in this LTS.
Definition lts_lts.h:356
data::data_specification m_data_spec
Definition lts_lts.h:284
const data::variable_list & process_parameters() const
Return the process parameters stored in this LTS.
Definition lts_lts.h:348
void set_data(const data::data_specification &spec)
Set the mCRL2 data specification of this LTS.
Definition lts_lts.h:341
lts_lts_base()
Default constructor.
Definition lts_lts.h:290
const process::action_label_list & action_label_declarations() const
Return action label declarations stored in this LTS.
Definition lts_lts.h:325
data::variable_list m_parameters
Definition lts_lts.h:285
This class contains an scc partitioner removing inert tau loops.
Definition liblts_scc.h:128
This class contains labelled transition systems in .lts format.
Definition lts_lts.h:385
lts_lts_t()
Creates an object containing no information.
Definition lts_lts.h:388
A class that contains a labelled transition system.
Definition lts.h:83
This class contains probabilistic labelled transition systems in .lts format.
Definition lts_lts.h:413
probabilistic_lts_lts_t()
Creates an object containing no information.
Definition lts_lts.h:416
A class that contains a labelled transition system.
Class for computing the signature for strong bisimulation.
Definition sigref.h:75
Class for computing the signature for branching bisimulation.
Definition sigref.h:105
Class for computing the signature for divergence preserving branching bisimulation.
Definition sigref.h:185
Signature based reductions for labelled transition systems.
Definition sigref.h:350
This class contains state labels for an labelled transition system in .lts format.
Definition lts_lts.h:40
state_label_lts()
Default constructor.
Definition lts_lts.h:46
state_label_lts(const state_label_lts &)=default
Copy constructor.
state_label_lts operator+(const state_label_lts &l) const
An operator to concatenate two state labels.
Definition lts_lts.h:81
state_label_lts(const super &l)
Construct a state label out of list of balanced trees of data expressions, representing a state label...
Definition lts_lts.h:73
atermpp::term_list< lps::state > super
Definition lts_lts.h:42
state_label_lts(const lps::state &l)
Construct a state label out of a balanced tree of data expressions, representing a state label.
Definition lts_lts.h:66
state_label_lts & operator=(const state_label_lts &)=default
Copy assignment.
static state_label_lts number_to_label(const std::size_t n)
Create a state label consisting of a number as the only list element.
Definition lts_lts.h:96
state_label_lts(const CONTAINER &l)
Construct a single state label out of the elements in a container.
Definition lts_lts.h:58
A class containing triples, source label and target representing transitions.
Definition transition.h:48
transition(const std::size_t f, const std::size_t l, const std::size_t t)
Constructor (there is no default constructor).
Definition transition.h:67
size_type from() const
The source of the transition.
Definition transition.h:89
transition & operator=(transition &&t)=default
Move assignment.
size_type label() const
The label of the transition.
Definition transition.h:95
size_type to() const
The target of the transition.
Definition transition.h:102
std::size_t size_type
The type of the elements in a transition.
Definition transition.h:51
\brief An action label
action_label(const core::identifier_string &name, const data::sort_expression_list &sorts)
\brief Constructor Z12.
action(const action_label &label, const data::data_expression_list &arguments)
\brief Constructor Z14.
\brief An untyped multi action or data application
\brief The alt operator for regular formulas
alt(const atermpp::aterm &term)
alt()
\brief Default constructor X3.
alt & operator=(alt &&) noexcept=default
const regular_formula & right() const
alt(const regular_formula &left, const regular_formula &right)
\brief Constructor Z14.
alt(const alt &) noexcept=default
Move semantics.
alt(alt &&) noexcept=default
alt & operator=(const alt &) noexcept=default
const regular_formula & left() const
regular_formula()
\brief Default constructor X3.
regular_formula(const action_formulas::action_formula &x)
\brief Constructor Z6.
regular_formula(const atermpp::aterm &term)
regular_formula(const regular_formula &) noexcept=default
Move semantics.
regular_formula(const data::data_expression &x)
\brief Constructor Z6.
regular_formula & operator=(const regular_formula &) noexcept=default
regular_formula(regular_formula &&) noexcept=default
regular_formula & operator=(regular_formula &&) noexcept=default
\brief The seq operator for regular formulas
seq(const regular_formula &left, const regular_formula &right)
\brief Constructor Z14.
const regular_formula & right() const
seq & operator=(const seq &) noexcept=default
seq(const seq &) noexcept=default
Move semantics.
const regular_formula & left() const
seq(seq &&) noexcept=default
seq()
\brief Default constructor X3.
seq & operator=(seq &&) noexcept=default
seq(const atermpp::aterm &term)
\brief The 'trans or nil' operator for regular formulas
trans_or_nil & operator=(trans_or_nil &&) noexcept=default
trans_or_nil & operator=(const trans_or_nil &) noexcept=default
trans_or_nil(const trans_or_nil &) noexcept=default
Move semantics.
trans_or_nil(const regular_formula &operand)
\brief Constructor Z14.
trans_or_nil()
\brief Default constructor X3.
trans_or_nil(trans_or_nil &&) noexcept=default
trans_or_nil(const atermpp::aterm &term)
const regular_formula & operand() const
\brief The trans operator for regular formulas
trans(const atermpp::aterm &term)
trans(trans &&) noexcept=default
const regular_formula & operand() const
trans & operator=(const trans &) noexcept=default
trans & operator=(trans &&) noexcept=default
trans()
\brief Default constructor X3.
trans(const trans &) noexcept=default
Move semantics.
trans(const regular_formula &operand)
\brief Constructor Z14.
\brief An untyped regular formula or action formula
untyped_regular_formula()
\brief Default constructor X3.
untyped_regular_formula & operator=(untyped_regular_formula &&) noexcept=default
untyped_regular_formula & operator=(const untyped_regular_formula &) noexcept=default
untyped_regular_formula(const std::string &name, const regular_formula &left, const regular_formula &right)
\brief Constructor Z2.
untyped_regular_formula(const core::identifier_string &name, const regular_formula &left, const regular_formula &right)
\brief Constructor Z14.
const core::identifier_string & name() const
untyped_regular_formula(const untyped_regular_formula &) noexcept=default
Move semantics.
untyped_regular_formula(untyped_regular_formula &&) noexcept=default
Standard exception class for reporting runtime errors.
Definition exception.h:27
\brief The and operator for state formulas
and_(and_ &&) noexcept=default
const state_formula & right() const
and_(const atermpp::aterm &term)
and_(const and_ &) noexcept=default
Move semantics.
and_(const state_formula &left, const state_formula &right)
\brief Constructor Z14.
and_ & operator=(const and_ &) noexcept=default
and_()
\brief Default constructor X3.
and_ & operator=(and_ &&) noexcept=default
const state_formula & left() const
\brief The multiply operator for state formulas with values
const_multiply_alt & operator=(const const_multiply_alt &) noexcept=default
const state_formula & left() const
const_multiply_alt(const state_formula &left, const data::data_expression &right)
\brief Constructor Z14.
const_multiply_alt(const const_multiply_alt &) noexcept=default
Move semantics.
const_multiply_alt(const_multiply_alt &&) noexcept=default
const data::data_expression & right() const
const_multiply_alt(const atermpp::aterm &term)
const_multiply_alt & operator=(const_multiply_alt &&) noexcept=default
const_multiply_alt()
\brief Default constructor X3.
\brief The multiply operator for state formulas with values
const data::data_expression & left() const
const_multiply(const const_multiply &) noexcept=default
Move semantics.
const_multiply(const data::data_expression &left, const state_formula &right)
\brief Constructor Z14.
const_multiply()
\brief Default constructor X3.
const_multiply(const_multiply &&) noexcept=default
const_multiply & operator=(const const_multiply &) noexcept=default
const_multiply & operator=(const_multiply &&) noexcept=default
const_multiply(const atermpp::aterm &term)
const state_formula & right() const
\brief The timed delay operator for state formulas
delay_timed(const atermpp::aterm &term)
delay_timed()
\brief Default constructor X3.
delay_timed & operator=(const delay_timed &) noexcept=default
const data::data_expression & time_stamp() const
delay_timed(const data::data_expression &time_stamp)
\brief Constructor Z14.
delay_timed(const delay_timed &) noexcept=default
Move semantics.
delay_timed(delay_timed &&) noexcept=default
delay_timed & operator=(delay_timed &&) noexcept=default
\brief The delay operator for state formulas
delay & operator=(delay &&) noexcept=default
delay()
\brief Default constructor X3.
delay(const delay &) noexcept=default
Move semantics.
delay(delay &&) noexcept=default
delay(const atermpp::aterm &term)
delay & operator=(const delay &) noexcept=default
\brief The existential quantification operator for state formulas
exists(const data::variable_list &variables, const state_formula &body)
\brief Constructor Z14.
const state_formula & body() const
exists(const exists &) noexcept=default
Move semantics.
exists(exists &&) noexcept=default
exists & operator=(const exists &) noexcept=default
exists & operator=(exists &&) noexcept=default
exists()
\brief Default constructor X3.
exists(const atermpp::aterm &term)
const data::variable_list & variables() const
\brief The value false for state formulas
false_(false_ &&) noexcept=default
false_ & operator=(const false_ &) noexcept=default
false_ & operator=(false_ &&) noexcept=default
false_(const atermpp::aterm &term)
false_(const false_ &) noexcept=default
Move semantics.
false_()
\brief Default constructor X3.
\brief The universal quantification operator for state formulas
const state_formula & body() const
forall(const atermpp::aterm &term)
const data::variable_list & variables() const
forall & operator=(const forall &) noexcept=default
forall & operator=(forall &&) noexcept=default
forall(const forall &) noexcept=default
Move semantics.
forall(const data::variable_list &variables, const state_formula &body)
\brief Constructor Z14.
forall(forall &&) noexcept=default
forall()
\brief Default constructor X3.
\brief The implication operator for state formulas
imp()
\brief Default constructor X3.
imp(imp &&) noexcept=default
imp(const state_formula &left, const state_formula &right)
\brief Constructor Z14.
imp & operator=(const imp &) noexcept=default
const state_formula & left() const
const state_formula & right() const
imp(const atermpp::aterm &term)
imp(const imp &) noexcept=default
Move semantics.
imp & operator=(imp &&) noexcept=default
\brief The infimum over a data type for state formulas
infimum(const infimum &) noexcept=default
Move semantics.
infimum()
\brief Default constructor X3.
infimum(const data::variable_list &variables, const state_formula &body)
\brief Constructor Z14.
infimum & operator=(infimum &&) noexcept=default
const data::variable_list & variables() const
const state_formula & body() const
infimum(const atermpp::aterm &term)
infimum(infimum &&) noexcept=default
infimum & operator=(const infimum &) noexcept=default
\brief The may operator for state formulas
const state_formula & operand() const
may()
\brief Default constructor X3.
const regular_formulas::regular_formula & formula() const
may & operator=(const may &) noexcept=default
may & operator=(may &&) noexcept=default
may(const regular_formulas::regular_formula &formula, const state_formula &operand)
\brief Constructor Z14.
may(may &&) noexcept=default
may(const atermpp::aterm &term)
may(const may &) noexcept=default
Move semantics.
\brief The minus operator for state formulas
minus & operator=(minus &&) noexcept=default
minus(minus &&) noexcept=default
minus(const minus &) noexcept=default
Move semantics.
minus(const atermpp::aterm &term)
minus(const state_formula &operand)
\brief Constructor Z14.
const state_formula & operand() const
minus & operator=(const minus &) noexcept=default
minus()
\brief Default constructor X3.
\brief The mu operator for state formulas
const core::identifier_string & name() const
const data::assignment_list & assignments() const
mu(const mu &) noexcept=default
Move semantics.
mu(const std::string &name, const data::assignment_list &assignments, const state_formula &operand)
\brief Constructor Z2.
mu(const core::identifier_string &name, const data::assignment_list &assignments, const state_formula &operand)
\brief Constructor Z14.
mu & operator=(const mu &) noexcept=default
mu(mu &&) noexcept=default
mu & operator=(mu &&) noexcept=default
mu(const atermpp::aterm &term)
mu()
\brief Default constructor X3.
const state_formula & operand() const
\brief The must operator for state formulas
must(must &&) noexcept=default
must & operator=(must &&) noexcept=default
must(const atermpp::aterm &term)
must(const regular_formulas::regular_formula &formula, const state_formula &operand)
\brief Constructor Z14.
const regular_formulas::regular_formula & formula() const
must(const must &) noexcept=default
Move semantics.
const state_formula & operand() const
must()
\brief Default constructor X3.
must & operator=(const must &) noexcept=default
\brief The not operator for state formulas
not_(not_ &&) noexcept=default
not_(const not_ &) noexcept=default
Move semantics.
not_ & operator=(const not_ &) noexcept=default
not_ & operator=(not_ &&) noexcept=default
not_()
\brief Default constructor X3.
not_(const atermpp::aterm &term)
const state_formula & operand() const
not_(const state_formula &operand)
\brief Constructor Z14.
\brief The nu operator for state formulas
nu(const atermpp::aterm &term)
nu(nu &&) noexcept=default
nu(const core::identifier_string &name, const data::assignment_list &assignments, const state_formula &operand)
\brief Constructor Z14.
nu()
\brief Default constructor X3.
nu & operator=(const nu &) noexcept=default
nu & operator=(nu &&) noexcept=default
const core::identifier_string & name() const
nu(const std::string &name, const data::assignment_list &assignments, const state_formula &operand)
\brief Constructor Z2.
const state_formula & operand() const
nu(const nu &) noexcept=default
Move semantics.
const data::assignment_list & assignments() const
\brief The or operator for state formulas
or_(or_ &&) noexcept=default
or_()
\brief Default constructor X3.
or_(const or_ &) noexcept=default
Move semantics.
or_(const state_formula &left, const state_formula &right)
\brief Constructor Z14.
or_ & operator=(const or_ &) noexcept=default
const state_formula & right() const
or_ & operator=(or_ &&) noexcept=default
or_(const atermpp::aterm &term)
const state_formula & left() const
\brief The plus operator for state formulas with values
plus & operator=(plus &&) noexcept=default
plus & operator=(const plus &) noexcept=default
plus(const plus &) noexcept=default
Move semantics.
const state_formula & left() const
plus(const atermpp::aterm &term)
plus()
\brief Default constructor X3.
const state_formula & right() const
plus(plus &&) noexcept=default
plus(const state_formula &left, const state_formula &right)
\brief Constructor Z14.
state_formula(const state_formula &) noexcept=default
Move semantics.
state_formula()
\brief Default constructor X3.
state_formula(state_formula &&) noexcept=default
bool has_time() const
Returns true if the formula is timed.
state_formula(const data::untyped_data_parameter &x)
\brief Constructor Z6.
state_formula & operator=(state_formula &&) noexcept=default
state_formula(const data::data_expression &x)
\brief Constructor Z6.
state_formula(const atermpp::aterm &term)
state_formula & operator=(const state_formula &) noexcept=default
\brief The sum over a data type for state formulas
sum(const sum &) noexcept=default
Move semantics.
sum(sum &&) noexcept=default
sum(const atermpp::aterm &term)
sum(const data::variable_list &variables, const state_formula &body)
\brief Constructor Z14.
sum & operator=(sum &&) noexcept=default
sum()
\brief Default constructor X3.
const data::variable_list & variables() const
const state_formula & body() const
sum & operator=(const sum &) noexcept=default
\brief The supremum over a data type for state formulas
supremum & operator=(supremum &&) noexcept=default
supremum(supremum &&) noexcept=default
supremum(const atermpp::aterm &term)
supremum()
\brief Default constructor X3.
supremum(const supremum &) noexcept=default
Move semantics.
supremum & operator=(const supremum &) noexcept=default
const state_formula & body() const
const data::variable_list & variables() const
supremum(const data::variable_list &variables, const state_formula &body)
\brief Constructor Z14.
\brief The value true for state formulas
true_()
\brief Default constructor X3.
true_ & operator=(const true_ &) noexcept=default
true_(true_ &&) noexcept=default
true_(const true_ &) noexcept=default
Move semantics.
true_(const atermpp::aterm &term)
true_ & operator=(true_ &&) noexcept=default
\brief The state formula variable
variable & operator=(const variable &) noexcept=default
variable(const core::identifier_string &name, const data::data_expression_list &arguments)
\brief Constructor Z14.
variable(const variable &) noexcept=default
Move semantics.
variable(const std::string &name, const data::data_expression_list &arguments)
\brief Constructor Z2.
variable()
\brief Default constructor X3.
variable & operator=(variable &&) noexcept=default
const core::identifier_string & name() const
const data::data_expression_list & arguments() const
variable(variable &&) noexcept=default
variable(const atermpp::aterm &term)
\brief The timed yaled operator for state formulas
yaled_timed(yaled_timed &&) noexcept=default
yaled_timed & operator=(const yaled_timed &) noexcept=default
yaled_timed()
\brief Default constructor X3.
yaled_timed & operator=(yaled_timed &&) noexcept=default
yaled_timed(const yaled_timed &) noexcept=default
Move semantics.
yaled_timed(const data::data_expression &time_stamp)
\brief Constructor Z14.
yaled_timed(const atermpp::aterm &term)
const data::data_expression & time_stamp() const
\brief The yaled operator for state formulas
yaled()
\brief Default constructor X3.
yaled(const atermpp::aterm &term)
yaled & operator=(const yaled &) noexcept=default
yaled(const yaled &) noexcept=default
Move semantics.
yaled(yaled &&) noexcept=default
yaled & operator=(yaled &&) noexcept=default
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:391
#define BRANCH_BIS_EXPERIMENT_JFG
The main namespace for the aterm++ library.
Definition algorithm.h:21
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
std::vector< action_formula > action_formula_vector
\brief vector of action_formulas
bool is_at(const atermpp::aterm &x)
void swap(multi_action &t1, multi_action &t2)
\brief swap overload
atermpp::term_list< action_formula > action_formula_list
\brief list of action_formulas
void swap(true_ &t1, true_ &t2)
\brief swap overload
std::string pp(const action_formulas::action_formula &x)
void swap(false_ &t1, false_ &t2)
\brief swap overload
void make_not_(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const action_formulas::exists &x)
void swap(action_formula &t1, action_formula &t2)
\brief swap overload
std::string pp(const action_formulas::and_ &x)
std::set< data::variable > find_all_variables(const action_formulas::action_formula &x)
std::string pp(const action_formulas::at &x)
void swap(not_ &t1, not_ &t2)
\brief swap overload
bool is_or(const atermpp::aterm &x)
void swap(exists &t1, exists &t2)
\brief swap overload
bool is_true(const atermpp::aterm &x)
bool is_forall(const atermpp::aterm &x)
std::string pp(const action_formulas::imp &x)
void make_and_(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_false(const atermpp::aterm &x)
bool is_not(const atermpp::aterm &x)
std::string pp(const action_formulas::multi_action &x)
std::string pp(const action_formulas::or_ &x)
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const action_formulas::forall &x)
bool is_imp(const atermpp::aterm &x)
bool is_and(const atermpp::aterm &x)
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(at &t1, at &t2)
\brief swap overload
void swap(imp &t1, imp &t2)
\brief swap overload
void make_or_(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(forall &t1, forall &t2)
\brief swap overload
std::string pp(const action_formulas::not_ &x)
std::string pp(const action_formulas::false_ &x)
void make_multi_action(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(or_ &t1, or_ &t2)
\brief swap overload
bool is_multi_action(const atermpp::aterm &x)
void swap(and_ &t1, and_ &t2)
\brief swap overload
std::string pp(const action_formulas::true_ &x)
void make_at(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_exists(const atermpp::aterm &x)
bool is_action_formula(const atermpp::aterm &x)
const atermpp::function_symbol & function_symbol_StateImp()
const atermpp::function_symbol & function_symbol_StateMinus()
const atermpp::function_symbol & function_symbol_ActForall()
const atermpp::function_symbol & function_symbol_StateForall()
const atermpp::function_symbol & function_symbol_StateYaledTimed()
const atermpp::function_symbol & function_symbol_RegSeq()
const atermpp::function_symbol & function_symbol_StateNu()
const atermpp::function_symbol & function_symbol_StateConstantMultiplyAlt()
const atermpp::function_symbol & function_symbol_StateExists()
const atermpp::function_symbol & function_symbol_StateVar()
const atermpp::function_symbol & function_symbol_ActMultAct()
const atermpp::function_symbol & function_symbol_StateNot()
const atermpp::function_symbol & function_symbol_ActImp()
const atermpp::function_symbol & function_symbol_StateSum()
const atermpp::function_symbol & function_symbol_ActAt()
const atermpp::function_symbol & function_symbol_StateMu()
const atermpp::function_symbol & function_symbol_RegTransOrNil()
const atermpp::function_symbol & function_symbol_StateMay()
const atermpp::function_symbol & function_symbol_StatePlus()
const atermpp::function_symbol & function_symbol_RegTrans()
const atermpp::function_symbol & function_symbol_RegAlt()
const atermpp::function_symbol & function_symbol_ActAnd()
const atermpp::function_symbol & function_symbol_StateDelayTimed()
const atermpp::function_symbol & function_symbol_StateConstantMultiply()
const atermpp::function_symbol & function_symbol_StateOr()
const atermpp::function_symbol & function_symbol_ActOr()
const atermpp::function_symbol & function_symbol_StateAnd()
const atermpp::function_symbol & function_symbol_StateInfimum()
const atermpp::function_symbol & function_symbol_ActNot()
const atermpp::function_symbol & function_symbol_ActExists()
const atermpp::function_symbol & function_symbol_UntypedRegFrm()
const atermpp::function_symbol & function_symbol_StateSupremum()
const atermpp::function_symbol & function_symbol_StateMust()
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
Namespace for system defined sort int_.
application cint(const data_expression &arg0)
Application of function symbol @cInt.
Definition int1.h:104
const basic_sort & int_()
Constructor for sort expression Int.
Definition int1.h:47
Namespace for system defined sort nat.
const basic_sort & nat()
Constructor for sort expression Nat.
Definition nat1.h:46
application cnat(const data_expression &arg0)
Application of function symbol @cNat.
Definition nat1.h:164
Namespace for system defined sort pos.
const function_symbol & c1()
Constructor for function symbol @c1.
Definition pos1.h:78
const basic_sort & pos()
Constructor for sort expression Pos.
Definition pos1.h:45
Namespace for system defined sort real_.
application creal(const data_expression &arg0, const data_expression &arg1)
Application of function symbol @cReal.
Definition real1.h:132
const basic_sort & real_()
Constructor for sort expression Real.
Definition real1.h:48
Namespace for all data library functionality.
Definition data.cpp:22
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
bool is_untyped_data_parameter(const atermpp::aterm &x)
atermpp::term_list< variable > variable_list
\brief list of variables
atermpp::term_list< assignment > assignment_list
\brief list of assignments
Definition assignment.h:146
@ warning
Definition logger.h:34
@ verbose
Definition logger.h:37
The main namespace for the LPS library.
Definition constelm.h:21
atermpp::term_balanced_tree< data::data_expression > state
Definition state.h:24
A base class for the lts_dot labelled transition system.
bool bisimulation_compare(const LTS_TYPE &l1, const LTS_TYPE &l2, const bool branching=false, const bool preserve_divergences=false, const bool generate_counter_examples=false, const std::string &counter_example_file="", const bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
std::string supported_lts_formats_text(lts_type default_format, const std::set< lts_type > &supported)
Gives a textual list describing supported LTS formats.
Definition liblts.cpp:153
static std::string mime_type_strings[]
Definition liblts.cpp:85
std::string supported_lts_formats_text(const std::set< lts_type > &supported)
Gives a textual list describing supported LTS formats.
Definition liblts.cpp:185
std::size_t state_type
type used to store state (numbers and) counts
void bisimulation_reduce(LTS_TYPE &l, const bool branching=false, const bool preserve_divergences=false)
Reduce transition system l with respect to strong or (divergence preserving) branching bisimulation.
std::string extension_for_type(const lts_type type)
Gives the filename extension associated with an LTS format.
Definition liblts.cpp:118
void unmark_explicit_divergence_transitions(LTS_TYPE &l, const std::size_t divergent_transition_label)
std::string string_for_type(const lts_type type)
Gives a string representation of an LTS format.
Definition liblts.cpp:113
lts_type parse_format(std::string const &s)
Determines the LTS format from a format specification string.
Definition liblts.cpp:92
bool destructive_bisimulation_compare(LTS_TYPE &l1, LTS_TYPE &l2, const bool branching=false, const bool preserve_divergences=false, const bool generate_counter_examples=false, const std::string &counter_example_file="", const bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
static std::string type_desc_strings[]
Definition liblts.cpp:75
LABEL_TYPE make_divergence_label(const std::string &s)
const std::set< lts_type > & supported_lts_formats()
Gives the set of all supported LTS formats.
Definition liblts.cpp:140
std::string lts_extensions_as_string(const std::set< lts_type > &supported)
Gives a list of extensions for supported LTS formats.
Definition liblts.cpp:220
static const std::string type_strings[]
Definition liblts.cpp:71
bool lts_named_cmp(const std::string N[], T a, T b)
Definition liblts.cpp:148
std::string lts_extensions_as_string(const std::string &sep, const std::set< lts_type > &supported)
Gives a list of extensions for supported LTS formats.
Definition liblts.cpp:190
std::size_t mark_explicit_divergence_transitions(LTS_TYPE &l)
lts_type guess_format(std::string const &s, const bool be_verbose)
Determines the LTS format from a filename by its extension.
Definition liblts.cpp:26
static const std::string extension_strings[]
Definition liblts.cpp:73
void get_trans(const outgoing_transitions_per_state_t &begin, tree_set_store &tss, std::size_t d, std::vector< transition > &d_trans, LTS_TYPE &aut)
std::string mime_type_for_type(const lts_type type)
Gives the MIME type associated with an LTS format.
Definition liblts.cpp:123
static const std::set< lts_type > & initialise_supported_lts_formats()
Definition liblts.cpp:128
The main LTS namespace.
std::size_t label(const outgoing_transitions_per_state_action_t::const_iterator &i)
Label of an iterator exploring transitions per outgoing state and action.
lts_equivalence
LTS equivalence relations.
@ lts_eq_branching_bisim_sigref
@ lts_eq_divergence_preserving_weak_bisim
@ lts_eq_branching_bisim_gjkw
@ lts_eq_branching_bisim_gv
@ lts_eq_divergence_preserving_branching_bisim_sigref
@ lts_eq_divergence_preserving_branching_bisim
@ lts_eq_branching_bisim_gj
@ lts_eq_divergence_preserving_branching_bisim_gjkw
@ lts_eq_divergence_preserving_branching_bisim_gv
@ lts_eq_divergence_preserving_branching_bisim_gj
std::string pp(const state_label_lts &label)
Pretty print a state value of this LTS.
Definition lts_lts.h:108
bool is_deterministic(const LTS_TYPE &l)
Checks whether this LTS is deterministic.
lts_type
The enumerated type lts_type contains an index for every type type of labelled transition system that...
Definition lts_type.h:37
@ lts_type_min
Definition lts_type.h:46
@ lts_type_max
Definition lts_type.h:47
bool destructive_compare(LTS_TYPE &l1, LTS_TYPE &l2, const lts_preorder pre, const bool generate_counter_example, const std::string &counter_example_file="", const bool structured_output=false, const lps::exploration_strategy strategy=lps::es_breadth, const bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
transition_sort_style
Transition sort styles.
Definition transition.h:35
std::multimap< std::pair< transition::size_type, transition::size_type >, transition::size_type > outgoing_transitions_per_state_action_t
Type for exploring transitions per state and action.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair_reversed(const std::vector< transition > &trans)
Provide the transitions as a multimap accessible per from state and label, ordered backwardly.
lts_preorder
LTS preorder relations.
void group_transitions_on_label_tgt(std::vector< transition > &transitions, const std::size_t number_of_labels, const std::size_t tau_label_index, const std::size_t number_of_states)
static std::vector< std::size_t > bogus_todo_stack
void group_transitions_on_label(std::vector< transition > &transitions, std::function< std::size_t(const transition &)> get_label, const std::size_t number_of_labels, const std::size_t tau_label_index)
std::size_t to(const outgoing_pair_t &p)
Target state of a label state pair.
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair(const std::vector< transition > &trans)
Provide the transitions as a multimap accessible per from state and label.
std::size_t to(const outgoing_transitions_per_state_action_t::const_iterator &i)
To state of an iterator exploring transitions per outgoing state and action.
void sort_transitions(std::vector< transition > &transitions, const std::set< transition::size_type > &hidden_label_set, transition_sort_style ts=src_lbl_tgt)
Sorts the transitions using a sort style.
void sort_transitions(std::vector< transition > &transitions, transition_sort_style ts=src_lbl_tgt)
Sorts the transitions using a sort style.
void determinise(LTS_TYPE &l)
Determinises this LTS.
void group_transitions_on_tgt_label(std::vector< transition > &transitions, const std::size_t number_of_labels, const std::size_t tau_label_index, const std::size_t number_of_states)
void reduce(LTS_TYPE &l, lts_equivalence eq)
Applies a reduction algorithm to this LTS.
detail::indexed_sorted_vector_for_transitions< outgoing_pair_t > outgoing_transitions_per_state_t
void group_transitions_on_tgt_label(LTS_TYPE &aut)
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair_reversed(const std::vector< transition > &trans, const std::set< transition::size_type > &hide_label_set)
Provide the transitions as a multimap accessible per from state and label, ordered backwardly.
bool destructive_compare(LTS_TYPE &l1, LTS_TYPE &l2, const lts_equivalence eq, const bool generate_counter_examples=false, const std::string &counter_example_file=std::string(), const bool structured_output=false)
Checks whether this LTS is equivalent to another LTS.
std::string ptr(const transition t)
Sorts the transitions on labels. Action with the tau label are put first.
std::string pp(const action_label_lts &l)
Print the action label to string.
Definition lts_lts.h:202
outgoing_transitions_per_state_action_t transitions_per_outgoing_state_action_pair(const std::vector< transition > &trans, const std::set< transition::size_type > &hide_label_set)
Provide the transitions as a multimap accessible per from state and label.
void merge(LTS_TYPE &l1, const LTS_TYPE &l2)
Merge the second lts into the first lts.
bool reachability_check(lts< SL, AL, BASE > &l, bool remove_unreachable=false)
Checks whether all states in this LTS are reachable from the initial state and remove unreachable sta...
std::size_t label(const outgoing_pair_t &p)
Label of a pair of a label and target state.
std::size_t from(const outgoing_transitions_per_state_action_t::const_iterator &i)
From state of an iterator exploring transitions per outgoing state and action.
void group_transitions_on_label(const std::vector< transition >::iterator begin, const std::vector< transition >::iterator end, std::function< std::size_t(const transition &)> get_label, std::vector< std::pair< std::size_t, std::size_t > > &count_sum_transitions_per_action, const std::size_t tau_label_index=0, std::vector< std::size_t > &todo_stack=bogus_todo_stack)
bool reachability_check(probabilistic_lts< SL, AL, PROBABILISTIC_STATE, BASE > &l, bool remove_unreachable=false)
Checks whether all states in a probabilistic LTS are reachable from the initial state and remove unre...
std::pair< transition::size_type, transition::size_type > outgoing_pair_t
Type for exploring transitions per state.
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, const lts_preorder pre, const bool generate_counter_example, const std::string &counter_example_file="", const bool structured_output=false, const lps::exploration_strategy strategy=lps::es_breadth, const bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, const lts_equivalence eq, const bool generate_counter_examples=false, const std::string &counter_example_file="", const bool structured_output=false)
Checks whether this LTS is equivalent to another LTS.
The main namespace for the Process library.
atermpp::term_list< action_label > action_label_list
\brief list of action_labels
std::vector< action > action_vector
\brief vector of actions
atermpp::term_list< action > action_list
\brief list of actions
bool is_untyped_multi_action(const atermpp::aterm &x)
std::string pp(const regular_formulas::regular_formula &x)
bool is_alt(const atermpp::aterm &x)
bool is_untyped_regular_formula(const atermpp::aterm &x)
void make_trans(atermpp::aterm &t, const ARGUMENTS &... args)
void make_seq(atermpp::aterm &t, const ARGUMENTS &... args)
void make_trans_or_nil(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_trans(const atermpp::aterm &x)
void swap(alt &t1, alt &t2)
\brief swap overload
std::string pp(const regular_formulas::seq &x)
void make_alt(atermpp::aterm &t, const ARGUMENTS &... args)
void make_untyped_regular_formula(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_trans_or_nil(const atermpp::aterm &x)
bool is_regular_formula(const atermpp::aterm &x)
void swap(trans &t1, trans &t2)
\brief swap overload
bool is_seq(const atermpp::aterm &x)
std::string pp(const regular_formulas::alt &x)
std::vector< regular_formula > regular_formula_vector
\brief vector of regular_formulas
void swap(untyped_regular_formula &t1, untyped_regular_formula &t2)
\brief swap overload
std::string pp(const regular_formulas::untyped_regular_formula &x)
atermpp::term_list< regular_formula > regular_formula_list
\brief list of regular_formulas
void swap(seq &t1, seq &t2)
\brief swap overload
std::string pp(const regular_formulas::trans_or_nil &x)
void swap(regular_formula &t1, regular_formula &t2)
\brief swap overload
std::string pp(const regular_formulas::trans &x)
void swap(trans_or_nil &t1, trans_or_nil &t2)
\brief swap overload
bool is_timed(const state_formula &x)
bool is_infimum(const atermpp::aterm &x)
std::string pp(const state_formulas::or_ &x)
std::string pp(const state_formulas::plus &x)
void swap(nu &t1, nu &t2)
\brief swap overload
bool is_and(const atermpp::aterm &x)
std::string pp(const state_formulas::yaled_timed &x)
std::string pp(const state_formulas::may &x)
bool is_delay_timed(const atermpp::aterm &x)
bool is_const_multiply(const atermpp::aterm &x)
std::string pp(const state_formulas::must &x)
void swap(const_multiply &t1, const_multiply &t2)
\brief swap overload
bool is_minus(const atermpp::aterm &x)
std::string pp(const state_formulas::not_ &x)
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
atermpp::term_list< state_formula > state_formula_list
\brief list of state_formulas
bool is_exists(const atermpp::aterm &x)
std::string pp(const state_formulas::delay &x)
bool is_not(const atermpp::aterm &x)
void swap(and_ &t1, and_ &t2)
\brief swap overload
bool is_state_formula(const atermpp::aterm &x)
void make_const_multiply(atermpp::aterm &t, const ARGUMENTS &... args)
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(yaled_timed &t1, yaled_timed &t2)
\brief swap overload
bool is_supremum(const atermpp::aterm &x)
bool is_must(const atermpp::aterm &x)
std::set< data::variable > find_all_variables(const state_formulas::state_formula &x)
bool is_yaled(const atermpp::aterm &x)
std::string pp(const state_formulas::const_multiply &x)
void swap(infimum &t1, infimum &t2)
\brief swap overload
void make_and_(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::exists &x)
std::string pp(const state_formulas::const_multiply_alt &x)
std::set< data::variable > find_free_variables(const state_formulas::state_formula &x)
void swap(imp &t1, imp &t2)
\brief swap overload
bool is_true(const atermpp::aterm &x)
void swap(minus &t1, minus &t2)
\brief swap overload
std::string pp(const state_formulas::and_ &x)
void swap(may &t1, may &t2)
\brief swap overload
std::string pp(const state_formulas::state_formula &x)
void swap(exists &t1, exists &t2)
\brief swap overload
void swap(plus &t1, plus &t2)
\brief swap overload
std::string pp(const state_formulas::infimum &x)
void swap(mu &t1, mu &t2)
\brief swap overload
void make_plus(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::minus &x)
bool is_variable(const atermpp::aterm &x)
void make_not_(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(variable &t1, variable &t2)
\brief swap overload
void swap(supremum &t1, supremum &t2)
\brief swap overload
void make_infimum(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(true_ &t1, true_ &t2)
\brief swap overload
bool is_may(const atermpp::aterm &x)
bool is_yaled_timed(const atermpp::aterm &x)
bool is_imp(const atermpp::aterm &x)
void make_delay_timed(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::forall &x)
std::string pp(const state_formulas::imp &x)
std::string pp(const state_formulas::yaled &x)
std::vector< state_formula > state_formula_vector
\brief vector of state_formulas
void make_const_multiply_alt(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::sum &x)
void make_may(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(const_multiply_alt &t1, const_multiply_alt &t2)
\brief swap overload
bool is_sum(const atermpp::aterm &x)
void swap(or_ &t1, or_ &t2)
\brief swap overload
std::string pp(const state_formulas::delay_timed &x)
void swap(delay_timed &t1, delay_timed &t2)
\brief swap overload
state_formulas::state_formula translate_user_notation(const state_formulas::state_formula &x)
void make_must(atermpp::aterm &t, const ARGUMENTS &... args)
state_formulas::state_formula normalize_sorts(const state_formulas::state_formula &x, const data::sort_specification &sortspec)
std::string pp(const state_formulas::false_ &x)
void swap(must &t1, must &t2)
\brief swap overload
bool is_nu(const atermpp::aterm &x)
void swap(not_ &t1, not_ &t2)
\brief swap overload
bool is_delay(const atermpp::aterm &x)
std::string pp(const state_formulas::true_ &x)
std::string pp(const state_formulas::mu &x)
std::string pp(const state_formulas::supremum &x)
bool is_false(const atermpp::aterm &x)
void make_variable(atermpp::aterm &t, const ARGUMENTS &... args)
void make_nu(atermpp::aterm &t, const ARGUMENTS &... args)
void make_supremum(atermpp::aterm &t, const ARGUMENTS &... args)
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_plus(const atermpp::aterm &x)
void swap(state_formula &t1, state_formula &t2)
\brief swap overload
void swap(false_ &t1, false_ &t2)
\brief swap overload
void swap(sum &t1, sum &t2)
\brief swap overload
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_mu(const atermpp::aterm &x)
void swap(yaled &t1, yaled &t2)
\brief swap overload
bool is_forall(const atermpp::aterm &x)
void swap(delay &t1, delay &t2)
\brief swap overload
void make_minus(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::nu &x)
bool is_const_multiply_alt(const atermpp::aterm &x)
bool is_or(const atermpp::aterm &x)
void make_or_(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(forall &t1, forall &t2)
\brief swap overload
void make_yaled_timed(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::variable &x)
std::set< data::sort_expression > find_sort_expressions(const state_formulas::state_formula &x)
bool find_nil(const state_formulas::state_formula &x)
std::set< process::action_label > find_action_labels(const state_formulas::state_formula &x)
void make_mu(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< core::identifier_string > find_identifiers(const state_formulas::state_formula &x)
static const atermpp::aterm StateMay
static const atermpp::aterm StateOr
static const atermpp::aterm UntypedRegFrm
static const atermpp::aterm StateFrm
static const atermpp::aterm StateYaled
static const atermpp::aterm RegAlt
static const atermpp::aterm ActNot
static const atermpp::aterm ActImp
static const atermpp::aterm ActTrue
static const atermpp::aterm StateInfimum
static const atermpp::aterm StateAnd
static const atermpp::aterm StateExists
static const atermpp::aterm RegTrans
static const atermpp::aterm ActOr
static const atermpp::aterm StateConstantMultiplyAlt
static const atermpp::aterm ActFrm
static const atermpp::aterm ActForall
static const atermpp::aterm StateYaledTimed
static const atermpp::aterm ActFalse
static const atermpp::aterm StateFalse
static const atermpp::aterm RegFrm
static const atermpp::aterm StateDelay
static const atermpp::aterm StatePlus
static const atermpp::aterm StateMinus
static const atermpp::aterm StateNu
static const atermpp::aterm ActAnd
static const atermpp::aterm StateDelayTimed
static const atermpp::aterm StateSupremum
static const atermpp::aterm StateSum
static const atermpp::aterm ActAt
static const atermpp::aterm ActExists
static const atermpp::aterm StateMu
static const atermpp::aterm RegTransOrNil
static const atermpp::aterm StateVar
static const atermpp::aterm StateImp
static const atermpp::aterm RegSeq
static const atermpp::aterm StateTrue
static const atermpp::aterm StateForall
static const atermpp::aterm StateMust
static const atermpp::aterm StateNot
static const atermpp::aterm ActMultAct
static const atermpp::aterm StateConstantMultiply
static const atermpp::function_symbol UntypedRegFrm
static const atermpp::function_symbol StateMu
static const atermpp::function_symbol ActMultAct
static const atermpp::function_symbol RegSeq
static const atermpp::function_symbol StateConstantMultiply
static const atermpp::function_symbol ActNot
static const atermpp::function_symbol StateSum
static const atermpp::function_symbol ActAnd
static const atermpp::function_symbol StateConstantMultiplyAlt
static const atermpp::function_symbol StateForall
static const atermpp::function_symbol StateOr
static const atermpp::function_symbol ActFalse
static const atermpp::function_symbol RegTransOrNil
static const atermpp::function_symbol StateYaledTimed
static const atermpp::function_symbol StateExists
static const atermpp::function_symbol ActExists
static const atermpp::function_symbol StateVar
static const atermpp::function_symbol StateTrue
static const atermpp::function_symbol StateFalse
static const atermpp::function_symbol StateImp
static const atermpp::function_symbol RegAlt
static const atermpp::function_symbol RegTrans
static const atermpp::function_symbol StateMinus
static const atermpp::function_symbol StateNot
static const atermpp::function_symbol StateInfimum
static const atermpp::function_symbol StateDelay
static const atermpp::function_symbol StateYaled
static const atermpp::function_symbol ActAt
static const atermpp::function_symbol StateMay
static const atermpp::function_symbol StateDelayTimed
static const atermpp::function_symbol ActImp
static const atermpp::function_symbol ActTrue
static const atermpp::function_symbol ActForall
static const atermpp::function_symbol StatePlus
static const atermpp::function_symbol StateMust
static const atermpp::function_symbol StateNu
static const atermpp::function_symbol StateAnd
static const atermpp::function_symbol ActOr
static const atermpp::function_symbol StateSupremum
std::vector< transition > non_inert_transitions
std::vector< non_bottom_state > non_bottom_states
non_bottom_state(const state_type s, const std::vector< state_type > &it)
std::size_t operator()(const atermpp::detail::reference_aterm< T > &t) const
std::size_t operator()(const mcrl2::lps::multi_action &ma) const
std::size_t operator()(const mcrl2::lts::action_label_lts &as) const
Definition lts_lts.h:440