mCRL2
Loading...
Searching...
No Matches
fset64.h
Go to the documentation of this file.
1// Author(s): Jeroen Keiren
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//
14
15#ifndef MCRL2_DATA_FSET64_H
16#define MCRL2_DATA_FSET64_H
17
18#include "functional" // std::function
25#include "mcrl2/data/standard.h"
27#include "mcrl2/data/bool.h"
28#include "mcrl2/data/nat64.h"
29
30namespace mcrl2 {
31
32 namespace data {
33
35 namespace sort_fset {
36
40 inline
41 container_sort fset(const sort_expression& s)
42 {
43 container_sort fset(fset_container(), s);
44 return fset;
45 }
46
51 inline
52 bool is_fset(const sort_expression& e)
53 {
54 if (is_container_sort(e))
55 {
56 return container_sort(e).container_name() == fset_container();
57 }
58 return false;
59 }
60
61
64 inline
66 {
68 return empty_name;
69 }
70
74 inline
75 function_symbol empty(const sort_expression& s)
76 {
78 return empty;
79 }
80
84 inline
86 {
87 if (is_function_symbol(e))
88 {
89 return atermpp::down_cast<function_symbol>(e).name() == empty_name();
90 }
91 return false;
92 }
93
96 inline
98 {
100 return insert_name;
101 }
102
106 inline
107 function_symbol insert(const sort_expression& s)
108 {
110 return insert;
111 }
112
116 inline
118 {
119 if (is_function_symbol(e))
120 {
121 return atermpp::down_cast<function_symbol>(e).name() == insert_name();
122 }
123 return false;
124 }
125
131 inline
132 application insert(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
133 {
134 return sort_fset::insert(s)(arg0, arg1);
135 }
136
142 inline
143 void make_insert(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
144 {
145 make_application(result, sort_fset::insert(s),arg0, arg1);
146 }
147
152 inline
154 {
155 return is_application(e) && is_insert_function_symbol(atermpp::down_cast<application>(e).head());
156 }
160 inline
162 {
164 result.push_back(sort_fset::empty(s));
165 result.push_back(sort_fset::insert(s));
166
167 return result;
168 }
172 inline
174 {
176 result.push_back(sort_fset::empty(s));
177 result.push_back(sort_fset::insert(s));
178
179 return result;
180 }
181 // The typedef is the sort that maps a function symbol to an function that rewrites it as well as a string of a function that can be used to implement it
182 typedef std::map<function_symbol,std::pair<std::function<void(data_expression&, const data_expression&)>, std::string> > implementation_map;
186 inline
188 {
189 implementation_map result;
190 static_cast< void >(s); // suppress unused variable warnings
191 return result;
192 }
193
196 inline
198 {
200 return cons_name;
201 }
202
206 inline
207 function_symbol cons_(const sort_expression& s)
208 {
210 return cons_;
211 }
212
216 inline
218 {
219 if (is_function_symbol(e))
220 {
221 return atermpp::down_cast<function_symbol>(e).name() == cons_name();
222 }
223 return false;
224 }
225
231 inline
232 application cons_(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
233 {
234 return sort_fset::cons_(s)(arg0, arg1);
235 }
236
242 inline
243 void make_cons_(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
244 {
245 make_application(result, sort_fset::cons_(s),arg0, arg1);
246 }
247
252 inline
254 {
255 return is_application(e) && is_cons_function_symbol(atermpp::down_cast<application>(e).head());
256 }
257
260 inline
262 {
264 return cinsert_name;
265 }
266
270 inline
271 function_symbol cinsert(const sort_expression& s)
272 {
274 return cinsert;
275 }
276
280 inline
282 {
283 if (is_function_symbol(e))
284 {
285 return atermpp::down_cast<function_symbol>(e).name() == cinsert_name();
286 }
287 return false;
288 }
289
296 inline
297 application cinsert(const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
298 {
299 return sort_fset::cinsert(s)(arg0, arg1, arg2);
300 }
301
308 inline
309 void make_cinsert(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1, const data_expression& arg2)
310 {
311 make_application(result, sort_fset::cinsert(s),arg0, arg1, arg2);
312 }
313
318 inline
320 {
321 return is_application(e) && is_cinsert_function_symbol(atermpp::down_cast<application>(e).head());
322 }
323
326 inline
328 {
330 return in_name;
331 }
332
336 inline
337 function_symbol in(const sort_expression& s)
338 {
340 return in;
341 }
342
346 inline
348 {
349 if (is_function_symbol(e))
350 {
351 return atermpp::down_cast<function_symbol>(e).name() == in_name();
352 }
353 return false;
354 }
355
361 inline
362 application in(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
363 {
364 return sort_fset::in(s)(arg0, arg1);
365 }
366
372 inline
373 void make_in(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
374 {
375 make_application(result, sort_fset::in(s),arg0, arg1);
376 }
377
382 inline
383 bool is_in_application(const atermpp::aterm& e)
384 {
385 return is_application(e) && is_in_function_symbol(atermpp::down_cast<application>(e).head());
386 }
387
390 inline
392 {
394 return difference_name;
395 }
396
400 inline
401 function_symbol difference(const sort_expression& s)
402 {
404 return difference;
405 }
406
410 inline
412 {
413 if (is_function_symbol(e))
414 {
415 return atermpp::down_cast<function_symbol>(e).name() == difference_name();
416 }
417 return false;
418 }
419
425 inline
426 application difference(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
427 {
428 return sort_fset::difference(s)(arg0, arg1);
429 }
430
436 inline
437 void make_difference(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
438 {
440 }
441
446 inline
448 {
449 return is_application(e) && is_difference_function_symbol(atermpp::down_cast<application>(e).head());
450 }
451
454 inline
456 {
458 return union_name;
459 }
460
464 inline
465 function_symbol union_(const sort_expression& s)
466 {
468 return union_;
469 }
470
474 inline
476 {
477 if (is_function_symbol(e))
478 {
479 return atermpp::down_cast<function_symbol>(e).name() == union_name();
480 }
481 return false;
482 }
483
489 inline
490 application union_(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
491 {
492 return sort_fset::union_(s)(arg0, arg1);
493 }
494
500 inline
501 void make_union_(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
502 {
503 make_application(result, sort_fset::union_(s),arg0, arg1);
504 }
505
510 inline
512 {
513 return is_application(e) && is_union_function_symbol(atermpp::down_cast<application>(e).head());
514 }
515
518 inline
520 {
522 return intersection_name;
523 }
524
528 inline
529 function_symbol intersection(const sort_expression& s)
530 {
532 return intersection;
533 }
534
538 inline
540 {
541 if (is_function_symbol(e))
542 {
543 return atermpp::down_cast<function_symbol>(e).name() == intersection_name();
544 }
545 return false;
546 }
547
553 inline
554 application intersection(const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
555 {
556 return sort_fset::intersection(s)(arg0, arg1);
557 }
558
564 inline
565 void make_intersection(data_expression& result, const sort_expression& s, const data_expression& arg0, const data_expression& arg1)
566 {
568 }
569
574 inline
576 {
577 return is_application(e) && is_intersection_function_symbol(atermpp::down_cast<application>(e).head());
578 }
579
582 inline
584 {
586 return count_name;
587 }
588
592 inline
593 function_symbol count(const sort_expression& s)
594 {
596 return count;
597 }
598
602 inline
604 {
605 if (is_function_symbol(e))
606 {
607 return atermpp::down_cast<function_symbol>(e).name() == count_name();
608 }
609 return false;
610 }
611
616 inline
617 application count(const sort_expression& s, const data_expression& arg0)
618 {
619 return sort_fset::count(s)(arg0);
620 }
621
626 inline
627 void make_count(data_expression& result, const sort_expression& s, const data_expression& arg0)
628 {
629 make_application(result, sort_fset::count(s),arg0);
630 }
631
636 inline
638 {
639 return is_application(e) && is_count_function_symbol(atermpp::down_cast<application>(e).head());
640 }
644 inline
646 {
648 result.push_back(sort_fset::cons_(s));
649 result.push_back(sort_fset::cinsert(s));
650 result.push_back(sort_fset::in(s));
651 result.push_back(sort_fset::difference(s));
652 result.push_back(sort_fset::union_(s));
653 result.push_back(sort_fset::intersection(s));
654 result.push_back(sort_fset::count(s));
655 return result;
656 }
657
661 inline
663 {
665 for(const function_symbol& f: fset_generate_constructors_code(s))
666 {
667 result.push_back(f);
668 }
669 return result;
670 }
671
675 inline
676 function_symbol_vector fset_mCRL2_usable_mappings(const sort_expression& s)
677 {
679 result.push_back(sort_fset::cons_(s));
680 result.push_back(sort_fset::cinsert(s));
681 result.push_back(sort_fset::in(s));
682 result.push_back(sort_fset::difference(s));
683 result.push_back(sort_fset::union_(s));
684 result.push_back(sort_fset::intersection(s));
685 result.push_back(sort_fset::count(s));
686 return result;
687 }
688
689
690 // The typedef is the sort that maps a function symbol to an function that rewrites it as well as a string of a function that can be used to implement it
691 typedef std::map<function_symbol,std::pair<std::function<void(data_expression&, const data_expression&)>, std::string> > implementation_map;
695 inline
697 {
698 implementation_map result;
699 static_cast< void >(s); // suppress unused variable warnings
700 return result;
701 }
707 inline
708 const data_expression& left(const data_expression& e)
709 {
711 return atermpp::down_cast<application>(e)[0];
712 }
713
719 inline
720 const data_expression& right(const data_expression& e)
721 {
723 return atermpp::down_cast<application>(e)[1];
724 }
725
731 inline
732 const data_expression& arg1(const data_expression& e)
733 {
734 assert(is_cinsert_application(e));
735 return atermpp::down_cast<application>(e)[0];
736 }
737
743 inline
744 const data_expression& arg2(const data_expression& e)
745 {
746 assert(is_cinsert_application(e));
747 return atermpp::down_cast<application>(e)[1];
748 }
749
755 inline
756 const data_expression& arg3(const data_expression& e)
757 {
758 assert(is_cinsert_application(e));
759 return atermpp::down_cast<application>(e)[2];
760 }
761
767 inline
768 const data_expression& arg(const data_expression& e)
769 {
770 assert(is_count_application(e));
771 return atermpp::down_cast<application>(e)[0];
772 }
773
777 inline
778 data_equation_vector fset_generate_equations_code(const sort_expression& s)
779 {
780 variable vd("d",s);
781 variable ve("e",s);
782 variable vf("f",make_function_sort_(s, sort_bool::bool_()));
783 variable vg("g",make_function_sort_(s, sort_bool::bool_()));
784 variable vs("s",fset(s));
785 variable vt("t",fset(s));
786
788 result.push_back(data_equation(variable_list({vd, vs}), equal_to(empty(s), cons_(s, vd, vs)), sort_bool::false_()));
789 result.push_back(data_equation(variable_list({vd, vs}), equal_to(cons_(s, vd, vs), empty(s)), sort_bool::false_()));
790 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), equal_to(cons_(s, vd, vs), cons_(s, ve, vt)), sort_bool::and_(equal_to(vd, ve), equal_to(vs, vt))));
791 result.push_back(data_equation(variable_list({vd, vs}), less_equal(empty(s), cons_(s, vd, vs)), sort_bool::true_()));
792 result.push_back(data_equation(variable_list({vd, vs}), less_equal(cons_(s, vd, vs), empty(s)), sort_bool::false_()));
793 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less_equal(cons_(s, vd, vs), cons_(s, ve, vt)), if_(less(vd, ve), sort_bool::false_(), if_(equal_to(vd, ve), less_equal(vs, vt), less_equal(cons_(s, vd, vs), vt)))));
794 result.push_back(data_equation(variable_list({vd, vs}), less(empty(s), cons_(s, vd, vs)), sort_bool::true_()));
795 result.push_back(data_equation(variable_list({vd, vs}), less(cons_(s, vd, vs), empty(s)), sort_bool::false_()));
796 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(cons_(s, vd, vs), cons_(s, ve, vt)), if_(less(vd, ve), sort_bool::false_(), if_(equal_to(vd, ve), less(vs, vt), less_equal(cons_(s, vd, vs), vt)))));
797 result.push_back(data_equation(variable_list({vd}), insert(s, vd, empty(s)), cons_(s, vd, empty(s))));
798 result.push_back(data_equation(variable_list({vd, vs}), insert(s, vd, cons_(s, vd, vs)), cons_(s, vd, vs)));
799 result.push_back(data_equation(variable_list({vd, ve, vs}), less(vd, ve), insert(s, vd, cons_(s, ve, vs)), cons_(s, vd, cons_(s, ve, vs))));
800 result.push_back(data_equation(variable_list({vd, ve, vs}), less(ve, vd), insert(s, vd, cons_(s, ve, vs)), cons_(s, ve, insert(s, vd, vs))));
801 result.push_back(data_equation(variable_list({vd, vs}), cinsert(s, vd, sort_bool::false_(), vs), vs));
802 result.push_back(data_equation(variable_list({vd, vs}), cinsert(s, vd, sort_bool::true_(), vs), insert(s, vd, vs)));
803 result.push_back(data_equation(variable_list({vd}), in(s, vd, empty(s)), sort_bool::false_()));
804 result.push_back(data_equation(variable_list({vd, ve, vs}), in(s, vd, cons_(s, ve, vs)), sort_bool::or_(equal_to(vd, ve), in(s, vd, vs))));
805 result.push_back(data_equation(variable_list({vd, ve, vs}), in(s, vd, insert(s, ve, vs)), sort_bool::or_(equal_to(vd, ve), in(s, vd, vs))));
806 result.push_back(data_equation(variable_list({vs}), difference(s, vs, empty(s)), vs));
807 result.push_back(data_equation(variable_list({vt}), difference(s, empty(s), vt), empty(s)));
808 result.push_back(data_equation(variable_list({vd, vs, vt}), difference(s, cons_(s, vd, vs), cons_(s, vd, vt)), difference(s, vs, vt)));
809 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(vd, ve), difference(s, cons_(s, vd, vs), cons_(s, ve, vt)), cons_(s, vd, difference(s, vs, cons_(s, ve, vt)))));
810 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(ve, vd), difference(s, cons_(s, vd, vs), cons_(s, ve, vt)), difference(s, cons_(s, vd, vs), vt)));
811 result.push_back(data_equation(variable_list({vs}), union_(s, vs, empty(s)), vs));
812 result.push_back(data_equation(variable_list({vt}), union_(s, empty(s), vt), vt));
813 result.push_back(data_equation(variable_list({vd, vs, vt}), union_(s, cons_(s, vd, vs), cons_(s, vd, vt)), cons_(s, vd, union_(s, vs, vt))));
814 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(vd, ve), union_(s, cons_(s, vd, vs), cons_(s, ve, vt)), cons_(s, vd, union_(s, vs, cons_(s, ve, vt)))));
815 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(ve, vd), union_(s, cons_(s, vd, vs), cons_(s, ve, vt)), cons_(s, ve, union_(s, cons_(s, vd, vs), vt))));
816 result.push_back(data_equation(variable_list({vs}), intersection(s, vs, empty(s)), empty(s)));
817 result.push_back(data_equation(variable_list({vt}), intersection(s, empty(s), vt), empty(s)));
818 result.push_back(data_equation(variable_list({vd, vs, vt}), intersection(s, cons_(s, vd, vs), cons_(s, vd, vt)), cons_(s, vd, intersection(s, vs, vt))));
819 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(vd, ve), intersection(s, cons_(s, vd, vs), cons_(s, ve, vt)), intersection(s, vs, cons_(s, ve, vt))));
820 result.push_back(data_equation(variable_list({vd, ve, vs, vt}), less(ve, vd), intersection(s, cons_(s, vd, vs), cons_(s, ve, vt)), intersection(s, cons_(s, vd, vs), vt)));
821 result.push_back(data_equation(variable_list(), count(s, empty(s)), sort_nat::c0()));
822 result.push_back(data_equation(variable_list({vd, vs}), count(s, cons_(s, vd, vs)), sort_nat::succ_nat(count(s, vs))));
823 result.push_back(data_equation(variable_list({vs, vt}), not_equal_to(vs, vt), sort_bool::not_(equal_to(vs, vt))));
824 return result;
825 }
826
827 } // namespace sort_fset
828
829 } // namespace data
830
831} // namespace mcrl2
832
833#endif // MCRL2_DATA_FSET64_H
The class application.
The class basic_sort.
The standard sort bool_.
The class container_sort.
The class function symbol.
The class data_equation.
Exception classes for use in libraries and tools.
The class function_sort.
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
const basic_sort & bool_()
Constructor for sort expression Bool.
Definition bool.h:44
const function_symbol & and_()
Constructor for function symbol &&.
Definition bool.h:235
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:109
const function_symbol & or_()
Constructor for function symbol ||.
Definition bool.h:299
const function_symbol & not_()
Constructor for function symbol !.
Definition bool.h:173
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:77
function_symbol insert(const sort_expression &s)
Constructor for function symbol @fset_insert.
Definition fset1.h:107
bool is_fset(const sort_expression &e)
Recogniser for sort expression FSet(s)
Definition fset1.h:52
function_symbol_vector fset_mCRL2_usable_mappings(const sort_expression &s)
Give all system defined mappings that can be used in mCRL2 specs for fset.
Definition fset1.h:676
void make_union_(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol +.
Definition fset1.h:501
bool is_empty_function_symbol(const atermpp::aterm &e)
Recogniser for function {}.
Definition fset1.h:85
bool is_in_application(const atermpp::aterm &e)
Recogniser for application of in.
Definition fset1.h:383
bool is_cinsert_function_symbol(const atermpp::aterm &e)
Recogniser for function @fset_cinsert.
Definition fset1.h:281
bool is_count_function_symbol(const atermpp::aterm &e)
Recogniser for function #.
Definition fset1.h:603
function_symbol_vector fset_generate_constructors_and_functions_code(const sort_expression &s)
Give all system defined mappings and constructors for fset.
Definition fset1.h:662
function_symbol cinsert(const sort_expression &s)
Constructor for function symbol @fset_cinsert.
Definition fset1.h:271
function_symbol_vector fset_mCRL2_usable_constructors(const sort_expression &s)
Give all defined constructors which can be used in mCRL2 specs for fset.
Definition fset1.h:173
bool is_cons_function_symbol(const atermpp::aterm &e)
Recogniser for function @fset_cons.
Definition fset1.h:217
function_symbol_vector fset_generate_constructors_code(const sort_expression &s)
Give all system defined constructors for fset.
Definition fset1.h:161
const core::identifier_string & empty_name()
Generate identifier {}.
Definition fset1.h:65
const core::identifier_string & intersection_name()
Generate identifier *.
Definition fset1.h:519
implementation_map fset_cpp_implementable_constructors(const sort_expression &s)
Give all system defined constructors which have an implementation in C++ and not in rewrite rules for...
Definition fset1.h:187
bool is_insert_function_symbol(const atermpp::aterm &e)
Recogniser for function @fset_insert.
Definition fset1.h:117
function_symbol_vector fset_generate_functions_code(const sort_expression &s)
Give all system defined mappings for fset.
Definition fset1.h:645
bool is_difference_function_symbol(const atermpp::aterm &e)
Recogniser for function -.
Definition fset1.h:411
function_symbol cons_(const sort_expression &s)
Constructor for function symbol @fset_cons.
Definition fset1.h:207
void make_intersection(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol *.
Definition fset1.h:565
implementation_map fset_cpp_implementable_mappings(const sort_expression &s)
Give all system defined mappings that are to be implemented in C++ code for fset.
Definition fset1.h:696
function_symbol empty(const sort_expression &s)
Constructor for function symbol {}.
Definition fset1.h:75
const core::identifier_string & difference_name()
Generate identifier -.
Definition fset1.h:391
bool is_union_function_symbol(const atermpp::aterm &e)
Recogniser for function +.
Definition fset1.h:475
void make_difference(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol -.
Definition fset1.h:437
function_symbol intersection(const sort_expression &s)
Constructor for function symbol *.
Definition fset1.h:529
void make_cinsert(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Make an application of function symbol @fset_cinsert.
Definition fset1.h:309
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
Definition fset1.h:720
function_symbol difference(const sort_expression &s)
Constructor for function symbol -.
Definition fset1.h:401
void make_insert(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @fset_insert.
Definition fset1.h:143
std::map< function_symbol, std::pair< std::function< void(data_expression &, const data_expression &)>, std::string > > implementation_map
Definition fset1.h:182
bool is_intersection_function_symbol(const atermpp::aterm &e)
Recogniser for function *.
Definition fset1.h:539
const core::identifier_string & cinsert_name()
Generate identifier @fset_cinsert.
Definition fset1.h:261
bool is_in_function_symbol(const atermpp::aterm &e)
Recogniser for function in.
Definition fset1.h:347
void make_count(data_expression &result, const sort_expression &s, const data_expression &arg0)
Make an application of function symbol #.
Definition fset1.h:627
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
Definition fset1.h:708
function_symbol in(const sort_expression &s)
Constructor for function symbol in.
Definition fset1.h:337
bool is_difference_application(const atermpp::aterm &e)
Recogniser for application of -.
Definition fset1.h:447
const core::identifier_string & count_name()
Generate identifier #.
Definition fset1.h:583
const data_expression & arg2(const data_expression &e)
Function for projecting out argument. arg2 from an application.
Definition fset1.h:744
data_equation_vector fset_generate_equations_code(const sort_expression &s)
Give all system defined equations for fset.
Definition fset1.h:778
const core::identifier_string & union_name()
Generate identifier +.
Definition fset1.h:455
const data_expression & arg1(const data_expression &e)
Function for projecting out argument. arg1 from an application.
Definition fset1.h:732
void make_in(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol in.
Definition fset1.h:373
const data_expression & arg3(const data_expression &e)
Function for projecting out argument. arg3 from an application.
Definition fset1.h:756
bool is_count_application(const atermpp::aterm &e)
Recogniser for application of #.
Definition fset1.h:637
function_symbol count(const sort_expression &s)
Constructor for function symbol #.
Definition fset1.h:593
bool is_cons_application(const atermpp::aterm &e)
Recogniser for application of @fset_cons.
Definition fset1.h:253
bool is_intersection_application(const atermpp::aterm &e)
Recogniser for application of *.
Definition fset1.h:575
const core::identifier_string & insert_name()
Generate identifier @fset_insert.
Definition fset1.h:97
void make_cons_(data_expression &result, const sort_expression &s, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol @fset_cons.
Definition fset1.h:243
container_sort fset(const sort_expression &s)
Constructor for sort expression FSet(S)
Definition fset1.h:41
const core::identifier_string & cons_name()
Generate identifier @fset_cons.
Definition fset1.h:197
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
Definition fset1.h:768
function_symbol union_(const sort_expression &s)
Constructor for function symbol +.
Definition fset1.h:465
const core::identifier_string & in_name()
Generate identifier in.
Definition fset1.h:327
bool is_cinsert_application(const atermpp::aterm &e)
Recogniser for application of @fset_cinsert.
Definition fset1.h:319
bool is_union_application(const atermpp::aterm &e)
Recogniser for application of +.
Definition fset1.h:511
bool is_insert_application(const atermpp::aterm &e)
Recogniser for application of @fset_insert.
Definition fset1.h:153
function_symbol head(const sort_expression &s)
Constructor for function symbol head.
Definition list1.h:526
const function_symbol & c0()
Constructor for function symbol @c0.
Definition nat1.h:108
const basic_sort & nat()
Constructor for sort expression Nat.
Definition nat1.h:46
const function_symbol & succ_nat()
Constructor for function symbol @succ_nat.
Definition nat64.h:141
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
Definition standard.h:277
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
Definition standard.h:163
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
Definition standard.h:240
std::vector< data_equation > data_equation_vector
\brief vector of data_equations
function_sort make_function_sort_(const sort_expression &dom1, const sort_expression &codomain)
Convenience constructor for function sort with domain size 1.
bool is_container_sort(const atermpp::aterm &x)
Returns true if the term t is a container sort.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
atermpp::term_list< variable > variable_list
\brief list of variables
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
Definition standard.h:126
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
std::vector< function_symbol > function_symbol_vector
\brief vector of function_symbols
function_symbol if_(const sort_expression &s)
Constructor for function symbol if.
Definition standard.h:200
void make_application(atermpp::aterm &result)
Make function for an application.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Definition indexed_set.h:72
Standard functions that are available for all sorts.