The Omega Library provides a way to work with inexact relations. We say that relation is inexact if one or more of its conjuncts contain unknown constraints. We call any conjunct that contains unknown constraints an inexact conjunct, and the conjunct that contains only unknown constraints an unknown conjunct. To inquire about this property of the conjunct you can use the is_exact() , is_inexact() and is_unknown() member functions of the Conjunct class.
An exact part of the relation containing an unknown conjunct provides a lower bound on the relation. An exact part of the relation containing inexact conjunct(s) provides an upper bound on the relation. Note, that an inexact conjunct can be always approximated by the unknown conjunct so a simplified relation can not contain both inexact and unknown conjuncts. Thus, a relation can be either exact, a lower bound, or an upper bound. We refer to this property of the relation as its accuracy status. Accuracy status is described by the enumerated type Rel_Accuracy_Status . To inquire about the accuracy status of the relation you can use the get_accuracy_status() member functions of the Relation class.
Inexact relations will be produced when the result of a relational operation is outside the class of relations we can represent. Recall that the Omega Library can not handle relations that contain the application of a function to something other than the input, output, or set tuple. So if it is asked for the range of , it produces an approximate answer.
You also can create the inexact relations explicitly by one of the following ways:
You can use the member function remove_disjunction_with_unknown() of the Relation class to remove all unknown conjuncts from the relation.