carl  25.02
Computer ARithmetic Library
Variables.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Visit.h"
5 
6 namespace carl{
7 
8 template<typename Pol>
9 void variables(const Formula<Pol>& f, carlVariables& vars) {
10  carl::visit(f,
11  [&vars](const Formula<Pol>& f) {
12  switch (f.type()) {
13  case FormulaType::BOOL:
14  vars.add(f.boolean());
15  break;
16  case FormulaType::CONSTRAINT:
17  carl::variables(f.constraint(), vars);
18  break;
19  case FormulaType::VARCOMPARE:
20  carl::variables(f.variable_comparison(), vars);
21  break;
22  case FormulaType::VARASSIGN:
23  carl::variables(f.variable_assignment(), vars);
24  break;
25  case FormulaType::BITVECTOR:
26  f.bv_constraint().gatherVariables(vars);
27  break;
28  case FormulaType::UEQ:
29  f.u_equality().gatherVariables(vars);
30  break;
31  case FormulaType::EXISTS:
32  case FormulaType::AUX_EXISTS:
33  case FormulaType::FORALL:
34  vars.add(f.quantified_variables().begin(),f.quantified_variables().end());
35  break;
36  default: break;
37  }
38  }
39  );
40 }
41 
42 template<typename Pol>
43 void uninterpreted_functions(const Formula<Pol>& f, std::set<UninterpretedFunction>& ufs) {
44  carl::visit(f,
45  [&ufs](const Formula<Pol>& f) {
46  if (f.type() == FormulaType::UEQ) {
47  f.u_equality().gatherUFs(ufs);
48  }
49  }
50  );
51 }
52 
53 template<typename Pol>
54 void uninterpreted_variables(const Formula<Pol>& f, std::set<UVariable>& uvs) {
55  carl::visit(f,
56  [&uvs](const Formula<Pol>& f) {
57  if (f.type() == FormulaType::UEQ) {
58  f.u_equality().gatherUVariables(uvs);
59  }
60  }
61  );
62 }
63 
64 template<typename Pol>
65 void bitvector_variables(const Formula<Pol>& f, std::set<BVVariable>& bvvs) {
66  carl::visit(f,
67  [&bvvs](const Formula<Pol>& f) {
68  if (f.type() == FormulaType::BITVECTOR) {
69  f.bv_constraint().gatherBVVariables(bvvs);
70  }
71  }
72  );
73 }
74 
75 /**
76  * Collects all constraint occurring in this formula.
77  * @param constraints The container to insert the constraint into.
78  */
79 template<typename Pol>
80 void arithmetic_constraints(const Formula<Pol>& f, std::vector<Constraint<Pol>>& constraints ) {
81  carl::visit(f,
82  [&constraints](const Formula<Pol>& f) {
83  switch (f.type()) {
84  case FormulaType::CONSTRAINT:
85  constraints.push_back(f.constraint());
86  break;
87  default: break;
88  }
89  }
90  );
91 }
92 
93 /**
94  * Collects all constraint occurring in this formula.
95  * @param constraints The container to insert the constraint into.
96  */
97 template<typename Pol>
98 void arithmetic_constraints(const Formula<Pol>& f, std::vector<Formula<Pol>>& constraints ) {
99  carl::visit(f,
100  [&constraints](const Formula<Pol>& f) {
101  switch (f.type()) {
102  case FormulaType::CONSTRAINT:
103  constraints.push_back(f);
104  break;
105  default: break;
106  }
107  }
108  );
109 }
110 
111 }
carl is the main namespace for the library.
@ BITVECTOR
carlVariables uninterpreted_variables(const T &t)
Definition: Variables.h:261
void uninterpreted_functions(const Formula< Pol > &f, std::set< UninterpretedFunction > &ufs)
Definition: Variables.h:43
carlVariables bitvector_variables(const T &t)
Definition: Variables.h:254
void visit(const Formula< Pol > &formula, Visitor func)
Recursively calls func on every subformula.
Definition: Visit.h:12
void arithmetic_constraints(const Formula< Pol > &f, std::vector< Constraint< Pol >> &constraints)
Collects all constraint occurring in this formula.
Definition: Variables.h:80
void variables(const BasicConstraint< Pol > &c, carlVariables &vars)
Represent a polynomial (in)equality against zero.
Definition: Constraint.h:62
Represent an SMT formula, which can be an atom for some background theory or a boolean combination of...
Definition: Formula.h:47
FormulaType type() const
Definition: Formula.h:262