6 #include "dreal/contractor/contractor_status.h" 7 #include "dreal/solver/config.h" 8 #include "dreal/util/box.h" 9 #include "dreal/util/ibex_converter.h" 16 class ContractorInteger;
18 class ContractorIbexFwdbwd;
19 class ContractorIbexPolytope;
20 class ContractorFixpoint;
21 class ContractorWorklistFixpoint;
23 template <
typename ContextType>
27 using TerminationCondition =
28 std::function<bool(Box::IntervalVector const&, Box::IntervalVector const&)>;
63 const DynamicBitset&
input()
const;
77 friend std::ostream& operator<<(std::ostream& os,
Contractor const& ctc);
80 explicit Contractor(std::shared_ptr<ContractorCell> ptr);
82 std::shared_ptr<ContractorCell> ptr_{};
88 const std::vector<Contractor>& contractors,
const Config& config);
95 TerminationCondition term_cond,
96 const std::vector<Contractor>& contractors,
const Config& config);
98 TerminationCondition term_cond,
99 const std::vector<Contractor>& contractors,
const Config& config);
100 template <
typename ContextType>
102 double epsilon,
double inner_delta,
110 friend std::shared_ptr<ContractorId>
to_id(
const Contractor& contractor);
111 friend std::shared_ptr<ContractorInteger>
to_integer(
118 friend std::shared_ptr<ContractorFixpoint>
to_fixpoint(
123 template <
typename ContextType>
124 friend std::shared_ptr<ContractorForall<ContextType>>
to_forall(
175 const std::vector<Contractor>& contractors,
184 TerminationCondition term_cond,
const std::vector<Contractor>& contractors,
201 template <
typename ContextType>
203 double inner_delta,
const Config& config);
205 std::ostream& operator<<(std::ostream& os,
const Contractor& ctc);
bool is_worklist_fixpoint(const Contractor &contractor)
Returns true if contractor is worklist-fixpoint contractor.
Definition: contractor.cc:218
friend Contractor make_contractor_id(const Config &config)
Returns an idempotent contractor.
Definition: contractor.cc:102
friend Contractor make_contractor_ibex_polytope(std::vector< Formula > formulas, const Box &box, const Config &config)
Returns a contractor wrapping IBEX's polytope contractor.
Definition: contractor.cc:145
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
friend Contractor make_contractor_fixpoint(TerminationCondition term_cond, const std::vector< Contractor > &contractors, const Config &config)
Returns a fixed-point contractor.
Definition: contractor.cc:165
const DynamicBitset & input() const
Returns the input vector of this contractor.
Definition: contractor.cc:86
void set_include_forall()
Sets include_forall true.
Definition: contractor.cc:100
Contractor for forall constraints.
Definition: contractor.h:24
Kind kind() const
Returns kind.
Definition: contractor.cc:96
bool is_seq(const Contractor &contractor)
Returns true if contractor is sequential contractor.
Definition: contractor.cc:206
friend Contractor make_contractor_seq(const std::vector< Contractor > &contractors, const Config &config)
Returns a sequential contractor C from a vector of contractors vec = [C₁, ..., Cₙ].
Definition: contractor.cc:119
bool is_integer(const Contractor &contractor)
Returns true if contractor is integer contractor.
Definition: contractor.cc:203
friend Contractor make_contractor_integer(const Box &box, const Config &config)
Returns an integer contractor.
Definition: contractor.cc:106
friend std::shared_ptr< ContractorId > to_id(const Contractor &contractor)
Converts contractor to ContractorId.
Definition: contractor_cell.cc:55
friend Contractor make_contractor_forall(Formula f, const Box &box, double epsilon, double inner_delta, const Config &config)
Returns a forall contractor.
Definition: contractor_forall.h:318
void Prune(ContractorStatus *cs) const
Prunes cs.
Definition: contractor.cc:88
bool is_id(const Contractor &contractor)
Returns true if contractor is idempotent contractor.
Definition: contractor.cc:200
friend std::shared_ptr< ContractorSeq > to_seq(const Contractor &contractor)
Converts contractor to ContractorSeq.
Definition: contractor_cell.cc:63
friend std::shared_ptr< ContractorIbexPolytope > to_ibex_polytope(const Contractor &contractor)
Converts contractor to ContractorIbexPolytop.
Definition: contractor_cell.cc:71
bool is_fixpoint(const Contractor &contractor)
Returns true if contractor is fixpoint contractor.
Definition: contractor.cc:215
bool include_forall() const
Returns true if this contractor includes a forall contractor.
Definition: contractor.cc:98
Represents a n-dimensional interval vector.
Definition: box.h:17
friend Contractor make_contractor_worklist_fixpoint(TerminationCondition term_cond, const std::vector< Contractor > &contractors, const Config &config)
Returns a worklist fixed-point contractor.
Definition: contractor.cc:177
friend std::shared_ptr< ContractorForall< ContextType > > to_forall(const Contractor &contractor)
Converts contractor to ContractorForall.
Definition: contractor_forall.h:331
friend std::shared_ptr< ContractorWorklistFixpoint > to_worklist_fixpoint(const Contractor &contractor)
Converts contractor to ContractorWorklistFixpoint.
Definition: contractor_cell.cc:80
friend Contractor make_contractor_join(std::vector< Contractor > vec, const Config &config)
Returns a join contractor.
Definition: contractor.cc:189
friend std::shared_ptr< ContractorIbexFwdbwd > to_ibex_fwdbwd(const Contractor &contractor)
Converts contractor to ContractorIbexFwdbwd.
Definition: contractor_cell.cc:67
friend std::shared_ptr< ContractorFixpoint > to_fixpoint(const Contractor &contractor)
Converts contractor to ContractorFixpoint.
Definition: contractor_cell.cc:76
Contractor & operator=(const Contractor &)=default
Default copy assign operator.
friend std::shared_ptr< ContractorJoin > to_join(const Contractor &contractor)
Converts contractor to ContractorJoin.
Definition: contractor_cell.cc:85
bool is_forall(const Contractor &contractor)
Returns true if contractor is forall contractor.
Definition: contractor.cc:221
bool is_join(const Contractor &contractor)
Returns true if contractor is join contractor.
Definition: contractor.cc:224
Contractor status.
Definition: contractor_status.h:13
friend std::shared_ptr< ContractorInteger > to_integer(const Contractor &contractor)
Converts contractor to ContractorInteger.
Definition: contractor_cell.cc:59
Definition: contractor.h:30
bool is_ibex_polytope(const Contractor &contractor)
Returns true if contractor is IBEX polytope contractor.
Definition: contractor.cc:212
~Contractor()=default
Default destructor.
bool is_ibex_fwdbwd(const Contractor &contractor)
Returns true if contractor is IBEX fwdbwd contractor.
Definition: contractor.cc:209
friend Contractor make_contractor_ibex_fwdbwd(Formula f, const Box &box, const Config &config)
Returns a contractor wrapping IBEX's forward/backward contractor.
Definition: contractor.cc:124