<grammar xmlns="http://relaxng.org/ns/structure/1.0">
<define name="cd.token.unary.class" combine="choice">
<ref name="card.token"/>
</define>
<define name="cd.token.binary.class" combine="choice">
<choice>
<ref name="in.token"/>
<ref name="notin.token"/>
<ref name="notsubset.token"/>
<ref name="notprsubset.token"/>
<ref name="setdiff.token"/>
</choice>
</define>
<define name="cd.token.nary.class" combine="choice">
<choice>
<ref name="set.token"/>
<ref name="list.token"/>
<ref name="intersect.token"/>
<ref name="subset.token"/>
<ref name="prsubset.token"/>
<ref name="cartesianproduct.token"/>
</choice>
</define>
<define name="set.content">
<ref name="Token.type"/>
<optional>
<attribute name="order">
<ref name="MathMLtype"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="set.token">
<element name="set">
<ref name="set.content"/>
</element>
</define>
<define name="list.content">
<ref name="Token.type"/>
<optional>
<attribute name="order">
<ref name="MathMLtype"/>
</attribute>
</optional>
<zeroOrMore>
<ref name="ContExp"/>
</zeroOrMore>
</define>
<define name="list.token">
<element name="list">
<ref name="list.content"/>
</element>
</define>
<define name="union.content">
<ref name="Token.type"/>
</define>
<define name="union.token">
<element name="union">
<ref name="union.content"/>
</element>
</define>
<define name="intersect.content">
<ref name="Token.type"/>
</define>
<define name="intersect.token">
<element name="intersect">
<ref name="intersect.content"/>
</element>
</define>
<define name="in.content">
<ref name="Token.type"/>
</define>
<define name="in.token">
<element name="in">
<ref name="in.content"/>
</element>
</define>
<define name="notin.content">
<ref name="Token.type"/>
</define>
<define name="notin.token">
<element name="notin">
<ref name="notin.content"/>
</element>
</define>
<define name="subset.content">
<ref name="Token.type"/>
</define>
<define name="subset.token">
<element name="subset">
<ref name="subset.content"/>
</element>
</define>
<define name="prsubset.content">
<ref name="Token.type"/>
</define>
<define name="prsubset.token">
<element name="prsubset">
<ref name="prsubset.content"/>
</element>
</define>
<define name="notsubset.content">
<ref name="Token.type"/>
</define>
<define name="notsubset.token">
<element name="notsubset">
<ref name="notsubset.content"/>
</element>
</define>
<define name="notprsubset.content">
<ref name="Token.type"/>
</define>
<define name="notprsubset.token">
<element name="notprsubset">
<ref name="notprsubset.content"/>
</element>
</define>
<define name="setdiff.content">
<ref name="Token.type"/>
</define>
<define name="setdiff.token">
<element name="setdiff">
<ref name="setdiff.content"/>
</element>
</define>
<define name="card.content">
<ref name="Token.type"/>
</define>
<define name="card.token">
<element name="card">
<ref name="card.content"/>
</element>
</define>
<define name="cartesianproduct.content">
<ref name="Token.type"/>
</define>
<define name="cartesianproduct.token">
<element name="cartesianproduct">
<ref name="cartesianproduct.content"/>
</element>
</define>
</grammar>