# Problem 5; 26-May-2000

## XML: Foundations, Techniques, Applications; Summer 2000

### Harold Boley; DFKI, Univ. Kaiserslautern

Recall the (first-order) functions (over numbers) double, foo, and cube from Problem 3.
The (higher-order) function compose can be defined as compose(F,G)(x) := F(G(x)) or compose[F,G](X) :& F(G(X)). Its parameters F and G are themselves functions; its argument x or X can be anything. The RFML markup of compose is

<ft>
<pattop>
<struc>
<con>compose</con>
<var>f</var>
<var>g</var>
</struc>
<var>x</var>
</pattop>
<callop>
<var>f</var>
<callop>
<var>g</var>
<var>x</var>
</callop>
</callop>
</ft>

Another (higher-order) function, sumfun, is defined as
sumfun(F,G)(x) := F(x) + G(x) or sumfun[F,G](X) :& +(F(X),G(X)).

**a)**
Describe in English the meaning of compose.
Test it in the Relfun system and report the values of the calls compose[double,cube](3),
compose[double,compose[cube,foo]](2), and compose[compose[double,cube],foo](2).
Can you prove compose[F,compose[G,H]] = compose[compose[F,G],H] as a law?
Give (as many parts as possible of) the MathML markup of compose.

**b)** Describe in English the meaning of sumfun.
Test it in the Relfun system and report the value of the call sumfun[cube,double](3).
Can you prove sumfun[F,G] = sumfun[G,F] as a law?
Mark up sumfun in RFML and (as far as possible) in MathML.