[Prev][Next][Index][Thread]
Iterators/Apply-qualifiers in MathML 2.0(content)
Hi all,
I have one suggestion about the opportunity to qualify apply
in MathML.
Remark 1:
First note that these qualifiers are used for different things:
- iterating an operation on an intentionaly defined set of objects (bvar,
lowlimit, uplimit, condition and interval;
- defining the context of the operation (for degree -- only appliable
for moment, and not to be misused for diff and partialdiff, -- or
logbase -- only applyable to log -- as I understand them).
Maybe, distinguishing them could be useful.
Remark 2:
Meanwhile, there is a need for a general "iterate" primitive
(maybe not the best name). Which iterate any operation on variables,
like in the way apply does it with qualifiers (4.2.3.2). Such an operator
would have the advantage of caring of the iteration in place of the
operator itself. As an example, it is perfectly legitimate to apply
an iteration to:
- boolean and/or;
- arithmetic plus/times. There is a special sum/product couple just for
this. But if you start refining plus/times for a particular
structure (say quaternions), will you be allowed to use it with the
apply+qualifiers or will you have to refine ALSO
the sum/product couple? This is not making extendibility easier.
- set union/intersection (OK: any boolean algebra operator);
- statistic mean;
- some kind of declared function;
- some kind of fn;
- vectorproduct;
- even set/vector/list/matrix construction can be defined that way;
but none of these is stated in 4.2.3.2.
Moreover, appart from a few of them that should be taken as
particular cases instead of the rule (viz. int, limit and diff), all these
operations can be rendered the same way(s).
Remark 3:
In general, when it is possible to iterate on a set of values,
it is possible to use any qualifier. For instance, the examples given for
the forall could be defined with a uplimit:
<apply> <!-- the second forall example of 4.2.3.2 -->
<forall/>
<bvar><ci>x</ci></bvar>
<uplimit><cn>9</cn></uplimit>
<apply><lt/><ci>x</ci><cn>10</cn></apply>
</apply>
<apply> <!-- a tautology -->
<forall/>
<bvar><ci>x</ci></bvar>
<interval closure="closed-open"><cn>0</cn><cn>10</cn></uplimit>
<apply>
<forall/>
<bvar><ci>y</ci></bvar>
<uplimit><ci>x</ci></uplimit>
<condition><apply><neq/><ci>x</ci><ci>x</ci></condition>
<apply>
<neq/>
<apply><minus/><ci>x</ci><ci>y</ci></apply>
<cn>0</cn>
</apply>
</apply>
</apply>
(\forall x\in\[0 10\[, \forall y\lt x, s.t. x\neq y, x-y\neq 0)
The opportunity to use one of these qualifiers depend only on the structure
of the underlying value set (ordered for up/low limit and interval). Why
restricting them to this.
Remark 4:
It is a pitty that the begining of 4.2.3.2, evokes the presence of
an interval (just before the second example) and that this interval is not
specified with the interval construction (but with lowlimit/uplimit).
Appendix: some example of iteration
<lambda> <!-- define the powerset of E (by iterating union) -->
<bvar><ci type="set">E</ci></bvar>
<iterate>
<union/>
<bvar><ci>e</ci></bvar>
<condition>
<apply>
<subset/>
<ci>e</ci>
<ci>E</ci>
</apply>
<condition>
<set><ci>e</ci></set>
</iterate>
</lambda>
<lambda> <!-- define the powerset of E (by iterating set) -->
<bvar><ci type="set">E</ci></bvar>
<iterate>
<set/>
<bvar><ci>x</ci></bvar>
<condition>
<apply><in/><ci>x</ci><ci>E</ci></apply>
</condition>
<ci>x</ci>
</iterate>
</lambda>
I hope this can help.
Best regards,
--
__
Jérôme Euzenat / /\
_/ _ _ _ _ _
INRIA Rhône-Alpes, /_) | ` / ) | \ \ /_)
(___/___(_/_/ / /_(_________________
655, avenue de l'Europe /
38330 Montbonnot St Martin,/ Jerome.Euzenat@inrialpes.fr
France____________________/ http://www.inrialpes.fr/exmo
Follow-Ups: