# Content elements: operators

# 
# RELAX NG Schema on MathML 2.0
# 
# See COPYING for the status of this software.
# Yutaka Furubayashi (Poka-Poka Dream Factory) <info@yupotan.sppd.ne.jp>
# Modified by Henri Sivonen <hsivonen@iki.fi>
#

mml.operators.common.attrib &=
    mml.Common.attrib, mml.att-definition, mml.att-encoding
mml.cfuncop1ary =
    mml.inverse.qname
    | mml.ident.qname
    | mml.domain.qname
    | mml.codomain.qname
    | mml.image.qname
mml.inverse.qname =
    element inverse { empty, mml.operators.common.attrib }
mml.domain.qname = element domain { empty, mml.operators.common.attrib }
mml.codomain.qname =
    element codomain { empty, mml.operators.common.attrib }
mml.image.qname = element image { empty, mml.operators.common.attrib }
mml.cfuncopnary = mml.fn.qname | mml.compose.qname
mml.fn.qname =
    element fn { mml.ContentExpression, mml.operators.common.attrib }
mml.ident.qname = element ident { empty, mml.operators.common.attrib }
mml.compose.qname =
    element compose { empty, mml.operators.common.attrib }
mml.carithop1ary =
    mml.abs.qname
    | mml.conjugate.qname
    | mml.exp.qname
    | mml.factorial.qname
    | mml.arg.qname
    | mml.real.qname
    | mml.imaginary.qname
    | mml.floor.qname
    | mml.ceiling.qname
mml.exp.qname = element exp { empty, mml.operators.common.attrib }
mml.abs.qname = element abs { empty, mml.operators.common.attrib }
mml.arg.qname = element arg { empty, mml.operators.common.attrib }
mml.real.qname = element real { empty, mml.operators.common.attrib }
mml.imaginary.qname =
    element imaginary { empty, mml.operators.common.attrib }
mml.conjugate.qname =
    element conjugate { empty, mml.operators.common.attrib }
mml.factorial.qname =
    element factorial { empty, mml.operators.common.attrib }
mml.floor.qname = element floor { empty, mml.operators.common.attrib }
mml.ceiling.qname =
    element ceiling { empty, mml.operators.common.attrib }
mml.carithop1or2ary = mml.minus.qname
mml.minus.qname = element minus { empty, mml.operators.common.attrib }
mml.carithop2ary =
    mml.quotient.qname
    | mml.divide.qname
    | mml.power.qname
    | mml.rem.qname
mml.quotient.qname =
    element quotient { empty, mml.operators.common.attrib }
mml.divide.qname = element divide { empty, mml.operators.common.attrib }
mml.power.qname = element power { empty, mml.operators.common.attrib }
mml.rem.qname = element rem { empty, mml.operators.common.attrib }
mml.carithopnary =
    mml.plus.qname
    | mml.times.qname
    | mml.max.qname
    | mml.min.qname
    | mml.gcd.qname
    | mml.lcm.qname
mml.plus.qname = element plus { empty, mml.operators.common.attrib }
mml.max.qname = element max { empty, mml.operators.common.attrib }
mml.min.qname = element min { empty, mml.operators.common.attrib }
mml.times.qname = element times { empty, mml.operators.common.attrib }
mml.gcd.qname = element gcd { empty, mml.operators.common.attrib }
mml.lcm.qname = element lcm { empty, mml.operators.common.attrib }
mml.carithoproot = mml.root.qname
mml.root.qname = element root { empty, mml.operators.common.attrib }
mml.clogicopquant = mml.exists.qname | mml.forall.qname
mml.exists.qname = element exists { empty, mml.operators.common.attrib }
mml.forall.qname = element forall { empty, mml.operators.common.attrib }
mml.clogicopnary = mml.and.qname | mml.or.qname | mml.xor.qname
mml.and.qname = element and { empty, mml.operators.common.attrib }
mml.or.qname = element or { empty, mml.operators.common.attrib }
mml.xor.qname = element xor { empty, mml.operators.common.attrib }
mml.clogicop1ary = mml.not.qname
mml.not.qname = element not { empty, mml.operators.common.attrib }
mml.clogicop2ary = mml.implies.qname
mml.implies.qname =
    element implies { empty, mml.operators.common.attrib }
mml.ccalcop =
    mml.log.qname
    | mml.int.qname
    | mml.diff.qname
    | mml.partialdiff.qname
    | mml.divergence.qname
    | mml.grad.qname
    | mml.curl.qname
    | mml.laplacian.qname
mml.divergence.qname =
    element divergence { empty, mml.operators.common.attrib }
mml.grad.qname = element grad { empty, mml.operators.common.attrib }
mml.curl.qname = element curl { empty, mml.operators.common.attrib }
mml.laplacian.qname =
    element laplacian { empty, mml.operators.common.attrib }
mml.log.qname = element log { empty, mml.operators.common.attrib }
mml.int.qname = element int { empty, mml.operators.common.attrib }
mml.diff.qname = element diff { empty, mml.operators.common.attrib }
mml.partialdiff.qname =
    element partialdiff { empty, mml.operators.common.attrib }
mml.ccalcop1ary = mml.ln.qname
mml.ln.qname = element ln { empty, mml.operators.common.attrib }
mml.csetop1ary = mml.card.qname
mml.card.qname = element card { empty, mml.operators.common.attrib }
mml.csetop2ary = mml.setdiff.qname
mml.setdiff.qname =
    element setdiff { empty, mml.operators.common.attrib }
mml.csetopnary =
    mml.union.qname | mml.intersect.qname | mml.cartesianproduct.qname
mml.union.qname = element union { empty, mml.operators.common.attrib }
mml.intersect.qname =
    element intersect { empty, mml.operators.common.attrib }
mml.cartesianproduct.qname =
    element cartesianproduct { empty, mml.operators.common.attrib }
mml.cseqop = mml.sum.qname | mml.product.qname | mml.limit.qname
mml.sum.qname = element sum { empty, mml.operators.common.attrib }
mml.product.qname =
    element product { empty, mml.operators.common.attrib }
mml.limit.qname = element limit { empty, mml.operators.common.attrib }
mml.ctrigop =
    mml.sin.qname
    | mml.cos.qname
    | mml.tan.qname
    | mml.sec.qname
    | mml.csc.qname
    | mml.cot.qname
    | mml.sinh.qname
    | mml.cosh.qname
    | mml.tanh.qname
    | mml.sech.qname
    | mml.csch.qname
    | mml.coth.qname
    | mml.arcsin.qname
    | mml.arccos.qname
    | mml.arctan.qname
    | mml.arccosh.qname
    | mml.arccot.qname
    | mml.arccoth.qname
    | mml.arccsc.qname
    | mml.arccsch.qname
    | mml.arcsec.qname
    | mml.arcsech.qname
    | mml.arcsinh.qname
    | mml.arctanh.qname
mml.sin.qname = element sin { empty, mml.operators.common.attrib }
mml.cos.qname = element cos { empty, mml.operators.common.attrib }
mml.tan.qname = element tan { empty, mml.operators.common.attrib }
mml.sec.qname = element sec { empty, mml.operators.common.attrib }
mml.csc.qname = element csc { empty, mml.operators.common.attrib }
mml.cot.qname = element cot { empty, mml.operators.common.attrib }
mml.sinh.qname = element sinh { empty, mml.operators.common.attrib }
mml.cosh.qname = element cosh { empty, mml.operators.common.attrib }
mml.tanh.qname = element tanh { empty, mml.operators.common.attrib }
mml.sech.qname = element sech { empty, mml.operators.common.attrib }
mml.csch.qname = element csch { empty, mml.operators.common.attrib }
mml.coth.qname = element coth { empty, mml.operators.common.attrib }
mml.arcsin.qname = element arcsin { empty, mml.operators.common.attrib }
mml.arccos.qname = element arccos { empty, mml.operators.common.attrib }
mml.arctan.qname = element arctan { empty, mml.operators.common.attrib }
mml.arccosh.qname =
    element arccosh { empty, mml.operators.common.attrib }
mml.arccot.qname = element arccot { empty, mml.operators.common.attrib }
mml.arccoth.qname =
    element arccoth { empty, mml.operators.common.attrib }
mml.arccsc.qname = element arccsc { empty, mml.operators.common.attrib }
mml.arccsch.qname =
    element arccsch { empty, mml.operators.common.attrib }
mml.arcsec.qname = element arcsec { empty, mml.operators.common.attrib }
mml.arcsech.qname =
    element arcsech { empty, mml.operators.common.attrib }
mml.arcsinh.qname =
    element arcsinh { empty, mml.operators.common.attrib }
mml.arctanh.qname =
    element arctanh { empty, mml.operators.common.attrib }
mml.cstatopnary =
    mml.mean.qname
    | mml.sdev.qname
    | mml.variance.qname
    | mml.median.qname
    | mml.mode.qname
mml.mean.qname = element mean { empty, mml.operators.common.attrib }
mml.sdev.qname = element sdev { empty, mml.operators.common.attrib }
mml.variance.qname =
    element variance { empty, mml.operators.common.attrib }
mml.median.qname = element median { empty, mml.operators.common.attrib }
mml.mode.qname = element mode { empty, mml.operators.common.attrib }
mml.cstatopmoment = mml.moment.qname
mml.moment.qname = element moment { empty, mml.operators.common.attrib }
mml.clalgop1ary = mml.determinant.qname | mml.transpose.qname
mml.determinant.qname =
    element determinant { empty, mml.operators.common.attrib }
mml.transpose.qname =
    element transpose { empty, mml.operators.common.attrib }
mml.clalgop2ary =
    mml.vectorproduct.qname
    | mml.scalarproduct.qname
    | mml.outerproduct.qname
mml.vectorproduct.qname =
    element vectorproduct { empty, mml.operators.common.attrib }
mml.scalarproduct.qname =
    element scalarproduct { empty, mml.operators.common.attrib }
mml.outerproduct.qname =
    element outerproduct { empty, mml.operators.common.attrib }
mml.clalgopnary = mml.selector.qname
mml.selector.qname =
    element selector { empty, mml.operators.common.attrib }
# Operator groups
mml.cop1ary =
    mml.cfuncop1ary
    | mml.carithop1ary
    | mml.clogicop1ary
    | mml.ccalcop1ary
    | mml.ctrigop
    | mml.clalgop1ary
    | mml.csetop1ary
mml.cop2ary =
    mml.carithop2ary
    | mml.clogicop2ary
    | mml.clalgop2ary
    | mml.csetop2ary
mml.copnary =
    mml.cfuncopnary
    | mml.carithopnary
    | mml.clogicopnary
    | mml.csetopnary
    | mml.cstatopnary
    | mml.clalgopnary
mml.copmisc =
    mml.carithoproot
    | mml.carithop1or2ary
    | mml.ccalcop
    | mml.cseqop
    | mml.cstatopmoment
    | mml.clogicopquant
