--- /dev/null
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:m="http://www.w3.org/1998/Math/MathML">
+
+<xsl:include href="nuprl_proof.xsl"/>
+<xsl:include href="nuprl_abstract.xsl"/>
+<xsl:include href="nuprl_rules.xsl"/>
+
+<!-- NuPrl Term -->
+<xsl:template match="var">
+ <m:ci>
+ <xsl:value-of select="@val"/>
+ </m:ci>
+</xsl:template>
+
+
+<xsl:template match="function">
+ <xsl:choose>
+ <xsl:when test="type_of">
+ <xsl:choose>
+ <xsl:when test="type_of/@var=""">
+ <m:apply>
+ <m:csymbol>arrow</m:csymbol>
+ <xsl:apply-templates select="type_of/*"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>prod</m:csymbol>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="type_of/@var"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="type_of/*"/>
+ </m:type>
+ </m:bvar>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:apply>
+ <m:csymbol>arrow</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="lambda">
+ <m:lambda>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="@binder"/>
+ </m:ci>
+ </m:bvar>
+ <xsl:apply-templates/>
+ </m:lambda>
+</xsl:template>
+
+
+<xsl:template match="apply">
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="product">
+ <m:apply>
+ <xsl:choose>
+ <xsl:when test="type_of">
+ <xsl:choose>
+ <xsl:when test="type_of/@var=""">
+ <m:csymbol>product_ind</m:csymbol>
+ <m:type>
+ <xsl:apply-templates select="type_of/*"/>
+ </m:type>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:csymbol>product</m:csymbol>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="type_of/@var"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="type_of/*"/>
+ </m:type>
+ </m:bvar>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:csymbol>product_ind</m:csymbol>
+ <m:type>
+ <xsl:apply-templates select="*[1]"/>
+ </m:type>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="pair">
+ <m:apply>
+ <m:csymbol>pair</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="spread">
+ <m:apply>
+ <m:csymbol>mutcase</m:csymbol>
+ <m:csymbol>NONE</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <m:piecewise>
+ <m:piece>
+ <xsl:apply-templates select="*[4]"/>
+ <m:apply>
+ <m:csymbol>pair</m:csymbol>
+ <xsl:apply-templates select="binder[1]"/>
+ <xsl:apply-templates select="binder[2]"/>
+ </m:apply>
+ </m:piece>
+ </m:piecewise>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="union">
+ <m:apply>
+ <m:csymbol>union</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="inl">
+ <m:apply>
+ <m:csymbol>inl</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="inr">
+ <m:apply>
+ <m:csymbol>inr</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="decide">
+ <m:apply>
+ <m:csymbol>mutcase</m:csymbol>
+ <m:csymbol>NONE</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <m:piecewise>
+ <m:piece>
+ <xsl:apply-templates select="*[3]"/>
+ <m:apply>
+ <m:csymbol>inl</m:csymbol>
+ <xsl:apply-templates select="binder[1]"/>
+ </m:apply>
+ </m:piece>
+ <m:piece>
+ <xsl:apply-templates select="*[5]"/>
+ <m:apply>
+ <m:csymbol>inr</m:csymbol>
+ <xsl:apply-templates select="binder[2]"/>
+ </m:apply>
+ </m:piece>
+ </m:piecewise>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="universe">
+ <m:apply>
+ <m:csymbol>universe</m:csymbol>
+ <m:cn>
+ <xsl:value-of select="@level"/>
+ </m:cn>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="equal">
+ <m:apply>
+ <m:csymbol>equal</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:apply-templates select="*[3]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="axiom">
+ <m:apply>
+ <m:csymbol>Ax</m:csymbol>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="void">
+ <m:apply>
+ <m:csymbol>void</m:csymbol>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="any">
+ <m:apply>
+ <m:csymbol>mutcase</m:csymbol>
+ <m:csymbol>NONE</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="atom">
+ <m:apply>
+ <m:csymbol>atom</m:csymbol>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="token">
+ <m:apply>
+ <m:csymbol>token</m:csymbol>
+ <m:ci>
+ <xsl:value-of select="@val"/>
+ </m:ci>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="atom_eq">
+ <m:apply>
+ <m:csymbol>if_then_else</m:csymbol>
+ <m:where>atom_eq</m:where>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:apply-templates select="*[4]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="int">
+ <m:integers/>
+</xsl:template>
+
+
+<xsl:template match="natural_number">
+ <m:cn>
+ <xsl:value-of select="@val"/>
+ </m:cn>
+</xsl:template>
+
+
+<xsl:template match="minus">
+ <m:apply>
+ <m:minus/>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="add">
+ <m:apply>
+ <m:plus/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="subtract">
+ <m:apply>
+ <m:minus/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="multiply">
+ <m:apply>
+ <m:times/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="divide">
+ <m:apply>
+ <m:divide/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="remainder">
+ <m:apply>
+ <m:rem/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="int_eq">
+ <m:apply>
+ <m:csymbol>if_then_else</m:csymbol>
+ <m:where>int_eq</m:where>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:apply-templates select="*[4]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="less">
+ <m:apply>
+ <m:csymbol>if_then_else</m:csymbol>
+ <m:where>less</m:where>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ <xsl:apply-templates select="*[3]"/>
+ <xsl:apply-templates select="*[4]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="ind">
+ <m:apply>
+ <m:csymbol>by_induction</m:csymbol>
+ <m:ci>ind</m:ci>
+ <m:csymbol>NONE</m:csymbol>
+ <m:apply> <!-- CASO BASE -->
+ <m:csymbol>inductive_case</m:csymbol>
+ <m:apply>
+ <m:csymbol>case_lhs</m:csymbol>
+ <m:ci>0</m:ci>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>induction_hypothesis</m:csymbol>
+ </m:apply>
+ <xsl:apply-templates select="*[5]"/>
+ </m:apply>
+
+ <m:apply> <!--CASO INDUTTIVO PER I NUMERI POSITIVI-->
+ <m:csymbol>inductive_case</m:csymbol>
+ <m:apply>
+ <m:csymbol>case_lhs</m:csymbol>
+ <m:ci>succ</m:ci>
+ <m:bvar>
+ <xsl:apply-templates select="*[6]"/> <!-- u -->
+ <m:type>int</m:type>
+ </m:bvar>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>induction_hypothesis</m:csymbol>
+ <xsl:apply-templates select="*[7]"/> <!-- v -->
+ </m:apply>
+ <xsl:apply-templates select="*[8]"/> <!-- t -->
+ </m:apply>
+
+ <m:apply> <!--CASO INDUTTIVO PER I NUMERI NEGATIVI-->
+ <m:csymbol>inductive_case</m:csymbol>
+ <m:apply>
+ <m:csymbol>case_lhs</m:csymbol>
+ <m:ci>pred</m:ci>
+ <m:bvar>
+ <xsl:apply-templates select="*[2]"/> <!-- x -->
+ <m:type>int</m:type>
+ </m:bvar>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>induction_hypothesis</m:csymbol>
+ <xsl:apply-templates select="*[3]"/> <!-- y -->
+ </m:apply>
+ <xsl:apply-templates select="*[4]"/>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>extra_args</m:csymbol>
+ <xsl:apply-templates select="*[1]"/> <!-- a -->
+ </m:apply>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="less_than">
+ <m:apply>
+ <m:lt/>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="list">
+ <m:ci>list</m:ci>
+</xsl:template>
+
+
+<xsl:template match="nil">
+ <m:apply>
+ <m:csymbol>nil</m:csymbol>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="cons">
+ <m:apply>
+ <m:csymbol>cons</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="list_ind">
+ <m:apply>
+ <m:csymbol>by_induction</m:csymbol>
+ <m:ci>list_ind</m:ci>
+ <m:csymbol>NONE</m:csymbol>
+ <m:apply>
+ <m:csymbol>inductive_case</m:csymbol>
+ <m:apply>
+ <m:csymbol>case_lhs</m:csymbol>
+ <m:ci>nil</m:ci>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>induction_hypothesis</m:csymbol>
+ </m:apply>
+ <xsl:apply-templates select="*[2]"/> <!-- base -->
+ </m:apply>
+ <m:apply>
+ <m:csymbol>inductive_case</m:csymbol>
+ <m:apply>
+ <m:csymbol>case_lhs</m:csymbol>
+ <m:ci>cons</m:ci>
+ <m:bvar>
+ <xsl:apply-templates select="*[3]"/> <!-- x -->
+ <m:type>?</m:type>
+ </m:bvar>
+ <m:bvar>
+ <xsl:apply-templates select="*[4]"/> <!-- l -->
+ <m:type>?</m:type>
+ </m:bvar>
+ </m:apply>
+ <m:apply>
+ <m:csymbol>induction_hypothesis</m:csymbol>
+ <xsl:apply-templates select="*[5]"/> <!-- Fxl -->
+ </m:apply>
+ <xsl:apply-templates select="*[6]"/> <!-- t -->
+ </m:apply>
+ <m:apply>
+ <m:csymbol>extra_args</m:csymbol>
+ <xsl:apply-templates select="*[1]"/> <!-- s -->
+ </m:apply>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="rec">
+ <m:apply>
+ <m:csymbol>rec</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="rec_ind">
+ <m:apply>
+ <m:csymbol>app</m:csymbol>
+ <m:apply>
+ <m:csymbol>fix</m:csymbol>
+ <m:ci>
+ <xsl:apply-templates select="*[2]"/>
+ </m:ci>
+ <m:bvar>
+ <m:ci>
+ <xsl:apply-templates select="*[2]"/>
+ </m:ci>
+ <m:type>?</m:type>
+ </m:bvar>
+ <m:lambda>
+ <m:bvar>
+ <xsl:apply-templates select="*[3]"/>
+ </m:bvar>
+ <xsl:apply-templates select="*[4]"/>
+ </m:lambda>
+ </m:apply>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="set">
+ <m:apply>
+ <m:csymbol>t_set</m:csymbol>
+ <m:bvar>
+ <xsl:choose>
+ <xsl:when test="type_of">
+ <m:ci>
+ <xsl:value-of select="type_of/@var"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="type_of/*"/>
+ </m:type>
+ </xsl:when>
+ <xsl:otherwise>
+ <m:type>
+ <xsl:apply-templates select="*[1]"/>
+ </m:type>
+ </xsl:otherwise>
+ </xsl:choose>
+ </m:bvar>
+ <xsl:apply-templates select="*[2]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="isect">
+ <m:apply>
+ <m:csymbol>isect</m:csymbol>
+ <m:bvar>
+ <m:ci>
+ <xsl:value-of select="type_of/@var"/>
+ </m:ci>
+ <m:type>
+ <xsl:apply-templates select="type_of/*"/>
+ </m:type>
+ </m:bvar>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="quotient">
+ <m:apply>
+ <m:csymbol>quotient</m:csymbol>
+ <xsl:apply-templates select="*[1]"/>
+ <m:bvar>
+ <xsl:value-of select="binder[1]/@var"/>
+ </m:bvar>
+ <m:bvar>
+ <xsl:value-of select="binder[2]/@var"/>
+ </m:bvar>
+ <xsl:apply-templates select="*[4]"/>
+ </m:apply>
+</xsl:template>
+
+
+<xsl:template match="type_of">
+ <m:apply>
+ <m:csymbol>type_of</m:csymbol>
+ <m:ci>
+ <xsl:value-of select="@var"/>
+ </m:ci>
+ <xsl:apply-templates select="*[1]"/>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="prop">
+ <m:apply>
+ <m:csymbol>prop</m:csymbol>
+ <m:cn>
+ <xsl:value-of select="@level"/>
+ </m:cn>
+ </m:apply>
+</xsl:template>
+
+<xsl:template match="binder">
+ <m:ci>
+ <xsl:value-of select="@var"/>
+ </m:ci>
+</xsl:template>
+
+</xsl:stylesheet>