mCRL2
Loading...
Searching...
No Matches
lps.cpp
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
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/// \file lps.cpp
10/// \brief
11
12#include "mcrl2/data/data_expression.h"
13#include "mcrl2/lps/is_well_typed.h"
14#include "mcrl2/lps/normalize_sorts.h"
15#include "mcrl2/lps/parse_impl.h"
16#include "mcrl2/lps/print.h"
17#include "mcrl2/lps/replace.h"
18#include "mcrl2/lps/specification.h"
19#include "mcrl2/lps/translate_user_notation.h"
20
21#include <ranges>
22
23
24
25namespace mcrl2::lps
26{
27
28//--- start generated lps overloads ---//
29std::string pp(const lps::action_summand& x, bool arg0) { return lps::pp< lps::action_summand >(x, arg0); }
30std::string pp(const lps::deadlock& x, bool arg0) { return lps::pp< lps::deadlock >(x, arg0); }
31std::string pp(const lps::deadlock_summand& x, bool arg0) { return lps::pp< lps::deadlock_summand >(x, arg0); }
32std::string pp(const lps::linear_process& x, bool arg0) { return lps::pp< lps::linear_process >(x, arg0); }
33std::string pp(const lps::multi_action& x, bool arg0) { return lps::pp< lps::multi_action >(x, arg0); }
34std::string pp(const lps::process_initializer& x, bool arg0) { return lps::pp< lps::process_initializer >(x, arg0); }
35std::string pp(const lps::specification& x, bool arg0) { return lps::pp< lps::specification >(x, arg0); }
36std::string pp(const lps::stochastic_action_summand& x, bool arg0) { return lps::pp< lps::stochastic_action_summand >(x, arg0); }
37std::string pp(const lps::stochastic_distribution& x, bool arg0) { return lps::pp< lps::stochastic_distribution >(x, arg0); }
38std::string pp(const lps::stochastic_linear_process& x, bool arg0) { return lps::pp< lps::stochastic_linear_process >(x, arg0); }
39std::string pp(const lps::stochastic_process_initializer& x, bool arg0) { return lps::pp< lps::stochastic_process_initializer >(x, arg0); }
40std::string pp(const lps::stochastic_specification& x, bool arg0) { return lps::pp< lps::stochastic_specification >(x, arg0); }
41lps::multi_action normalize_sorts(const lps::multi_action& x, const data::sort_specification& sortspec) { return lps::normalize_sorts< lps::multi_action >(x, sortspec); }
42void normalize_sorts(lps::specification& x, const data::sort_specification& /* sortspec */) { lps::normalize_sorts< lps::specification >(x, x.data()); }
43void normalize_sorts(lps::stochastic_specification& x, const data::sort_specification& /* sortspec */) { lps::normalize_sorts< lps::stochastic_specification >(x, x.data()); }
44lps::multi_action translate_user_notation(const lps::multi_action& x) { return lps::translate_user_notation< lps::multi_action >(x); }
45std::set<data::sort_expression> find_sort_expressions(const lps::specification& x) { return lps::find_sort_expressions< lps::specification >(x); }
46std::set<data::sort_expression> find_sort_expressions(const lps::stochastic_specification& x) { return lps::find_sort_expressions< lps::stochastic_specification >(x); }
47std::set<data::variable> find_all_variables(const lps::linear_process& x) { return lps::find_all_variables< lps::linear_process >(x); }
48std::set<data::variable> find_all_variables(const lps::stochastic_linear_process& x) { return lps::find_all_variables< lps::stochastic_linear_process >(x); }
49std::set<data::variable> find_all_variables(const lps::specification& x) { return lps::find_all_variables< lps::specification >(x); }
50std::set<data::variable> find_all_variables(const lps::stochastic_specification& x) { return lps::find_all_variables< lps::stochastic_specification >(x); }
51std::set<data::variable> find_all_variables(const lps::deadlock& x) { return lps::find_all_variables< lps::deadlock >(x); }
52std::set<data::variable> find_all_variables(const lps::multi_action& x) { return lps::find_all_variables< lps::multi_action >(x); }
53std::set<data::variable> find_free_variables(const lps::linear_process& x) { return lps::find_free_variables< lps::linear_process >(x); }
54std::set<data::variable> find_free_variables(const lps::stochastic_linear_process& x) { return lps::find_free_variables< lps::stochastic_linear_process >(x); }
55std::set<data::variable> find_free_variables(const lps::specification& x) { return lps::find_free_variables< lps::specification >(x); }
56std::set<data::variable> find_free_variables(const lps::stochastic_specification& x) { return lps::find_free_variables< lps::stochastic_specification >(x); }
57std::set<data::variable> find_free_variables(const lps::deadlock& x) { return lps::find_free_variables< lps::deadlock >(x); }
58std::set<data::variable> find_free_variables(const lps::multi_action& x) { return lps::find_free_variables< lps::multi_action >(x); }
59std::set<data::variable> find_free_variables(const lps::process_initializer& x) { return lps::find_free_variables< lps::process_initializer >(x); }
60std::set<data::variable> find_free_variables(const lps::stochastic_process_initializer& x) { return lps::find_free_variables< lps::stochastic_process_initializer >(x); }
61std::set<data::function_symbol> find_function_symbols(const lps::specification& x) { return lps::find_function_symbols< lps::specification >(x); }
62std::set<data::function_symbol> find_function_symbols(const lps::stochastic_specification& x) { return lps::find_function_symbols< lps::stochastic_specification >(x); }
63std::set<core::identifier_string> find_identifiers(const lps::specification& x) { return lps::find_identifiers< lps::specification >(x); }
64std::set<core::identifier_string> find_identifiers(const lps::stochastic_specification& x) { return lps::find_identifiers< lps::stochastic_specification >(x); }
65std::set<process::action_label> find_action_labels(const lps::linear_process& x) { return lps::find_action_labels< lps::linear_process >(x); }
66std::set<process::action_label> find_action_labels(const lps::process_initializer& x) { return lps::find_action_labels< lps::process_initializer >(x); }
67std::set<process::action_label> find_action_labels(const lps::specification& x) { return lps::find_action_labels< lps::specification >(x); }
68std::set<process::action_label> find_action_labels(const lps::stochastic_specification& x) { return lps::find_action_labels< lps::stochastic_specification >(x); }
69//--- end generated lps overloads ---//
70
71data::data_expression_list action_summand::next_state(const data::variable_list& process_parameters) const
72{
73 // Cast the process parameters to data expressions
74 return data::replace_variables(
75 data::data_expression_list(process_parameters),
76 data::assignment_sequence_substitution(assignments()));
77}
78
80{
81 std::ostringstream out;
82 core::detail::apply_printer<lps::detail::printer> printer(out, precedence_aware);
83 printer.process_name() = process_name;
84 printer.apply(x);
85 return out.str();
86}
87
89{
90 std::ostringstream out;
91 core::detail::apply_printer<lps::detail::printer> printer(out, precedence_aware);
92 printer.print_summand_numbers() = summand_numbers;
93 printer.process_name() = process_name;
94 printer.apply(x);
95 return out.str();
96}
97
99{
100 std::ostringstream out;
101 core::detail::apply_printer<lps::detail::printer> printer(out, precedence_aware);
102 printer.print_summand_numbers() = summand_numbers;
103 printer.process_name() = process_name;
104 printer.apply(x);
105 return out.str();
106}
107
109{
110 return lps::detail::check_well_typedness(x);
111}
112
114{
115 return lps::detail::check_well_typedness(x);
116}
117
119{
120 return lps::detail::check_well_typedness(x);
121}
122
124{
125 return lps::detail::check_well_typedness(x);
126}
127
128namespace detail {
129
131{
132 core::parser p(parser_tables_mcrl2, core::detail::ambiguity_fn, core::detail::syntax_error_fn);
133 unsigned int start_symbol_index = p.start_symbol_index("MultAct");
134 bool partial_parses = false;
135 core::parse_node node = p.parse(text, start_symbol_index, partial_parses);
137 return result;
138}
139
141{
142 multi_action result = lps::typecheck_multi_action(x, typechecker);
144 lps::normalize_sorts(result, data_spec);
145 return result;
146}
147
149{
150 multi_action result = lps::typecheck_multi_action(x, data_spec, action_decls);
152 lps::normalize_sorts(result, data_spec);
153 return result;
154}
155
157{
158 core::parser p(parser_tables_mcrl2, core::detail::ambiguity_fn, core::detail::syntax_error_fn);
159 unsigned int start_symbol_index = p.start_symbol_index("ActionRenameSpec");
160 bool partial_parses = false;
161 core::parse_node node = p.parse(text, start_symbol_index, partial_parses);
163 return result;
164}
165
167{
168 using namespace mcrl2::data;
170 x = action_rename_specification(x.data() + spec.data(), x.action_labels(), x.rules());
171 detail::translate_user_notation(x);
172}
173
174} // namespace detail
175
176} // namespace mcrl2::lps
Action rename specification.
process::action_label_list & action_labels()
Returns the sequence of action labels.
LPS summand containing a multi-action.
data::data_expression_list next_state(const data::variable_list &process_parameters) const
Returns the next state corresponding to this summand.
Definition lps.cpp:71
\brief A timed multi-action
multi_action & operator=(multi_action &&) noexcept=default
Linear process specification.
\brief An untyped multi action or data application
D_ParserTables parser_tables_mcrl2
static data_specification const & default_specification()
Definition parse.h:28
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
multi_action complete_multi_action(process::untyped_multi_action &x, const process::action_label_list &action_decls, const data::data_specification &data_spec=data::detail::default_specification())
Definition lps.cpp:148
void complete_action_rename_specification(action_rename_specification &x, const lps::stochastic_specification &spec)
Definition lps.cpp:166
process::untyped_multi_action parse_multi_action_new(const std::string &text)
Definition lps.cpp:130
multi_action complete_multi_action(process::untyped_multi_action &x, multi_action_type_checker &typechecker, const data::data_specification &data_spec=data::detail::default_specification())
Definition lps.cpp:140
action_rename_specification parse_action_rename_specification_new(const std::string &text)
Definition lps.cpp:156
The main namespace for the LPS library.
Definition constelm.h:18
std::string pp(const lps::stochastic_specification &x, bool arg0)
Definition lps.cpp:40
std::set< data::variable > find_all_variables(const lps::linear_process &x)
Definition lps.cpp:47
std::string pp(const lps::specification &x, bool arg0)
Definition lps.cpp:35
std::set< data::sort_expression > find_sort_expressions(const lps::stochastic_specification &x)
Definition lps.cpp:46
std::string pp_extended(const lps::stochastic_specification &x, const std::string &process_name, bool precedence_aware=true)
Definition lps.cpp:79
std::set< process::action_label > find_action_labels(const lps::stochastic_specification &x)
Definition lps.cpp:68
std::set< data::variable > find_free_variables(const lps::stochastic_specification &x)
Definition lps.cpp:56
std::string pp(const lps::stochastic_distribution &x, bool arg0)
Definition lps.cpp:37
std::string pp_extended(const stochastic_specification &x, const std::string &process_name, bool precedence_aware, bool summand_numbers)
Definition lps.cpp:98
std::set< data::variable > find_all_variables(const lps::multi_action &x)
Returns all variables inside a multi-action.
Definition lps.cpp:52
std::set< data::variable > find_all_variables(const lps::stochastic_specification &x)
Definition lps.cpp:50
bool check_well_typedness(const specification &x)
Definition lps.cpp:118
std::set< data::variable > find_free_variables(const lps::linear_process &x)
Definition lps.cpp:53
bool check_well_typedness(const linear_process &x)
Definition lps.cpp:108
std::set< data::function_symbol > find_function_symbols(const lps::stochastic_specification &x)
Definition lps.cpp:62
std::string pp_extended(const specification &x, const std::string &process_name, bool precedence_aware, bool summand_numbers)
Definition lps.cpp:88
std::set< process::action_label > find_action_labels(const lps::process_initializer &x)
Definition lps.cpp:66
std::set< data::variable > find_free_variables(const lps::specification &x)
Definition lps.cpp:55
multi_action typecheck_multi_action(process::untyped_multi_action &mult_act, const data::data_specification &data_spec, const process::action_label_list &action_decls)
Type check a multi action Throws an exception if something went wrong.
Definition typecheck.h:125
void normalize_sorts(lps::specification &x, const data::sort_specification &)
Definition lps.cpp:42
std::set< data::variable > find_free_variables(const lps::deadlock &x)
Definition lps.cpp:57
std::string pp(const lps::deadlock_summand &x, bool arg0)
Definition lps.cpp:31
std::set< process::action_label > find_action_labels(const lps::linear_process &x)
Definition lps.cpp:65
lps::multi_action normalize_sorts(const lps::multi_action &x, const data::sort_specification &sortspec)
Definition lps.cpp:41
std::set< data::variable > find_free_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:54
multi_action typecheck_multi_action(process::untyped_multi_action &mult_act, multi_action_type_checker &typechecker)
Type check a multi action Throws an exception if something went wrong.
Definition typecheck.h:141
std::set< data::function_symbol > find_function_symbols(const lps::specification &x)
Definition lps.cpp:61
std::string pp(const lps::stochastic_linear_process &x, bool arg0)
Definition lps.cpp:38
std::set< data::variable > find_free_variables(const lps::stochastic_process_initializer &x)
Definition lps.cpp:60
std::set< data::variable > find_free_variables(const lps::multi_action &x)
Definition lps.cpp:58
std::string pp(const lps::deadlock &x, bool arg0)
Definition lps.cpp:30
void normalize_sorts(lps::stochastic_specification &x, const data::sort_specification &)
Definition lps.cpp:43
std::set< data::variable > find_free_variables(const lps::process_initializer &x)
Definition lps.cpp:59
std::string pp(const lps::stochastic_action_summand &x, bool arg0)
Definition lps.cpp:36
std::string pp(const lps::stochastic_process_initializer &x, bool arg0)
Definition lps.cpp:39
std::string pp(const lps::linear_process &x, bool arg0)
Definition lps.cpp:32
std::string pp(const lps::multi_action &x, bool arg0)
Definition lps.cpp:33
std::set< data::sort_expression > find_sort_expressions(const lps::specification &x)
Definition lps.cpp:45
std::string pp(const lps::action_summand &x, bool arg0)
Definition lps.cpp:29
std::set< data::variable > find_all_variables(const lps::specification &x)
Definition lps.cpp:49
bool check_well_typedness(const stochastic_specification &x)
Definition lps.cpp:123
std::set< data::variable > find_all_variables(const lps::deadlock &x)
Definition lps.cpp:51
action_rename_specification typecheck_action_rename_specification(const action_rename_specification &arspec, const lps::stochastic_specification &lpsspec)
Type checks an action rename specification.
Definition typecheck.h:154
std::set< data::variable > find_all_variables(const lps::stochastic_linear_process &x)
Definition lps.cpp:48
bool check_well_typedness(const stochastic_linear_process &x)
Definition lps.cpp:113
lps::multi_action translate_user_notation(const lps::multi_action &x)
Definition lps.cpp:44
std::set< core::identifier_string > find_identifiers(const lps::stochastic_specification &x)
Definition lps.cpp:64
std::set< core::identifier_string > find_identifiers(const lps::specification &x)
Definition lps.cpp:63
std::set< process::action_label > find_action_labels(const lps::specification &x)
Definition lps.cpp:67
std::string pp(const lps::process_initializer &x, bool arg0)
Definition lps.cpp:34
The main namespace for the Process library.
lps::action_rename_specification parse_ActionRenameSpec(const core::parse_node &node) const
Definition parse_impl.h:119
action_rename_actions(const core::parser &parser_)
Definition parse_impl.h:42
process::untyped_multi_action parse_MultAct(const core::parse_node &node) const
Definition parse_impl.h:29
multi_action_actions(const core::parser &parser_)
Definition parse_impl.h:25