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