10 #include <type_traits> 11 #include <unordered_map> 15 #include "dreal/symbolic/hash.h" 16 #include "dreal/symbolic/symbolic_environment.h" 17 #include "dreal/symbolic/symbolic_variable.h" 18 #include "dreal/symbolic/symbolic_variables.h" 25 enum class ExpressionKind {
51 UninterpretedFunction,
56 bool operator<(ExpressionKind k1, ExpressionKind k2);
59 class ExpressionConstant;
60 class ExpressionRealConstant;
62 class UnaryExpressionCell;
63 class BinaryExpressionCell;
78 class ExpressionAtan2;
84 class ExpressionIfThenElse;
85 class ExpressionUninterpretedFunction;
92 using ExpressionSubstitution =
93 std::unordered_map<Variable, Expression, hash_value<Variable>>;
98 using FormulaSubstitution =
99 std::unordered_map<Variable, Formula, hash_value<Variable>>;
184 ExpressionKind get_kind()
const;
186 size_t get_hash()
const;
225 bool is_polynomial()
const;
229 bool include_ite()
const;
271 Expression Substitute(
const ExpressionSubstitution& expr_subst,
272 const FormulaSubstitution& formula_subst)
const;
280 Expression Substitute(
const ExpressionSubstitution& expr_subst)
const;
289 Expression Substitute(
const FormulaSubstitution& formula_subst)
const;
298 std::string to_string()
const;
357 friend Expression real_constant(
double lb,
double ub,
358 bool use_lb_as_representative);
417 friend Expression uninterpreted_function(
const std::string& name,
420 friend std::ostream& operator<<(std::ostream& os,
const Expression& e);
424 friend bool is_real_constant(
const Expression& e);
427 friend bool is_multiplication(
const Expression& e);
446 friend bool is_if_then_else(
const Expression& e);
447 friend bool is_uninterpreted_function(
const Expression& e);
528 Expression Sum(
const std::vector<Expression>& expressions);
532 Expression Prod(
const std::vector<Expression>& expressions);
534 Expression real_constant(
double lb,
double ub,
bool use_lb_as_representative);
564 Expression uninterpreted_function(
const std::string& name,
568 std::ostream& operator<<(std::ostream& os,
const Expression& e);
573 bool is_constant(
const Expression& e,
double v);
631 bool is_uninterpreted_function(
const Expression& e);
636 double get_constant_value(
const Expression& e);
640 double get_lb_of_real_constant(
const Expression& e);
644 double get_ub_of_real_constant(
const Expression& e);
665 double get_constant_in_addition(
const Expression& e);
671 const std::map<Expression, double>& get_expr_to_coeff_map_in_addition(
677 double get_constant_in_multiplication(
const Expression& e);
683 const std::map<Expression, Expression>&
684 get_base_to_exponent_map_in_multiplication(
const Expression& e);
704 const std::string& get_uninterpreted_function_name(
const Expression& e);
725 struct less<
dreal::drake::symbolic::Expression> {
728 return lhs.
Less(rhs);
734 struct equal_to<
dreal::drake::symbolic::Expression> {
742 struct hash<
dreal::drake::symbolic::Expression> {
750 struct numeric_limits<
dreal::drake::symbolic::Expression>
751 :
public numeric_limits<double> {};
Symbolic expression representing tangent function.
Definition: symbolic_expression_cell.h:663
Symbolic expression representing absolute value function.
Definition: symbolic_expression_cell.h:567
Symbolic expression representing if-then-else expression.
Definition: symbolic_expression_cell.h:812
Symbolic expression representing cosine function.
Definition: symbolic_expression_cell.h:649
Symbolic expression representing an uninterpreted function.
Definition: symbolic_expression_cell.h:845
Symbolic expression representing a multiplication of powers.
Definition: symbolic_expression_cell.h:426
Symbolic expression representing arctangent function.
Definition: symbolic_expression_cell.h:713
spdlog::logger * log()
Provide a global logger.
Definition: logging.cc:33
Represents the base class for unary expressions.
Definition: symbolic_expression_cell.h:130
Symbolic expression representing a real constant represented by a double interval [lb...
Definition: symbolic_expression_cell.h:256
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
Symbolic expression representing a floating-point constant (double).
Definition: symbolic_expression_cell.h:233
Represents an abstract class which is the base of concrete symbolic-expression classes.
Definition: symbolic_expression_cell.h:26
Symbolic expression representing hyperbolic sine function.
Definition: symbolic_expression_cell.h:742
Represents a symbolic variable.
Definition: symbolic_variable.h:16
Computes the hash value of v using std::hash.
Definition: hash.h:35
Symbolic expression representing hyperbolic cosine function.
Definition: symbolic_expression_cell.h:756
Symbolic expression representing hyperbolic tangent function.
Definition: symbolic_expression_cell.h:770
Symbolic expression representing a variable.
Definition: symbolic_expression_cell.h:212
Symbolic expression representing square-root.
Definition: symbolic_expression_cell.h:598
Symbolic expression representing exponentiation using the base of natural logarithms.
Definition: symbolic_expression_cell.h:584
Factory class to help build ExpressionAdd expressions.
Definition: symbolic_expression_cell.h:348
bool Less(const Expression &e) const
Provides lexicographical ordering between expressions.
Definition: symbolic_expression.cc:196
Represents a symbolic environment (mapping from a variable to a value).
Definition: symbolic_environment.h:52
Symbolic expression representing logarithms.
Definition: symbolic_expression_cell.h:549
Symbolic expression representing division.
Definition: symbolic_expression_cell.h:535
Symbolic expression representing sine function.
Definition: symbolic_expression_cell.h:635
Factory class to help build ExpressionMul expressions.
Definition: symbolic_expression_cell.h:470
Symbolic expression representing an addition which is a sum of products.
Definition: symbolic_expression_cell.h:304
Symbolic expression representing min function.
Definition: symbolic_expression_cell.h:784
Symbolic expression representing arcsine function.
Definition: symbolic_expression_cell.h:677
Symbolic expression representing arccosine function.
Definition: symbolic_expression_cell.h:695
Symbolic expression representing max function.
Definition: symbolic_expression_cell.h:798
size_t get_hash() const
Returns hash value.
Definition: symbolic_expression.cc:144
Represents the base class for binary expressions.
Definition: symbolic_expression_cell.h:169
Symbolic expression representing atan2 function (arctangent function with two arguments).
Definition: symbolic_expression_cell.h:728
Represents a set of variables.
Definition: symbolic_variables.h:25
Represents a symbolic form of an expression.
Definition: symbolic_expression.h:164
bool EqualTo(const Expression &e) const
Checks structural equality.
Definition: symbolic_expression.cc:179
Symbolic expression representing power function.
Definition: symbolic_expression_cell.h:616