7 Set * createSet(Type type, uint64_t ** elements);
8 Set * createSet(Type type, uint64_t lowrange, uint64_t highrange);
9 MutableSet * createMutableSet(Type type);
11 void addItem(MutableSet * set, uint64_t element);
12 int64_t createUniqueItem(MutableSet * set);
14 Element * getElementVar(Set * set);
15 Constraint * getBooleanVar();
17 Function * createFunctionOperator(enum ArithOp op, Set ** domain, Set * range, enum OverFlowBehavior overflowbehavior, Constraint * overflowstatus);
18 Function * createFunctionOperator(enum ArithOp op); //Does Not Overflow
19 Predicate * createPredicateOperator(enum CompOp op, Set ** domain);
21 Table * createTable(Set **domains, Set * range);
22 void addTableEntry(Element ** inputs, Element *result);
23 Function * completeTable(struct Table *);
25 Element * applyFunction(Function * function, Element ** array);
26 Constraint * applyPredicate(Predicate * predicate, Element ** inputs);
27 Constraint * applyLogicalOperation(enum LogicOp op, Constraint ** array);
29 void addConstraint(Constraint * constraint);
31 Order * createOrder(enum OrderType type, Set * set);
32 Constraint * orderedConstraint(Order * order, uint64_t first, uint64_t second);