- | MQTrue
- | MQFalse
- | MQAnd of mqbool * mqbool
- | MQOr of mqbool * mqbool
- | MQNot of mqbool
- | MQIs of mqstring * mqstring (* operands *)
-
-type mqlist =
- | MQSelect of mqrvar * mqlist * mqbool (* rvar, list, boolean *)
- | MQUse of mqlist * mqsvar (* list, Position attribute *)
- | MQUsedBy of mqlist * mqsvar (* list, Position attribute *)
- | MQPattern of mqpattern (* pattern *)
- | MQUnion of mqlist * mqlist (* operands *)
- | MQIntersect of mqlist * mqlist (* operands *)
+ | 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 string list (* reference list *)
+ | 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 *)