19#ifndef __CVC4__EXPR_MANAGER_H
20#define __CVC4__EXPR_MANAGER_H
46struct ExprManagerMapCollection;
47class StatisticsRegistry;
66 context::Context* d_ctxt;
69 NodeManager* d_nodeManager;
73 IntStat* d_exprStatistics[kind::LAST_KIND];
79 NodeManager* getNodeManager()
const;
85 context::Context* getContext()
const;
90 void checkResolvedDatatype(DatatypeType dtt)
const;
96 friend class SmtEngine;
99 friend class ExprManagerScope;
102 friend class NodeManager;
137 const Options& getOptions() const;
140 BooleanType booleanType() const;
143 StringType stringType() const;
146 RealType realType() const;
149 IntegerType integerType() const;
157 Expr mkExpr(Kind kind,
Expr child1);
210 Expr mkExpr(Kind kind, const
std::vector<
Expr>& children);
223 Expr mkExpr(Kind kind,
Expr child1, const
std::vector<
Expr>& otherChildren);
301 Expr mkConst(const T&);
314 Expr mkAssociative(Kind kind, const
std::vector<
Expr>& children);
320 static
bool hasOperator(Kind k);
327 Expr operatorOf(Kind k);
330 FunctionType mkFunctionType(
Type domain,
Type range);
336 FunctionType mkFunctionType(const
std::vector<
Type>& argTypes,
Type range);
344 FunctionType mkFunctionType(const
std::vector<
Type>& sorts);
352 FunctionType mkPredicateType(const
std::vector<
Type>& sorts);
359 TupleType mkTupleType(const
std::vector<
Type>& types);
364 RecordType mkRecordType(const Record& rec);
371 SExprType mkSExprType(const
std::vector<
Type>& types);
374 BitVectorType mkBitVectorType(
unsigned size) const;
377 ArrayType mkArrayType(
Type indexType,
Type constituentType) const;
380 SetType mkSetType(
Type elementType) const;
383 DatatypeType mkDatatypeType(const Datatype& datatype);
389 std::vector<DatatypeType>
390 mkMutualDatatypeTypes(const
std::vector<Datatype>& datatypes);
421 std::vector<DatatypeType>
422 mkMutualDatatypeTypes(const
std::vector<Datatype>& datatypes,
423 const
std::set<
Type>& unresolvedTypes);
428 ConstructorType mkConstructorType(const DatatypeConstructor& constructor,
Type range) const;
431 SelectorType mkSelectorType(
Type domain,
Type range) const;
434 TesterType mkTesterType(
Type domain) const;
439 SORT_FLAG_PLACEHOLDER = 1
443 SortType mkSort(
const std::string& name, uint32_t flags = SORT_FLAG_NONE)
const;
446 SortConstructorType mkSortConstructor(
const std::string& name,
473 Type mkSubrangeType(
const SubrangeBounds& bounds)
474 throw(TypeCheckingException);
477 Type getType(
Expr e,
bool check =
false)
478 throw(TypeCheckingException);
508 Expr mkVar(
const std::string& name,
Type type, uint32_t flags = VAR_FLAG_NONE);
522 Expr mkVar(
Type type, uint32_t flags = VAR_FLAG_NONE);
541 Expr mkBoundVar(
const std::string& name,
Type type);
562 SExpr getStatistic(const
std::
string& name) const throw();
570 static
unsigned minArity(Kind kind);
573 static
unsigned maxArity(Kind kind);
577${mkConst_instantiations}
Macros that should be defined everywhere during the building of the libraries and driver binary,...
CVC4::Statistics Statistics
@ $
marks the upper-bound of this enumeration
StatisticsRegistry * getStatisticsRegistry(ExprManager *)
Simple representation of S-expressions.
[[ Add one-line brief description here ]]
Representation of subrange bounds.
Interface for expression types.