+type mqbool =
+ | MQTrue (* true *)
+ | MQFalse (* false *)
+ | MQAnd of mqbool * mqbool (* conjunction *)
+ | MQOr of mqbool * mqbool (* disjunction *)
+ | MQNot of mqbool (* negation *)
+ | MQIs of mqstring * mqstring (* case-sensitive comparison *)
+ | MQSetEqual of mqlist * mqlist (* the two lists denote the same set *)
+ | MQSubset of mqlist * mqlist (* the two lists denote two sets, the 1st subset of the 2nd *)
+
+and mqlist =
+ | MQReference of mqref (* reference *)
+ | MQPattern of mqtref (* pattern *)
+ | MQListLVar of mqlvar (* lvar *)
+ | MQListRVar of mqrvar (* rvar *)
+ | MQSelect of mqrvar * mqlist * mqbool (* rvar, list, boolean *)
+ | MQUse of mqlist * mqsvar (* list, Position attribute *)
+ | MQUsedBy of mqlist * mqsvar (* list, Position attribute *)
+ | MQUnion of mqlist * mqlist (* operands *)
+ | MQIntersect of mqlist * mqlist (* operands *)
+ | MQSortedBy of mqlist * mqorder * mqfunc (* ordering *)
+ | MQDiff of mqlist * mqlist (* set difference *)
+ | MQLetIn of mqlvar * mqlist * mqlist (* explicit lvar assignment *)
+ | MQMinimize of mqlist (* list minimization *)
+