dReal4
generic_contractor_generator.h
1 #pragma once
2 
3 #include "dreal/contractor/contractor.h"
5 #include "dreal/util/box.h"
6 
7 namespace dreal {
8 
9 /// Converts an arbitrary formula into a contractor. This is used in
10 /// the forall contractor.
12  public:
13  /// Generates @p f into a contractor using @p box. It converts a
14  /// conjunction `f₁ ∧ ... ∧ fₙ` into a sequential contractor
15  /// `ContractorSeq(c(f₁), ..., c(fₙ))`. For a disjunction `f₁ ∨
16  /// ... ∨ fₙ`, this method transforms it into a join contractor
17  /// `ContractorJoin(c(f₁), ..., c(fₙ))`.
18  ///
19  /// When @p use_polytope is true, it adds IbexPolytope contractor
20  /// when it processes conjunctions. Otherwise, it uses
21  /// `ContractorIbexFwdbwd`.
22  Contractor Generate(const Formula& f, const Box& box,
23  const Config& config) const;
24 
25  private:
26  Contractor Visit(const Formula& f, const Box& box,
27  const Config& config) const;
28  static Contractor VisitFalse(const Formula&, const Box&,
29  const Config& config);
30  static Contractor VisitTrue(const Formula&, const Box&, const Config& config);
31  static Contractor VisitVariable(const Formula&, const Box&,
32  const Config& config);
33  static Contractor VisitEqualTo(const Formula& f, const Box& box,
34  const Config& config);
35  static Contractor VisitNotEqualTo(const Formula& f, const Box& box,
36  const Config& config);
37  static Contractor VisitGreaterThan(const Formula& f, const Box& box,
38  const Config& config);
39  static Contractor VisitGreaterThanOrEqualTo(const Formula& f, const Box& box,
40  const Config& config);
41  static Contractor VisitLessThan(const Formula& f, const Box& box,
42  const Config& config);
43  static Contractor VisitLessThanOrEqualTo(const Formula& f, const Box& box,
44  const Config& config);
45  Contractor VisitConjunction(const Formula& f, const Box& box,
46  const Config& config) const;
47  Contractor VisitDisjunction(const Formula& f, const Box& box,
48  const Config& config) const;
49  static Contractor VisitNegation(const Formula& f, const Box&,
50  const Config& config);
51  static Contractor VisitForall(const Formula&, const Box&,
52  const Config& config);
53 
54  // Makes VisitFormula a friend of this class so that it can use private
55  // methods.
56  friend Contractor drake::symbolic::VisitFormula<Contractor>(
57  const GenericContractorGenerator*, const Formula&, const dreal::Box&,
58  const Config&);
59 };
60 } // namespace dreal
Contractor Generate(const Formula &f, const Box &box, const Config &config) const
Generates f into a contractor using box.
Definition: generic_contractor_generator.cc:15
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
Represents a n-dimensional interval vector.
Definition: box.h:17
Definition: config.h:12
Converts an arbitrary formula into a contractor.
Definition: generic_contractor_generator.h:11
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
Definition: contractor.h:30
Represents a symbolic form of a first-order logic formula.
Definition: symbolic_formula.h:101