]> matita.cs.unibo.it Git - helm.git/blob - helm/style/mmlextension.xsl
- the mathql interpreter is not helm-dependent any more
[helm.git] / helm / style / mmlextension.xsl
1 <?xml version="1.0"?>
2
3 <!-- Copyright (C) 2000, HELM Team                                     -->
4 <!--                                                                   -->
5 <!-- This file is part of HELM, an Hypertextual, Electronic            -->
6 <!-- Library of Mathematics, developed at the Computer Science         -->
7 <!-- Department, University of Bologna, Italy.                         -->
8 <!--                                                                   -->
9 <!-- HELM is free software; you can redistribute it and/or             -->
10 <!-- modify it under the terms of the GNU General Public License       -->
11 <!-- as published by the Free Software Foundation; either version 2    -->
12 <!-- of the License, or (at your option) any later version.            -->
13 <!--                                                                   -->
14 <!-- HELM is distributed in the hope that it will be useful,           -->
15 <!-- but WITHOUT ANY WARRANTY; without even the implied warranty of    -->
16 <!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     -->
17 <!-- GNU General Public License for more details.                      -->
18 <!--                                                                   -->
19 <!-- You should have received a copy of the GNU General Public License -->
20 <!-- along with HELM; if not, write to the Free Software               -->
21 <!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston,            -->
22 <!-- MA  02111-1307, USA.                                              -->
23 <!--                                                                   -->
24 <!-- For details, see the HELM World-Wide-Web page,                    -->
25 <!-- http://cs.unibo.it/helm/.                                         -->
26
27 <!--***********************************************************************--> 
28 <!-- Extension to the XSLT version 0.07 of MathML content to presentation: -->
29 <!-- First draft: February 19 2000, Andrea Asperti, Irene Schena           -->
30 <!-- Revised: March 3 2000, Irene Schena                                   -->
31 <!-- Revised: March 15 2000, Claudio Sacerdoti Coen, Irene Schena          -->
32 <!-- Revised: March 21 2000, Irene Schena                                  -->
33 <!--***********************************************************************--> 
34
35 <!-- NOTE: the namespace declaration has to be done in the stylesheets 
36 which generates the toplevel element (see for instance xlink) -->
37 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
38                               xmlns:m="http://www.w3.org/1998/Math/MathML"
39                               xmlns:helm="http://www.cs.unibo.it/helm"
40                               xmlns:xlink="http://www.w3.org/1999/xlink">
41
42 <!-- OLD: <xsl:import href="mml2mmlv1_0.xsl"/> -->
43
44 <xsl:import href="mmlnotation.xsl"/>
45
46 <xsl:import href="mmltheoryextension.xsl"/>
47
48
49 <xsl:param name="explodeall" select="false()"/>
50
51 <!--***********************************************************************-->
52 <!-- Parameter affecting line-breaking                                     -->
53 <!--***********************************************************************-->
54
55 <xsl:variable name="framewidth" select="35"/>
56
57 <!--***********************************************************************-->
58 <!-- Gli oggetti sono stampati come mtext all'interno di una marca toplevel-->
59 <!-- math ma al di fuori di semantics. Ora vi sono tanti semantics quanti  -->
60 <!-- sono i termini: la presentation per un termine e' generata come primo -->
61 <!-- figlio di un semantics e l'originario content viene inserito nel      -->
62 <!-- nel secondo figlio di semantics, annotation-xml                       -->
63 <!--***********************************************************************-->
64
65 <!--**********************-->
66 <!--        OBJECTS       -->
67 <!--**********************-->
68
69 <xsl:param name="type" select="'standalone'"/>
70
71 <xsl:template match="/">
72  <xsl:choose>
73   <xsl:when test="$type = 'standalone'">
74    <xsl:apply-templates select="*"/>
75   </xsl:when>
76   <xsl:otherwise>
77    <to_be_embedded>
78     <xsl:apply-templates select="*"/>
79    </to_be_embedded>
80   </xsl:otherwise> 
81  </xsl:choose>
82 </xsl:template>
83
84 <!-- DEFINITION -->
85
86 <xsl:template match="Definition">
87     <m:math>
88      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
89       <m:mtr>
90        <m:mtd>
91         <m:mrow>
92          <m:mtext>DEFINITION <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
93         </m:mrow>
94        </m:mtd>
95       </m:mtr>
96       <m:mtr>
97        <m:mtd>
98         <m:mrow>
99          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
100          <xsl:apply-templates select="type/*[1]"/>
101         </m:mrow>
102        </m:mtd>
103       </m:mtr>
104       <m:mtr>
105        <m:mtd>
106         <m:mrow>
107          <m:mtext>AS</m:mtext>
108         </m:mrow>
109        </m:mtd>
110       </m:mtr>
111       <m:mtr>
112        <m:mtd>
113         <m:mrow>
114          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
115          <xsl:apply-templates select="body/*[1]"/>
116         </m:mrow>
117        </m:mtd>
118       </m:mtr>
119      </m:mtable>
120     </m:math>
121 </xsl:template>
122
123 <!-- AXIOM -->
124
125 <xsl:template match="Axiom">
126     <m:math>
127      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
128       <m:mtr>
129        <m:mtd>
130         <m:mrow>
131          <m:mtext>AXIOM <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>) OF TYPE</m:mtext>
132         </m:mrow>
133        </m:mtd>
134       </m:mtr>
135       <m:mtr>
136        <m:mtd>
137         <m:mrow>
138          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
139          <xsl:apply-templates select="type/*[1]"/>
140         </m:mrow>
141        </m:mtd>
142       </m:mtr>
143      </m:mtable>
144     </m:math>
145 </xsl:template>
146
147 <!-- UNFINISHED PROOF -->
148
149 <xsl:template match="CurrentProof">
150     <m:math>
151      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
152       <m:mtr>
153        <m:mtd>
154         <m:mrow>
155          <m:mtext>UNFINISHED PROOF <xsl:value-of select="@name"/>(<xsl:if test="string(./Params) != &quot;&quot;"><xsl:value-of select="Params"/></xsl:if>)</m:mtext>
156         </m:mrow>
157        </m:mtd>
158       </m:mtr>
159       <m:mtr>
160        <m:mtd>
161         <m:mrow>
162          <m:mtext>THESIS:</m:mtext>
163         </m:mrow>
164        </m:mtd>
165       </m:mtr>
166       <m:mtr>
167        <m:mtd>
168         <m:mrow>
169          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
170          <xsl:apply-templates select="type/*[1]"/>
171         </m:mrow>
172        </m:mtd>
173       </m:mtr>
174       <m:mtr>
175        <m:mtd>
176         <m:mrow>
177          <m:mtext>CONJECTURES:</m:mtext>
178         </m:mrow>
179        </m:mtd>
180       </m:mtr>
181       <xsl:for-each select="Conjecture">
182       <m:mtr>
183        <m:mtd>
184         <m:mrow helm:xref="{@helm:xref}">
185          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
186          <xsl:for-each select="Decl|Def|Hidden">
187           <xsl:choose>
188            <xsl:when test="name(.)='Decl'">
189             <m:mrow helm:xref="{@helm:xref}">
190              <xsl:choose>
191               <xsl:when test="@name">
192                <m:mi><xsl:value-of select="@name"/></m:mi>
193               </xsl:when>
194               <xsl:otherwise>
195                <m:mi>_</m:mi>
196               </xsl:otherwise>
197              </xsl:choose>
198              <m:mo>:</m:mo>
199              <xsl:apply-templates select="./*[1]"/>
200             </m:mrow>
201            </xsl:when>
202            <xsl:when test="name(.)='Def'">
203             <m:mrow helm:xref="{@helm:xref}">
204              <xsl:choose>
205               <xsl:when test="@name">
206                <m:mi><xsl:value-of select="@name"/></m:mi>
207               </xsl:when>
208               <xsl:otherwise>
209                <m:mi>_</m:mi>
210               </xsl:otherwise>
211              </xsl:choose>
212              <m:mo>:=</m:mo>
213              <xsl:apply-templates select="./*[1]"/>
214             </m:mrow>
215            </xsl:when>
216            <xsl:otherwise>
217             <m:mrow helm:xref="{@helm:xref}">
218              <m:mi>_</m:mi>
219              <m:mo>:?</m:mo>
220              <m:mi>_</m:mi>
221             </m:mrow>
222            </xsl:otherwise>
223           </xsl:choose>
224           <xsl:if test="not (position() = last())">
225            <m:mo>;</m:mo>
226           </xsl:if>
227          </xsl:for-each>
228          <m:mo>|-</m:mo>
229          <m:msub><m:mi>?</m:mi><m:mn><xsl:value-of select="@no"/></m:mn></m:msub>
230          <m:mo>:</m:mo>
231          <xsl:apply-templates select="./Goal/*[1]"/>
232         </m:mrow>
233        </m:mtd>
234       </m:mtr>
235       </xsl:for-each>
236       <m:mtr>
237        <m:mtd>
238         <m:mrow>
239          <m:mtext>PROOF:</m:mtext>
240         </m:mrow>
241        </m:mtd>
242       </m:mtr>
243       <m:mtr>
244        <m:mtd>
245         <m:mrow>
246          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
247          <xsl:apply-templates select="body/*[1]"/>
248         </m:mrow>
249        </m:mtd>
250       </m:mtr>
251      </m:mtable>
252     </m:math>
253 </xsl:template>
254
255 <!-- MUTUAL INDUCTIVE DEFINITION -->
256
257 <xsl:template match="InductiveDefinition">
258     <m:math>
259      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
260      <xsl:for-each select="InductiveType">
261       <m:mtr>
262        <m:mtd>
263         <m:mrow>
264          <xsl:choose>
265          <xsl:when test="position() = 1">
266           <xsl:choose>
267           <xsl:when test="string(./@inductive) = &quot;true&quot;">
268            <m:mtext>INDUCTIVE DEFINITION</m:mtext>
269           </xsl:when>
270           <xsl:otherwise>
271            <m:mtext>COINDUCTIVE DEFINITION</m:mtext>
272           </xsl:otherwise>
273           </xsl:choose>  
274          </xsl:when>
275          <xsl:otherwise>
276           <m:mtext>AND</m:mtext>
277          </xsl:otherwise>
278          </xsl:choose>
279          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
280          <m:mtext><xsl:value-of select="./@name"/>(<xsl:if test="string(../Params) != &quot;&quot;"><xsl:value-of select="../Params"/></xsl:if>)</m:mtext>
281         </m:mrow>
282        </m:mtd>
283       </m:mtr>
284       <m:mtr>
285        <m:mtd>
286         <m:mrow> 
287          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
288          <m:mtext>[</m:mtext>
289          <xsl:choose>
290          <xsl:when test="string(../Param) != &quot;&quot;">         
291           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
292            <xsl:for-each select="../Param">
293             <m:mtr>
294              <m:mtd>
295               <m:mrow>   
296                <m:mi><xsl:value-of select="./@name"/></m:mi>
297                <m:mo>:</m:mo>
298                <xsl:apply-templates select="*"/>
299               </m:mrow>
300              </m:mtd>
301             </m:mtr>
302            </xsl:for-each>
303             <m:mtr>
304              <m:mtd>
305               <m:mrow>
306                <m:mtext>]</m:mtext>
307               </m:mrow>
308              </m:mtd>
309             </m:mtr>
310           </m:mtable>
311          </xsl:when>
312          <xsl:otherwise>
313           <m:mtext>]</m:mtext>
314          </xsl:otherwise>
315          </xsl:choose>
316         </m:mrow>
317        </m:mtd>
318       </m:mtr>
319       <m:mtr>
320        <m:mtd>
321         <m:mrow>
322          <m:mtext>OF ARITY</m:mtext>
323         </m:mrow>
324        </m:mtd>
325       </m:mtr>
326       <m:mtr>
327        <m:mtd>
328         <m:mrow>
329          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
330          <xsl:apply-templates select="./arity/*[1]"/>
331         </m:mrow>
332        </m:mtd>
333       </m:mtr>
334       <m:mtr>
335        <m:mtd>
336         <m:mrow>
337          <m:mtext>BUILT FROM</m:mtext>
338         </m:mrow>
339        </m:mtd>
340       </m:mtr>
341       <xsl:for-each select="./Constructor">
342       <m:mtr>
343        <m:mtd>
344         <m:mrow>
345          <xsl:choose>
346          <xsl:when test="position() = 1">
347           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
348          </xsl:when>
349          <xsl:otherwise>
350           <m:mtext>|</m:mtext>
351           <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
352          </xsl:otherwise>
353          </xsl:choose>
354          <m:mtext><xsl:value-of select="./@name"/> OF</m:mtext>
355          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
356          <xsl:apply-templates select="./*[1]"/>
357         </m:mrow>
358        </m:mtd>
359       </m:mtr>
360       </xsl:for-each>
361      </xsl:for-each>
362      </m:mtable>
363     </m:math>
364 </xsl:template>
365
366 <!-- VARIABLE -->
367
368 <xsl:template match="Variable">
369     <m:math>
370      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}">
371       <m:mtr>
372        <m:mtd>
373         <m:mrow>
374          <m:mtext>VARIABLE <xsl:value-of select="@name"/> OF TYPE</m:mtext>
375         </m:mrow>
376        </m:mtd>
377       </m:mtr>
378       <m:mtr>
379        <m:mtd>
380         <m:mrow>
381          <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
382          <xsl:apply-templates select="type/*[1]"/>
383         </m:mrow>
384        </m:mtd>
385       </m:mtr>
386       <xsl:if test="name(*[1])='body'">
387        <m:mtr>
388         <m:mtd>
389          <m:mrow>
390           <m:mtext>AS</m:mtext>
391          </m:mrow>
392         </m:mtd>
393        </m:mtr>
394        <m:mtr>
395         <m:mtd>
396          <m:mrow>
397           <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
398           <xsl:apply-templates select="body/*[1]"/>
399          </m:mrow>
400         </m:mtd>
401        </m:mtr>
402       </xsl:if>
403      </m:mtable>
404     </m:math>
405 </xsl:template>
406
407 <!-- SEQUENT -->
408
409 <xsl:template match="Sequent">
410  <xsl:variable name="rowlines">
411   <xsl:for-each select="Decl|Def">
412    <xsl:if test="position() != last()">
413     <xsl:text>none </xsl:text>
414    </xsl:if>
415   </xsl:for-each>
416   <xsl:text>solid</xsl:text>
417  </xsl:variable>
418  <xsl:variable name="no" select="@no"/>
419     <m:math>
420      <m:mi><xsl:text>?</xsl:text><xsl:value-of select="$no"/></m:mi>
421      <m:mo>:</m:mo>
422      <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
423      <m:mtable align="baseline 1" equalrows="false" columnalign="left" helm:xref="{@helm:xref}" rowlines="{$rowlines}">
424       <xsl:for-each select="Decl|Def">
425        <m:mtr>
426         <m:mtd>
427          <m:mrow helm:xref="{@helm:xref}">
428           <m:mi><xsl:value-of select="@name"/></m:mi>
429           <xsl:choose>
430            <xsl:when test="name(.) = 'Decl'">
431             <m:mo>:</m:mo>
432            </xsl:when>
433            <xsl:otherwise>
434             <m:mo>:=</m:mo>
435            </xsl:otherwise>
436           </xsl:choose>
437           <xsl:apply-templates select="*[1]"/>
438          </m:mrow>
439         </m:mtd>
440        </m:mtr>
441       </xsl:for-each>
442       <xsl:if test="not(Decl|Def)">
443       <m:mtr>
444        <m:mtd>
445         <m:mrow>
446          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
447         </m:mrow>
448        </m:mtd>
449       </m:mtr>
450       </xsl:if>
451       <m:mtr>
452        <m:mtd>
453         <m:mrow>
454          <xsl:apply-templates select="Goal/*[1]"/>
455         </m:mrow>
456        </m:mtd>
457       </m:mtr>
458      </m:mtable>
459     </m:math>
460 </xsl:template>
461
462 <!--**********************-->
463 <!--        TERMS         -->
464 <!--**********************-->
465
466 <xsl:template match="m:bvar">
467  <xsl:choose>
468   <xsl:when test="m:type">
469    <xsl:variable name="charlength">
470     <xsl:apply-templates select="m:ci" mode="charcount"/>
471    </xsl:variable>
472    <xsl:choose>
473     <xsl:when test="$charlength >= $framewidth">
474      <m:mtable align="baseline 1" equalrows="false" columnalign="left">
475       <m:mtr>
476        <m:mtd>
477         <m:mrow>
478          <xsl:apply-templates select="m:ci"/>
479          <m:mo>:</m:mo>
480         </m:mrow>
481        </m:mtd>
482       </m:mtr>
483       <m:mtr>
484        <m:mtd>
485         <m:mrow>
486          <xsl:apply-templates select="m:type"/>
487         </m:mrow>
488        </m:mtd>
489       </m:mtr>
490      </m:mtable>
491     </xsl:when>
492     <xsl:otherwise>
493      <m:mrow>
494       <xsl:apply-templates select="m:ci"/>
495       <m:mo>:</m:mo>
496       <xsl:apply-templates select="m:type"/>
497      </m:mrow>
498     </xsl:otherwise>
499    </xsl:choose>
500   </xsl:when>
501   <xsl:otherwise>
502    <xsl:apply-templates select="m:ci"/>
503   </xsl:otherwise>
504  </xsl:choose>
505 </xsl:template>
506
507
508 <!-- CSYMBOL -->
509
510 <xsl:template match="m:apply[m:csymbol]">
511 <xsl:param name="nopar" select="0"/>
512     <xsl:variable name="name"><xsl:value-of select="m:csymbol"/></xsl:variable>
513     <xsl:variable name="charlength"><xsl:apply-templates select="m:csymbol" mode="charcount"/></xsl:variable>
514     <m:mrow>
515      <xsl:if test="@id">
516       <xsl:attribute name="xref"><xsl:value-of select="@id"/></xsl:attribute>
517      </xsl:if>
518      <xsl:variable name="id" select="m:csymbol/@id"/>
519      <xsl:choose>
520       <!-- META -->
521       <xsl:when test="$name='meta'">
522        <m:mrow>
523         <xsl:apply-templates select="*[position()=2]"/>
524         <m:mfenced open="[" close="]" separators=";">
525          <xsl:apply-templates select="*[position()>2]"/>
526         </m:mfenced>
527        </m:mrow>
528       </xsl:when>
529       <!-- FORALL -->
530       <xsl:when test="$name='forall'">
531        <xsl:choose>
532        <xsl:when test="$charlength >= $framewidth">
533         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
534          <m:mtr>
535           <m:mtd>
536            <m:mrow>
537             <m:mo mathcolor="Blue">&#8704;</m:mo>
538             <xsl:apply-templates select="m:bvar"/>
539            </m:mrow>
540           </m:mtd>
541          </m:mtr>
542          <m:mtr>
543           <m:mtd>
544            <m:mrow>
545             <m:mo>.</m:mo>
546             <xsl:apply-templates select="*[position()=3]"/>
547            </m:mrow>
548           </m:mtd>
549          </m:mtr>
550         </m:mtable>
551        </xsl:when>
552        <xsl:otherwise>
553         <m:mo mathcolor="Blue">&#8704;</m:mo>
554         <xsl:apply-templates select="m:bvar/m:ci"/>
555         <m:mo>:</m:mo>
556         <xsl:apply-templates select="m:bvar/m:type"/>
557         <m:mo>.</m:mo>
558         <xsl:apply-templates select="*[position()=3]"/>
559        </xsl:otherwise>
560        </xsl:choose> 
561       </xsl:when>
562       <!-- LET-IN -->
563       <xsl:when test="$name='let_in'">
564        <xsl:choose>
565        <xsl:when test="$charlength >= $framewidth">
566         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
567          <m:mtr>
568           <m:mtd>
569            <m:mrow>
570             <m:mo>LET</m:mo>
571             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
572             <xsl:apply-templates select="m:bvar"/>
573            </m:mrow>
574           </m:mtd>
575          </m:mtr>
576          <m:mtr>
577           <m:mtd>
578            <m:mrow>
579             <m:mo>=</m:mo>
580             <xsl:apply-templates select="*[position()=3]"/>
581            </m:mrow>
582           </m:mtd>
583          </m:mtr>
584          <m:mtr>
585           <m:mtd>
586            <m:mrow>
587             <m:mo>IN</m:mo>
588             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
589             <xsl:apply-templates select="*[position()=4]"/>
590            </m:mrow>
591           </m:mtd>
592          </m:mtr>
593         </m:mtable>
594        </xsl:when>
595        <xsl:otherwise>
596         <m:mo>LET</m:mo>
597         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
598         <xsl:apply-templates select="m:bvar/m:ci"/>
599         <m:mo>=</m:mo>
600         <xsl:apply-templates select="*[position()=3]"/>
601         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
602         <m:mtext>IN</m:mtext>
603         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
604         <xsl:apply-templates select="*[position()=4]"/>
605        </xsl:otherwise>
606        </xsl:choose>
607       </xsl:when> 
608       <!-- PROD -->
609       <xsl:when test="$name='prod'">
610        <xsl:choose>
611        <xsl:when test="$charlength >= $framewidth">
612         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
613          <m:mtr>
614           <m:mtd>
615            <m:mrow>
616             <m:mo mathcolor="Blue">&#x03a0;</m:mo>
617             <xsl:apply-templates select="m:bvar"/>
618            </m:mrow>
619           </m:mtd>
620          </m:mtr>
621          <m:mtr>
622           <m:mtd>
623            <m:mrow>
624             <m:mo>.</m:mo>
625             <xsl:apply-templates select="*[position()=3]"/>
626            </m:mrow>
627           </m:mtd>
628          </m:mtr>
629         </m:mtable>
630        </xsl:when>
631        <xsl:otherwise>
632         <m:mo mathcolor="Blue">&#x03a0;</m:mo>
633         <xsl:apply-templates select="m:bvar/m:ci"/>
634         <m:mo>:</m:mo>
635         <xsl:apply-templates select="m:bvar/m:type"/>
636         <m:mo>.</m:mo>
637         <xsl:apply-templates select="*[position()=3]"/>
638        </xsl:otherwise>
639        </xsl:choose> 
640       </xsl:when>
641       <!-- ARROW -->
642       <xsl:when test="$name='arrow'">
643        <xsl:choose>
644        <xsl:when test="$charlength >= $framewidth">
645         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
646          <m:mtr>
647           <m:mtd>
648            <m:mrow>
649             <xsl:if test="$nopar=0">
650              <m:mo stretchy="false">(</m:mo>
651             </xsl:if>
652             <xsl:apply-templates select="*[position()=2]"/>
653            </m:mrow>
654           </m:mtd>
655          </m:mtr>
656          <m:mtr>
657           <m:mtd>
658            <m:mrow>
659             <m:mo mathmathcolor="Blue">&#x2192;</m:mo>
660             <xsl:choose>
661             <xsl:when test="*[position()=3]/m:csymbol">
662              <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
663              <xsl:choose>
664              <xsl:when test="$nextp='arrow'">
665               <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
666              </xsl:when>
667              <xsl:otherwise>
668               <xsl:apply-templates select="*[position()=3]"/>
669              </xsl:otherwise>
670              </xsl:choose>
671             </xsl:when>
672             <xsl:otherwise>
673              <xsl:apply-templates select="*[position()=3]"/>
674             </xsl:otherwise>
675             </xsl:choose>
676            </m:mrow>
677           </m:mtd>
678          </m:mtr>
679          <xsl:if test="$nopar=0">
680          <m:mtr>
681           <m:mtd>
682            <m:mrow>
683             <m:mo stretchy="false">)</m:mo>
684            </m:mrow>
685           </m:mtd>
686          </m:mtr>
687          </xsl:if>
688         </m:mtable>
689        </xsl:when>
690        <xsl:otherwise>
691         <xsl:if test="$nopar=0">
692          <m:mo stretchy="false">(</m:mo>
693         </xsl:if>
694         <xsl:apply-templates select="*[position()=2]"/>
695         <m:mo mathcolor="Blue">&#x2192;</m:mo>
696         <xsl:choose>
697         <xsl:when test="*[position()=3]/m:csymbol">
698          <xsl:variable name="nextp"><xsl:value-of select="*[position()=3]/m:csymbol"/></xsl:variable>
699          <xsl:choose>
700          <xsl:when test="$nextp='arrow'">
701           <xsl:apply-templates select="*[position()=3]"><xsl:with-param name="nopar" select="1"/></xsl:apply-templates>
702          </xsl:when>
703          <xsl:otherwise>
704           <xsl:apply-templates select="*[position()=3]"/>
705          </xsl:otherwise>
706          </xsl:choose>
707         </xsl:when>
708         <xsl:otherwise>
709          <xsl:apply-templates select="*[position()=3]"/>
710         </xsl:otherwise>
711         </xsl:choose>
712         <xsl:if test="$nopar=0">
713          <m:mo stretchy="false">)</m:mo>
714         </xsl:if>
715        </xsl:otherwise>
716        </xsl:choose>
717       </xsl:when>
718       <!-- APP -->
719       <xsl:when test="$name='app'">
720        <xsl:choose>
721        <xsl:when test="$charlength >= $framewidth">
722         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
723          <m:mtr>
724           <m:mtd>
725            <m:mrow>
726             <m:mo stretchy="false">(</m:mo>
727 <!-- added precedence to app = FUNCTION_PREC (99) -->
728             <xsl:apply-templates select="*[position()=2]">
729              <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
730             </xsl:apply-templates>
731            </m:mrow>
732           </m:mtd>
733          </m:mtr>
734          <xsl:for-each select="*[position()>2]">
735          <m:mtr>
736           <m:mtd>
737            <m:mrow>
738             <m:mphantom><m:mtext>(</m:mtext></m:mphantom>
739 <!-- added precedence to app = FUNCTION_PREC (99) -->
740             <xsl:apply-templates select=".">
741              <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
742             </xsl:apply-templates>
743            </m:mrow>
744           </m:mtd>
745          </m:mtr>
746          </xsl:for-each>
747          <m:mtr>
748           <m:mtd>
749            <m:mrow>
750             <m:mo stretchy="false">)</m:mo>
751            </m:mrow>
752           </m:mtd>
753          </m:mtr>
754         </m:mtable>
755        </xsl:when>
756        <xsl:otherwise>
757         <m:mo stretchy="false">(</m:mo>
758 <!-- added precedence to app = FUNCTION_PREC (99) -->
759         <xsl:apply-templates select="*[position()=2]">
760          <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
761         </xsl:apply-templates>
762         <xsl:for-each select="*[position()>2]">
763          <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
764 <!-- added precedence to app = FUNCTION_PREC (99) -->
765          <xsl:apply-templates select=".">
766           <xsl:with-param name="IN_PREC" select="$FUNCTION_PREC"/>
767          </xsl:apply-templates>
768         </xsl:for-each>
769         <m:mo stretchy="false">)</m:mo>
770        </xsl:otherwise>
771        </xsl:choose>
772       </xsl:when>
773       <!-- CAST -->
774       <xsl:when test="$name='cast'">
775        <xsl:choose>
776        <xsl:when test="$charlength >= $framewidth">
777         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
778          <m:mtr>
779           <m:mtd>
780            <m:mrow>
781             <m:mo stretchy="false">(</m:mo>
782             <xsl:apply-templates select="*[position()=2]"/>
783            </m:mrow>
784           </m:mtd>
785          </m:mtr>
786          <m:mtr>
787           <m:mtd>
788            <m:mrow>
789             <m:mo mathcolor="Maroon">:></m:mo>
790             <xsl:apply-templates select="*[position()=3]"/>
791            </m:mrow>
792           </m:mtd>
793          </m:mtr>
794          <m:mtr>
795           <m:mtd>
796            <m:mrow>
797             <m:mo stretchy="false">)</m:mo>
798            </m:mrow>
799           </m:mtd>
800          </m:mtr>
801         </m:mtable>
802        </xsl:when>
803        <xsl:otherwise>
804         <m:mo stretchy="false">(</m:mo>
805         <xsl:apply-templates select="*[position()=2]"/>
806         <m:mo mathcolor="Maroon">:></m:mo>
807         <xsl:apply-templates select="*[position()=3]"/>
808         <m:mo stretchy="false">)</m:mo>
809        </xsl:otherwise>
810        </xsl:choose>
811       </xsl:when>
812       <!-- PROP -->
813       <xsl:when test="$name='Prop'">
814        <m:mo>Prop</m:mo>
815       </xsl:when>
816       <!-- SET -->
817       <xsl:when test="$name='Set'">
818        <m:mo>Set</m:mo>
819       </xsl:when>
820       <!-- TYPE -->
821       <xsl:when test="$name='Type'">
822        <m:mo>Type</m:mo>
823       </xsl:when>
824       <!-- MUTCASE -->
825       <xsl:when test="$name='mutcase'">
826        <xsl:choose>
827        <xsl:when test="$charlength >= $framewidth">
828         <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
829         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
830          <m:mtr>
831           <m:mtd>
832            <m:mrow>
833             <m:mo>&lt;</m:mo>
834             <xsl:apply-templates select="*[position()=2]"/>
835             <xsl:if test="$framewidth > $charlength">
836              <m:mo>&gt;</m:mo>
837              <m:mo>CASES</m:mo>
838              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
839              <xsl:apply-templates select="*[position()=3]"/>
840             </xsl:if>
841            </m:mrow>
842           </m:mtd>
843          </m:mtr>
844          <xsl:if test="$charlength >= $framewidth">
845          <m:mtr>
846           <m:mtd>
847            <m:mrow>
848             <m:mo>&gt;</m:mo>
849             <m:mo>CASES</m:mo>
850             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
851             <xsl:apply-templates select="*[position()=3]"/>
852            </m:mrow>
853           </m:mtd>
854          </m:mtr>
855          </xsl:if>
856          <m:mtr>
857           <m:mtd>
858            <m:mrow>
859             <m:mo>OF</m:mo>
860            </m:mrow>
861           </m:mtd>
862          </m:mtr>
863          <xsl:for-each select="m:piecewise/m:piece">
864          <xsl:variable name="charlength"><xsl:apply-templates select="./*[2]" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
865          <m:mtr>
866           <m:mtd>
867            <m:mrow>
868             <xsl:choose>
869             <xsl:when test="position() = 1">
870               <m:mphantom><m:mtext>|</m:mtext></m:mphantom>
871             </xsl:when>
872             <xsl:otherwise>
873              <m:mo stretchy="false">|</m:mo>
874             </xsl:otherwise>
875             </xsl:choose>
876             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
877             <xsl:apply-templates select="./*[2]"/>
878             <xsl:if test="$framewidth > $charlength">
879              <m:mo mathcolor="Green">&#x21d2;</m:mo>
880              <xsl:apply-templates select="./*[1]"/>
881             </xsl:if>
882            </m:mrow>
883           </m:mtd>
884          </m:mtr>
885          <xsl:if test="$charlength >= $framewidth">
886          <m:mtr>
887           <m:mtd>
888            <m:mrow>
889             <m:mphantom><m:mtext>|_</m:mtext></m:mphantom>  
890             <m:mo mathcolor="Green">&#x21d2;</m:mo>
891             <xsl:apply-templates select="./*[1]"/>
892            </m:mrow>
893           </m:mtd>
894          </m:mtr>
895          </xsl:if>
896         </xsl:for-each>
897          <m:mtr>
898           <m:mtd>
899            <m:mrow>
900             <m:mo>END</m:mo>
901            </m:mrow>
902           </m:mtd>
903          </m:mtr>
904         </m:mtable>
905        </xsl:when>
906        <xsl:otherwise>
907         <m:mo>&lt;</m:mo><xsl:apply-templates select="*[position()=2]"/><m:mo>&gt;</m:mo>
908         <m:mo>CASES</m:mo>
909         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
910         <xsl:apply-templates select="*[position()=3]"/>
911         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
912         <m:mo>OF</m:mo>
913         <xsl:for-each select="m:piecewise/m:piece">
914          <xsl:choose>
915          <xsl:when test="position() != 1">
916           <m:mo stretchy="false">|</m:mo>
917          </xsl:when> 
918          </xsl:choose>
919          <xsl:apply-templates select="./*[2]"/>
920          <m:mo mathcolor="Green">&#x21d2;</m:mo>
921          <xsl:apply-templates select="./*[1]"/>
922         </xsl:for-each>
923         <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
924         <m:mo>END</m:mo>
925        </xsl:otherwise>
926        </xsl:choose>
927       </xsl:when>
928       <!-- FIX -->
929       <xsl:when test="$name='fix'">
930        <xsl:choose>
931        <xsl:when test="$charlength >= $framewidth">
932         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
933          <m:mtr>
934           <m:mtd>
935            <m:mrow>
936             <m:mo>FIX</m:mo>
937             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
938             <m:mi><xsl:value-of select="m:ci"/></m:mi>
939             <m:mo stretchy="false">{</m:mo>
940            </m:mrow>
941           </m:mtd>
942          </m:mtr>
943          <m:mtr>
944           <m:mtd>
945            <m:mrow>
946             <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
947             <m:mtable align="baseline 1" equalrows="false" columnalign="left">
948             <xsl:for-each select="m:bvar"> 
949              <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable>
950              <m:mtr>
951               <m:mtd>
952                <m:mrow>
953                 <m:mi><xsl:value-of select="m:ci"/></m:mi>
954                 <m:mo>:</m:mo>
955                 <xsl:if test="$framewidth > $charlength">
956                  <xsl:apply-templates select="m:type"/>
957                 </xsl:if>
958                </m:mrow>
959               </m:mtd>
960              </m:mtr> 
961              <xsl:if test="$charlength >= $framewidth">
962              <m:mtr>
963               <m:mtd>
964                <m:mrow>
965                 <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
966                 <xsl:apply-templates select="m:type"/>
967                </m:mrow>
968               </m:mtd>
969              </m:mtr>
970              </xsl:if>
971              <m:mtr>
972               <m:mtd>
973                <m:mrow>
974                 <m:mo>:=</m:mo>
975                 <xsl:apply-templates select="following-sibling::*[position()=1]"/>
976                </m:mrow>
977               </m:mtd>
978              </m:mtr> 
979             </xsl:for-each>
980             </m:mtable>
981            </m:mrow>
982           </m:mtd>
983          </m:mtr>
984          <m:mtr>
985           <m:mtd>
986            <m:mrow>
987             <m:mo stretchy="false">}</m:mo>
988            </m:mrow>
989           </m:mtd>
990          </m:mtr>
991         </m:mtable>
992        </xsl:when>
993        <xsl:otherwise>
994         <m:mo>FIX</m:mo>
995         <m:mi><xsl:value-of select="m:ci"/></m:mi>
996         <m:mo stretchy="false">{</m:mo>
997         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
998         <xsl:for-each select="m:bvar"> 
999          <m:mtr>
1000           <m:mtd>
1001            <m:mrow>
1002             <m:mi><xsl:value-of select="m:ci"/></m:mi>
1003             <m:mo>:</m:mo>
1004             <xsl:apply-templates select="m:type"/>
1005             <m:mo>:=</m:mo>
1006             <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
1007             <xsl:if test="position()=last()">
1008              <m:mo stretchy="false">}</m:mo>
1009             </xsl:if>
1010            </m:mrow>
1011           </m:mtd>
1012          </m:mtr>
1013          </xsl:for-each>
1014         </m:mtable>
1015        </xsl:otherwise>
1016        </xsl:choose>
1017       </xsl:when>
1018       <!-- COFIX -->
1019       <xsl:when test="$name='cofix'">
1020        <xsl:choose>
1021        <xsl:when test="$charlength >= $framewidth">
1022         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1023          <m:mtr>
1024           <m:mtd>
1025            <m:mrow>
1026             <m:mo>COFIX</m:mo>
1027             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1028             <m:mi><xsl:value-of select="m:ci"/></m:mi>
1029             <m:mo stretchy="false">{</m:mo>
1030            </m:mrow>
1031           </m:mtd>
1032          </m:mtr>
1033          <m:mtr>
1034           <m:mtd>
1035            <m:mrow>
1036             <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
1037             <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1038             <xsl:for-each select="m:bvar">
1039              <xsl:variable name="charlength"><xsl:apply-templates select="m:type" mode="charcount"><xsl:with-param name="nosibling" select="1"/></xsl:apply-templates></xsl:variable> 
1040              <m:mtr>
1041               <m:mtd>
1042                <m:mrow>
1043                 <m:mi><xsl:value-of select="m:ci"/></m:mi>
1044                 <m:mo>:</m:mo>
1045                 <xsl:if test="$framewidth > $charlength">
1046                  <xsl:apply-templates select="m:type"/>
1047                 </xsl:if>
1048                </m:mrow>
1049               </m:mtd>
1050              </m:mtr> 
1051              <xsl:if test="$charlength >= $framewidth">
1052              <m:mtr>
1053               <m:mtd>
1054                <m:mrow>
1055                 <m:mphantom><m:mtext>:=</m:mtext></m:mphantom>
1056                 <xsl:apply-templates select="m:type"/>
1057                </m:mrow>
1058               </m:mtd>
1059              </m:mtr>
1060              </xsl:if>
1061              <m:mtr>
1062               <m:mtd>
1063                <m:mrow>
1064                 <m:mo>:=</m:mo>
1065                 <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
1066                </m:mrow>
1067               </m:mtd>
1068              </m:mtr>
1069             </xsl:for-each>
1070             </m:mtable>
1071            </m:mrow>
1072           </m:mtd>
1073          </m:mtr>
1074          <m:mtr>
1075           <m:mtd>
1076            <m:mrow>
1077             <m:mo stretchy="false">}</m:mo>
1078            </m:mrow>
1079           </m:mtd>
1080          </m:mtr>
1081         </m:mtable>
1082        </xsl:when>
1083        <xsl:otherwise>
1084         <m:mo>COFIX</m:mo>
1085         <m:mi><xsl:value-of select="m:ci"/></m:mi>
1086         <m:mo stretchy="false">{</m:mo>
1087         <m:mtable align="baseline 1" equalrows="false" columnalign="left">  
1088         <xsl:for-each select="m:bvar"> 
1089          <m:mtr>
1090           <m:mtd>
1091            <m:mrow>
1092             <m:mi><xsl:value-of select="m:ci"/></m:mi>
1093             <m:mo>:</m:mo>
1094             <xsl:apply-templates select="m:type"/>
1095             <m:mo>:=</m:mo>
1096             <xsl:apply-templates select="following-sibling::*[position() = 1]"/>
1097             <xsl:if test="position()=last()">
1098              <m:mo stretchy="false">}</m:mo>
1099             </xsl:if>
1100            </m:mrow>
1101           </m:mtd>
1102          </m:mtr>
1103          </xsl:for-each>
1104         </m:mtable>
1105        </xsl:otherwise>
1106        </xsl:choose>
1107       </xsl:when>
1108       <!-- ***************************************** -->
1109       <!-- *********** PROOF ELEMENTS ************** -->
1110       <!-- ***************************************** -->
1111       <!-- PROOF -->
1112       <xsl:when test="$name='proof'">
1113         <!-- CSC: $explodeall until the annotationHelper can handle mactions -->
1114         <xsl:variable name="test" select="(not($explodeall)) and
1115            (not(preceding-sibling::*[1]/text()='letin1')) and
1116            (not(preceding-sibling::*[1]/text()='rw_step')) and
1117            (not(name(..)='m:lambda'))"/>
1118         <xsl:variable name="hidden_details">
1119          <xsl:if test="$test">
1120           <!-- Details hided (default) -->
1121           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1122            <m:mtr>
1123             <m:mtd>
1124              <m:mrow>
1125               <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
1126               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1127               <!-- the last child is either the expected type, if provided,-->
1128               <!-- or the synthesized type.                                -->
1129               <xsl:apply-templates select="*[position()=last()]"/>
1130               <m:mrow>
1131                <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1132                <m:mtext mathcolor="Green">(explain)</m:mtext>
1133               </m:mrow>
1134              </m:mrow>
1135             </m:mtd>
1136            </m:mtr>
1137           </m:mtable>
1138          </xsl:if>
1139         </xsl:variable>
1140         <xsl:variable name="shown_details">
1141          <!-- Show details -->
1142          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1143           <m:mtr>
1144            <m:mtd>
1145             <m:mrow>
1146              <xsl:apply-templates select="*[position()=2]"/>
1147             </m:mrow>
1148            </m:mtd>
1149           </m:mtr>
1150           <xsl:variable name="hidedetails">
1151             <m:mrow>
1152              <m:mphantom>
1153               <m:mtext>_</m:mtext>
1154              </m:mphantom>
1155              <xsl:if test="$test">
1156               <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
1157              </xsl:if>
1158             </m:mrow>
1159           </xsl:variable>
1160           <m:mtr>
1161            <m:mtd>
1162             <m:mrow>
1163              <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
1164              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1165              <xsl:apply-templates select="*[position()=3]"/>
1166              <xsl:if test="not(*[4])">
1167               <xsl:copy-of select="$hidedetails"/>
1168              </xsl:if>
1169             </m:mrow>
1170            </m:mtd>
1171           </m:mtr>
1172           <xsl:if test="*[4]">
1173            <m:mtr>
1174             <m:mtd>
1175              <m:mrow>
1176               <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
1177               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1178               <xsl:apply-templates select="*[position()=4]"/>
1179               <xsl:copy-of select="$hidedetails"/>
1180              </m:mrow>
1181             </m:mtd>
1182            </m:mtr>
1183           </xsl:if>
1184          </m:mtable>
1185         </xsl:variable>
1186         <xsl:choose>
1187          <xsl:when test="$test">
1188           <m:maction actiontype="toggle">
1189            <xsl:copy-of select="$hidden_details"/>
1190            <xsl:copy-of select="$shown_details"/>
1191           </m:maction>
1192          </xsl:when>
1193          <xsl:otherwise>
1194           <xsl:copy-of select="$shown_details"/>
1195          </xsl:otherwise>
1196         </xsl:choose>
1197       </xsl:when>
1198       <!-- SIDE_PROOF -->
1199       <xsl:when test="$name='side_proof'">
1200         <xsl:variable name="test" select="(not($explodeall))"/>
1201         <xsl:variable name="hidden_details">
1202          <xsl:if test="$test">
1203           <!-- Details hided (default) -->
1204           <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1205            <m:mtr>
1206             <m:mtd>
1207              <m:mrow>
1208               <m:mtext mathcolor="Red">We&#x00a0;can&#x00a0;prove</m:mtext>
1209               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1210               <!-- the last child is either the expected type, if provided,-->
1211               <!-- or the synthesized type.                                -->
1212               <xsl:apply-templates select="*[position()=last()]"/>
1213               <m:mrow>
1214                <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1215                <m:mtext mathcolor="Green">(explain)</m:mtext>
1216               </m:mrow>
1217              </m:mrow>
1218             </m:mtd>
1219            </m:mtr>
1220           </m:mtable>
1221          </xsl:if>
1222         </xsl:variable>
1223         <xsl:variable name="shown_details">
1224          <!-- Show details -->
1225          <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1226           <m:mtr>
1227            <m:mtd>
1228             <m:mrow>
1229              <xsl:apply-templates select="*[position()=2]"/>
1230             </m:mrow>
1231            </m:mtd>
1232           </m:mtr>
1233           <xsl:variable name="hidedetails">
1234             <m:mrow>
1235              <m:mphantom>
1236               <m:mtext>_</m:mtext>
1237              </m:mphantom>
1238              <xsl:if test="$test">
1239               <m:mtext mathcolor="Green">(hide&#x00a0;details)</m:mtext>
1240              </xsl:if>
1241             </m:mrow>
1242           </xsl:variable>
1243           <m:mtr>
1244            <m:mtd>
1245             <m:mrow>
1246              <m:mtext mathcolor="Red">we&#x00a0;proved</m:mtext>
1247              <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1248              <xsl:apply-templates select="*[position()=3]"/>
1249              <xsl:if test="not(*[4])">
1250               <xsl:copy-of select="$hidedetails"/>
1251              </xsl:if>
1252             </m:mrow>
1253            </m:mtd>
1254           </m:mtr>
1255           <xsl:if test="*[4]">
1256            <m:mtr>
1257             <m:mtd>
1258              <m:mrow>
1259               <m:mtext mathcolor="Red">that&#x00a0;is&#x00a0;equivalent&#x00a0;to</m:mtext>
1260               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1261               <xsl:apply-templates select="*[position()=4]"/>
1262               <xsl:copy-of select="$hidedetails"/>
1263              </m:mrow>
1264             </m:mtd>
1265            </m:mtr>
1266           </xsl:if>
1267          </m:mtable>
1268         </xsl:variable>
1269         <xsl:choose>
1270          <xsl:when test="$test">
1271           <m:maction actiontype="toggle">
1272            <xsl:copy-of select="$hidden_details"/>
1273            <xsl:copy-of select="$shown_details"/>
1274           </m:maction>
1275          </xsl:when>
1276          <xsl:otherwise>
1277           <xsl:copy-of select="$shown_details"/>
1278          </xsl:otherwise>
1279         </xsl:choose>
1280       </xsl:when>
1281       <!-- LETIN1 -->
1282       <xsl:when test="$name='letin1'">
1283         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1284          <m:mtr>
1285           <m:mtd>
1286            <m:mrow>
1287             <xsl:apply-templates select="*[position()=2]"/>
1288            </m:mrow>
1289           </m:mtd>
1290          </m:mtr>
1291          <m:mtr>
1292           <m:mtd>
1293            <m:mrow>
1294             <xsl:apply-templates select="*[position()=3]"/>
1295            </m:mrow>
1296           </m:mtd>
1297          </m:mtr>
1298         </m:mtable>
1299       </xsl:when>
1300       <xsl:when test="$name='by_induction'">
1301        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1302         <m:mtr>
1303          <m:mtd>
1304           <m:mrow>
1305            <m:mtext mathcolor="Red">We&#x00a0;prove</m:mtext>
1306            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1307            <xsl:apply-templates select="../*[3]"/>
1308           </m:mrow>
1309          </m:mtd>
1310         </m:mtr>
1311         <m:mtr>
1312          <m:mtd>
1313           <m:mrow>
1314            <m:mtext mathcolor="Red">by&#x00a0;induction&#x00a0;on</m:mtext>
1315            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1316            <xsl:apply-templates 
1317             select="*[position()=last()]/*[position()=last()]"/>
1318           </m:mrow>
1319          </m:mtd>
1320         </m:mtr>
1321         <m:mtr>
1322          <m:mtd>
1323           <m:mrow>
1324            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1325             <xsl:for-each select="*[position()>3 and not(position()=last())]">
1326              <m:mtr>
1327               <m:mtd>
1328                <m:mrow>
1329                 <xsl:apply-templates select="."/>
1330                </m:mrow>
1331               </m:mtd>
1332              </m:mtr>
1333             </xsl:for-each>
1334            </m:mtable>
1335           </m:mrow>
1336          </m:mtd>
1337         </m:mtr>
1338        </m:mtable>
1339       </xsl:when>
1340       <!-- inductive_case -->
1341       <xsl:when test="$name='inductive_case'">
1342        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1343         <m:mtr>
1344          <m:mtd>
1345           <m:mrow>
1346            <m:mtext mathcolor="Red">Case</m:mtext>
1347            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1348            <xsl:apply-templates select="*[2]"/>
1349           </m:mrow>
1350          </m:mtd>
1351         </m:mtr>
1352         <m:mtr>
1353          <m:mtd>
1354           <m:mrow>
1355            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1356            <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1357             <xsl:if test="*[3]/*[position()>1]">
1358              <m:mtr>
1359               <m:mtd>
1360                <m:mrow>
1361                 <m:mtext mathcolor="Red">By&#x00a0;induction&#x00a0;hypothesis,&#x00a0;we&#x00a0;have:</m:mtext>
1362                </m:mrow>
1363               </m:mtd>
1364              </m:mtr>
1365              <m:mtr>
1366               <m:mtd>
1367                <m:mrow>
1368                 <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1369                 <xsl:for-each select="*[3]/*[position()>1]">
1370                  <m:mo stretchy="false">(</m:mo>
1371                  <xsl:apply-templates select="m:ci"/>
1372                  <m:mo stretchy="false">) </m:mo>
1373                  <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1374                  <xsl:apply-templates select="m:type"/>
1375                 </xsl:for-each>
1376                </m:mrow>
1377               </m:mtd>
1378              </m:mtr>
1379             </xsl:if>
1380             <m:mtr>
1381              <m:mtd>
1382               <m:mrow>
1383                <xsl:apply-templates select="*[4]"/>
1384               </m:mrow>
1385              </m:mtd>
1386             </m:mtr>
1387            </m:mtable>
1388           </m:mrow>
1389          </m:mtd>
1390         </m:mtr>
1391        </m:mtable>
1392       </xsl:when>
1393       <!-- case_lhs  -->
1394       <xsl:when test="$name='case_lhs'">
1395        <m:mrow>
1396         <xsl:choose>
1397          <xsl:when test="count(*)=2">
1398           <xsl:apply-templates select="*[2]"/>
1399          </xsl:when>
1400          <xsl:otherwise>
1401           <m:mo stretchy="false">(</m:mo>
1402           <xsl:apply-templates select="*[2]"/>
1403           <xsl:for-each select="m:bvar">
1404            <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1405            <xsl:apply-templates select="*[1]"/>
1406            <m:mtext>:</m:mtext>
1407            <xsl:apply-templates select="m:type/*[1]"/>
1408           </xsl:for-each>
1409           <m:mo stretchy="false">)</m:mo>
1410          </xsl:otherwise>
1411         </xsl:choose>
1412        </m:mrow>
1413       </xsl:when>
1414       <!-- false_ind  -->
1415       <xsl:when test="$name='false_ind'">
1416        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1417         <m:mtr>
1418          <m:mtd>
1419           <m:mrow>
1420            <xsl:apply-templates select="*[3]"/>
1421           </m:mrow>
1422          </m:mtd>
1423         </m:mtr>
1424         <m:mtr>
1425          <m:mtd>
1426           <m:mrow>
1427            <m:mtext mathcolor="Red">Contradiction.</m:mtext>
1428           </m:mrow>
1429          </m:mtd>
1430         </m:mtr>
1431        </m:mtable>
1432       </xsl:when>
1433       <!-- LET-IN -->
1434       <xsl:when test="$name='letin'">
1435         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1436          <!-- <xsl:for-each select="APPLY[m:csymbol and (string(m:csymbol)='let')]"> -->
1437          <xsl:for-each select="*[(last() > position()) and (position()>1)]">
1438          <m:mtr>
1439           <m:mtd>
1440            <m:mrow>
1441             <xsl:apply-templates select="."/>
1442            </m:mrow>
1443           </m:mtd>
1444          </m:mtr>
1445          </xsl:for-each>
1446          <m:mtr>
1447           <m:mtd>
1448            <m:mrow>
1449             <xsl:apply-templates select="*[position()=last()]"/>
1450            </m:mrow>
1451           </m:mtd>
1452          </m:mtr>
1453         </m:mtable>
1454       </xsl:when>
1455       <!-- LET -->
1456       <xsl:when test="$name='let'">
1457        <m:mtext>(</m:mtext>
1458        <xsl:apply-templates select="m:ci"/>
1459        <m:mtext>) </m:mtext>
1460        <xsl:apply-templates select="*[3]"/>
1461       </xsl:when>
1462       <!-- RW_STEP -->
1463       <xsl:when test="$name='rw_step'">
1464         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1465          <m:mtr>
1466           <m:mtd>
1467            <m:mrow>
1468             <xsl:choose>
1469              <xsl:when test="name(*[2])='m:apply'">
1470               <xsl:apply-templates select="*[2]"/>
1471              </xsl:when>
1472              <xsl:otherwise>
1473               <m:mtext>Consider</m:mtext>
1474               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1475               <xsl:apply-templates select="*[2]"/>
1476              </xsl:otherwise>
1477             </xsl:choose>
1478            </m:mrow>
1479           </m:mtd>
1480          </m:mtr>
1481          <m:mtr>
1482           <m:mtd>
1483            <m:mrow>
1484             <m:mtext>Rewrite</m:mtext>
1485             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1486             <xsl:apply-templates select="*[3]"/>
1487             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1488             <m:mtext>with</m:mtext>
1489             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1490             <xsl:apply-templates select="*[4]"/>
1491             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1492             <m:mtext>by</m:mtext>
1493             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1494             <xsl:apply-templates select="*[5]"/>
1495            </m:mrow>
1496           </m:mtd>
1497          </m:mtr>
1498         </m:mtable>
1499       </xsl:when>
1500       <!-- not existing any more
1501       <xsl:when test="$name='thread'">
1502         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1503          <m:mtr>
1504           <m:mtd>
1505            <m:mrow>
1506             <xsl:choose>
1507              <xsl:when test="name(*[last()])='m:apply'">
1508               <xsl:apply-templates select="*[last()]"/>
1509              </xsl:when>
1510              <xsl:otherwise>
1511               <m:mtext>Consider</m:mtext>
1512               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1513               <xsl:apply-templates select="*[last()]"/>
1514              </xsl:otherwise>
1515             </xsl:choose>
1516            </m:mrow>
1517           </m:mtd>
1518          </m:mtr>
1519          <xsl:apply-templates mode="thread" select="*[(last()-2)]"/> 
1520         </m:mtable>
1521       </xsl:when>
1522       --> 
1523       <!-- REWRITE_AND_APPLY -->
1524       <xsl:when test="$name='rewrite_and_apply'">
1525         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1526          <m:mtr>
1527           <m:mtd>
1528            <m:mrow>
1529             <xsl:apply-templates select="*[2]"/>
1530            </m:mrow>
1531           </m:mtd>
1532          </m:mtr>
1533          <m:mtr>
1534           <m:mtd>
1535            <m:mrow>
1536             <m:mtext>Then&#x00a0;apply&#x00a0;it&#x00a0;to</m:mtext>
1537             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1538             <xsl:apply-templates select="*[position()>2]"/>
1539            </m:mrow>
1540           </m:mtd>
1541          </m:mtr>
1542        </m:mtable>
1543       </xsl:when>
1544       <!-- AND_IND -->
1545       <xsl:when test="$name='and_ind'">
1546         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1547          <m:mtr>
1548           <m:mtd>
1549            <m:mrow>
1550             <xsl:choose>
1551              <xsl:when test="name(*[2])='m:apply'">
1552               <xsl:apply-templates select="*[2]"/>
1553              </xsl:when>
1554              <xsl:otherwise>
1555               <m:mtext>Consider</m:mtext>
1556               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1557               <xsl:apply-templates select="*[2]"/>
1558              </xsl:otherwise>
1559             </xsl:choose>
1560            </m:mrow>
1561           </m:mtd>
1562          </m:mtr>
1563          <m:mtr>
1564           <m:mtd>
1565            <m:mrow>
1566             <m:mtext>In&#x00a0;particular,&#x00a0;we&#x00a0;have</m:mtext>
1567            </m:mrow>
1568           </m:mtd>
1569          </m:mtr>
1570          <m:mtr>
1571           <m:mtd>
1572            <m:mrow>
1573             <m:mtext>(</m:mtext>
1574             <xsl:apply-templates select="*[3]"/>
1575             <m:mtext>)</m:mtext>
1576             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1577             <xsl:apply-templates select="*[4]"/>
1578             </m:mrow>
1579           </m:mtd>
1580          </m:mtr>
1581          <m:mtr>
1582           <m:mtd>
1583            <m:mrow>
1584             <m:mtext>(</m:mtext>
1585             <xsl:apply-templates select="*[5]"/>
1586             <m:mtext>)</m:mtext>
1587             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1588             <xsl:apply-templates select="*[6]"/>
1589             </m:mrow>
1590           </m:mtd>
1591          </m:mtr>
1592          <m:mtr>
1593           <m:mtd>
1594            <m:mrow>
1595             <xsl:apply-templates select="*[7]"/>
1596            </m:mrow>
1597           </m:mtd>
1598          </m:mtr>
1599         </m:mtable>
1600       </xsl:when>
1601       <!-- full_or_ind -->
1602       <xsl:when test="$name='full_or_ind'">
1603         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1604          <m:mtr>
1605           <m:mtd>
1606            <m:mrow>
1607             <xsl:choose>
1608              <xsl:when test="name(*[2])='m:apply'">
1609               <xsl:apply-templates select="*[2]"/>
1610              </xsl:when>
1611              <xsl:otherwise>
1612               <m:mtext>Consider</m:mtext>
1613               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1614               <xsl:apply-templates select="*[2]"/>
1615              </xsl:otherwise>
1616             </xsl:choose>
1617            </m:mrow>
1618           </m:mtd>
1619          </m:mtr>
1620          <m:mtr>
1621           <m:mtd>
1622            <m:mrow>
1623             <m:mtext>We&#x00a0;proceed&#x00a0;by&#x00a0;cases&#x00a0;to&#x00a0;prove</m:mtext>
1624             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1625             <xsl:apply-templates select="*[3]"/>
1626            </m:mrow>
1627           </m:mtd>
1628          </m:mtr>
1629          <m:mtr>
1630           <m:mtd>
1631            <m:mrow>
1632             <m:mtext>Left:&#x00a0;suppose</m:mtext>
1633             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1634             <m:mo stretchy="false">(</m:mo>
1635             <xsl:apply-templates select="*[4]/m:bvar/m:ci"/>
1636             <m:mo stretchy="false">)</m:mo>
1637             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1638             <xsl:apply-templates select="*[4]/m:bvar/m:type/*[1]"/>
1639            </m:mrow>
1640           </m:mtd>
1641          </m:mtr>
1642          <m:mtr>
1643           <m:mtd>
1644            <m:mrow>
1645             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1646             <xsl:apply-templates select="*[4]/*[3]"/>
1647            </m:mrow>
1648           </m:mtd>
1649          </m:mtr>
1650          <m:mtr>
1651           <m:mtd>
1652            <m:mrow>
1653             <m:mtext>Right:&#x00a0;suppose</m:mtext>
1654             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1655             <m:mo stretchy="false">(</m:mo>
1656             <xsl:apply-templates select="*[5]/m:bvar/m:ci"/>
1657             <m:mo stretchy="false">)</m:mo>
1658             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1659             <xsl:apply-templates select="*[5]/m:bvar/m:type/*[1]"/>
1660            </m:mrow>
1661           </m:mtd>
1662          </m:mtr>
1663          <m:mtr>
1664           <m:mtd>
1665            <m:mrow>
1666             <xsl:apply-templates select="*[5]/*[3]"/>
1667            </m:mrow>
1668           </m:mtd>
1669          </m:mtr>
1670         </m:mtable>
1671       </xsl:when>
1672       <!-- OR_IND -->
1673       <xsl:when test="$name='or_ind'">
1674         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1675          <m:mtr>
1676           <m:mtd>
1677            <m:mrow>
1678             <xsl:choose>
1679              <xsl:when test="name(*[2])='m:apply'">
1680               <xsl:apply-templates select="*[2]"/>
1681              </xsl:when>
1682              <xsl:otherwise>
1683               <m:mtext>Consider</m:mtext>
1684               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1685               <xsl:apply-templates select="*[2]"/>
1686              </xsl:otherwise>
1687             </xsl:choose>
1688            </m:mrow>
1689           </m:mtd>
1690          </m:mtr>
1691          <m:mtr>
1692           <m:mtd>
1693            <m:mrow>
1694             <m:mtext>We&#x00a0;prove</m:mtext>
1695             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1696             <xsl:apply-templates select="*[3]"/>
1697             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1698             <m:mtext>by&#x00a0;cases:</m:mtext>
1699            </m:mrow>
1700           </m:mtd>
1701          </m:mtr>
1702          <m:mtr>
1703           <m:mtd>
1704            <m:mrow>
1705             <m:mtext>Left</m:mtext>
1706             <xsl:apply-templates select="*[4]"/>
1707            </m:mrow>
1708           </m:mtd>
1709          </m:mtr>
1710          <m:mtr>
1711           <m:mtd>
1712            <m:mrow>
1713             <m:mtext>Right</m:mtext>
1714             <xsl:apply-templates select="*[5]"/>
1715            </m:mrow>
1716           </m:mtd>
1717          </m:mtr>
1718         </m:mtable>
1719       </xsl:when>
1720       <!-- EX_IND -->
1721       <xsl:when test="$name='ex_ind'">
1722         <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1723          <m:mtr>
1724           <m:mtd>
1725            <m:mrow>
1726             <xsl:choose>
1727              <xsl:when test="name(*[2])='m:apply'">
1728               <xsl:apply-templates select="*[2]"/>
1729              </xsl:when>
1730              <xsl:otherwise>
1731               <m:mtext>Consider</m:mtext>
1732               <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1733               <xsl:apply-templates select="*[2]"/>
1734              </xsl:otherwise>
1735             </xsl:choose>
1736            </m:mrow>
1737           </m:mtd>
1738          </m:mtr>
1739          <m:mtr>
1740           <m:mtd>
1741            <m:mrow>
1742             <m:mtext>Let</m:mtext>
1743             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1744             <xsl:apply-templates select="*[3]"/>
1745             <m:mtext>:</m:mtext>
1746             <xsl:apply-templates select="*[4]"/>
1747             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1748             <m:mtext>such&#x00a0;that</m:mtext>
1749             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1750             <m:mtext>(</m:mtext>
1751              <xsl:apply-templates select="*[5]"/>
1752             <m:mtext>)</m:mtext>
1753             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1754             <xsl:apply-templates select="*[6]"/>
1755            </m:mrow>
1756           </m:mtd>
1757          </m:mtr>
1758          <m:mtr>
1759           <m:mtd>
1760            <m:mrow>
1761             <xsl:apply-templates select="*[7]"/>
1762            </m:mrow>
1763           </m:mtd>
1764          </m:mtr>
1765         </m:mtable>
1766       </xsl:when>
1767       <!-- EQ_CHAIN -->
1768       <xsl:when test="$name='eq_chain'">
1769        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1770         <m:mtr>
1771          <m:mtd>
1772           <m:mrow>
1773            <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;equality&#x00a0;chain:</m:mtext>
1774           </m:mrow>
1775          </m:mtd>
1776         </m:mtr>
1777         <xsl:for-each select="*[position() mod 2 = 0]">
1778         <xsl:variable name="pos" select="position()"/>
1779         <m:mtr>
1780          <m:mtd>
1781           <m:mrow>
1782            <xsl:choose>
1783            <xsl:when test="$pos = 1">
1784             <xsl:apply-templates select="."/>
1785             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1786             <m:mo>=</m:mo>
1787            </xsl:when>
1788            <xsl:otherwise>
1789             <m:mo>=</m:mo>
1790             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1791             <xsl:apply-templates select="."/>
1792            </xsl:otherwise>
1793            </xsl:choose>
1794           </m:mrow>
1795          </m:mtd>
1796         </m:mtr>
1797         <xsl:if test="$pos != last()">
1798         <m:mtr>
1799          <m:mtd>
1800           <m:mrow>
1801            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
1802            <xsl:apply-templates select="../*[position()=2*$pos +1]"/>
1803           </m:mrow>
1804          </m:mtd>
1805         </m:mtr>
1806         </xsl:if>
1807         </xsl:for-each>
1808        </m:mtable>
1809       </xsl:when>
1810       <!-- DISEQ_CHAIN -->
1811       <xsl:when test="$name='diseq_chain'">
1812        <m:mtable align="baseline 1" equalrows="false" columnalign="left">
1813         <m:mtr>
1814          <m:mtd>
1815           <m:mrow>
1816            <m:mtext mathcolor="Red">We&#x00a0;have&#x00a0;the&#x00a0;following&#x00a0;disequality&#x00a0;chain:</m:mtext>
1817           </m:mrow>
1818          </m:mtd>
1819         </m:mtr>
1820         <xsl:for-each select="*[position() mod 3 = 2]">
1821         <xsl:variable name="pos" select="position()"/>
1822         <m:mtr>
1823          <m:mtd>
1824           <m:mrow>
1825            <xsl:choose>
1826            <xsl:when test="$pos = 1">
1827             <xsl:apply-templates select="."/>
1828             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1829             <mo><xsl:apply-templates select="../*[position()=3*$pos]"/></mo>
1830            </xsl:when>
1831            <xsl:otherwise>
1832             <mo><xsl:apply-templates select="../*[position()=3*($pos - 1)]"/></mo>
1833             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1834             <xsl:apply-templates select="."/>
1835            </xsl:otherwise>
1836            </xsl:choose>
1837           </m:mrow>
1838          </m:mtd>
1839         </m:mtr>
1840         <xsl:if test="$pos != last()">
1841         <m:mtr>
1842          <m:mtd>
1843           <m:mrow>
1844            <m:mphantom><m:mtext>__</m:mtext></m:mphantom>
1845            <xsl:apply-templates select="../*[position()=3*$pos +1]"/>
1846           </m:mrow>
1847          </m:mtd>
1848         </m:mtr>
1849         </xsl:if>
1850         </xsl:for-each>
1851        </m:mtable>
1852       </xsl:when>
1853       <!-- ***************************************** -->
1854       <!-- *********** NOTATIONS ******************* -->
1855       <!-- ***************************************** -->
1856       <!-- subst -->
1857       <xsl:when test="$name='subst'">
1858         <xsl:apply-templates select="*[3]"/>
1859 <!-- no font for ApplyFunction: <m:mo>&#xe8a0;</m:mo> -->
1860         <m:mo stretchy="false">[</m:mo>
1861         <xsl:apply-templates select="*[4]"/>
1862         <m:mo mathcolor="Green">
1863          <xsl:if test="$id != ''">
1864           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1865          </xsl:if>&#8592;</m:mo>
1866         <xsl:apply-templates select="*[2]"/>
1867         <m:mo stretchy="false">]</m:mo>
1868       </xsl:when>
1869       <!-- lift -->
1870       <xsl:when test="$name='lift'">
1871         <m:msup>
1872          <m:mo mathcolor="Green">
1873           <xsl:if test="$id != ''">
1874            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1875           </xsl:if>&#8593;</m:mo>
1876          <xsl:apply-templates select="*[2]"/>
1877         </m:msup>
1878         <m:mrow>
1879          <m:mo stretchy="false">(</m:mo>
1880          <xsl:apply-templates select="*[3]"/>
1881          <m:mo stretchy="false">)</m:mo>
1882         </m:mrow>
1883       </xsl:when>
1884       <!-- lift_with_base -->
1885       <xsl:when test="$name='lift_with_base'">
1886         <m:msubsup>
1887          <m:mo mathcolor="Green">
1888           <xsl:if test="$id != ''">
1889            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1890           </xsl:if>&#8593;</m:mo>
1891          <xsl:apply-templates select="*[3]"/>
1892          <xsl:apply-templates select="*[4]"/>
1893         </m:msubsup>
1894         <m:mrow>
1895          <m:mo stretchy="false">(</m:mo>
1896          <xsl:apply-templates select="*[2]"/>
1897          <m:mo stretchy="false">)</m:mo>
1898         </m:mrow>       
1899       </xsl:when>
1900       <!-- beta_red1 -->
1901       <xsl:when test="$name='beta_red1'">
1902         <xsl:apply-templates select="*[2]"/>
1903         <m:munder>
1904          <m:mo mathcolor="Green">
1905           <xsl:if test="$id != ''">
1906            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1907           </xsl:if>&#8594;</m:mo>
1908           <m:mi mathcolor="Green">&#946;</m:mi>
1909         </m:munder>
1910         <xsl:apply-templates select="*[3]"/>
1911       </xsl:when>
1912       <!-- beta_red -->
1913       <xsl:when test="$name='beta_red'">
1914         <xsl:apply-templates select="*[2]"/>
1915         <m:munderover>
1916          <m:mo mathcolor="Green">
1917           <xsl:if test="$id != ''">
1918            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1919           </xsl:if>&#8594;</m:mo>
1920           <m:mi mathcolor="Green">&#946;</m:mi>
1921           <m:mi mathcolor="Green">*</m:mi>
1922         </m:munderover>
1923         <xsl:apply-templates select="*[3]"/>
1924       </xsl:when>
1925       <!-- par_beta_red1 -->
1926       <xsl:when test="$name='par_beta_red1'">
1927         <xsl:apply-templates select="*[2]"/>
1928         <m:munder>
1929          <m:mo mathcolor="Green">
1930           <xsl:if test="$id != ''">
1931            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1932           </xsl:if>&#8658;</m:mo>
1933           <m:mi mathcolor="Green">&#946;</m:mi>
1934         </m:munder>
1935         <xsl:apply-templates select="*[3]"/>
1936       </xsl:when>
1937       <!-- par_beta_red -->
1938       <xsl:when test="$name='par_beta_red'">
1939         <xsl:apply-templates select="*[2]"/>
1940         <m:munderover>
1941          <m:mo mathcolor="Green">
1942           <xsl:if test="$id != ''">
1943            <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1944           </xsl:if>&#8658;</m:mo>
1945           <m:mi mathcolor="Green">&#946;</m:mi>
1946           <m:mi mathcolor="Green">*</m:mi>
1947         </m:munderover>
1948         <xsl:apply-templates select="*[3]"/>
1949       </xsl:when>
1950       <!-- forgetful -->
1951       <xsl:when test="$name='forgetful'">
1952        <m:mfenced open="|" close="|">
1953         <xsl:if test="$id != ''">
1954          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1955         </xsl:if>
1956         <xsl:apply-templates select="*[2]"/>
1957        </m:mfenced>
1958       </xsl:when>
1959       <!-- isomorphic -->
1960       <xsl:when test="$name='isomorphic'">
1961         <xsl:apply-templates select="*[2]"/>
1962         <m:mo mathcolor="Green">
1963          <xsl:if test="$id != ''">
1964           <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1965          </xsl:if>&#8773;</m:mo>
1966         <xsl:apply-templates select="*[3]"/>
1967       </xsl:when>
1968       <!-- interp -->
1969       <xsl:when test="$name='forgetful'">
1970        <m:mfenced open="[" close="]">
1971         <xsl:if test="$id != ''">
1972          <xsl:attribute name="xref"><xsl:value-of select="$id"/></xsl:attribute>
1973         </xsl:if>
1974         <xsl:apply-templates select="*[2]"/>
1975        </m:mfenced>
1976       </xsl:when> 
1977
1978       <!-- ERROR -->
1979       <xsl:otherwise>
1980        <m:mi>ERROR</m:mi>
1981       </xsl:otherwise>
1982      </xsl:choose>
1983     </m:mrow>
1984 </xsl:template>
1985
1986 <!-- Il modo Thread non esiste piu' 
1987 <xsl:template match="*" mode="thread">
1988  <xsl:variable name="name"><xsl:value-of select="following-sibling::*[position()=1]/m:csymbol"/></xsl:variable>
1989  <xsl:choose>
1990   <xsl:when test="$name='rw_step'">
1991          <m:mtr>
1992           <m:mtd>
1993            <m:mrow>
1994             <m:mtext>Rewrite</m:mtext>
1995             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1996             <xsl:apply-templates select="following-sibling::*[position()=1]/*[2]"/>
1997             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
1998             <m:mtext>with</m:mtext>
1999             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
2000             <xsl:apply-templates select="following-sibling::*[position()=1]/*[3]"/>
2001             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
2002             <m:mtext>by</m:mtext>
2003             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
2004             <xsl:apply-templates select="following-sibling::*[position()=1]/*[4]"/>
2005            </m:mrow>
2006           </m:mtd>
2007          </m:mtr>
2008          <m:mtr>
2009           <m:mtd>
2010            <m:mrow>
2011             <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
2012             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
2013             <xsl:apply-templates select="."/>
2014            </m:mrow>
2015           </m:mtd>
2016          </m:mtr>
2017    </xsl:when>
2018    <xsl:otherwise>
2019          <m:mtr>
2020           <m:mtd>
2021            <m:mrow>
2022             <xsl:apply-templates select="following-sibling::*[position()=1]"/>
2023            </m:mrow>
2024           </m:mtd>
2025          </m:mtr>
2026          <m:mtr>
2027           <m:mtd>
2028            <m:mrow>
2029             <m:mtext mathcolor="Red">we&#x00a0;get</m:mtext>
2030             <m:mphantom><m:mtext>_</m:mtext></m:mphantom>
2031             <xsl:apply-templates select="."/>
2032            </m:mrow>
2033           </m:mtd>
2034          </m:mtr>
2035     </xsl:otherwise>
2036    </xsl:choose>
2037          <xsl:apply-templates mode="thread" select="preceding-sibling::*[position()=2]"/>
2038 </xsl:template>
2039 -->
2040
2041 <!-- LAMBDA -->
2042
2043 <xsl:template match="m:lambda">
2044     <xsl:variable name="charlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"/></xsl:variable>
2045     <m:mrow>
2046      <xsl:if test="@id">
2047       <xsl:attribute name="xref">
2048        <xsl:value-of select="@id"/>
2049       </xsl:attribute>
2050      </xsl:if>
2051      <xsl:choose>
2052      <xsl:when test="$charlength >= $framewidth">
2053       <m:mtable align="baseline 1" equalrows="false" columnalign="left">
2054         <m:mtr>
2055           <m:mtd>
2056            <m:mrow>
2057             <m:mo mathcolor="Red">&#x03bb;</m:mo>
2058             <xsl:apply-templates select="m:bvar"/>
2059            </m:mrow>
2060           </m:mtd>
2061          </m:mtr>
2062        <m:mtr>
2063         <m:mtd>
2064          <m:mrow>
2065           <m:mo>.</m:mo>
2066           <xsl:apply-templates select="*[position()=2]"/>
2067          </m:mrow>
2068         </m:mtd>
2069        </m:mtr>
2070       </m:mtable>
2071      </xsl:when>
2072      <xsl:otherwise>
2073       <m:mo mathcolor="Red">&#x03bb;</m:mo>
2074       <xsl:apply-templates select="m:bvar/m:ci"/>
2075       <m:mo>:</m:mo>
2076       <xsl:apply-templates select="m:bvar/m:type"/>
2077       <m:mo>.</m:mo>
2078       <xsl:apply-templates select="*[position()=2]"/>
2079      </xsl:otherwise>
2080      </xsl:choose>
2081     </m:mrow>
2082 </xsl:template>
2083
2084
2085 <!--**********************-->
2086 <!--       COUNTING       -->
2087 <!--**********************-->
2088
2089 <xsl:template match="m:cn|m:and|m:or|m:not|m:exists|m:eq|m:lt|m:leq|m:gt|m:geq
2090  |m:in|m:notin|m:intersect|m:union|m:subset|m:prsubset|m:card|m:setdiff
2091  |m:plus|m:minus|m:times" mode="charcount">
2092 <xsl:param name="incurrent_length" select="0"/> 
2093     <xsl:choose>
2094     <xsl:when test="$framewidth > ($incurrent_length + 3 + string-length())">
2095      <xsl:variable name="siblength">
2096       <xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount">
2097        <xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/>
2098       </xsl:apply-templates>
2099      </xsl:variable>
2100      <xsl:choose>
2101      <xsl:when test="string($siblength) = &quot;&quot;">
2102       <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
2103      </xsl:when>
2104      <xsl:otherwise>
2105       <xsl:value-of select="number($siblength)"/>
2106      </xsl:otherwise>
2107      </xsl:choose>
2108     </xsl:when>
2109     <xsl:otherwise>
2110      <xsl:value-of select="$incurrent_length + 3 + string-length()"/>
2111     </xsl:otherwise>
2112     </xsl:choose>
2113 </xsl:template>
2114
2115 <xsl:template match="m:ci|m:csymbol" mode="charcount">
2116 <xsl:param name="incurrent_length" select="0"/> 
2117 <xsl:param name="nosibling" select="0"/>
2118     <xsl:choose>
2119     <xsl:when test="$framewidth > ($incurrent_length + string-length()) and ($nosibling = 0)">
2120      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length + string-length()"/></xsl:apply-templates></xsl:variable>
2121      <xsl:choose>
2122      <xsl:when test="string($siblength) = &quot;&quot;">
2123       <xsl:value-of select="$incurrent_length + string-length()"/>
2124      </xsl:when>
2125      <xsl:otherwise>
2126       <xsl:value-of select="number($siblength)"/>
2127      </xsl:otherwise>
2128      </xsl:choose>
2129     </xsl:when>
2130     <xsl:otherwise>
2131      <xsl:value-of select="$incurrent_length + string-length()"/>
2132     </xsl:otherwise>
2133     </xsl:choose>
2134 </xsl:template> 
2135
2136 <xsl:template match="*" mode="charcount">
2137 <xsl:param name="incurrent_length" select="0"/>
2138 <xsl:param name="nosibling" select="0"/>
2139  <xsl:choose>
2140   <xsl:when test="count(child::*) = 0">
2141    <!-- tremendous bug fixed. An empty element can still have siblings!!! -->
2142    <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/></xsl:apply-templates></xsl:variable>
2143    <xsl:choose>
2144     <xsl:when test="string($siblength) = &quot;&quot;">
2145      <xsl:value-of select="$incurrent_length"/>
2146     </xsl:when>
2147     <xsl:otherwise>
2148       <xsl:value-of select="number($siblength)"/>
2149     </xsl:otherwise>
2150    </xsl:choose>
2151   </xsl:when>
2152   <xsl:otherwise>
2153     <xsl:variable name="childlength"><xsl:apply-templates select="*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$incurrent_length"/><xsl:with-param name="nosibling" select="0"/></xsl:apply-templates></xsl:variable>
2154     <xsl:choose>
2155     <xsl:when test="$framewidth > number($childlength) and ($nosibling = 0)">
2156      <xsl:variable name="siblength"><xsl:apply-templates select="following-sibling::*[position()=1]" mode="charcount"><xsl:with-param name="incurrent_length" select="$childlength"/></xsl:apply-templates></xsl:variable>
2157      <xsl:choose>
2158      <xsl:when test="string($siblength) = &quot;&quot;">
2159       <xsl:value-of select="number($childlength)"/>
2160      </xsl:when>
2161      <xsl:otherwise>
2162       <xsl:value-of select="number($siblength)"/>
2163      </xsl:otherwise>
2164      </xsl:choose>
2165     </xsl:when>
2166     <xsl:otherwise>
2167      <xsl:value-of select="number($childlength)"/>
2168     </xsl:otherwise>
2169     </xsl:choose>
2170   </xsl:otherwise>
2171  </xsl:choose>
2172 </xsl:template>
2173
2174 </xsl:stylesheet> 
2175