13#ifndef MCRL2_LPSREALELM_DETAIL_LINEAR_INEQUALITY_UTILITIES_H
14#define MCRL2_LPSREALELM_DETAIL_LINEAR_INEQUALITY_UTILITIES_H
116 std::vector < data_expression_list >& real_conditions,
117 std::vector < data_expression_list >& non_real_conditions,
120 assert(real_conditions.empty());
121 assert(non_real_conditions.empty());
134 real_conditions,non_real_conditions,
negate);
144 std::vector < data_expression_list > real_conditions_aux1, non_real_conditions_aux1;
146 std::vector < data_expression_list > real_conditions_aux2, non_real_conditions_aux2;
148 if(!left_is_real && !right_is_real)
161 for (std::vector < data_expression_list >::const_iterator
162 i1r=real_conditions_aux1.begin(), i1n=non_real_conditions_aux1.begin() ;
163 i1r!=real_conditions_aux1.end(); ++i1r, ++i1n)
165 for (std::vector < data_expression_list >::const_iterator
166 i2r=real_conditions_aux2.begin(), i2n=non_real_conditions_aux2.begin() ;
167 i2r!=real_conditions_aux2.end(); ++i2r, ++i2n)
169 real_conditions.push_back(*i1r + *i2r);
170 non_real_conditions.push_back(*i1n + *i2n);
181 real_conditions.insert(real_conditions.end(), real_conditions_aux1.begin(), real_conditions_aux1.end());
182 real_conditions.insert(real_conditions.end(), real_conditions_aux2.begin(), real_conditions_aux2.end());
183 non_real_conditions.insert(non_real_conditions.end(), non_real_conditions_aux1.begin(), non_real_conditions_aux1.end());
184 non_real_conditions.insert(non_real_conditions.end(), non_real_conditions_aux2.begin(), non_real_conditions_aux2.end());
186 return left_is_real || right_is_real;
197 data::pp(v) +
" not of sort Real.");
232 std::vector < data_expression_list >& real_conditions,
233 std::vector < data_expression >& non_real_conditions)
235 std::vector < data_expression_list > aux_real_conditions;
236 std::vector < data_expression_list > aux_non_real_conditions;
239 assert(aux_non_real_conditions.size()==aux_real_conditions.size() && aux_non_real_conditions.size()>0);
242 std::map< data_expression_list, data_expression > non_real_expression_map;
243 for(std::vector < data_expression_list >::const_iterator i=aux_real_conditions.begin(), j=aux_non_real_conditions.begin();
244 i!=aux_real_conditions.end(); ++i, ++j)
247 std::map< data_expression_list, data_expression >::iterator insert_result =
252 for(
const std::pair<const data_expression_list, data_expression >& expr_pair: non_real_expression_map)
254 real_conditions.push_back(expr_pair.first);
255 non_real_conditions.push_back(expr_pair.second);
257 assert(non_real_conditions.size()==real_conditions.size() && non_real_conditions.size()>0);
An application of a data expression to a number of arguments.
const_iterator begin() const
Returns an iterator pointing to the first argument of the application.
Standard exception class for reporting runtime errors.
Contains a class linear_inequality to represent mcrl2 data expressions that are linear equalities,...
void split_condition(const data_expression &e, std::vector< data_expression_list > &real_conditions, std::vector< data_expression > &non_real_conditions)
This function first splits the given condition e into real conditions and non real conditions....
data_expression negate_inequality(const data_expression &e)
const data_expression & else_part(const data_expression &e)
bool is_inequality(const data_expression &e)
Determine whether a data expression is an inequality.
detail::comparison_t negate(const detail::comparison_t t)
const data_expression & condition_part(const data_expression &e)
const data_expression & then_part(const data_expression &e)
static bool split_condition_aux(const data_expression &e, std::vector< data_expression_list > &real_conditions, std::vector< data_expression_list > &non_real_conditions, const bool negate=false)
Splits a condition in expressions ranging over reals and the others.
data_expression join_and(ForwardTraversalIterator first, ForwardTraversalIterator last)
Returns and applied to the sequence of data expressions [first, last)
data_expression or_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p and q.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
const function_symbol & and_()
Constructor for function symbol &&.
const function_symbol & false_()
Constructor for function symbol false.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
const function_symbol & or_()
Constructor for function symbol ||.
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
const function_symbol & not_()
Constructor for function symbol !.
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
const basic_sort & real_()
Constructor for sort expression Real.
bool is_greater_application(const DataExpression &e)
Recogniser for application of >
function_symbol less_equal(const sort_expression &s)
Constructor for function symbol <=.
const data_expression & binary_right(const application &x)
function_symbol not_equal_to(const sort_expression &s)
Constructor for function symbol !=.
bool is_if_application(const DataExpression &e)
Recogniser for application of if.
bool is_not_equal_to_application(const DataExpression &e)
Recogniser for application of !=.
std::set< data::variable > find_all_variables(const data::data_expression &x)
function_symbol less(const sort_expression &s)
Constructor for function symbol <.
bool is_greater_equal_application(const DataExpression &e)
Recogniser for application of >=.
const data_expression & binary_left(const application &x)
std::string pp(const abstraction &x)
function_symbol greater_equal(const sort_expression &s)
Constructor for function symbol >=.
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
function_symbol equal_to(const sort_expression &s)
Constructor for function symbol ==.
bool is_less_application(const DataExpression &e)
Recogniser for application of <.
bool is_less_equal_application(const DataExpression &e)
Recogniser for application of <=.
bool is_equal_to_application(const DataExpression &e)
Recogniser for application of ==.
function_symbol greater(const sort_expression &s)
Constructor for function symbol >
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...