10 #include "dreal/symbolic/hash.h" 11 #include "dreal/symbolic/symbolic_environment.h" 12 #include "dreal/symbolic/symbolic_expression.h" 13 #include "dreal/symbolic/symbolic_formula.h" 14 #include "dreal/symbolic/symbolic_variable.h" 15 #include "dreal/symbolic/symbolic_variables.h" 61 const FormulaSubstitution& formula_subst) = 0;
63 virtual std::ostream&
Display(std::ostream& os)
const = 0;
67 return atomic_load_explicit(&rc_, std::memory_order_acquire);
76 FormulaCell(FormulaKind k,
size_t hash,
bool include_ite,
84 const FormulaKind kind_{};
86 const bool include_ite_{
false};
90 mutable std::atomic<unsigned> rc_{0};
91 void increase_rc()
const {
92 atomic_fetch_add_explicit(&rc_, 1U, std::memory_order_relaxed);
94 void decrease_rc()
const {
95 if (atomic_fetch_sub_explicit(&rc_, 1U, std::memory_order_acq_rel) == 1U) {
166 std::ostream& DisplayWithOp(std::ostream& os,
const std::string& op)
const;
169 static Variables ExtractFreeVariables(
const std::set<Formula>& formulas);
171 std::set<Formula> formulas_;
183 const FormulaSubstitution& formula_subst)
override;
184 std::ostream&
Display(std::ostream& os)
const override;
196 const FormulaSubstitution& formula_subst)
override;
197 std::ostream&
Display(std::ostream& os)
const override;
211 const FormulaSubstitution& formula_substubst)
override;
212 std::ostream&
Display(std::ostream& os)
const override;
213 const Variable& get_variable()
const;
226 const FormulaSubstitution& formula_subst)
override;
227 std::ostream&
Display(std::ostream& os)
const override;
237 const FormulaSubstitution& formula_subst)
override;
238 std::ostream&
Display(std::ostream& os)
const override;
248 const FormulaSubstitution& formula_subst)
override;
249 std::ostream&
Display(std::ostream& os)
const override;
259 const FormulaSubstitution& formula_subst)
override;
260 std::ostream&
Display(std::ostream& os)
const override;
270 const FormulaSubstitution& formula_subst)
override;
271 std::ostream&
Display(std::ostream& os)
const override;
281 const FormulaSubstitution& formula_subst)
override;
282 std::ostream&
Display(std::ostream& os)
const override;
289 explicit FormulaAnd(std::set<Formula> formulas);
294 const FormulaSubstitution& formula_subst)
override;
295 std::ostream&
Display(std::ostream& os)
const override;
302 explicit FormulaOr(std::set<Formula> formulas);
307 const FormulaSubstitution& formula_subst)
override;
308 std::ostream&
Display(std::ostream& os)
const override;
320 const FormulaSubstitution& formula_subst)
override;
321 std::ostream&
Display(std::ostream& os)
const override;
340 const FormulaSubstitution& formula_subst)
override;
341 std::ostream&
Display(std::ostream& os)
const override;
365 bool is_greater_than_or_equal_to(
const FormulaCell& f);
369 bool is_less_than_or_equal_to(
const FormulaCell& f);
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
std::shared_ptr< ContractorForall< ContextType > > to_forall(const Contractor &contractor)
Converts contractor to ContractorForall.
Definition: contractor_forall.h:331
Represents a symbolic variable.
Definition: symbolic_variable.h:16
Represents a symbolic environment (mapping from a variable to a value).
Definition: symbolic_environment.h:52
bool is_forall(const Contractor &contractor)
Returns true if contractor is forall contractor.
Definition: contractor.cc:221
Represents a set of variables.
Definition: symbolic_variables.h:25
Represents a symbolic form of an expression.
Definition: symbolic_expression.h:164