dReal4
if_then_else_eliminator.h
1 #pragma once
2 
3 #include <unordered_set>
4 #include <vector>
5 
7 
8 namespace dreal {
9 
10 /// Eliminates If-Then-Else expressions by introducing new variables.
11 ///
12 /// TODO(soonho): Check "Efficient Term ITE Conversion for
13 /// Satisfiability Modulo Theories", H. Kim, F. Somenzi,
14 /// H. Jin. Twelfth International Conference on Theory and
15 /// Applications of Satisfiability Testing (SAT'09).
17  public:
18  /// Returns a equisatisfiable formula by eliminating
19  /// if-then-expressions in @p f by introducing new variables.
20  Formula Process(const Formula& f);
21  const std::unordered_set<Variable, hash_value<Variable>>& variables() const;
22 
23  private:
24  // Handle expressions.
25  Expression Visit(const Expression& e, const Formula& guard);
26  Expression VisitVariable(const Expression& e, const Formula& guard);
27  Expression VisitConstant(const Expression& e, const Formula& guard);
28  Expression VisitRealConstant(const Expression& e, const Formula& guard);
29  Expression VisitAddition(const Expression& e, const Formula& guard);
30  Expression VisitMultiplication(const Expression& e, const Formula& guard);
31  Expression VisitDivision(const Expression& e, const Formula& guard);
32  Expression VisitLog(const Expression& e, const Formula& guard);
33  Expression VisitAbs(const Expression& e, const Formula& guard);
34  Expression VisitExp(const Expression& e, const Formula& guard);
35  Expression VisitSqrt(const Expression& e, const Formula& guard);
36  Expression VisitPow(const Expression& e, const Formula& guard);
37  Expression VisitSin(const Expression& e, const Formula& guard);
38  Expression VisitCos(const Expression& e, const Formula& guard);
39  Expression VisitTan(const Expression& e, const Formula& guard);
40  Expression VisitAsin(const Expression& e, const Formula& guard);
41  Expression VisitAcos(const Expression& e, const Formula& guard);
42  Expression VisitAtan(const Expression& e, const Formula& guard);
43  Expression VisitAtan2(const Expression& e, const Formula& guard);
44  Expression VisitSinh(const Expression& e, const Formula& guard);
45  Expression VisitCosh(const Expression& e, const Formula& guard);
46  Expression VisitTanh(const Expression& e, const Formula& guard);
47  Expression VisitMin(const Expression& e, const Formula& guard);
48  Expression VisitMax(const Expression& e, const Formula& guard);
49  Expression VisitIfThenElse(const Expression& e, const Formula& guard);
50  Expression VisitUninterpretedFunction(const Expression& e,
51  const Formula& guard);
52 
53  // Handle formula
54  Formula Visit(const Formula& f, const Formula& guard);
55  Formula VisitFalse(const Formula& f, const Formula& guard);
56  Formula VisitTrue(const Formula& f, const Formula& guard);
57  Formula VisitVariable(const Formula& f, const Formula& guard);
58  Formula VisitEqualTo(const Formula& f, const Formula& guard);
59  Formula VisitNotEqualTo(const Formula& f, const Formula& guard);
60  Formula VisitGreaterThan(const Formula& f, const Formula& guard);
61  Formula VisitGreaterThanOrEqualTo(const Formula& f, const Formula& guard);
62  Formula VisitLessThan(const Formula& f, const Formula& guard);
63  Formula VisitLessThanOrEqualTo(const Formula& f, const Formula& guard);
64  Formula VisitConjunction(const Formula& f, const Formula& guard);
65  Formula VisitDisjunction(const Formula& f, const Formula& guard);
66  Formula VisitNegation(const Formula& f, const Formula& guard);
67  Formula VisitForall(const Formula& f, const Formula& guard);
68 
69  // ---------------
70  // Member fields
71  // ---------------
72 
73  // The added formulas introduced by the elimination process.
74  std::vector<Formula> added_formulas_;
75  // The variables introduced by the elimination process.
76  std::unordered_set<Variable, hash_value<Variable>> ite_variables_;
77 
78  // Makes VisitFormula a friend of this class so that it can use private
79  // operator()s.
80  friend Formula drake::symbolic::VisitFormula<Formula>(IfThenElseEliminator*,
81  const Formula&,
82  const Formula&);
83  // Makes VisitExpression a friend of this class so that it can use private
84  // operator()s.
85  friend Expression drake::symbolic::VisitExpression<Expression>(
86  IfThenElseEliminator*, const Expression&, const Formula&);
87 };
88 } // namespace dreal
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
Eliminates If-Then-Else expressions by introducing new variables.
Definition: if_then_else_eliminator.h:16
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
Formula Process(const Formula &f)
Returns a equisatisfiable formula by eliminating if-then-expressions in f by introducing new variable...
Definition: if_then_else_eliminator.cc:50
Represents a symbolic form of an expression.
Definition: symbolic_expression.h:164
Represents a symbolic form of a first-order logic formula.
Definition: symbolic_formula.h:101