<?xml version="1.0" encoding="utf-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hal="http://hal.archives-ouvertes.fr/" xmlns:gml="http://www.opengis.net/gml/3.3/" xmlns:gmlce="http://www.opengis.net/gml/3.3/ce" version="1.1" xsi:schemaLocation="http://www.tei-c.org/ns/1.0 http://api.archives-ouvertes.fr/documents/aofr-sword.xsd">
  <teiHeader>
    <fileDesc>
      <titleStmt>
        <title>HAL TEI export of tel-01356695</title>
      </titleStmt>
      <publicationStmt>
        <distributor>CCSD</distributor>
        <availability status="restricted">
          <licence target="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0 - Universal</licence>
        </availability>
        <date when="2026-05-18T16:01:29+02:00"/>
      </publicationStmt>
      <sourceDesc>
        <p part="N">HAL API Platform</p>
      </sourceDesc>
    </fileDesc>
  </teiHeader>
  <text>
    <body>
      <listBibl>
        <biblFull>
          <titleStmt>
            <title xml:lang="en">Subtyping by Constraint Saturation, Theory and Implementation</title>
            <title xml:lang="fr">Sous-Typage par Saturation de Contraintes, Théorie et Implémentation</title>
            <author role="aut">
              <persName>
                <forename type="first">Benoit</forename>
                <surname>Vaugon</surname>
              </persName>
              <idno type="halauthorid">1053245-0</idno>
              <affiliation ref="#struct-234188"/>
            </author>
            <editor role="depositor">
              <persName>
                <forename>ABES</forename>
                <surname>STAR</surname>
              </persName>
              <email type="md5">f5aa7f563b02bb6adbba7496989af39a</email>
              <email type="domain">abes.fr</email>
            </editor>
          </titleStmt>
          <editionStmt>
            <edition n="v1" type="current">
              <date type="whenSubmitted">2016-08-26 11:10:52</date>
              <date type="whenModified">2026-04-02 03:24:02</date>
              <date type="whenReleased">2016-11-28 11:04:56</date>
              <date type="whenProduced">2016-03-15</date>
              <date type="whenEndEmbargoed">2016-08-26</date>
              <ref type="file" target="https://pastel.hal.science/tel-01356695v1/document">
                <date notBefore="2016-08-26"/>
              </ref>
              <ref type="file" subtype="author" n="1" target="https://pastel.hal.science/tel-01356695v1/file/41258_VAUGON_2016_archivage.pdf" id="file-1356695-1438347">
                <date notBefore="2016-08-26"/>
              </ref>
            </edition>
            <respStmt>
              <resp>contributor</resp>
              <name key="131274">
                <persName>
                  <forename>ABES</forename>
                  <surname>STAR</surname>
                </persName>
                <email type="md5">f5aa7f563b02bb6adbba7496989af39a</email>
                <email type="domain">abes.fr</email>
              </name>
            </respStmt>
          </editionStmt>
          <publicationStmt>
            <distributor>CCSD</distributor>
            <idno type="halId">tel-01356695</idno>
            <idno type="halUri">https://pastel.hal.science/tel-01356695</idno>
            <idno type="halBibtex">vaugon:tel-01356695</idno>
            <idno type="halRefHtml">Langage de programmation [cs.PL]. Université Paris Saclay (COmUE), 2016. Français. &lt;a target="_blank" href="https://www.theses.fr/2016SACLY004"&gt;&amp;#x27E8;NNT : 2016SACLY004&amp;#x27E9;&lt;/a&gt;</idno>
            <idno type="halRef">Langage de programmation [cs.PL]. Université Paris Saclay (COmUE), 2016. Français. &amp;#x27E8;NNT : 2016SACLY004&amp;#x27E9;</idno>
            <availability status="restricted">
              <licence target="https://about.hal.science/hal-authorisation-v1/">HAL Authorization<ref corresp="#file-1356695-1438347"/></licence>
            </availability>
          </publicationStmt>
          <seriesStmt>
            <idno type="stamp" n="PASTEL" corresp="PARISTECH">PASTEL - ParisTech</idno>
            <idno type="stamp" n="STAR">STAR - Dépôt national des thèses électroniques</idno>
            <idno type="stamp" n="PARISTECH">ParisTech</idno>
            <idno type="stamp" n="ENSTA_U2IS">Unité d'Informatique et d'Ingénierie des Systèmes (U2IS)</idno>
            <idno type="stamp" n="UNIV-PARIS-SACLAY">Université Paris-Saclay</idno>
            <idno type="stamp" n="ENSTA-SACLAY" corresp="UNIV-PARIS-SACLAY">ENSTA-SACLAY</idno>
            <idno type="stamp" n="ENSTA-PARIS">ENSTA-PARIS</idno>
            <idno type="stamp" n="ENSTA">Ensta</idno>
            <idno type="stamp" n="IP-PARIS-DEPARTEMENT-MATHEMATIQUES">Département de Mathèmatiques</idno>
            <idno type="stamp" n="ENSTA_THESES" corresp="ENSTA">Thèses et HDR de l'ENSTA</idno>
          </seriesStmt>
          <notesStmt/>
          <sourceDesc>
            <biblStruct>
              <analytic>
                <title xml:lang="en">Subtyping by Constraint Saturation, Theory and Implementation</title>
                <title xml:lang="fr">Sous-Typage par Saturation de Contraintes, Théorie et Implémentation</title>
                <author role="aut">
                  <persName>
                    <forename type="first">Benoit</forename>
                    <surname>Vaugon</surname>
                  </persName>
                  <idno type="halauthorid">1053245-0</idno>
                  <affiliation ref="#struct-234188"/>
                </author>
              </analytic>
              <monogr>
                <idno type="nnt">2016SACLY004</idno>
                <imprint>
                  <date type="dateDefended">2016-03-15</date>
                </imprint>
                <authority type="institution">Université Paris Saclay (COmUE)</authority>
                <authority type="supervisor">Michel Mauny</authority>
                <authority type="jury">Roberto Di Cosmo [Président]</authority>
                <authority type="jury">François Pottier [Rapporteur]</authority>
                <authority type="jury">Hassan Aït-Kaci [Rapporteur]</authority>
                <authority type="jury">Jacques Garrigue</authority>
                <authority type="jury">Manuel Serrano</authority>
                <authority type="jury">Véronique Benzaken</authority>
              </monogr>
            </biblStruct>
          </sourceDesc>
          <profileDesc>
            <langUsage>
              <language ident="fr">French</language>
            </langUsage>
            <textClass>
              <keywords scheme="author">
                <term xml:lang="en">Programming language</term>
                <term xml:lang="en">Static Analysis</term>
                <term xml:lang="en">Programming</term>
                <term xml:lang="en">Formal methods</term>
                <term xml:lang="en">Subtyping</term>
                <term xml:lang="fr">Langage de programmation</term>
                <term xml:lang="fr">Analyse statique</term>
                <term xml:lang="fr">Programmation</term>
                <term xml:lang="fr">Méthodes formelles</term>
                <term xml:lang="fr">Sous-Typage</term>
              </keywords>
              <classCode scheme="halDomain" n="info.info-pl">Computer Science [cs]/Programming Languages [cs.PL]</classCode>
              <classCode scheme="halTypology" n="THESE">Theses</classCode>
              <classCode scheme="halOldTypology" n="THESE">Theses</classCode>
              <classCode scheme="halTreeTypology" n="THESE">Theses</classCode>
            </textClass>
            <abstract xml:lang="en">
              <p>This PHD thesis focuses on static analysis of programs by type inference in order to detect program errors before their execution. More precisely, we focus hear in the field of sub-typing, where program properties are described by sets of constraints of the form (t1 &lt;= t2). Our verification mechanisms are based on the aggregation of sub-typing constraints and checking of their compatibility by saturation. The base language on which we define our type systems is an ML-like language provided with variants and pattern matching. We starts by defining a formalism to express our type systems thanks to inference rules. This formalism has the advantage to be sufficiently flexible to allow proving validity and termination properties of our systems, and sufficiently precise to allow a systematic derivation of our inference rules into a runnable typer. After the definition of a base type system for our language, we present three novel extensions: * An improvement of type inference for the pattern matching based on the addition of the "or" operator between sub-typing constraints. This operator allow to express a link, in each cases of a match, between the pattern and the constraints generated at typing time of the case expression. This allows us to refine the type of some functions, and then to accept more valid programs. * A new implementation of the generalization mechanism. This allows to distinguish constraints associated to the different occurrences of a function parameter in its body. Thanks to this mechanism, the "let" construction from ML is in particular obsolete. By mixing this extension with the first one, we obtain a type system able to encode "objects" without any additional language construction. * A formalization of GADT based on an novel implementation of existential type variables. In addition to be compatible with the sub-typing context of this thesis, this alternative to GADT has the advantage to improve type inference. As a consequence, most of type annotations, usually required in the presence of GADT, are now optional. Despite the fact that it is possible to directly derive an implementation of our type systems from their rules, that is principally interesting for their comprehension and prototyping, the effectiveness of such typer is insufficient to analyze real world programs. This is principally due to the extensions we provide to the language of constraints, and in particular to the "or" and "not" operators. At then end, we present multiple techniques we used in our implementation to extend the scalability of our analysis.</p>
            </abstract>
            <abstract xml:lang="fr">
              <p>Cette thèse porte sur l'analyse statique de code par typage dans le but de détecter les erreurs dans les programmes avant leur exécution. Plus précisément, nous nous intéressons ici au domaine du sous-typage, dans lequel les propriétés du code sont représentées par des ensemble de contraintes de la forme (t1 &lt;= t2). Nos mécanismes de vérification sont alors basés sur l'agrégation de contraintes de sous-typage et la vérification de leur compatibilité par saturation. Le langage de base sur lequel nous travaillons est un ML étendu, muni de variants et d'un mécanisme de filtrage de motifs. Nous commençons par définir un formalisme nous permettant d'exprimer nos systèmes de types sous forme de règles d'inférences. Ce formalisme présente l'avantage d'être suffisamment souple pour nous permettre de prouver les propriétés de validité et de terminaison de nos systèmes, et suffisamment précis pour nous permettre d'en dériver une implémentation de manière systématique. Après avoir défini un système de types de base pour notre langage, nous en présentons trois extensions originales : * Une amélioration du typage du filtrage de motifs basée en particulier sur l'ajout d'un opérateur de disjonction entre les contraintes de sous-typage. Cet opérateur permet alors d'exprimer, pour chaque cas de filtrage, le lien entre le filtre et les contraintes extraites du typage de l'expression correspondante. Ceci nous permet en particulier de représenter beaucoup plus finement le type de certaines fonctions et ainsi d'accepter plus de programmes valides. * Une alternative au mécanisme classique de généralisation permettant de distinguer les contraintes associées aux différents usages des paramètres des fonctions. Un tel mécanisme rend en particulier la construction de langage "let" de ML obsolète. Mixé avec la première extension, nous obtenons un système permettant d'encoder dans le langage lui même (c'est à dire sans ajouter de construction supplémentaire), un modèle objet intéressant. * Une formalisation des GADT basée sur une implantation originale des variables de type existentielles. En plus d'être compatible avec le sous-typage, cette variante des GADT présente une amélioration notable par rapport aux GADT standards par le fait qu'elle étend les possibilités d'inférence. Les annotations de type, habituellement obligatoires en présence de GADT, deviennent ici presque toutes facultatives. Bien qu'il soit possible de dériver directement une implémentation de ces systèmes, ce qui est principalement utile pour leur compréhension et leur prototypage, les performances des typeurs obtenus de la sorte ne sont pas suffisantes pour analyser des programmes de taille réelle. Ceci est principalement dû aux différentes extensions que nous apportons au langage des contraintes, en particulier les opérateurs de disjonction et de négation. Nous présentons alors les différentes techniques que nous avons mises en place pour l'implémentation de nos systèmes permettant à nos analyses de passer à l'échelle en pratique.</p>
            </abstract>
          </profileDesc>
        </biblFull>
      </listBibl>
    </body>
    <back>
      <listOrg type="structures">
        <org type="regrouplaboratory" xml:id="struct-234188" status="OLD">
          <idno type="IdRef">203564529</idno>
          <idno type="RNSR">200920620D</idno>
          <orgName>Unité d'Informatique et d'Ingénierie des Systèmes</orgName>
          <orgName type="acronym">U2IS</orgName>
          <date type="end">2024-12-31</date>
          <desc>
            <address>
              <addrLine>828, boulevard des Maréchaux, 91762 Palaiseau CEDEX</addrLine>
              <country key="FR"/>
            </address>
            <ref type="url">http://u2is.ensta-paris.fr/index.php?lang=fr</ref>
          </desc>
          <listRelation>
            <relation active="#struct-300065" type="direct"/>
            <relation active="#struct-563936" type="indirect"/>
          </listRelation>
        </org>
        <org type="institution" xml:id="struct-300065" status="OLD">
          <idno type="IdRef">028139577</idno>
          <idno type="ISNI">0000000122070120</idno>
          <idno type="ROR">https://ror.org/0309cs235</idno>
          <idno type="Wikidata">Q838454</idno>
          <orgName>École Nationale Supérieure de Techniques Avancées</orgName>
          <orgName type="acronym">ENSTA Paris</orgName>
          <date type="end">2024-12-31</date>
          <desc>
            <address>
              <addrLine>828, boulevard des Maréchaux 91120 Palaiseau</addrLine>
              <country key="FR"/>
            </address>
            <ref type="url">https://www.ensta-paris.fr/fr</ref>
          </desc>
          <listRelation>
            <relation active="#struct-563936" type="direct"/>
          </listRelation>
        </org>
        <org type="regroupinstitution" xml:id="struct-563936" status="VALID">
          <idno type="IdRef">238327159</idno>
          <idno type="ISNI">0000000502717600</idno>
          <idno type="ROR">https://ror.org/042tfbd02</idno>
          <idno type="Wikidata">Q48759778</idno>
          <orgName>Institut Polytechnique de Paris</orgName>
          <orgName type="acronym">IP Paris</orgName>
          <date type="start">2019-06-02</date>
          <desc>
            <address>
              <addrLine>Route de Saclay, 91120 Palaiseau Cedex, France</addrLine>
              <country key="FR"/>
            </address>
            <ref type="url">https://www.ip-paris.fr</ref>
          </desc>
        </org>
      </listOrg>
    </back>
  </text>
</TEI>