mCRL2
Loading...
Searching...
No Matches
state_formula.h
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 mcrl2/modal_formula/state_formula.h
10/// \brief Add your file description here.
11
12#ifndef MCRL2_MODAL_FORMULA_STATE_FORMULA_H
13#define MCRL2_MODAL_FORMULA_STATE_FORMULA_H
14
15#include "mcrl2/modal_formula/regular_formula.h"
16
17namespace mcrl2::state_formulas
18{
19
20//--- start generated classes ---//
21/// \\brief A state formula
23{
24 public:
25 /// \\brief Default constructor X3.
28 {}
29
30 /// \\brief Constructor Z9.
31 /// \\param term A term
32 explicit state_formula(const atermpp::aterm& term)
33 : atermpp::aterm(term)
34 {
35 assert(core::detail::check_rule_StateFrm(*this));
36 }
37
38 /// \\brief Constructor Z6.
41 {}
42
43 /// \\brief Constructor Z6.
46 {}
47
48 /// Move semantics
49 state_formula(const state_formula&) noexcept = default;
50 state_formula(state_formula&&) noexcept = default;
51 state_formula& operator=(const state_formula&) noexcept = default;
52 state_formula& operator=(state_formula&&) noexcept = default;
53//--- start user section state_formula ---//
54 /// \brief Returns true if the formula is timed.
55 /// \return True if the formula is timed.
56 bool has_time() const;
57//--- end user section state_formula ---//
58};
59
60/// \\brief list of state_formulas
61using state_formula_list = atermpp::term_list<state_formula>;
62
63/// \\brief vector of state_formulas
65
66// prototypes
67inline bool is_true(const atermpp::aterm& x);
68inline bool is_false(const atermpp::aterm& x);
69inline bool is_not(const atermpp::aterm& x);
70inline bool is_minus(const atermpp::aterm& x);
71inline bool is_and(const atermpp::aterm& x);
72inline bool is_or(const atermpp::aterm& x);
73inline bool is_imp(const atermpp::aterm& x);
74inline bool is_plus(const atermpp::aterm& x);
75inline bool is_const_multiply(const atermpp::aterm& x);
76inline bool is_const_multiply_alt(const atermpp::aterm& x);
77inline bool is_forall(const atermpp::aterm& x);
78inline bool is_exists(const atermpp::aterm& x);
79inline bool is_infimum(const atermpp::aterm& x);
80inline bool is_supremum(const atermpp::aterm& x);
81inline bool is_sum(const atermpp::aterm& x);
82inline bool is_must(const atermpp::aterm& x);
83inline bool is_may(const atermpp::aterm& x);
84inline bool is_yaled(const atermpp::aterm& x);
85inline bool is_yaled_timed(const atermpp::aterm& x);
86inline bool is_delay(const atermpp::aterm& x);
87inline bool is_delay_timed(const atermpp::aterm& x);
88inline bool is_variable(const atermpp::aterm& x);
89inline bool is_nu(const atermpp::aterm& x);
90inline bool is_mu(const atermpp::aterm& x);
91
92/// \\brief Test for a state_formula expression
93/// \\param x A term
94/// \\return True if \\a x is a state_formula expression
95inline
97{
124}
125
126// prototype declaration
127std::string pp(const state_formula& x, bool precedence_aware = true);
128
129/// \\brief Outputs the object to a stream
130/// \\param out An output stream
131/// \\param x Object x
132/// \\return The output stream
133inline
135{
136 return out << state_formulas::pp(x);
137}
138
139/// \\brief swap overload
140inline void swap(state_formula& t1, state_formula& t2) noexcept
141{
142 t1.swap(t2);
143}
144
145
146/// \\brief The value true for state formulas
147class true_: public state_formula
148{
149 public:
150 /// \\brief Default constructor X3.
153 {}
154
155 /// \\brief Constructor Z9.
156 /// \\param term A term
157 explicit true_(const atermpp::aterm& term)
158 : state_formula(term)
159 {
160 assert(core::detail::check_term_StateTrue(*this));
161 }
162
163 /// Move semantics
164 true_(const true_&) noexcept = default;
165 true_(true_&&) noexcept = default;
166 true_& operator=(const true_&) noexcept = default;
167 true_& operator=(true_&&) noexcept = default;
168};
169
170/// \\brief Test for a true expression
171/// \\param x A term
172/// \\return True if \\a x is a true expression
173inline
174bool is_true(const atermpp::aterm& x)
175{
176 return x.function() == core::detail::function_symbols::StateTrue;
177}
178
179// prototype declaration
180std::string pp(const true_& x, bool precedence_aware = true);
181
182/// \\brief Outputs the object to a stream
183/// \\param out An output stream
184/// \\param x Object x
185/// \\return The output stream
186inline
188{
189 return out << state_formulas::pp(x);
190}
191
192/// \\brief swap overload
193inline void swap(true_& t1, true_& t2) noexcept
194{
195 t1.swap(t2);
196}
197
198
199/// \\brief The value false for state formulas
201{
202 public:
203 /// \\brief Default constructor X3.
206 {}
207
208 /// \\brief Constructor Z9.
209 /// \\param term A term
210 explicit false_(const atermpp::aterm& term)
211 : state_formula(term)
212 {
213 assert(core::detail::check_term_StateFalse(*this));
214 }
215
216 /// Move semantics
217 false_(const false_&) noexcept = default;
218 false_(false_&&) noexcept = default;
219 false_& operator=(const false_&) noexcept = default;
220 false_& operator=(false_&&) noexcept = default;
221};
222
223/// \\brief Test for a false expression
224/// \\param x A term
225/// \\return True if \\a x is a false expression
226inline
227bool is_false(const atermpp::aterm& x)
228{
229 return x.function() == core::detail::function_symbols::StateFalse;
230}
231
232// prototype declaration
233std::string pp(const false_& x, bool precedence_aware = true);
234
235/// \\brief Outputs the object to a stream
236/// \\param out An output stream
237/// \\param x Object x
238/// \\return The output stream
239inline
241{
242 return out << state_formulas::pp(x);
243}
244
245/// \\brief swap overload
246inline void swap(false_& t1, false_& t2) noexcept
247{
248 t1.swap(t2);
249}
250
251
252/// \\brief The not operator for state formulas
253class not_: public state_formula
254{
255 public:
256 /// \\brief Default constructor X3.
259 {}
260
261 /// \\brief Constructor Z9.
262 /// \\param term A term
263 explicit not_(const atermpp::aterm& term)
264 : state_formula(term)
265 {
266 assert(core::detail::check_term_StateNot(*this));
267 }
268
269 /// \\brief Constructor Z14.
270 explicit not_(const state_formula& operand)
272 {}
273
274 /// Move semantics
275 not_(const not_&) noexcept = default;
276 not_(not_&&) noexcept = default;
277 not_& operator=(const not_&) noexcept = default;
278 not_& operator=(not_&&) noexcept = default;
279
280 const state_formula& operand() const
281 {
282 return atermpp::down_cast<state_formula>((*this)[0]);
283 }
284};
285
286/// \\brief The function make_not constructs a new term into a given address.
287/// \\ \param t The reference into which the new not is constructed.
288template <class... ARGUMENTS>
289inline void make_not(atermpp::aterm& t, const ARGUMENTS&... args)
290{
291 atermpp::make_term_appl(t, core::detail::function_symbol_StateNot(), args...);
292}
293
294/// \\brief Test for a not expression
295/// \\param x A term
296/// \\return True if \\a x is a not expression
297inline
298bool is_not(const atermpp::aterm& x)
299{
300 return x.function() == core::detail::function_symbols::StateNot;
301}
302
303// prototype declaration
304std::string pp(const not_& x, bool precedence_aware = true);
305
306/// \\brief Outputs the object to a stream
307/// \\param out An output stream
308/// \\param x Object x
309/// \\return The output stream
310inline
312{
313 return out << state_formulas::pp(x);
314}
315
316/// \\brief swap overload
317inline void swap(not_& t1, not_& t2) noexcept
318{
319 t1.swap(t2);
320}
321
322
323/// \\brief The minus operator for state formulas
324class minus: public state_formula
325{
326 public:
327 /// \\brief Default constructor X3.
330 {}
331
332 /// \\brief Constructor Z9.
333 /// \\param term A term
334 explicit minus(const atermpp::aterm& term)
335 : state_formula(term)
336 {
337 assert(core::detail::check_term_StateMinus(*this));
338 }
339
340 /// \\brief Constructor Z14.
341 explicit minus(const state_formula& operand)
343 {}
344
345 /// Move semantics
346 minus(const minus&) noexcept = default;
347 minus(minus&&) noexcept = default;
348 minus& operator=(const minus&) noexcept = default;
349 minus& operator=(minus&&) noexcept = default;
350
351 const state_formula& operand() const
352 {
353 return atermpp::down_cast<state_formula>((*this)[0]);
354 }
355};
356
357/// \\brief The function make_minus constructs a new term into a given address.
358/// \\ \param t The reference into which the new minus is constructed.
359template <class... ARGUMENTS>
360inline void make_minus(atermpp::aterm& t, const ARGUMENTS&... args)
361{
362 atermpp::make_term_appl(t, core::detail::function_symbol_StateMinus(), args...);
363}
364
365/// \\brief Test for a minus expression
366/// \\param x A term
367/// \\return True if \\a x is a minus expression
368inline
369bool is_minus(const atermpp::aterm& x)
370{
371 return x.function() == core::detail::function_symbols::StateMinus;
372}
373
374// prototype declaration
375std::string pp(const minus& x, bool precedence_aware = true);
376
377/// \\brief Outputs the object to a stream
378/// \\param out An output stream
379/// \\param x Object x
380/// \\return The output stream
381inline
383{
384 return out << state_formulas::pp(x);
385}
386
387/// \\brief swap overload
388inline void swap(minus& t1, minus& t2) noexcept
389{
390 t1.swap(t2);
391}
392
393
394/// \\brief The and operator for state formulas
395class and_: public state_formula
396{
397 public:
398 /// \\brief Default constructor X3.
401 {}
402
403 /// \\brief Constructor Z9.
404 /// \\param term A term
405 explicit and_(const atermpp::aterm& term)
406 : state_formula(term)
407 {
408 assert(core::detail::check_term_StateAnd(*this));
409 }
410
411 /// \\brief Constructor Z14.
412 and_(const state_formula& left, const state_formula& right)
414 {}
415
416 /// Move semantics
417 and_(const and_&) noexcept = default;
418 and_(and_&&) noexcept = default;
419 and_& operator=(const and_&) noexcept = default;
420 and_& operator=(and_&&) noexcept = default;
421
422 const state_formula& left() const
423 {
424 return atermpp::down_cast<state_formula>((*this)[0]);
425 }
426
427 const state_formula& right() const
428 {
429 return atermpp::down_cast<state_formula>((*this)[1]);
430 }
431};
432
433/// \\brief The function make_and constructs a new term into a given address.
434/// \\ \param t The reference into which the new and is constructed.
435template <class... ARGUMENTS>
436inline void make_and(atermpp::aterm& t, const ARGUMENTS&... args)
437{
438 atermpp::make_term_appl(t, core::detail::function_symbol_StateAnd(), args...);
439}
440
441/// \\brief Test for a and expression
442/// \\param x A term
443/// \\return True if \\a x is a and expression
444inline
445bool is_and(const atermpp::aterm& x)
446{
447 return x.function() == core::detail::function_symbols::StateAnd;
448}
449
450// prototype declaration
451std::string pp(const and_& x, bool precedence_aware = true);
452
453/// \\brief Outputs the object to a stream
454/// \\param out An output stream
455/// \\param x Object x
456/// \\return The output stream
457inline
459{
460 return out << state_formulas::pp(x);
461}
462
463/// \\brief swap overload
464inline void swap(and_& t1, and_& t2) noexcept
465{
466 t1.swap(t2);
467}
468
469
470/// \\brief The or operator for state formulas
471class or_: public state_formula
472{
473 public:
474 /// \\brief Default constructor X3.
477 {}
478
479 /// \\brief Constructor Z9.
480 /// \\param term A term
481 explicit or_(const atermpp::aterm& term)
482 : state_formula(term)
483 {
484 assert(core::detail::check_term_StateOr(*this));
485 }
486
487 /// \\brief Constructor Z14.
488 or_(const state_formula& left, const state_formula& right)
490 {}
491
492 /// Move semantics
493 or_(const or_&) noexcept = default;
494 or_(or_&&) noexcept = default;
495 or_& operator=(const or_&) noexcept = default;
496 or_& operator=(or_&&) noexcept = default;
497
498 const state_formula& left() const
499 {
500 return atermpp::down_cast<state_formula>((*this)[0]);
501 }
502
503 const state_formula& right() const
504 {
505 return atermpp::down_cast<state_formula>((*this)[1]);
506 }
507};
508
509/// \\brief The function make_or constructs a new term into a given address.
510/// \\ \param t The reference into which the new or is constructed.
511template <class... ARGUMENTS>
512inline void make_or(atermpp::aterm& t, const ARGUMENTS&... args)
513{
514 atermpp::make_term_appl(t, core::detail::function_symbol_StateOr(), args...);
515}
516
517/// \\brief Test for a or expression
518/// \\param x A term
519/// \\return True if \\a x is a or expression
520inline
521bool is_or(const atermpp::aterm& x)
522{
523 return x.function() == core::detail::function_symbols::StateOr;
524}
525
526// prototype declaration
527std::string pp(const or_& x, bool precedence_aware = true);
528
529/// \\brief Outputs the object to a stream
530/// \\param out An output stream
531/// \\param x Object x
532/// \\return The output stream
533inline
535{
536 return out << state_formulas::pp(x);
537}
538
539/// \\brief swap overload
540inline void swap(or_& t1, or_& t2) noexcept
541{
542 t1.swap(t2);
543}
544
545
546/// \\brief The implication operator for state formulas
547class imp: public state_formula
548{
549 public:
550 /// \\brief Default constructor X3.
553 {}
554
555 /// \\brief Constructor Z9.
556 /// \\param term A term
557 explicit imp(const atermpp::aterm& term)
558 : state_formula(term)
559 {
560 assert(core::detail::check_term_StateImp(*this));
561 }
562
563 /// \\brief Constructor Z14.
564 imp(const state_formula& left, const state_formula& right)
566 {}
567
568 /// Move semantics
569 imp(const imp&) noexcept = default;
570 imp(imp&&) noexcept = default;
571 imp& operator=(const imp&) noexcept = default;
572 imp& operator=(imp&&) noexcept = default;
573
574 const state_formula& left() const
575 {
576 return atermpp::down_cast<state_formula>((*this)[0]);
577 }
578
579 const state_formula& right() const
580 {
581 return atermpp::down_cast<state_formula>((*this)[1]);
582 }
583};
584
585/// \\brief The function make_imp constructs a new term into a given address.
586/// \\ \param t The reference into which the new imp is constructed.
587template <class... ARGUMENTS>
588inline void make_imp(atermpp::aterm& t, const ARGUMENTS&... args)
589{
590 atermpp::make_term_appl(t, core::detail::function_symbol_StateImp(), args...);
591}
592
593/// \\brief Test for a imp expression
594/// \\param x A term
595/// \\return True if \\a x is a imp expression
596inline
597bool is_imp(const atermpp::aterm& x)
598{
599 return x.function() == core::detail::function_symbols::StateImp;
600}
601
602// prototype declaration
603std::string pp(const imp& x, bool precedence_aware = true);
604
605/// \\brief Outputs the object to a stream
606/// \\param out An output stream
607/// \\param x Object x
608/// \\return The output stream
609inline
611{
612 return out << state_formulas::pp(x);
613}
614
615/// \\brief swap overload
616inline void swap(imp& t1, imp& t2) noexcept
617{
618 t1.swap(t2);
619}
620
621
622/// \\brief The plus operator for state formulas with values
623class plus: public state_formula
624{
625 public:
626 /// \\brief Default constructor X3.
629 {}
630
631 /// \\brief Constructor Z9.
632 /// \\param term A term
633 explicit plus(const atermpp::aterm& term)
634 : state_formula(term)
635 {
636 assert(core::detail::check_term_StatePlus(*this));
637 }
638
639 /// \\brief Constructor Z14.
640 plus(const state_formula& left, const state_formula& right)
642 {}
643
644 /// Move semantics
645 plus(const plus&) noexcept = default;
646 plus(plus&&) noexcept = default;
647 plus& operator=(const plus&) noexcept = default;
648 plus& operator=(plus&&) noexcept = default;
649
650 const state_formula& left() const
651 {
652 return atermpp::down_cast<state_formula>((*this)[0]);
653 }
654
655 const state_formula& right() const
656 {
657 return atermpp::down_cast<state_formula>((*this)[1]);
658 }
659};
660
661/// \\brief The function make_plus constructs a new term into a given address.
662/// \\ \param t The reference into which the new plus is constructed.
663template <class... ARGUMENTS>
664inline void make_plus(atermpp::aterm& t, const ARGUMENTS&... args)
665{
666 atermpp::make_term_appl(t, core::detail::function_symbol_StatePlus(), args...);
667}
668
669/// \\brief Test for a plus expression
670/// \\param x A term
671/// \\return True if \\a x is a plus expression
672inline
673bool is_plus(const atermpp::aterm& x)
674{
675 return x.function() == core::detail::function_symbols::StatePlus;
676}
677
678// prototype declaration
679std::string pp(const plus& x, bool precedence_aware = true);
680
681/// \\brief Outputs the object to a stream
682/// \\param out An output stream
683/// \\param x Object x
684/// \\return The output stream
685inline
687{
688 return out << state_formulas::pp(x);
689}
690
691/// \\brief swap overload
692inline void swap(plus& t1, plus& t2) noexcept
693{
694 t1.swap(t2);
695}
696
697
698/// \\brief The multiply operator for state formulas with values
700{
701 public:
702 /// \\brief Default constructor X3.
705 {}
706
707 /// \\brief Constructor Z9.
708 /// \\param term A term
709 explicit const_multiply(const atermpp::aterm& term)
710 : state_formula(term)
711 {
712 assert(core::detail::check_term_StateConstantMultiply(*this));
713 }
714
715 /// \\brief Constructor Z14.
718 {}
719
720 /// Move semantics
721 const_multiply(const const_multiply&) noexcept = default;
722 const_multiply(const_multiply&&) noexcept = default;
723 const_multiply& operator=(const const_multiply&) noexcept = default;
724 const_multiply& operator=(const_multiply&&) noexcept = default;
725
726 const data::data_expression& left() const
727 {
728 return atermpp::down_cast<data::data_expression>((*this)[0]);
729 }
730
731 const state_formula& right() const
732 {
733 return atermpp::down_cast<state_formula>((*this)[1]);
734 }
735};
736
737/// \\brief The function make_const_multiply constructs a new term into a given address.
738/// \\ \param t The reference into which the new const_multiply is constructed.
739template <class... ARGUMENTS>
740inline void make_const_multiply(atermpp::aterm& t, const ARGUMENTS&... args)
741{
742 atermpp::make_term_appl(t, core::detail::function_symbol_StateConstantMultiply(), args...);
743}
744
745/// \\brief Test for a const_multiply expression
746/// \\param x A term
747/// \\return True if \\a x is a const_multiply expression
748inline
750{
751 return x.function() == core::detail::function_symbols::StateConstantMultiply;
752}
753
754// prototype declaration
755std::string pp(const const_multiply& x, bool precedence_aware = true);
756
757/// \\brief Outputs the object to a stream
758/// \\param out An output stream
759/// \\param x Object x
760/// \\return The output stream
761inline
763{
764 return out << state_formulas::pp(x);
765}
766
767/// \\brief swap overload
768inline void swap(const_multiply& t1, const_multiply& t2) noexcept
769{
770 t1.swap(t2);
771}
772
773
774/// \\brief The multiply operator for state formulas with values
776{
777 public:
778 /// \\brief Default constructor X3.
781 {}
782
783 /// \\brief Constructor Z9.
784 /// \\param term A term
785 explicit const_multiply_alt(const atermpp::aterm& term)
786 : state_formula(term)
787 {
788 assert(core::detail::check_term_StateConstantMultiplyAlt(*this));
789 }
790
791 /// \\brief Constructor Z14.
794 {}
795
796 /// Move semantics
797 const_multiply_alt(const const_multiply_alt&) noexcept = default;
799 const_multiply_alt& operator=(const const_multiply_alt&) noexcept = default;
801
802 const state_formula& left() const
803 {
804 return atermpp::down_cast<state_formula>((*this)[0]);
805 }
806
807 const data::data_expression& right() const
808 {
809 return atermpp::down_cast<data::data_expression>((*this)[1]);
810 }
811};
812
813/// \\brief The function make_const_multiply_alt constructs a new term into a given address.
814/// \\ \param t The reference into which the new const_multiply_alt is constructed.
815template <class... ARGUMENTS>
816inline void make_const_multiply_alt(atermpp::aterm& t, const ARGUMENTS&... args)
817{
818 atermpp::make_term_appl(t, core::detail::function_symbol_StateConstantMultiplyAlt(), args...);
819}
820
821/// \\brief Test for a const_multiply_alt expression
822/// \\param x A term
823/// \\return True if \\a x is a const_multiply_alt expression
824inline
826{
827 return x.function() == core::detail::function_symbols::StateConstantMultiplyAlt;
828}
829
830// prototype declaration
831std::string pp(const const_multiply_alt& x, bool precedence_aware = true);
832
833/// \\brief Outputs the object to a stream
834/// \\param out An output stream
835/// \\param x Object x
836/// \\return The output stream
837inline
839{
840 return out << state_formulas::pp(x);
841}
842
843/// \\brief swap overload
844inline void swap(const_multiply_alt& t1, const_multiply_alt& t2) noexcept
845{
846 t1.swap(t2);
847}
848
849
850/// \\brief The universal quantification operator for state formulas
852{
853 public:
854 /// \\brief Default constructor X3.
857 {}
858
859 /// \\brief Constructor Z9.
860 /// \\param term A term
861 explicit forall(const atermpp::aterm& term)
862 : state_formula(term)
863 {
864 assert(core::detail::check_term_StateForall(*this));
865 }
866
867 /// \\brief Constructor Z14.
868 forall(const data::variable_list& variables, const state_formula& body)
870 {}
871
872 /// Move semantics
873 forall(const forall&) noexcept = default;
874 forall(forall&&) noexcept = default;
875 forall& operator=(const forall&) noexcept = default;
876 forall& operator=(forall&&) noexcept = default;
877
878 const data::variable_list& variables() const
879 {
880 return atermpp::down_cast<data::variable_list>((*this)[0]);
881 }
882
883 const state_formula& body() const
884 {
885 return atermpp::down_cast<state_formula>((*this)[1]);
886 }
887};
888
889/// \\brief The function make_forall constructs a new term into a given address.
890/// \\ \param t The reference into which the new forall is constructed.
891template <class... ARGUMENTS>
892inline void make_forall(atermpp::aterm& t, const ARGUMENTS&... args)
893{
894 atermpp::make_term_appl(t, core::detail::function_symbol_StateForall(), args...);
895}
896
897/// \\brief Test for a forall expression
898/// \\param x A term
899/// \\return True if \\a x is a forall expression
900inline
901bool is_forall(const atermpp::aterm& x)
902{
903 return x.function() == core::detail::function_symbols::StateForall;
904}
905
906// prototype declaration
907std::string pp(const forall& x, bool precedence_aware = true);
908
909/// \\brief Outputs the object to a stream
910/// \\param out An output stream
911/// \\param x Object x
912/// \\return The output stream
913inline
915{
916 return out << state_formulas::pp(x);
917}
918
919/// \\brief swap overload
920inline void swap(forall& t1, forall& t2) noexcept
921{
922 t1.swap(t2);
923}
924
925
926/// \\brief The existential quantification operator for state formulas
928{
929 public:
930 /// \\brief Default constructor X3.
933 {}
934
935 /// \\brief Constructor Z9.
936 /// \\param term A term
937 explicit exists(const atermpp::aterm& term)
938 : state_formula(term)
939 {
940 assert(core::detail::check_term_StateExists(*this));
941 }
942
943 /// \\brief Constructor Z14.
944 exists(const data::variable_list& variables, const state_formula& body)
946 {}
947
948 /// Move semantics
949 exists(const exists&) noexcept = default;
950 exists(exists&&) noexcept = default;
951 exists& operator=(const exists&) noexcept = default;
952 exists& operator=(exists&&) noexcept = default;
953
954 const data::variable_list& variables() const
955 {
956 return atermpp::down_cast<data::variable_list>((*this)[0]);
957 }
958
959 const state_formula& body() const
960 {
961 return atermpp::down_cast<state_formula>((*this)[1]);
962 }
963};
964
965/// \\brief The function make_exists constructs a new term into a given address.
966/// \\ \param t The reference into which the new exists is constructed.
967template <class... ARGUMENTS>
968inline void make_exists(atermpp::aterm& t, const ARGUMENTS&... args)
969{
970 atermpp::make_term_appl(t, core::detail::function_symbol_StateExists(), args...);
971}
972
973/// \\brief Test for a exists expression
974/// \\param x A term
975/// \\return True if \\a x is a exists expression
976inline
977bool is_exists(const atermpp::aterm& x)
978{
979 return x.function() == core::detail::function_symbols::StateExists;
980}
981
982// prototype declaration
983std::string pp(const exists& x, bool precedence_aware = true);
984
985/// \\brief Outputs the object to a stream
986/// \\param out An output stream
987/// \\param x Object x
988/// \\return The output stream
989inline
991{
992 return out << state_formulas::pp(x);
993}
994
995/// \\brief swap overload
996inline void swap(exists& t1, exists& t2) noexcept
997{
998 t1.swap(t2);
999}
1000
1001
1002/// \\brief The infimum over a data type for state formulas
1004{
1005 public:
1006 /// \\brief Default constructor X3.
1009 {}
1010
1011 /// \\brief Constructor Z9.
1012 /// \\param term A term
1013 explicit infimum(const atermpp::aterm& term)
1014 : state_formula(term)
1015 {
1016 assert(core::detail::check_term_StateInfimum(*this));
1017 }
1018
1019 /// \\brief Constructor Z14.
1020 infimum(const data::variable_list& variables, const state_formula& body)
1022 {}
1023
1024 /// Move semantics
1025 infimum(const infimum&) noexcept = default;
1026 infimum(infimum&&) noexcept = default;
1027 infimum& operator=(const infimum&) noexcept = default;
1028 infimum& operator=(infimum&&) noexcept = default;
1029
1030 const data::variable_list& variables() const
1031 {
1032 return atermpp::down_cast<data::variable_list>((*this)[0]);
1033 }
1034
1035 const state_formula& body() const
1036 {
1037 return atermpp::down_cast<state_formula>((*this)[1]);
1038 }
1039};
1040
1041/// \\brief The function make_infimum constructs a new term into a given address.
1042/// \\ \param t The reference into which the new infimum is constructed.
1043template <class... ARGUMENTS>
1044inline void make_infimum(atermpp::aterm& t, const ARGUMENTS&... args)
1045{
1046 atermpp::make_term_appl(t, core::detail::function_symbol_StateInfimum(), args...);
1047}
1048
1049/// \\brief Test for a infimum expression
1050/// \\param x A term
1051/// \\return True if \\a x is a infimum expression
1052inline
1053bool is_infimum(const atermpp::aterm& x)
1054{
1055 return x.function() == core::detail::function_symbols::StateInfimum;
1056}
1057
1058// prototype declaration
1059std::string pp(const infimum& x, bool precedence_aware = true);
1060
1061/// \\brief Outputs the object to a stream
1062/// \\param out An output stream
1063/// \\param x Object x
1064/// \\return The output stream
1065inline
1067{
1068 return out << state_formulas::pp(x);
1069}
1070
1071/// \\brief swap overload
1072inline void swap(infimum& t1, infimum& t2) noexcept
1073{
1074 t1.swap(t2);
1075}
1076
1077
1078/// \\brief The supremum over a data type for state formulas
1080{
1081 public:
1082 /// \\brief Default constructor X3.
1085 {}
1086
1087 /// \\brief Constructor Z9.
1088 /// \\param term A term
1089 explicit supremum(const atermpp::aterm& term)
1090 : state_formula(term)
1091 {
1092 assert(core::detail::check_term_StateSupremum(*this));
1093 }
1094
1095 /// \\brief Constructor Z14.
1096 supremum(const data::variable_list& variables, const state_formula& body)
1098 {}
1099
1100 /// Move semantics
1101 supremum(const supremum&) noexcept = default;
1102 supremum(supremum&&) noexcept = default;
1103 supremum& operator=(const supremum&) noexcept = default;
1104 supremum& operator=(supremum&&) noexcept = default;
1105
1106 const data::variable_list& variables() const
1107 {
1108 return atermpp::down_cast<data::variable_list>((*this)[0]);
1109 }
1110
1111 const state_formula& body() const
1112 {
1113 return atermpp::down_cast<state_formula>((*this)[1]);
1114 }
1115};
1116
1117/// \\brief The function make_supremum constructs a new term into a given address.
1118/// \\ \param t The reference into which the new supremum is constructed.
1119template <class... ARGUMENTS>
1120inline void make_supremum(atermpp::aterm& t, const ARGUMENTS&... args)
1121{
1122 atermpp::make_term_appl(t, core::detail::function_symbol_StateSupremum(), args...);
1123}
1124
1125/// \\brief Test for a supremum expression
1126/// \\param x A term
1127/// \\return True if \\a x is a supremum expression
1128inline
1130{
1131 return x.function() == core::detail::function_symbols::StateSupremum;
1132}
1133
1134// prototype declaration
1135std::string pp(const supremum& x, bool precedence_aware = true);
1136
1137/// \\brief Outputs the object to a stream
1138/// \\param out An output stream
1139/// \\param x Object x
1140/// \\return The output stream
1141inline
1143{
1144 return out << state_formulas::pp(x);
1145}
1146
1147/// \\brief swap overload
1148inline void swap(supremum& t1, supremum& t2) noexcept
1149{
1150 t1.swap(t2);
1151}
1152
1153
1154/// \\brief The sum over a data type for state formulas
1155class sum: public state_formula
1156{
1157 public:
1158 /// \\brief Default constructor X3.
1161 {}
1162
1163 /// \\brief Constructor Z9.
1164 /// \\param term A term
1165 explicit sum(const atermpp::aterm& term)
1166 : state_formula(term)
1167 {
1168 assert(core::detail::check_term_StateSum(*this));
1169 }
1170
1171 /// \\brief Constructor Z14.
1172 sum(const data::variable_list& variables, const state_formula& body)
1174 {}
1175
1176 /// Move semantics
1177 sum(const sum&) noexcept = default;
1178 sum(sum&&) noexcept = default;
1179 sum& operator=(const sum&) noexcept = default;
1180 sum& operator=(sum&&) noexcept = default;
1181
1182 const data::variable_list& variables() const
1183 {
1184 return atermpp::down_cast<data::variable_list>((*this)[0]);
1185 }
1186
1187 const state_formula& body() const
1188 {
1189 return atermpp::down_cast<state_formula>((*this)[1]);
1190 }
1191};
1192
1193/// \\brief The function make_sum constructs a new term into a given address.
1194/// \\ \param t The reference into which the new sum is constructed.
1195template <class... ARGUMENTS>
1196inline void make_sum(atermpp::aterm& t, const ARGUMENTS&... args)
1197{
1198 atermpp::make_term_appl(t, core::detail::function_symbol_StateSum(), args...);
1199}
1200
1201/// \\brief Test for a sum expression
1202/// \\param x A term
1203/// \\return True if \\a x is a sum expression
1204inline
1205bool is_sum(const atermpp::aterm& x)
1206{
1207 return x.function() == core::detail::function_symbols::StateSum;
1208}
1209
1210// prototype declaration
1211std::string pp(const sum& x, bool precedence_aware = true);
1212
1213/// \\brief Outputs the object to a stream
1214/// \\param out An output stream
1215/// \\param x Object x
1216/// \\return The output stream
1217inline
1219{
1220 return out << state_formulas::pp(x);
1221}
1222
1223/// \\brief swap overload
1224inline void swap(sum& t1, sum& t2) noexcept
1225{
1226 t1.swap(t2);
1227}
1228
1229
1230/// \\brief The must operator for state formulas
1231class must: public state_formula
1232{
1233 public:
1234 /// \\brief Default constructor X3.
1237 {}
1238
1239 /// \\brief Constructor Z9.
1240 /// \\param term A term
1241 explicit must(const atermpp::aterm& term)
1242 : state_formula(term)
1243 {
1244 assert(core::detail::check_term_StateMust(*this));
1245 }
1246
1247 /// \\brief Constructor Z14.
1248 must(const regular_formulas::regular_formula& formula, const state_formula& operand)
1250 {}
1251
1252 /// Move semantics
1253 must(const must&) noexcept = default;
1254 must(must&&) noexcept = default;
1255 must& operator=(const must&) noexcept = default;
1256 must& operator=(must&&) noexcept = default;
1257
1259 {
1260 return atermpp::down_cast<regular_formulas::regular_formula>((*this)[0]);
1261 }
1262
1263 const state_formula& operand() const
1264 {
1265 return atermpp::down_cast<state_formula>((*this)[1]);
1266 }
1267};
1268
1269/// \\brief The function make_must constructs a new term into a given address.
1270/// \\ \param t The reference into which the new must is constructed.
1271template <class... ARGUMENTS>
1272inline void make_must(atermpp::aterm& t, const ARGUMENTS&... args)
1273{
1274 atermpp::make_term_appl(t, core::detail::function_symbol_StateMust(), args...);
1275}
1276
1277/// \\brief Test for a must expression
1278/// \\param x A term
1279/// \\return True if \\a x is a must expression
1280inline
1281bool is_must(const atermpp::aterm& x)
1282{
1283 return x.function() == core::detail::function_symbols::StateMust;
1284}
1285
1286// prototype declaration
1287std::string pp(const must& x, bool precedence_aware = true);
1288
1289/// \\brief Outputs the object to a stream
1290/// \\param out An output stream
1291/// \\param x Object x
1292/// \\return The output stream
1293inline
1295{
1296 return out << state_formulas::pp(x);
1297}
1298
1299/// \\brief swap overload
1300inline void swap(must& t1, must& t2) noexcept
1301{
1302 t1.swap(t2);
1303}
1304
1305
1306/// \\brief The may operator for state formulas
1307class may: public state_formula
1308{
1309 public:
1310 /// \\brief Default constructor X3.
1313 {}
1314
1315 /// \\brief Constructor Z9.
1316 /// \\param term A term
1317 explicit may(const atermpp::aterm& term)
1318 : state_formula(term)
1319 {
1320 assert(core::detail::check_term_StateMay(*this));
1321 }
1322
1323 /// \\brief Constructor Z14.
1324 may(const regular_formulas::regular_formula& formula, const state_formula& operand)
1326 {}
1327
1328 /// Move semantics
1329 may(const may&) noexcept = default;
1330 may(may&&) noexcept = default;
1331 may& operator=(const may&) noexcept = default;
1332 may& operator=(may&&) noexcept = default;
1333
1335 {
1336 return atermpp::down_cast<regular_formulas::regular_formula>((*this)[0]);
1337 }
1338
1339 const state_formula& operand() const
1340 {
1341 return atermpp::down_cast<state_formula>((*this)[1]);
1342 }
1343};
1344
1345/// \\brief The function make_may constructs a new term into a given address.
1346/// \\ \param t The reference into which the new may is constructed.
1347template <class... ARGUMENTS>
1348inline void make_may(atermpp::aterm& t, const ARGUMENTS&... args)
1349{
1350 atermpp::make_term_appl(t, core::detail::function_symbol_StateMay(), args...);
1351}
1352
1353/// \\brief Test for a may expression
1354/// \\param x A term
1355/// \\return True if \\a x is a may expression
1356inline
1357bool is_may(const atermpp::aterm& x)
1358{
1359 return x.function() == core::detail::function_symbols::StateMay;
1360}
1361
1362// prototype declaration
1363std::string pp(const may& x, bool precedence_aware = true);
1364
1365/// \\brief Outputs the object to a stream
1366/// \\param out An output stream
1367/// \\param x Object x
1368/// \\return The output stream
1369inline
1371{
1372 return out << state_formulas::pp(x);
1373}
1374
1375/// \\brief swap overload
1376inline void swap(may& t1, may& t2) noexcept
1377{
1378 t1.swap(t2);
1379}
1380
1381
1382/// \\brief The yaled operator for state formulas
1384{
1385 public:
1386 /// \\brief Default constructor X3.
1389 {}
1390
1391 /// \\brief Constructor Z9.
1392 /// \\param term A term
1393 explicit yaled(const atermpp::aterm& term)
1394 : state_formula(term)
1395 {
1396 assert(core::detail::check_term_StateYaled(*this));
1397 }
1398
1399 /// Move semantics
1400 yaled(const yaled&) noexcept = default;
1401 yaled(yaled&&) noexcept = default;
1402 yaled& operator=(const yaled&) noexcept = default;
1403 yaled& operator=(yaled&&) noexcept = default;
1404};
1405
1406/// \\brief Test for a yaled expression
1407/// \\param x A term
1408/// \\return True if \\a x is a yaled expression
1409inline
1410bool is_yaled(const atermpp::aterm& x)
1411{
1412 return x.function() == core::detail::function_symbols::StateYaled;
1413}
1414
1415// prototype declaration
1416std::string pp(const yaled& x, bool precedence_aware = true);
1417
1418/// \\brief Outputs the object to a stream
1419/// \\param out An output stream
1420/// \\param x Object x
1421/// \\return The output stream
1422inline
1424{
1425 return out << state_formulas::pp(x);
1426}
1427
1428/// \\brief swap overload
1429inline void swap(yaled& t1, yaled& t2) noexcept
1430{
1431 t1.swap(t2);
1432}
1433
1434
1435/// \\brief The timed yaled operator for state formulas
1437{
1438 public:
1439 /// \\brief Default constructor X3.
1442 {}
1443
1444 /// \\brief Constructor Z9.
1445 /// \\param term A term
1446 explicit yaled_timed(const atermpp::aterm& term)
1447 : state_formula(term)
1448 {
1449 assert(core::detail::check_term_StateYaledTimed(*this));
1450 }
1451
1452 /// \\brief Constructor Z14.
1453 explicit yaled_timed(const data::data_expression& time_stamp)
1455 {}
1456
1457 /// Move semantics
1458 yaled_timed(const yaled_timed&) noexcept = default;
1459 yaled_timed(yaled_timed&&) noexcept = default;
1460 yaled_timed& operator=(const yaled_timed&) noexcept = default;
1461 yaled_timed& operator=(yaled_timed&&) noexcept = default;
1462
1464 {
1465 return atermpp::down_cast<data::data_expression>((*this)[0]);
1466 }
1467};
1468
1469/// \\brief The function make_yaled_timed constructs a new term into a given address.
1470/// \\ \param t The reference into which the new yaled_timed is constructed.
1471template <class... ARGUMENTS>
1472inline void make_yaled_timed(atermpp::aterm& t, const ARGUMENTS&... args)
1473{
1474 atermpp::make_term_appl(t, core::detail::function_symbol_StateYaledTimed(), args...);
1475}
1476
1477/// \\brief Test for a yaled_timed expression
1478/// \\param x A term
1479/// \\return True if \\a x is a yaled_timed expression
1480inline
1482{
1483 return x.function() == core::detail::function_symbols::StateYaledTimed;
1484}
1485
1486// prototype declaration
1487std::string pp(const yaled_timed& x, bool precedence_aware = true);
1488
1489/// \\brief Outputs the object to a stream
1490/// \\param out An output stream
1491/// \\param x Object x
1492/// \\return The output stream
1493inline
1495{
1496 return out << state_formulas::pp(x);
1497}
1498
1499/// \\brief swap overload
1500inline void swap(yaled_timed& t1, yaled_timed& t2) noexcept
1501{
1502 t1.swap(t2);
1503}
1504
1505
1506/// \\brief The delay operator for state formulas
1508{
1509 public:
1510 /// \\brief Default constructor X3.
1513 {}
1514
1515 /// \\brief Constructor Z9.
1516 /// \\param term A term
1517 explicit delay(const atermpp::aterm& term)
1518 : state_formula(term)
1519 {
1520 assert(core::detail::check_term_StateDelay(*this));
1521 }
1522
1523 /// Move semantics
1524 delay(const delay&) noexcept = default;
1525 delay(delay&&) noexcept = default;
1526 delay& operator=(const delay&) noexcept = default;
1527 delay& operator=(delay&&) noexcept = default;
1528};
1529
1530/// \\brief Test for a delay expression
1531/// \\param x A term
1532/// \\return True if \\a x is a delay expression
1533inline
1534bool is_delay(const atermpp::aterm& x)
1535{
1536 return x.function() == core::detail::function_symbols::StateDelay;
1537}
1538
1539// prototype declaration
1540std::string pp(const delay& x, bool precedence_aware = true);
1541
1542/// \\brief Outputs the object to a stream
1543/// \\param out An output stream
1544/// \\param x Object x
1545/// \\return The output stream
1546inline
1548{
1549 return out << state_formulas::pp(x);
1550}
1551
1552/// \\brief swap overload
1553inline void swap(delay& t1, delay& t2) noexcept
1554{
1555 t1.swap(t2);
1556}
1557
1558
1559/// \\brief The timed delay operator for state formulas
1561{
1562 public:
1563 /// \\brief Default constructor X3.
1566 {}
1567
1568 /// \\brief Constructor Z9.
1569 /// \\param term A term
1570 explicit delay_timed(const atermpp::aterm& term)
1571 : state_formula(term)
1572 {
1573 assert(core::detail::check_term_StateDelayTimed(*this));
1574 }
1575
1576 /// \\brief Constructor Z14.
1577 explicit delay_timed(const data::data_expression& time_stamp)
1579 {}
1580
1581 /// Move semantics
1582 delay_timed(const delay_timed&) noexcept = default;
1583 delay_timed(delay_timed&&) noexcept = default;
1584 delay_timed& operator=(const delay_timed&) noexcept = default;
1585 delay_timed& operator=(delay_timed&&) noexcept = default;
1586
1588 {
1589 return atermpp::down_cast<data::data_expression>((*this)[0]);
1590 }
1591};
1592
1593/// \\brief The function make_delay_timed constructs a new term into a given address.
1594/// \\ \param t The reference into which the new delay_timed is constructed.
1595template <class... ARGUMENTS>
1596inline void make_delay_timed(atermpp::aterm& t, const ARGUMENTS&... args)
1597{
1598 atermpp::make_term_appl(t, core::detail::function_symbol_StateDelayTimed(), args...);
1599}
1600
1601/// \\brief Test for a delay_timed expression
1602/// \\param x A term
1603/// \\return True if \\a x is a delay_timed expression
1604inline
1606{
1607 return x.function() == core::detail::function_symbols::StateDelayTimed;
1608}
1609
1610// prototype declaration
1611std::string pp(const delay_timed& x, bool precedence_aware = true);
1612
1613/// \\brief Outputs the object to a stream
1614/// \\param out An output stream
1615/// \\param x Object x
1616/// \\return The output stream
1617inline
1619{
1620 return out << state_formulas::pp(x);
1621}
1622
1623/// \\brief swap overload
1624inline void swap(delay_timed& t1, delay_timed& t2) noexcept
1625{
1626 t1.swap(t2);
1627}
1628
1629
1630/// \\brief The state formula variable
1632{
1633 public:
1634 /// \\brief Default constructor X3.
1637 {}
1638
1639 /// \\brief Constructor Z9.
1640 /// \\param term A term
1641 explicit variable(const atermpp::aterm& term)
1642 : state_formula(term)
1643 {
1644 assert(core::detail::check_term_StateVar(*this));
1645 }
1646
1647 /// \\brief Constructor Z14.
1648 variable(const core::identifier_string& name, const data::data_expression_list& arguments)
1650 {}
1651
1652 /// \\brief Constructor Z2.
1653 variable(const std::string& name, const data::data_expression_list& arguments)
1655 {}
1656
1657 /// Move semantics
1658 variable(const variable&) noexcept = default;
1659 variable(variable&&) noexcept = default;
1660 variable& operator=(const variable&) noexcept = default;
1661 variable& operator=(variable&&) noexcept = default;
1662
1663 const core::identifier_string& name() const
1664 {
1665 return atermpp::down_cast<core::identifier_string>((*this)[0]);
1666 }
1667
1668 const data::data_expression_list& arguments() const
1669 {
1670 return atermpp::down_cast<data::data_expression_list>((*this)[1]);
1671 }
1672};
1673
1674/// \\brief The function make_variable constructs a new term into a given address.
1675/// \\ \param t The reference into which the new variable is constructed.
1676template <class... ARGUMENTS>
1677inline void make_variable(atermpp::aterm& t, const ARGUMENTS&... args)
1678{
1679 atermpp::make_term_appl(t, core::detail::function_symbol_StateVar(), args...);
1680}
1681
1682/// \\brief Test for a variable expression
1683/// \\param x A term
1684/// \\return True if \\a x is a variable expression
1685inline
1687{
1688 return x.function() == core::detail::function_symbols::StateVar;
1689}
1690
1691// prototype declaration
1692std::string pp(const variable& x, bool precedence_aware = true);
1693
1694/// \\brief Outputs the object to a stream
1695/// \\param out An output stream
1696/// \\param x Object x
1697/// \\return The output stream
1698inline
1700{
1701 return out << state_formulas::pp(x);
1702}
1703
1704/// \\brief swap overload
1705inline void swap(variable& t1, variable& t2) noexcept
1706{
1707 t1.swap(t2);
1708}
1709
1710
1711/// \\brief The nu operator for state formulas
1712class nu: public state_formula
1713{
1714 public:
1715 /// \\brief Default constructor X3.
1718 {}
1719
1720 /// \\brief Constructor Z9.
1721 /// \\param term A term
1722 explicit nu(const atermpp::aterm& term)
1723 : state_formula(term)
1724 {
1725 assert(core::detail::check_term_StateNu(*this));
1726 }
1727
1728 /// \\brief Constructor Z14.
1729 nu(const core::identifier_string& name, const data::assignment_list& assignments, const state_formula& operand)
1731 {}
1732
1733 /// \\brief Constructor Z2.
1734 nu(const std::string& name, const data::assignment_list& assignments, const state_formula& operand)
1736 {}
1737
1738 /// Move semantics
1739 nu(const nu&) noexcept = default;
1740 nu(nu&&) noexcept = default;
1741 nu& operator=(const nu&) noexcept = default;
1742 nu& operator=(nu&&) noexcept = default;
1743
1744 const core::identifier_string& name() const
1745 {
1746 return atermpp::down_cast<core::identifier_string>((*this)[0]);
1747 }
1748
1749 const data::assignment_list& assignments() const
1750 {
1751 return atermpp::down_cast<data::assignment_list>((*this)[1]);
1752 }
1753
1754 const state_formula& operand() const
1755 {
1756 return atermpp::down_cast<state_formula>((*this)[2]);
1757 }
1758};
1759
1760/// \\brief The function make_nu constructs a new term into a given address.
1761/// \\ \param t The reference into which the new nu is constructed.
1762template <class... ARGUMENTS>
1763inline void make_nu(atermpp::aterm& t, const ARGUMENTS&... args)
1764{
1765 atermpp::make_term_appl(t, core::detail::function_symbol_StateNu(), args...);
1766}
1767
1768/// \\brief Test for a nu expression
1769/// \\param x A term
1770/// \\return True if \\a x is a nu expression
1771inline
1772bool is_nu(const atermpp::aterm& x)
1773{
1774 return x.function() == core::detail::function_symbols::StateNu;
1775}
1776
1777// prototype declaration
1778std::string pp(const nu& x, bool precedence_aware = true);
1779
1780/// \\brief Outputs the object to a stream
1781/// \\param out An output stream
1782/// \\param x Object x
1783/// \\return The output stream
1784inline
1786{
1787 return out << state_formulas::pp(x);
1788}
1789
1790/// \\brief swap overload
1791inline void swap(nu& t1, nu& t2) noexcept
1792{
1793 t1.swap(t2);
1794}
1795
1796
1797/// \\brief The mu operator for state formulas
1798class mu: public state_formula
1799{
1800 public:
1801 /// \\brief Default constructor X3.
1804 {}
1805
1806 /// \\brief Constructor Z9.
1807 /// \\param term A term
1808 explicit mu(const atermpp::aterm& term)
1809 : state_formula(term)
1810 {
1811 assert(core::detail::check_term_StateMu(*this));
1812 }
1813
1814 /// \\brief Constructor Z14.
1815 mu(const core::identifier_string& name, const data::assignment_list& assignments, const state_formula& operand)
1817 {}
1818
1819 /// \\brief Constructor Z2.
1820 mu(const std::string& name, const data::assignment_list& assignments, const state_formula& operand)
1822 {}
1823
1824 /// Move semantics
1825 mu(const mu&) noexcept = default;
1826 mu(mu&&) noexcept = default;
1827 mu& operator=(const mu&) noexcept = default;
1828 mu& operator=(mu&&) noexcept = default;
1829
1830 const core::identifier_string& name() const
1831 {
1832 return atermpp::down_cast<core::identifier_string>((*this)[0]);
1833 }
1834
1835 const data::assignment_list& assignments() const
1836 {
1837 return atermpp::down_cast<data::assignment_list>((*this)[1]);
1838 }
1839
1840 const state_formula& operand() const
1841 {
1842 return atermpp::down_cast<state_formula>((*this)[2]);
1843 }
1844};
1845
1846/// \\brief The function make_mu constructs a new term into a given address.
1847/// \\ \param t The reference into which the new mu is constructed.
1848template <class... ARGUMENTS>
1849inline void make_mu(atermpp::aterm& t, const ARGUMENTS&... args)
1850{
1851 atermpp::make_term_appl(t, core::detail::function_symbol_StateMu(), args...);
1852}
1853
1854/// \\brief Test for a mu expression
1855/// \\param x A term
1856/// \\return True if \\a x is a mu expression
1857inline
1858bool is_mu(const atermpp::aterm& x)
1859{
1860 return x.function() == core::detail::function_symbols::StateMu;
1861}
1862
1863// prototype declaration
1864std::string pp(const mu& x, bool precedence_aware = true);
1865
1866/// \\brief Outputs the object to a stream
1867/// \\param out An output stream
1868/// \\param x Object x
1869/// \\return The output stream
1870inline
1872{
1873 return out << state_formulas::pp(x);
1874}
1875
1876/// \\brief swap overload
1877inline void swap(mu& t1, mu& t2) noexcept
1878{
1879 t1.swap(t2);
1880}
1881//--- end generated classes ---//
1882
1883namespace algorithms {
1884 bool is_timed(const state_formula& x);
1885} // namespace algorithms
1886
1887/// \brief Returns true if the formula is timed.
1888/// \return True if the formula is timed.
1889inline
1891{
1892 return algorithms::is_timed(*this);
1893}
1894
1895// template function overloads
1904
1905} // namespace mcrl2::state_formulas
1906
1907
1908
1909#endif // MCRL2_MODAL_FORMULA_STATE_FORMULA_H
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
A list of aterm objects.
Definition aterm_list.h:26
A unordered_map class in which aterms can be stored.
\brief The multi action for action formulas
multi_action(const process::action_list &actions)
\brief Constructor Z14.
\brief A timed multi-action
const process::action_list & actions() const
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, label_type > split_by_action
std::size_t num_eq_classes() const
Gives the number of bisimulation equivalence classes of the LTS.
mcrl2::state_formulas::state_formula counter_formula(std::size_t s, std::size_t t)
Creates a state formula that distinguishes state s from state t.
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
mcrl2::state_formulas::state_formula counter_formula_aux(const block_index_type B1, const block_index_type B2)
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
function object to compare two constln_t pointers based on their contents
A class that can be used to store counterexample trees and.
A class that contains a labelled transition system.
Class for computing the signature for strong bisimulation.
Definition sigref.h:74
Class for computing the signature for branching bisimulation.
Definition sigref.h:104
Class for computing the signature for divergence preserving branching bisimulation.
Definition sigref.h:183
Signature based reductions for labelled transition systems.
Definition sigref.h:349
regular_formula(const action_formulas::action_formula &x)
\brief Constructor Z6.
\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:392
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
bool is_untyped_data_parameter(const atermpp::aterm &x)
The main namespace for the LPS library.
Definition constelm.h:18
bool bisimulation_compare(const LTS_TYPE &l1, const LTS_TYPE &l2, bool branching=false, bool preserve_divergences=false, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
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::array< std::string, 5 > extension_strings
Definition liblts.cpp:73
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:152
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::string string_for_type(const lts_type type)
Gives a string representation of an LTS format.
Definition liblts.cpp:112
std::string mime_type_for_type(const lts_type type)
Gives the MIME type associated with an LTS format.
Definition liblts.cpp:122
void get_trans(const outgoing_transitions_per_state_t &begin, tree_set_store &tss, std::ptrdiff_t d, std::vector< transition > &d_trans, LTS_TYPE &aut)
lts_type parse_format(std::string const &s)
Determines the LTS format from a format specification string.
Definition liblts.cpp:91
static const std::array< std::string, 5 > type_strings
Definition liblts.cpp:71
std::string extension_for_type(const lts_type type)
Gives the filename extension associated with an LTS format.
Definition liblts.cpp:117
const std::set< lts_type > & supported_lts_formats()
Gives the set of all supported LTS formats.
Definition liblts.cpp:139
std::string lts_extensions_as_string(const std::set< lts_type > &supported)
Gives a list of extensions for supported LTS formats.
Definition liblts.cpp:221
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
bool destructive_bisimulation_compare(LTS_TYPE &l1, LTS_TYPE &l2, bool branching=false, bool preserve_divergences=false, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether the two initial states of two lts's are strong or branching bisimilar.
void bisimulation_reduce(LTS_TYPE &l, bool branching=false, bool preserve_divergences=false)
Reduce transition system l with respect to strong or (divergence preserving) branching bisimulation.
bool lts_named_cmp(const std::array< std::string, Size > &N, T a, T b)
Definition liblts.cpp:147
static const std::array< std::string, 5 > type_desc_strings
Definition liblts.cpp:75
static const std::array< std::string, 5 > mime_type_strings
Definition liblts.cpp:84
static const std::set< lts_type > & initialise_supported_lts_formats()
Definition liblts.cpp:127
bool is_deterministic(const LTS_TYPE &l)
Checks whether this LTS is deterministic.
void determinise(LTS_TYPE &l)
Determinises this LTS.
void reduce(LTS_TYPE &l, lts_equivalence eq)
Applies a reduction algorithm to this LTS.
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, lts_equivalence eq, bool generate_counter_examples=false, const std::string &counter_example_file="", bool structured_output=false)
Checks whether this LTS is equivalent to another LTS.
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.
bool destructive_compare(LTS_TYPE &l1, LTS_TYPE &l2, lts_preorder pre, bool generate_counter_example, const std::string &counter_example_file="", bool structured_output=false, lps::exploration_strategy strategy=lps::es_breadth, bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
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...
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...
bool compare(const LTS_TYPE &l1, const LTS_TYPE &l2, lts_preorder pre, bool generate_counter_example, const std::string &counter_example_file="", bool structured_output=false, lps::exploration_strategy strategy=lps::es_breadth, bool preprocess=true)
Checks whether this LTS is smaller than another LTS according to a preorder.
bool is_timed(const state_formula &x)
void swap(variable &t1, variable &t2) noexcept
\brief swap overload
bool is_infimum(const atermpp::aterm &x)
std::string pp(const state_formulas::nu &x, bool arg0)
std::string pp(const state_formulas::exists &x, bool arg0)
std::string pp(const state_formulas::not_ &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const not_ &x)
bool is_and(const atermpp::aterm &x)
void swap(minus &t1, minus &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const sum &x)
std::string pp(const state_formulas::supremum &x, bool arg0)
bool is_delay_timed(const atermpp::aterm &x)
void swap(exists &t1, exists &t2) noexcept
\brief swap overload
bool is_const_multiply(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const exists &x)
std::string pp(const state_formulas::must &x, bool arg0)
void swap(const_multiply_alt &t1, const_multiply_alt &t2) noexcept
\brief swap overload
void make_or(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_minus(const atermpp::aterm &x)
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_exists(const atermpp::aterm &x)
void swap(may &t1, may &t2) noexcept
\brief swap overload
void swap(mu &t1, mu &t2) noexcept
\brief swap overload
bool is_not(const atermpp::aterm &x)
std::string pp(const state_formulas::minus &x, bool arg0)
bool is_state_formula(const atermpp::aterm &x)
void swap(sum &t1, sum &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const const_multiply &x)
std::ostream & operator<<(std::ostream &out, const may &x)
void make_const_multiply(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const nu &x)
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(supremum &t1, supremum &t2) noexcept
\brief swap overload
bool is_supremum(const atermpp::aterm &x)
void swap(true_ &t1, true_ &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const minus &x)
bool is_must(const atermpp::aterm &x)
void swap(const_multiply &t1, const_multiply &t2) noexcept
\brief swap overload
std::set< data::variable > find_all_variables(const state_formulas::state_formula &x)
std::ostream & operator<<(std::ostream &out, const imp &x)
bool is_yaled(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const mu &x)
std::ostream & operator<<(std::ostream &out, const must &x)
std::ostream & operator<<(std::ostream &out, const supremum &x)
void swap(not_ &t1, not_ &t2) noexcept
\brief swap overload
std::set< data::variable > find_free_variables(const state_formulas::state_formula &x)
void swap(state_formula &t1, state_formula &t2) noexcept
\brief swap overload
bool is_true(const atermpp::aterm &x)
std::string pp(const state_formulas::true_ &x, bool arg0)
void make_and(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const true_ &x)
std::string pp(const state_formulas::state_formula &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const variable &x)
std::ostream & operator<<(std::ostream &out, const state_formula &x)
void swap(plus &t1, plus &t2) noexcept
\brief swap overload
std::string pp(const state_formulas::const_multiply &x, bool arg0)
void make_plus(atermpp::aterm &t, const ARGUMENTS &... args)
std::ostream & operator<<(std::ostream &out, const and_ &x)
std::string pp(const state_formulas::delay_timed &x, bool arg0)
void swap(yaled &t1, yaled &t2) noexcept
\brief swap overload
void swap(delay &t1, delay &t2) noexcept
\brief swap overload
bool is_variable(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const forall &x)
void make_infimum(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_may(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const yaled_timed &x)
bool is_yaled_timed(const atermpp::aterm &x)
bool is_imp(const atermpp::aterm &x)
void swap(yaled_timed &t1, yaled_timed &t2) noexcept
\brief swap overload
void make_delay_timed(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::imp &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const or_ &x)
std::string pp(const state_formulas::mu &x, bool arg0)
void make_const_multiply_alt(atermpp::aterm &t, const ARGUMENTS &... args)
void make_may(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_sum(const atermpp::aterm &x)
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)
void swap(and_ &t1, and_ &t2) noexcept
\brief swap overload
bool is_nu(const atermpp::aterm &x)
void swap(false_ &t1, false_ &t2) noexcept
\brief swap overload
std::string pp(const state_formulas::delay &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const false_ &x)
std::string pp(const state_formulas::forall &x, bool arg0)
void swap(forall &t1, forall &t2) noexcept
\brief swap overload
std::string pp(const state_formulas::sum &x, bool arg0)
void swap(delay_timed &t1, delay_timed &t2) noexcept
\brief swap overload
void swap(infimum &t1, infimum &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const plus &x)
std::string pp(const state_formulas::yaled &x, bool arg0)
bool is_delay(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const infimum &x)
std::string pp(const state_formulas::infimum &x, bool arg0)
std::string pp(const state_formulas::or_ &x, bool arg0)
std::ostream & operator<<(std::ostream &out, const delay &x)
std::string pp(const state_formulas::may &x, bool arg0)
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)
void swap(must &t1, must &t2) noexcept
\brief swap overload
bool is_plus(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const delay_timed &x)
void make_not(atermpp::aterm &t, const ARGUMENTS &... args)
void swap(nu &t1, nu &t2) noexcept
\brief swap overload
std::string pp(const state_formulas::and_ &x, bool arg0)
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::false_ &x, bool arg0)
std::string pp(const state_formulas::const_multiply_alt &x, bool arg0)
bool is_mu(const atermpp::aterm &x)
bool is_forall(const atermpp::aterm &x)
void make_minus(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_const_multiply_alt(const atermpp::aterm &x)
void swap(or_ &t1, or_ &t2) noexcept
\brief swap overload
std::string pp(const state_formulas::yaled_timed &x, bool arg0)
std::string pp(const state_formulas::plus &x, bool arg0)
bool is_or(const atermpp::aterm &x)
void make_yaled_timed(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const state_formulas::variable &x, bool arg0)
void swap(imp &t1, imp &t2) noexcept
\brief swap overload
std::set< data::sort_expression > find_sort_expressions(const state_formulas::state_formula &x)
bool find_nil(const state_formulas::state_formula &x)
std::ostream & operator<<(std::ostream &out, const const_multiply_alt &x)
std::set< process::action_label > find_action_labels(const state_formulas::state_formula &x)
std::ostream & operator<<(std::ostream &out, const yaled &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 StateFrm
static const atermpp::aterm StateYaled
static const atermpp::aterm StateInfimum
static const atermpp::aterm StateAnd
static const atermpp::aterm StateExists
static const atermpp::aterm StateConstantMultiplyAlt
static const atermpp::aterm StateYaledTimed
static const atermpp::aterm StateFalse
static const atermpp::aterm StateDelay
static const atermpp::aterm StatePlus
static const atermpp::aterm StateMinus
static const atermpp::aterm StateNu
static const atermpp::aterm StateDelayTimed
static const atermpp::aterm StateSupremum
static const atermpp::aterm StateSum
static const atermpp::aterm StateMu
static const atermpp::aterm StateVar
static const atermpp::aterm StateImp
static const atermpp::aterm StateTrue
static const atermpp::aterm StateForall
static const atermpp::aterm StateMust
static const atermpp::aterm StateNot
static const atermpp::aterm StateConstantMultiply
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)