<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title></title>
    <link rel="self" type="application/atom+xml" href="https://aliaume.fr/site/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://aliaume.fr/site/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-20T00:00:00+00:00</updated>
    <id>https://aliaume.fr/site/atom.xml</id>
    <entry xml:lang="en">
        <title>Candidater à un poste de Maître Conférences (en Informatique)</title>
        <published>2026-03-20T00:00:00+00:00</published>
        <updated>2026-03-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/candidatures-mcf/"/>
        <id>https://aliaume.fr/site/posts/candidatures-mcf/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/candidatures-mcf/">&lt;p&gt;&lt;strong&gt;TL;DR.&lt;&#x2F;strong&gt; Pour être candidat il faut d’abord demander la qualification, qui
est essentiellement un dossier administratif. Pour la campagne de recrutement,
il faut &lt;strong&gt;impérativement&lt;&#x2F;strong&gt; prendre contact avec les établissements visés,
&lt;strong&gt;avant&lt;&#x2F;strong&gt; que ceux-ci ouvrent leurs candidatures.&lt;&#x2F;p&gt;
&lt;p&gt;Dans tous les cas, il est important de regarder deux sites :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Opération postes&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;postes.smai.emath.fr&#x2F;2026&#x2F;index.php&quot;&gt;http:&#x2F;&#x2F;postes.smai.emath.fr&#x2F;2026&#x2F;index.php&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Odyssée&lt;&#x2F;strong&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;odyssee.enseignementsup-recherche.gouv.fr&#x2F;&quot;&gt;https:&#x2F;&#x2F;odyssee.enseignementsup-recherche.gouv.fr&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;le-processus-de-recrutement&quot;&gt;Le processus de recrutement&lt;&#x2F;h2&gt;
&lt;p&gt;Pour pouvoir candidater à un poste de &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Ma%C3%AEtre_de_conf%C3%A9rences_(France)&quot;&gt;Maître Conférences&lt;&#x2F;a&gt; (par la suite
MCF) il faut les prérequis suivants :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Doctorat.&lt;&#x2F;strong&gt; Il faut être titulaire d’un &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Doctorat&quot;&gt;doctorat&lt;&#x2F;a&gt; ou d’un diplôme
équivalent,&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Qualification.&lt;&#x2F;strong&gt; Il faut être &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.univ-grenoble-alpes.fr&#x2F;qualifications-du-cnu&#x2F;&quot;&gt;qualifié&lt;&#x2F;a&gt; par le Conseil National des
Universités (CNU) dans la section disciplinaire correspondante au poste visé.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Les sections disciplinaires du CNU sont listées &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.galaxie.enseignementsup-recherche.gouv.fr&#x2F;ensup&#x2F;pdf&#x2F;qualification&#x2F;sections.pdf&quot;&gt;sur le site
Galaxie&lt;&#x2F;a&gt;.
Pour l’informatique (théorique), il s’agit de la section 26 &quot;Mathématiques
appliquées et applications des mathématiques&quot; ou 27 &quot;Informatique&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-qualification&quot;&gt;La qualification&lt;&#x2F;h2&gt;
&lt;p&gt;À titre indicatif, pour la session 2026 la campagne de qualification avait &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.galaxie.enseignementsup-recherche.gouv.fr&#x2F;ensup&#x2F;qualification&#x2F;calendrier_qualification_2026.pdf&quot;&gt;les
dates butoir
suivantes&lt;&#x2F;a&gt;
:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ouverture des candidatures.&lt;&#x2F;strong&gt; Lundi 3 Novembre 2025, 10h, heure de Paris&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Clôture des candidatures.&lt;&#x2F;strong&gt; Lundi 15 décembre 2025, 16h, heure de Paris&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Communication des résultats.&lt;&#x2F;strong&gt; Lundi 23 Mars 2026&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;la-campagne-de-recrutement-dossier&quot;&gt;La campagne de recrutement (dossier)&lt;&#x2F;h2&gt;
&lt;p&gt;Pour la campagne de recrutement 2026, les &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.galaxie.enseignementsup-recherche.gouv.fr&#x2F;ensup&#x2F;Recrutement&#x2F;calendrier_recrutement_candidats_2026.pdf&quot;&gt;dates
butoirs&lt;&#x2F;a&gt;
étaient les suivantes :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ouverture des candidatures.&lt;&#x2F;strong&gt; Mardi 3 mars 2026, 10 heures, heure de Paris&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Clôture des candidatures.&lt;&#x2F;strong&gt; Vendredi 3 avril 2026 16 heures, heure de Paris&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Saisie des Vœux.&lt;&#x2F;strong&gt; Du Mardi 16 juin 2026, 10 heures, heure de Paris
jusqu’au Mardi 23 juin 2026, 16 heures, heure de Paris&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Résultats.&lt;&#x2F;strong&gt; Mercredi 24 juin 2026, 12 heures, heure de Paris&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Attention.&lt;&#x2F;strong&gt; Il est possible de prendre contact avec les établissements et
laboratoires en amont, car ils sont généralement au courant de l’ouverture
potentielle de postes bien avant la création des fiches de poste sur Odyssée.
Par ailleurs, candidater sans avoir pris contact avec les établissements visés
est généralement mal vu, voire rédhibitoire.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-campagne-de-recrutement-presentation-orale&quot;&gt;La campagne de recrutement (présentation orale)&lt;&#x2F;h2&gt;
&lt;p&gt;La présentation orale a lieu généralement en Mai. Par exemple, pour la campagne
de recrutement 2025, j’ai présenté mon dossier le 06 Mai 2025. La convocation
se fait généralement une à deux semaines avant la date de présentation orale,
ce qui laisse peu de temps pour s’organiser (voyage, logement etc.).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Attention.&lt;&#x2F;strong&gt; Bien qu’il soit possible de présenter en visioconférence (il est
obligatoire pour les établissements de le proposer), il est fortement
déconseillé de le faire, sauf &quot;motif impérieux&quot; (plusieurs établissements
différents ayant placés une audition le même jour par exemple).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Attention.&lt;&#x2F;strong&gt; Il est important d’avoir déjà pris contact avec les
établissements visés (laboratoires, etc) en ayant fait une présentation à un
séminaire en amont de la campagne de recrutement. Cela permet d’adapter son
dossier de candidature et sa présentation orale aux attentes des établissements
et de jouer le jeu de l’intégration à l’équipe locale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-exemple-de-dossier&quot;&gt;Un exemple de dossier&lt;&#x2F;h2&gt;
&lt;p&gt;À des fins d&#x27;illustration, voici mon dossier de candidature au poste de Maître
Conférences à l&#x27;INP de Bordeaux (Enseirb-Matmeca) en 2025. Mon &lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;candidatures-mcf&#x2F;.&#x2F;dossier.bdx.pdf&quot;&gt;dossier de
candidature&lt;&#x2F;a&gt;, le petit &lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;candidatures-mcf&#x2F;.&#x2F;explications.pdf&quot;&gt;dossier d’explication de résultats
marquants&lt;&#x2F;a&gt; et les &lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;candidatures-mcf&#x2F;.&#x2F;MCF-BDX-LOPEZ-2025.pdf&quot;&gt;diapositives de ma présentation
orale&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Bien que moins important, je poste aussi ici mon &lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;candidatures-mcf&#x2F;.&#x2F;qualification.pdf&quot;&gt;dossier de
qualification&lt;&#x2F;a&gt; pour la session 2023, qui peut aussi servir
d’exemple. On constate que l’écriture du dossier de qualification est déjà un
premier pas vers l’écriture du dossier de candidature, même si ce dernier doit
contenir un projet de recherche (qui n’est pas nécessaire pour la
qualification).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>📒 ACM Classification Selector</title>
        <published>2025-08-14T00:00:00+00:00</published>
        <updated>2025-08-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/acm-classifications/"/>
        <id>https://aliaume.fr/site/posts/acm-classifications/</id>
        
        <summary type="html">&lt;p&gt;Tired of finding the correct ACM codes when publishing or pushing to &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;the arXiv&lt;&#x2F;a&gt;? Say no more, here is a simple website that will ease the pain: &lt;a href=&quot;https:&#x2F;&#x2F;aliaumel.github.io&#x2F;acm-classifications&#x2F;&quot;&gt;the acm classification finder&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Below is a lame copy-paste of the &lt;code&gt;README.md&lt;&#x2F;code&gt; file of the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;acm-classifications&quot;&gt;official acm classification tool repository&lt;&#x2F;a&gt;, hosted on the &lt;a href=&quot;https:&#x2F;&#x2F;www.github.com&quot;&gt;evil GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>🤖 Automates Pondérés Commutatifs 🚇</title>
        <published>2025-01-08T00:00:00+00:00</published>
        <updated>2025-01-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/automates-ponderes-commutatifs/"/>
        <id>https://aliaume.fr/site/posts/automates-ponderes-commutatifs/</id>
        
        <summary type="html">&lt;p&gt;Une fois n’est pas coutume, je vais parler de la théorie des automates. Plus précisément, je vais montrer 4 preuves complètement différentes d’un même résultat sur les automates pondérés. Ce billet a le double usage de &lt;em&gt;servir de référence&lt;&#x2F;em&gt; pour ce résultat qui est connu, mais n’est pas facilement citable, mais aussi de sortir ces preuves de notes et d’échanges oraux pour ne plus y penser par la suite.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Commutative N-Polyregular Functions</title>
        <published>2025-01-04T00:00:00+00:00</published>
        <updated>2025-01-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/commutative-n-poly/"/>
        <id>https://aliaume.fr/site/posts/commutative-n-poly/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/commutative-n-poly/">&lt;p&gt;Ce document est le résumé en français de l’article &lt;span class=&quot;citation&quot; data-cites=&quot;zpoly:LOP24&quot;&gt;(&lt;a href=&quot;#ref-zpoly:LOP24&quot; role=&quot;doc-biblioref&quot;&gt;Lopez 2024&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt; qui est disponible sur arXiv, dont le pdf, des slides de présentation, ainsi que le fichier &lt;code&gt;bibtex&lt;&#x2F;code&gt; associé sont disponibles &lt;a href=&quot;&#x2F;research&#x2F;conferences&quot;&gt;sur ma page web&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;résumé&quot;&gt;Résumé&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article étudie quelles fonctions calculées par des automates pondérés à poids dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt; peuvent être réalisées par des automates pondérés à poids dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;, sous deux hypothèses supplémentaires : la commutativité (l’ordre des lettres dans l’entrée n’a pas d’importance) et la croissance polynomiale (la sortie de la fonction est bornée par un polynôme en la taille de l’entrée). J’utilise cette caractérisation effective pour décider si une fonction calculée par un automate pondéré à poids dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt; commutatif de croissance polynomiale est sans étoile, une notion importée de la théorie des langages réguliers qui a fait l’objet de nombreuses investigations dans le contexte des fonctions &lt;em&gt;mot-vers-mot&lt;&#x2F;em&gt; au cours de la dernière décennie.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contextualisation&quot;&gt;Contextualisation&lt;&#x2F;h1&gt;
&lt;p&gt;Ce travail s’inscrit à l’intersection de deux domaines de recherche en théorie des automates. D’une part, la généralisation du modèle qualitatif classique des automates finis non-déterministes à un modèle quantitatif où les transitions sont étiquetées par des éléments d’un &lt;em&gt;semi-anneau&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{S}\)&lt;&#x2F;span&gt; (automates pondérés), et de l’autre la généralisation des langages rationnels à des &lt;em&gt;fonctions&lt;&#x2F;em&gt; des mots vers les mots (transductions). Ces deux généralisations en général incomparables, sauf dans le cas où le semi-anneau de l’automate pondéré est &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;, et où les fonctions calculées ont un alphabet de sortie &lt;em&gt;unaire&lt;&#x2F;em&gt;, auquel cas l’isomorphisme &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N},+) \simeq (\{1\}^*, \cdot)\)&lt;&#x2F;span&gt; permet de faire le lien entre ces deux modèles. Commençons par rappeler quelques définitions pour comprendre le contexte de ce travail.&lt;&#x2F;p&gt;
&lt;p&gt;Les automates pondérés sont une généralisation des automates finis non-déterministes où les transitions sont étiquetées par des éléments d’un &lt;em&gt;semi-anneau&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{S}\)&lt;&#x2F;span&gt;, par exemple &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt; ou &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;. Les fonctions calculées par ces automates sont appelées &lt;em&gt;séries rationnelles&lt;&#x2F;em&gt; et sont une généralisation des langages rationnels &lt;span class=&quot;citation&quot; data-cites=&quot;BERE10&quot;&gt;(&lt;a href=&quot;#ref-BERE10&quot; role=&quot;doc-biblioref&quot;&gt;Berstel et Reutenauer 2010&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Les séries rationnelles à valeurs dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt; (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Rat}\)&lt;&#x2F;span&gt;) sont un sous-ensemble des séries rationnelles à valeurs dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt; (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Rat}\)&lt;&#x2F;span&gt;), et un problème ouvert est de décider si une série rationnelle dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Rat}\)&lt;&#x2F;span&gt; est dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Rat}\)&lt;&#x2F;span&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;KARH77&quot;&gt;(&lt;a href=&quot;#ref-KARH77&quot; role=&quot;doc-biblioref&quot;&gt;Karhumäki 1977&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Ce problème a fait l’objet de nouvelles investigations dans le contexte des &lt;em&gt;fonctions polyrégulières&lt;&#x2F;em&gt; (&lt;span class=&quot;math inline&quot;&gt;\(\mathsf{Poly}\)&lt;&#x2F;span&gt;), un modèle de clacul qui vise à généraliser la théorie des langages réguliers au cadre des fonctions &lt;em&gt;mot-vers-mot&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;BOJA18&quot;&gt;(&lt;a href=&quot;#ref-BOJA18&quot; role=&quot;doc-biblioref&quot;&gt;Bojańczyk 2018&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Dans le cas des langages réguliers, les &lt;em&gt;langages sans étoile&lt;&#x2F;em&gt; forment une sous-classe robuste des langages réguliers décrits équivalents en termes de logique du premier ordre &lt;span class=&quot;citation&quot; data-cites=&quot;MNPA71&quot;&gt;(&lt;a href=&quot;#ref-MNPA71&quot; role=&quot;doc-biblioref&quot;&gt;McNaughton et Papert 1971&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, d’automates sans compteurs &lt;span class=&quot;citation&quot; data-cites=&quot;MNPA71&quot;&gt;(&lt;a href=&quot;#ref-MNPA71&quot; role=&quot;doc-biblioref&quot;&gt;McNaughton et Papert 1971&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, ou de monoïdes apériodiques &lt;span class=&quot;citation&quot; data-cites=&quot;SCHU65&quot;&gt;(&lt;a href=&quot;#ref-SCHU65&quot; role=&quot;doc-biblioref&quot;&gt;Schützenberger 1965&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. De manière analogique, il existe un fragment &lt;em&gt;sans étoile&lt;&#x2F;em&gt; des fonctions polyrégulières appelé &lt;em&gt;fonctions polyrégulières sans étoile&lt;&#x2F;em&gt; (&lt;span class=&quot;math inline&quot;&gt;\(\mathsf{SF}\)&lt;&#x2F;span&gt;) &lt;span class=&quot;citation&quot; data-cites=&quot;BOJA18&quot;&gt;(&lt;a href=&quot;#ref-BOJA18&quot; role=&quot;doc-biblioref&quot;&gt;Bojańczyk 2018&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Un problème ouvert dans ce domaine est de décider si une fonction polyrégulière est sans étoile.&lt;&#x2F;p&gt;
&lt;p&gt;Pour aborder les problèmes de décision sur les fonctions polyrégulières, il a été fructueux de restreindre l’alphabet de sortie à une seule lettre &lt;span class=&quot;citation&quot; data-cites=&quot;DOUE21&quot;&gt;Douéneau-Tabot (&lt;a href=&quot;#ref-DOUE22&quot; role=&quot;doc-biblioref&quot;&gt;2022&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Parce que les mots sur un alphabet unaire sont canoniquement identifiés avec les nombres naturels, les fonctions polyrégulières à sortie unaire sont souvent appelées &lt;em&gt;fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulières&lt;&#x2F;em&gt; (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt;), et leur contrepartie &lt;em&gt;sans étoile&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulière (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt;). Or, il se trouve que les fonctions polyrégulières avec sortie unaire forment une sous-classe des séries &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-rationnelles, à savoir la classe des séries &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-rationnelles avec une &lt;em&gt;croissance polynomiale&lt;&#x2F;em&gt;, c’est-à-dire que la sortie de la fonction est bornée par un polynôme en la taille de l’entrée. Dans mes travaux avec Colcombet et Douéneau-Tabot &lt;span class=&quot;citation&quot; data-cites=&quot;CDTL23&quot;&gt;(&lt;a href=&quot;#ref-CDTL23&quot; role=&quot;doc-biblioref&quot;&gt;Colcombet, Douéneau-Tabot, et Lopez 2023&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, j’ai introduit avec mes co-auteurs la classe des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt;), qui est une généralisation des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulières autorisant des sorties négatives, et montré que l’appartenance à la sous-classe &lt;em&gt;sans étoile&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{SF}\)&lt;&#x2F;span&gt; de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt; est décidable &lt;span class=&quot;citation&quot; data-cites=&quot;CDTL23&quot;&gt;(&lt;a href=&quot;#ref-CDTL23&quot; role=&quot;doc-biblioref&quot;&gt;Colcombet, Douéneau-Tabot, et Lopez 2023&lt;&#x2F;a&gt;, Theorem V.8)&lt;&#x2F;span&gt;. Bien que cela ne permettait pas décider &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt; au sein de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt;, il a été conjecturé que &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\cap
\mathbb{Z}\mathsf{SF}= \mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;DOUE23&quot;&gt;(&lt;a href=&quot;#ref-DOUE23&quot; role=&quot;doc-biblioref&quot;&gt;Douéneau-Tabot 2023&lt;&#x2F;a&gt;, Conjecture 7.61)&lt;&#x2F;span&gt;. Ainsi, il semblerait que comprendre le problème de l’appartenance de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt; dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt;, c’est-à-dire une version restreinte du problème équivalent pour les séries rationnelles, serait une étape clé pour prouver &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\cap \mathbb{Z}\mathsf{SF}= \mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt;, ce qui donnerait espoir pour la conception d’un algorithme pour le problème de décision sur les fonctions sans étoile.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contributions-de-larticle&quot;&gt;Contributions de l’article&lt;&#x2F;h1&gt;
&lt;p&gt;Dans cet article, je travaille avec une condition supplémentaire, la &lt;em&gt;commutativité de l’entrée&lt;&#x2F;em&gt;, c’est-à-dire que la fonction est invariante par permutation des lettres du mot en entrée. Sous cette hypothèse, je prouve que &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\cap \mathbb{Z}\mathsf{SF}= \mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt;, comme conjecturé dans le cas général. J’ai également conçu un algorithme qui décide (sous la même hypothèse de commutativité) si une fonction dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt; est dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt;, ce qui était un problème ouvert &lt;span class=&quot;citation&quot; data-cites=&quot;DOUE23&quot;&gt;(&lt;a href=&quot;#ref-DOUE23&quot; role=&quot;doc-biblioref&quot;&gt;Douéneau-Tabot 2023&lt;&#x2F;a&gt;, Open question 5.55)&lt;&#x2F;span&gt;. Au vu de la correspondance entre les fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-rationnelles de croissance polynomiale et les fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières &lt;span class=&quot;citation&quot; data-cites=&quot;CDTL23&quot;&gt;(&lt;a href=&quot;#ref-CDTL23&quot; role=&quot;doc-biblioref&quot;&gt;Colcombet, Douéneau-Tabot, et Lopez 2023&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, cela peut être vu comme un algorithme pour le problème de décision de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Rat}\)&lt;&#x2F;span&gt; au sein de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Rat}\)&lt;&#x2F;span&gt;, sous la double hypothèse de &lt;em&gt;commutativité&lt;&#x2F;em&gt; et de &lt;em&gt;croissance polynomiale&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Une première étape de mon travail a été de caractériser complètement les &lt;em&gt;polynômes multivariés&lt;&#x2F;em&gt; à coefficients dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Q}\)&lt;&#x2F;span&gt; qui sont calculables par des séries &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-rationnelles (resp. &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-rationnelles). Cette caractérisation a permis de mettre en lumière une erreur dans une caractérisation précédente de ces polynômes &lt;span class=&quot;citation&quot; data-cites=&quot;KARH77&quot;&gt;(&lt;a href=&quot;#ref-KARH77&quot; role=&quot;doc-biblioref&quot;&gt;Karhumäki 1977&lt;&#x2F;a&gt;, Théorème 3.3, page 4)&lt;&#x2F;span&gt;. J’ai également démontré que ce précédent résultat est correct lorsque les polynômes possèdent deux indéterminées ou moins, expliquant pourquoi cette erreur est passée si longtemps inaperçue. En plus de proposer des caractérisations décidables de ces classes polynômes, cela met en exergue la combinatoire intrinsèque des fonctions dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt; (resp. &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt;) en les décrivant comme des combinaisons de coefficients binomiaux. En particulier, les phénomènes observables de &lt;em&gt;division&lt;&#x2F;em&gt; (comme calculer la fonction &lt;span class=&quot;math inline&quot;&gt;\(n \mapsto n(n-1)&#x2F;2\)&lt;&#x2F;span&gt;) et de &lt;em&gt;soustraction&lt;&#x2F;em&gt; (comme calculer la fonction &lt;span class=&quot;math inline&quot;&gt;\(n \mapsto n^2 - n + 1\)&lt;&#x2F;span&gt;) dans certaines fonctions de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt; n’existent qu’à cause de l’écriture des polynômes dans une base inadaptée (la base naturelle &lt;span class=&quot;math inline&quot;&gt;\(X^2\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(1\)&lt;&#x2F;span&gt;) au lieu d’une base utilisant des &lt;em&gt;coefficients binomiaux&lt;&#x2F;em&gt; translatés, de la forme &lt;span class=&quot;math inline&quot;&gt;\(\binom{X - k}{i}\)&lt;&#x2F;span&gt;. Cela permet par ailleurs de conclure que les polynômes exprimables par des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-rationelles (resp. &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-rationnelles) sont exactement ceux exprimables par des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières (resp. &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulières) sans étoile, confirmant l’intuition selon laquelle les polynômes sont des fonctions intrinsèquement &lt;em&gt;sans étoile&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Au cours de cette étude, j’ai développé les méthodes de Douéneau-Tabot basées sur l’idée de &lt;em&gt;pompage quantitatif&lt;&#x2F;em&gt; de fonctions, qui joue un rôle analogue à celui du lemme classique de pompage pour les langages réguliers et les langages algébriques. Si un lemme de pompage classique s’écrit typiquement comme une équivalence de la forme &lt;span class=&quot;math inline&quot;&gt;\(\forall n \in \mathbb{N}. u v^n w \in L \iff u v w \in L\)&lt;&#x2F;span&gt;, où &lt;span class=&quot;math inline&quot;&gt;\(L\)&lt;&#x2F;span&gt; est un langage, un lemme de pompage &lt;em&gt;quantitatif&lt;&#x2F;em&gt; décrit la régularité d’une fonction &lt;span class=&quot;math inline&quot;&gt;\(f \colon \Sigma^* \to \mathbb{Q}\)&lt;&#x2F;span&gt; lorsqu’appliquée à des mots de la forme &lt;span class=&quot;math inline&quot;&gt;\(u v^X w\)&lt;&#x2F;span&gt;, ainsi, &lt;span class=&quot;math inline&quot;&gt;\(f(u v^X w)\)&lt;&#x2F;span&gt; devient une fonction de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt; vers &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Q}\)&lt;&#x2F;span&gt;, qu’il est possible d’étudier avec des outils classiques d’analyse fonctionnelle. Ainsi, on pourra dire que &lt;span class=&quot;math inline&quot;&gt;\(f(u v^X w)\)&lt;&#x2F;span&gt; est une fonction &lt;em&gt;croissante&lt;&#x2F;em&gt;, est un &lt;em&gt;polynôme en &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;&lt;&#x2F;em&gt;, ou est bornée par un polynôme en &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;. Je conjecture que les propriétés d’une fonction polyrégulière &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt; s’observent directement à travers une légère généralisation de la notion de pompage : au lieu de considérer un motif de la forme &lt;span class=&quot;math inline&quot;&gt;\(u v^X w\)&lt;&#x2F;span&gt;, on peut considérer une &lt;em&gt;fonction polyrégulière sans étoile et commutative&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt; et observer &lt;span class=&quot;math inline&quot;&gt;\(f \circ p\)&lt;&#x2F;span&gt;. Plus précisément je conjecture que :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulière &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt; est une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulière si et seulement si pour toute fonction polyrégulière sans étoile et commutative &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(f \circ p\)&lt;&#x2F;span&gt; est &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulière.&lt;&#x2F;li&gt;
&lt;li&gt;Une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulière &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt; est une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;-polyrégulière &lt;em&gt;sans étoile&lt;&#x2F;em&gt;, si et seulement si pour toute fonction polyrégulière sans étoile et commutative &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(f \circ p\)&lt;&#x2F;span&gt; est sans étoile.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Si ces conjectures sont vérifiées, alors le problème de décision d’appartenance à &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt; au sein de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt; et celui de l’appartenance à &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt; au sein de &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\mathsf{Poly}\)&lt;&#x2F;span&gt; sont tous deux décidables. En effet, un semi algorithme consiste à deviner une fonction dans la bonne classe (&lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{SF}\)&lt;&#x2F;span&gt; ou &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\mathsf{Poly}\)&lt;&#x2F;span&gt;) puis tester l’équivalence, ce qui est possible pour ces fonctions. Un second semi algorithme consiste à deviner une fonction &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt; commutative polyrégulière et sans étoile, servant de &lt;em&gt;contre exemple&lt;&#x2F;em&gt; puis de vérifier si &lt;span class=&quot;math inline&quot;&gt;\(f \circ p\)&lt;&#x2F;span&gt; appartient à la classe en question. Cette dernière étape de vérification est rendue possible grâce aux résultats obtenus sur les fonctions &lt;em&gt;commutatives&lt;&#x2F;em&gt;, ce qui est le cas de &lt;span class=&quot;math inline&quot;&gt;\(f \circ p\)&lt;&#x2F;span&gt;, puisque &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt; est commutative.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Dans ce travail, je corrige une erreur de plus de 40 ans et je propose une approche nouvelle et prometteuse pour répondre à deux questions ouvertes sur les fonctions polyrégulières et les séries rationnelles.&lt;&#x2F;p&gt;
&lt;h1 class=&quot;unnumbered&quot; id=&quot;références&quot;&gt;Références&lt;&#x2F;h1&gt;
&lt;div id=&quot;refs&quot; class=&quot;references csl-bib-body hanging-indent&quot; data-entry-spacing=&quot;0&quot; role=&quot;list&quot;&gt;
&lt;div id=&quot;ref-BERE10&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Berstel, Jean, et Christophe Reutenauer. 2010. &lt;em&gt;Noncommutative rational series with applications&lt;&#x2F;em&gt;. Vol. 137. Encyclopedia of Mathematics et its Applications. Cambridge University Press. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;CBO9780511760860&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;CBO9780511760860&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-BOJA18&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Bojańczyk, Mikołaj. 2018. &lt;span&gt;« Polyregular Functions »&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1810.08760&quot;&gt;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1810.08760&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-CDTL23&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Colcombet, Thomas, Gaëtan Douéneau-Tabot, et Aliaume Lopez. 2023. &lt;span&gt;« &lt;span&gt;Z&lt;&#x2F;span&gt;-polyregular functions »&lt;&#x2F;span&gt;. In &lt;em&gt;2023 38th Annual ACM&#x2F;IEEE Symposium on Logic in Computer Science (LICS)&lt;&#x2F;em&gt;, 1‑13. Los Alamitos, CA, USA: IEEE Computer Society. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS56636.2023.10175685&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS56636.2023.10175685&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DOUE21&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Douéneau-Tabot, Gaëtan. 2021. &lt;span&gt;« &lt;span&gt;Pebble Transducers with Unary Output&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. In &lt;em&gt;46th International Symposium on Mathematical Foundations of Computer Science (MFCS 2021)&lt;&#x2F;em&gt;, édité par Filippo Bonchi et Simon J. Puglisi, 202:40:1‑17. Leibniz International Proceedings in Informatics (LIPIcs). Dagstuhl, Germany: Schloss Dagstuhl – Leibniz-Zentrum f&lt;span&gt;ü&lt;&#x2F;span&gt;r Informatik. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.MFCS.2021.40&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.MFCS.2021.40&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DOUE22&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2022. &lt;span&gt;« &lt;span&gt;Hiding Pebbles When the Output Alphabet Is Unary&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. In &lt;em&gt;49th International Colloquium on Automata, Languages, and Programming (ICALP 2022)&lt;&#x2F;em&gt;, édité par Mikołaj Bojańczyk, Emanuela Merelli, et David P. Woodruff, 229:120:1‑17. Leibniz International Proceedings in Informatics (LIPIcs). Dagstuhl, Germany: Schloss Dagstuhl – Leibniz-Zentrum f&lt;span&gt;ü&lt;&#x2F;span&gt;r Informatik. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.ICALP.2022.120&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.ICALP.2022.120&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DOUE23&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2023. &lt;span&gt;« Optimization of string transducers »&lt;&#x2F;span&gt;. Thèse de doctorat, Université Paris Cité. &lt;a href=&quot;https:&#x2F;&#x2F;gdoueneau.github.io&#x2F;pages&#x2F;DOUENEAU-TABOT_Optimization-transducers_v2.pdf&quot;&gt;https:&#x2F;&#x2F;gdoueneau.github.io&#x2F;pages&#x2F;DOUENEAU-TABOT_Optimization-transducers_v2.pdf&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-KARH77&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Karhumäki, Juhani. 1977. &lt;span&gt;« Remarks on commutative &lt;span&gt;N&lt;&#x2F;span&gt;-rational series »&lt;&#x2F;span&gt;. &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt; 5 (2): 211‑17. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(77)90008-1&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(77)90008-1&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-zpoly:LOP24&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Lopez, Aliaume. 2024. &lt;span&gt;« Commutative N-Polyregular Functions »&lt;&#x2F;span&gt;. Preprint. &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2404.02232&quot;&gt;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2404.02232&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-MNPA71&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
McNaughton, Robert, et Seymour A. Papert. 1971. &lt;em&gt;Counter-Free Automata&lt;&#x2F;em&gt;. The MIT Press. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.5555&#x2F;1097043&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.5555&#x2F;1097043&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-SCHU65&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Schützenberger, Marcel P. 1965. &lt;span&gt;« On finite monoids having only trivial subgroups »&lt;&#x2F;span&gt;. &lt;em&gt;Information and Control&lt;&#x2F;em&gt; 8 (2): 190‑94. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0019-9958(65)90108-7&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0019-9958(65)90108-7&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Largeur de clique linéaire et beaux préordres</title>
        <published>2025-01-03T00:00:00+00:00</published>
        <updated>2025-01-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/labelled-wqo-of-bounded-lcw/"/>
        <id>https://aliaume.fr/site/posts/labelled-wqo-of-bounded-lcw/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/labelled-wqo-of-bounded-lcw/">&lt;p&gt;Ce document est le résumé en français de l’article &lt;span class=&quot;citation&quot; data-cites=&quot;LOPEZ24&quot;&gt;(Lopez 2024)&lt;&#x2F;span&gt; qui est disponible sur arXiv, dont le pdf, des slides de présentation, ainsi que le fichier &lt;code&gt;bibtex&lt;&#x2F;code&gt; associé sont disponibles &lt;a href=&quot;&#x2F;publications.html#bibitem-wqo:LOP24&quot;&gt;sur ma page web&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;résumé&quot;&gt;Résumé&lt;&#x2F;h1&gt;
&lt;p&gt;Dans cet article, je caractérise les classes de graphes largeur de clique linéaire bornée qui sont des beaux préordres pour l’ordre sous-structure induite en présence de couleurs sur les sommets. De plus, dans le cas où la classe est donnée sous la forme d’une transduction &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{MSO}\)&lt;&#x2F;span&gt; depuis des mots finis, je fournis un algorithme pour décider cette propriété. Cette étude s’appuie sur des outils de la théorie des automates, et le schéma de preuve permet de dériver une version faible de la conjecture de Pouzet pour les classes de graphes de largeur de clique linéaire bornée. De manière plus générale, la ligne directrice de cet article est l’idée que les classes de &lt;em&gt;graphes&lt;&#x2F;em&gt; qui sont des beaux préordres pour l’ordre sous-structure induite sont en correspondance avec des classes &lt;em&gt;d’arbres&lt;&#x2F;em&gt; munis de l’ordre &lt;em&gt;de plongement avec trou&lt;&#x2F;em&gt; de &lt;span class=&quot;citation&quot; data-cites=&quot;DERSHOWITZ200380&quot;&gt;Derhowitz et Tzameret (2003)&lt;&#x2F;span&gt;. Ceci est démontré pour les classes de graphes de largeur de clique linéaire bornée, et vérifié pour les classes de graphes étudiées par &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;Daligault, Rao, et Thomassé (2010)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contextualisation&quot;&gt;Contextualisation&lt;&#x2F;h1&gt;
&lt;p&gt;Un préordre &lt;span class=&quot;math inline&quot;&gt;\((X, \leq)\)&lt;&#x2F;span&gt; est un &lt;em&gt;beau préordre&lt;&#x2F;em&gt; si toute suite &lt;span class=&quot;math inline&quot;&gt;\((x_n)_{n \in
\mathbb{N}}\)&lt;&#x2F;span&gt; d’éléments de &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; possède une paire croissante &lt;span class=&quot;math inline&quot;&gt;\(i &amp;lt; j\)&lt;&#x2F;span&gt; telle que &lt;span class=&quot;math inline&quot;&gt;\(x_i
\leq x_j\)&lt;&#x2F;span&gt;. Par exemple, l’ensemble &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\times \mathbb{N}\)&lt;&#x2F;span&gt; est un beau préordre pour l’ordre produit. En théorie des graphes, le résultat fondamental de &lt;span class=&quot;citation&quot; data-cites=&quot;ROBSEY04&quot;&gt;Robertson et Seymour (2004)&lt;&#x2F;span&gt; montre que l’ensemble des graphes finis est un beau préordre pour l’ordre &lt;em&gt;mineur&lt;&#x2F;em&gt;. Du point de vue de la vérification formelle, les beaux préordres sont au cœur des algorithmes de vérification des systèmes bien structurés &lt;span class=&quot;citation&quot; data-cites=&quot;ABDU96&quot;&gt;(Abdulla et al. 1996)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Les beaux préordres possèdent une riche théorie de clôture : ils sont fermés par produit, somme, et sous-ensemble. En sus, ils sont clos par des constructeurs plus exotiques comme l’ensemble des parties finies, l’ensemble des mots finis, ou l’ensemble des arbres finis &lt;span class=&quot;citation&quot; data-cites=&quot;HIG52 KRU72&quot;&gt;(Higman 1952; Kruskal 1972)&lt;&#x2F;span&gt;. Ces propriétés rendent l’utilisation des beaux préordres aisée lors de la modélisation de systèmes bien structurés : on peut représenter les états d’un système en combinant différents beaux préordres.&lt;&#x2F;p&gt;
&lt;p&gt;Cependant, et comme étudié dans l’article &lt;span class=&quot;citation&quot; data-cites=&quot;LOPEZ23&quot;&gt;Lopez (2023)&lt;&#x2F;span&gt;, l’ordre placé sur une construction comme « l’ensemble des mots finis sur &lt;span class=&quot;math inline&quot;&gt;\((X,\leq)\)&lt;&#x2F;span&gt; » ou « l’ensemble des arbres finis sur &lt;span class=&quot;math inline&quot;&gt;\((X,\leq)\)&lt;&#x2F;span&gt; » manque de canonicité, dans le sens où il n’existe pas de &lt;em&gt;préordre le plus fin&lt;&#x2F;em&gt; qui rende ces constructions bien préordonnées. La solution retenue pour a été de considérer les mots finis et les arbres finis comme des constructions &lt;em&gt;inductives&lt;&#x2F;em&gt;, et de proposer une définition systématique d’ordre sur ces constructions inductives.&lt;&#x2F;p&gt;
&lt;p&gt;Une autre solution, qui est celle retenue dans cet article, est de considérer que les ordres sur l’ensemble des arbres finis et des mots finis sont en réalités des ordres de &lt;em&gt;sous structure-induite&lt;&#x2F;em&gt;, lorsque ceux-ci sont vus comme des structures relationnelles finies. En effet, l’ordre &lt;em&gt;sous mot épars&lt;&#x2F;em&gt; de &lt;span class=&quot;citation&quot; data-cites=&quot;HIG52&quot;&gt;Higman (1952)&lt;&#x2F;span&gt;, est en réalité l’ordre de sous-structure induite pour l’ensemble des ordres linéaires coloriés (c’est-à-dire, des mots). De manière similaire, l’ordre de plongement d’arbre de &lt;span class=&quot;citation&quot; data-cites=&quot;KRU72&quot;&gt;Kruskal (1972)&lt;&#x2F;span&gt; correspond à l’ordre &lt;em&gt;sous-structure induite&lt;&#x2F;em&gt; sur les arbres finis représentés par des structures coloriées utilisant la relation « plus petit ancêtre commun ». Cette présentation est particulièrement naturelle, car ces ordres sont généralement &lt;em&gt;définis&lt;&#x2F;em&gt; en terme de morphismes &lt;span class=&quot;citation&quot; data-cites=&quot;HSS13&quot;&gt;(voir Haase, Schmitz, et Schnoebelen 2013)&lt;&#x2F;span&gt;. Une généralisation de cette présentation se heurte au fait que l’ensemble des graphes finis (une classe de structures très simple) n’est pas un beau préordre pour l’ordre sous-structure induite.&lt;&#x2F;p&gt;
&lt;p&gt;Avant de comprendre &lt;em&gt;quelles classes de structures relationnelles finies&lt;&#x2F;em&gt; donnent lieu à un constructeur de beau préordre pour l’ordre sous-structure induite, il est nécessaire de comprendre dans quel cas des classes de &lt;em&gt;graphes&lt;&#x2F;em&gt; possèdent cette propriété. Ce sujet a déjà été étudié par &lt;span class=&quot;citation&quot; data-cites=&quot;DING92&quot;&gt;Ding (1992)&lt;&#x2F;span&gt;, où il est montré que les classes de graphes ayant &lt;em&gt;treedepth&lt;&#x2F;em&gt; bornée sont des beaux préordres pour l’ordre sous-structure induite, et ce même avec coloriage. Depuis, la question de la caractérisation des classes de graphes qui sont des beaux préordres pour l’ordre sous-structure induite est restée ouverte, avec des contributions récentes de &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;Daligault, Rao, et Thomassé (2010)&lt;&#x2F;span&gt;, ainsi que de &lt;span class=&quot;citation&quot; data-cites=&quot;DLP18&quot;&gt;Dabrowski, Lozin, et Paulusma (2018)&lt;&#x2F;span&gt; ou &lt;span class=&quot;citation&quot; data-cites=&quot;DLP20&quot;&gt;Dabrowski, Lozin, et Paulusma (2020)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Il faut bien distinguer différentes approches en fonction de l’intérêt des auteurs et autrices :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;&lt;span id=&quot;prop-1&quot;&gt;Montrer qu’une classe&lt;&#x2F;span&gt; de graphe est un &lt;em&gt;constructeurs de beaux préordres&lt;&#x2F;em&gt;, c’est-à-dire, que pour tout beau préordre &lt;span class=&quot;math inline&quot;&gt;\((X, \leq)\)&lt;&#x2F;span&gt;, l’ensemble des graphes coloriés par &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; est un beau préordre pour l’ordre sous-structure induite, où &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; est vu comme un ensemble de couleurs ordonnées. On dit alors que la classe est un &lt;em&gt;constructeur de beau préordre&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;span id=&quot;prop-2&quot;&gt;Montrer qu’une classe&lt;&#x2F;span&gt; de graphes est un &lt;em&gt;beau préordonnée&lt;&#x2F;em&gt; pour l’ordre sous-structure induite, pour tout nombre arbitrairement grand mais &lt;em&gt;fini&lt;&#x2F;em&gt; de couleurs. On dit alors que la classe est un &lt;em&gt;beau préordre avec étiquettes&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;span id=&quot;prop-3&quot;&gt;Montrer qu’une classe de graphes&lt;&#x2F;span&gt; est un &lt;em&gt;beau préordonnée&lt;&#x2F;em&gt; pour l’ordre sous-structure induite, avec un nombre fini de couleurs fixé (au moins &lt;span class=&quot;math inline&quot;&gt;\(2\)&lt;&#x2F;span&gt; couleurs). On dit alors que la classe est un &lt;em&gt;k-beau préordre&lt;&#x2F;em&gt;, où &lt;span class=&quot;math inline&quot;&gt;\(k\)&lt;&#x2F;span&gt; est le nombre de de couleurs utilisées.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;span id=&quot;prop-4&quot;&gt;Montrer qu’une classe de graphes&lt;&#x2F;span&gt; est un &lt;em&gt;beau préordonnée&lt;&#x2F;em&gt; pour l’ordre sous-structure induite, sans aucune notion de coloriage.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Dans cet article, on s’intéressera principalement à la propriété (1), mais la littérature est plutôt concernée par les propriétés (3) et (4). Notons que (1) implique (2), qui implique (3), qui implique (4). On peut démontrer que l’implication (3) &lt;span class=&quot;math inline&quot;&gt;\(\implies\)&lt;&#x2F;span&gt; (4) est stricte, mais il a été conjecturé par &lt;span class=&quot;citation&quot; data-cites=&quot;POUZ72&quot;&gt;Pouzet (1972)&lt;&#x2F;span&gt; que l’implication &lt;span class=&quot;math inline&quot;&gt;\((2) \implies (3)\)&lt;&#x2F;span&gt; est en réalité une équivalence. Je conjecture que l’implication &lt;span class=&quot;math inline&quot;&gt;\((1) \implies (2)\)&lt;&#x2F;span&gt; est également une une équivalence.&lt;&#x2F;p&gt;
&lt;p&gt;Jusqu’à présent, la notion de &lt;em&gt;largeur de clique&lt;&#x2F;em&gt; n’a pas été utilisée dans ce résumé, et son apparition dans cet article est motivée par les travaux de &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;Daligault, Rao, et Thomassé (2010)&lt;&#x2F;span&gt;, qui ont étudié certaines classes de graphes de largeur de clique bornée et caractérisé lesquelles sont des beaux préordres pour l’ordre sous-structure induite &lt;em&gt;avec couleurs&lt;&#x2F;em&gt; (&lt;a href=&quot;#prop-2&quot;&gt;propriété 2&lt;&#x2F;a&gt;). En plus de fournir un cadre théorique agréable dans lequel travailler, les auteurs conjecturent qu’une classe de graphes héréditaire&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; et qui est un &lt;span class=&quot;math inline&quot;&gt;\(2\)&lt;&#x2F;span&gt;-beau préordre (&lt;a href=&quot;#prop-3&quot;&gt;propriété 3&lt;&#x2F;a&gt;) a toujours une largeur de clique bornée &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;(Daligault, Rao, et Thomassé 2010, Conjecture 5)&lt;&#x2F;span&gt;. Originellement, la notion de largeur de clique bornée a été introduite par Courcelle &lt;span class=&quot;citation&quot; data-cites=&quot;COUR91 COUR94 COJOGR93&quot;&gt;(Courcelle 1991, 1994; Courcelle, Engelfriet, et Rozenberg 1993)&lt;&#x2F;span&gt; afin de généraliser les &lt;em&gt;langages réguliers&lt;&#x2F;em&gt; aux classes de graphes, et fournit un cadre théorique agréable pour représenter de telles classes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contributions-de-larticle&quot;&gt;Contributions de l’article&lt;&#x2F;h1&gt;
&lt;p&gt;Dans cet article, je caractérise les classes de graphes &lt;em&gt;largeur de clique linéaire bornée&lt;&#x2F;em&gt; qui sont des beaux préordres pour l’ordre sous-structure induite en présence d’un nombre arbitraire couleurs (&lt;a href=&quot;#prop-2&quot;&gt;propriété 2&lt;&#x2F;a&gt;). Cette caractérisation est incomparable à celle de &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;(Daligault, Rao, et Thomassé 2010)&lt;&#x2F;span&gt; car je me limite à la largeur de clique &lt;strong&gt;linéaire&lt;&#x2F;strong&gt;, alors que &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;(Daligault, Rao, et Thomassé 2010)&lt;&#x2F;span&gt; se limite à des classes spécifiques ayant une largeur de clique bornée.&lt;&#x2F;p&gt;
&lt;p&gt;De plus, je fournis un algorithme pour décider si une classe de graphes donnée sous la forme d’une transduction &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{MSO}\)&lt;&#x2F;span&gt; depuis des mots finis est un beau préordre pour l’ordre sous-structure induite. Cet algorithme, basé sur des outils de la théorie des automates peut se généraliser pour expliquer de manière purement algébrique les résultats &lt;em&gt;ad-hoc&lt;&#x2F;em&gt; de &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;Daligault, Rao, et Thomassé (2010)&lt;&#x2F;span&gt;. Enfin, je démontre que l’équivalence &lt;span class=&quot;math inline&quot;&gt;\((1) \iff (2)\)&lt;&#x2F;span&gt; est vraie pour les classes de graphes de largeur de clique linéaire bornée.&lt;&#x2F;p&gt;
&lt;p&gt;Au cœur de ces résultats se trouve le théorème de factorisation de &lt;span class=&quot;citation&quot; data-cites=&quot;SIMO90&quot;&gt;Simon (1990)&lt;&#x2F;span&gt;, qui permet de remplacer les formules &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{MSO}\)&lt;&#x2F;span&gt; par des arbres colorés de profondeur finie. Ce théorème permet de réduire une classe de graphes de largeur de clique linéaire bornée qui est un beau préordre à une classe de &lt;em&gt;mots imbriqués&lt;&#x2F;em&gt; de profondeur finie, qui est elle-même un beau préordre pour l’ordre de &lt;span class=&quot;citation&quot; data-cites=&quot;HIG52&quot;&gt;Higman (1952)&lt;&#x2F;span&gt; « imbriqué ». Cette caractérisation, en plus de révéler une structure arborescente sous-jacente pour les classes de graphes ayant une largeur de clique linéaire bornée, fait apparaître comme naturel l’ordre de plongement avec trou de &lt;span class=&quot;citation&quot; data-cites=&quot;DERSHOWITZ200380&quot;&gt;Derhowitz et Tzameret (2003)&lt;&#x2F;span&gt; : dans le cas des mots finis, cet ordre est précisément l’ordre de Higman emboité.&lt;&#x2F;p&gt;
&lt;p&gt;Cette découverte mène a la conjecture suivante : une classe de graphes héréditaire et qui est un constructeur de beau préordre pour l’ordre sous-structure induite est en correspondance avec une classe d’arbres munie de l’ordre de “plongement avec trou” (potentiellement imbriqué) de &lt;span class=&quot;citation&quot; data-cites=&quot;DERSHOWITZ200380&quot;&gt;Derhowitz et Tzameret (2003)&lt;&#x2F;span&gt;, ce qui fait le lien avec l’étude précédemment mentionnée sur les constructions inductives &lt;span class=&quot;citation&quot; data-cites=&quot;LOPEZ23&quot;&gt;(Lopez 2023)&lt;&#x2F;span&gt;, ce préordre étant lui-même obtenu inductivement &lt;span class=&quot;citation&quot; data-cites=&quot;DERSHOWITZ200380 FREU20&quot;&gt;(Derhowitz et Tzameret 2003; Freund 2020)&lt;&#x2F;span&gt;. J’ai démontré cette conjecture pour les classes de graphes étudiées par &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;Daligault, Rao, et Thomassé (2010)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article démontre que l’hypothèse de &lt;em&gt;largeur de clique bornée&lt;&#x2F;em&gt; fournit un cadre théorique propice à l’étude des classes de graphes finis qui sont des beaux préordres pour l’ordre sous-structure induite, cela sans réduire la généralité du propos selon &lt;span class=&quot;citation&quot; data-cites=&quot;DRT10&quot;&gt;(Daligault, Rao, et Thomassé 2010, Conjecture 5)&lt;&#x2F;span&gt;. De plus, il renforce les conjectures selon lesquelles les propriétés &lt;a href=&quot;#prop-1&quot;&gt;(1)&lt;&#x2F;a&gt;, &lt;a href=&quot;#prop-2&quot;&gt;(2)&lt;&#x2F;a&gt; et &lt;a href=&quot;#prop-3&quot;&gt;(3)&lt;&#x2F;a&gt; sont équivalentes. Enfin, il ouvre la voie à l’étude plus générale des structures relationnelles finies, et fait le lien entre les beaux préordres obtenus en &lt;em&gt;coloriant des structures finies&lt;&#x2F;em&gt; et ceux obtenus via des &lt;em&gt;constructions inductives&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h1 class=&quot;unnumbered&quot; id=&quot;références&quot;&gt;Références&lt;&#x2F;h1&gt;
&lt;div id=&quot;refs&quot; class=&quot;references csl-bib-body hanging-indent&quot; data-entry-spacing=&quot;0&quot; role=&quot;list&quot;&gt;
&lt;div id=&quot;ref-ABDU96&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Abdulla, Parosh Aziz, Karlis Čerāns, Bengt Jonsson Tsay, et Yih-Kuen. 1996. &lt;span&gt;« General decidability theorems for infinite-state systems »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of LICS’96&lt;&#x2F;em&gt;, 313‑21. IEEE. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1996.561359&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1996.561359&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-COUR91&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Courcelle, Bruno. 1991. &lt;span&gt;« The monadic second-order logic of graphs V: on closing the gap between definability and recognizability »&lt;&#x2F;span&gt;. &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt; 80 (2): 153‑202. https:&#x2F;&#x2F;doi.org&#x2F;&lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(91)90387-H&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(91)90387-H&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-COUR94&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 1994. &lt;span&gt;« Monadic second-order definable graph transductions: a survey »&lt;&#x2F;span&gt;. &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt; 126 (1): 53‑75. https:&#x2F;&#x2F;doi.org&#x2F;&lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(94)90268-2&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(94)90268-2&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-COJOGR93&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Courcelle, Bruno, Joost Engelfriet, et Grzegorz Rozenberg. 1993. &lt;span&gt;« Handle-rewriting hypergraph grammars »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Computer and System Sciences&lt;&#x2F;em&gt; 46 (2): 218‑70. https:&#x2F;&#x2F;doi.org&#x2F;&lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0022-0000(93)90004-G&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0022-0000(93)90004-G&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DLP18&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Dabrowski, Konrad K., Vadim V. Lozin, et Daniël Paulusma. 2018. &lt;span&gt;« Well-Quasi-Ordering versus Clique-Width: New Results on Bigenic Classes »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Combinatorial Theory, Series B&lt;&#x2F;em&gt; 130: 1‑18. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2017.09.012&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2017.09.012&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DLP20&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2020. &lt;span&gt;« Clique-width and Well-Quasi-Ordering of Triangle-Free Graph Classes »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Computer and System Sciences&lt;&#x2F;em&gt; 108: 64‑91. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jcss.2019.09.001&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jcss.2019.09.001&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DRT10&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Daligault, Jean, Michael Rao, et Stéphan Thomassé. 2010. &lt;span&gt;« Well-Quasi-Order of Relabel Functions »&lt;&#x2F;span&gt;. &lt;em&gt;Order&lt;&#x2F;em&gt; 27 (3): 301‑15. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s11083-010-9174-0&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s11083-010-9174-0&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DERSHOWITZ200380&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Derhowitz, Nachum, et Iddo Tzameret. 2003. &lt;span&gt;« Gap Embedding for Well-Quasi-Orderings1 »&lt;&#x2F;span&gt;. &lt;em&gt;Electronic Notes in Theoretical Computer Science&lt;&#x2F;em&gt; 84: 80‑90. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1571-0661(04)80846-6&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1571-0661(04)80846-6&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-DING92&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Ding, Guoli. 1992. &lt;span&gt;« Subgraphs and well‐quasi‐ordering »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Graph Theory&lt;&#x2F;em&gt; 16 (5): 489‑502. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1002&#x2F;jgt.3190160509&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1002&#x2F;jgt.3190160509&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-FREU20&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Freund, Anton. 2020. &lt;span&gt;« From Kruskal’s theorem to Friedman’s gap condition »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematical Structures in Computer Science&lt;&#x2F;em&gt; 30 (8): 952‑75. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;S0960129520000298&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;S0960129520000298&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-HSS13&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Haase, Christoph, Sylvain Schmitz, et Philippe Schnoebelen. 2013. &lt;span&gt;« The Power of Priority Channel Systems »&lt;&#x2F;span&gt;. In &lt;em&gt;CONCUR 2013 – Concurrency Theory&lt;&#x2F;em&gt;, édité par Pedro R. D’Argenio et Hernán Melgratti, 319‑33. Berlin, Heidelberg: Springer Berlin Heidelberg. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-642-40184-8_22&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-642-40184-8_22&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-HIG52&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Higman, Graham. 1952. &lt;span&gt;« Ordering by divisibility in abstract algebras »&lt;&#x2F;span&gt;. &lt;em&gt;Proceedings of the London Mathematical Society&lt;&#x2F;em&gt; 3: 326‑36. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;plms&#x2F;s3-2.1.326&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;plms&#x2F;s3-2.1.326&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-KRU72&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Kruskal, Joseph B. 1972. &lt;span&gt;« The theory of well-quasi-ordering: A frequently discovered concept »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Combinatorial Theory, Series A&lt;&#x2F;em&gt; 13: 297‑305. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0097-3165(72)90063-5&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0097-3165(72)90063-5&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-LOPEZ23&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Lopez, Aliaume. 2023. &lt;span&gt;« Fixed Points and Noetherian Topologies »&lt;&#x2F;span&gt;. In &lt;em&gt;Foundations of Software Science and Computation Structures&lt;&#x2F;em&gt;, édité par Orna Kupferman et Pawel Sobocinski, 13992:456‑76. Springer Nature Switzerland. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-031-30829-1_22&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-031-30829-1_22&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-LOPEZ24&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2024. &lt;span&gt;« Labelled Well Quasi Ordered Classes of Bounded Linear Clique-Width »&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2405.10894&quot;&gt;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2405.10894&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-POUZ72&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Pouzet, Maurice. 1972. &lt;span&gt;« Un bel ordre d’abritement et ses rapports avec les bornes d’une multirelation »&lt;&#x2F;span&gt;. &lt;em&gt;CR Acad. Sci. Paris Sér. AB&lt;&#x2F;em&gt; 274: A1677‑80.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-ROBSEY04&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Robertson, Neil, et Paul D. Seymour. 2004. &lt;span&gt;« Graph Minors. XX. Wagner’s conjecture »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Combinatorial Theory, Series B&lt;&#x2F;em&gt; 92 (2): 325‑57. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2004.08.001&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2004.08.001&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-SIMO90&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Simon, Imre. 1990. &lt;span&gt;« Factorization forests of finite height »&lt;&#x2F;span&gt;. &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt; 72 (1): 65‑94. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(90)90047-L&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0304-3975(90)90047-L&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;C’est-à-dire, fermée par sous-structure induite.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🪪 Portrait pour l’ENS Paris-Saclay</title>
        <published>2024-11-26T00:00:00+00:00</published>
        <updated>2024-11-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume LOPEZ
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/portrait-ens-paris-saclay-ackermann/"/>
        <id>https://aliaume.fr/site/posts/portrait-ens-paris-saclay-ackermann/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/portrait-ens-paris-saclay-ackermann/">&lt;p&gt;Dans le cadre d’un billet d’actualité sur le site de &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&quot;&gt;l’École Normale Supérieure Paris-Saclay&lt;&#x2F;a&gt;, j’ai été invité à rédiger un portrait de moi-même suite à l’obtention du &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;&quot;&gt;Prix Ackermann 2024&lt;&#x2F;a&gt;. Mon co-lauréat et ami, &lt;a href=&quot;https:&#x2F;&#x2F;gdoueneau.github.io&#x2F;&quot;&gt;Gaëtan Douéneau-Tabot&lt;&#x2F;a&gt; a également eu droit à son portrait, les deux étant disponibles &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&#x2F;actualite&#x2F;prix-ackermann-2024-deux-normaliens-laureats&quot;&gt;sur la page de l’ENS Paris-Saclay&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Je laisse les lecteurs intéressés comparer le texte publié et celui qui a été transmis à &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&quot;&gt;l’ENS Paris-Saclay&lt;&#x2F;a&gt; que je reproduis ci-dessous.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-portrait-en-question&quot;&gt;Le portrait en question&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Parcours.&lt;&#x2F;strong&gt; Je suis entré à &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&quot;&gt;l’ENS Paris-Saclay&lt;&#x2F;a&gt; sur &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&#x2F;admission&#x2F;sur-concours&#x2F;concours-dadmission-en-1ere-annee&#x2F;concours-mp&quot;&gt;concours&lt;&#x2F;a&gt;, et suivi dès mon entrée un cursus à l’interface entre l’informatique et les mathématiques. Dans un premier temps avec une double licence en mathématiques et informatique, puis un master de mathématique, suite auquel j’ai passé &lt;a href=&quot;https:&#x2F;&#x2F;agreg.org&#x2F;&quot;&gt;l’agrégation de mathématiques&lt;&#x2F;a&gt; (option informatique, qui n’existe plus aujourd’hui), et j’ai terminé mon cursus à l’ENS Paris-Saclay en suivant le master &lt;a href=&quot;https:&#x2F;&#x2F;wikimpri.dptinfo.ens-cachan.fr&#x2F;doku.php&quot;&gt;MPRI&lt;&#x2F;a&gt; (Master Parisien de Recherche en Informatique), un master de recherche en informatique fondamentale et cryptographie reconnu en France et à l’international. Par la suite, j’ai réalisé une thèse en informatique théorique en co-supervision entre l’ENS Paris-Saclay et &lt;a href=&quot;https:&#x2F;&#x2F;u-paris.fr&#x2F;&quot;&gt;l’Université Paris Cité&lt;&#x2F;a&gt;, durant laquelle j’ai réalisé une année de césure pour travailler comme développeur fullstack à &lt;a href=&quot;https:&#x2F;&#x2F;www.asn.fr&#x2F;&quot;&gt;l’Autorité de Sûreté Nucléaire&lt;&#x2F;a&gt; (ASN), dans le cadre de son programme &lt;a href=&quot;https:&#x2F;&#x2F;entrepreneur-interet-general.etalab.gouv.fr&#x2F;&quot;&gt;Entrepreneurs d’Intérêt Général&lt;&#x2F;a&gt; (EIG) porté par la &lt;a href=&quot;https:&#x2F;&#x2F;www.numerique.gouv.fr&#x2F;&quot;&gt;Direction Interministérielle du Numérique&lt;&#x2F;a&gt; (DINUM).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;En arrivant à l’ENS Paris-Saclay.&lt;&#x2F;strong&gt; Je n’avais pas de projet professionnel précis en entrant à l’ENS Paris-Saclay, mais j’avais déjà conscience de mon envie de contribuer au service public et à l’intérêt général, ce qui a guidé mes choix d’intégration. Par ailleurs, je savais qu’intégrer l’ENS Paris-Saclay me permettrait d’accéder à une formation d’excellence en mathématiques et informatique, deux domaines qui m’intéressaient déjà beaucoup. Cependant, c’est réellement en L3 que j’ai découvert la recherche en informatique théorique, et au fil de mes stages (L3, M1, M2) que j’ai commencé à envisager un projet professionnel dans ce domaine. Cependant, je tiens à souligner que l’enseignement et la recherche ne sont pas les seuls débouchés possibles ou souhaitables pour les élèves d’une ENS, loin de là.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ma Recherche.&lt;&#x2F;strong&gt; Mes intérêts en recherche se situent dans le domaine de l’informatique théorique, c’est-à-dire à la frontière entre mathématique et informatique dite “pratique”. Dans ce domaine relativement vaste, je me suis intéressé plus précisément aux liens entre la &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Finite_model_theory&quot;&gt;théorie des modèles finis&lt;&#x2F;a&gt; et la &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_verification&quot;&gt;vérification de systèmes infinis&lt;&#x2F;a&gt;, deux domaines très abstraits, mais qui ont des applications concrètes en informatique : d’une part la théorie des modèles finis est un outil puissant pour comprendre les bases de données, le cœur battant des outils numériques qui rythment nos vies modernes (moteurs de recherche, réseaux sociaux, intelligence artificielle, etc.) ; D’autre part la vérification de systèmes, ou plus généralement ce que l’on peut nommer les &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Formal_methods&quot;&gt;méthodes formelles&lt;&#x2F;a&gt; est un champ de recherche qui vise à développer des outils pour garantir la fiabilité des systèmes informatiques (trains, lignes automatisées de métro, etc.). Un point d’intersection de ces deux domaines est une collection de théorèmes dits de préservation, et c’est sur ces théorèmes que j’ai travaillé durant ma thèse, d’où le titre baroque “Théorèmes de préservation du premier ordre en théorie des modèles finis : localité, topologie et constructions limites”, qui résume assez bien mes travaux faisant le pont entre la logique (informatique) et la topologie (mathématique).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Le Prix Ackermann.&lt;&#x2F;strong&gt; Recevoir le prix &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;&quot;&gt;Ackermann 2024&lt;&#x2F;a&gt; est pour moi très important, car c’est une reconnaissance de mon travail et de mes compétences, mais aussi de l’intérêt porté par la communauté scientifique à des domaines très théoriques qui sont moins en vogue que, par exemple, l’apprentissage automatique ou l’informatique quantique. Le fait que mon co-lauréat, Gaëtan Douéneau-Tabot, soit également un camarade de promotion est pour moi une fierté supplémentaire, illustrant s’il le fallait la qualité de la formation dispensée à l’ENS Paris-Saclay. Ce prix est aussi une occasion pour saluer de nouveau mes deux directeurs de thèse &lt;a href=&quot;http:&#x2F;&#x2F;www.lsv.fr&#x2F;~goubault&#x2F;&quot;&gt;Jean-Goubault Larrecq&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;en&#x2F;users&#x2F;schmitz&#x2F;index&quot;&gt;Sylvain Schmitz&lt;&#x2F;a&gt;, qui, et je m’en rends compte un peu plus chaque jour, ont été des guides exceptionnels tant sur le plan humain que scientifique. Je tiens aussi à remercier Gaëtan, mon co-lauréat, pour sa collaboration et son amitié, qui m’ont ouvert de nouveaux horizons et fait découvrir des domaines de recherche passionnants en théorie des automates.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;L’ENS Paris-Saclay.&lt;&#x2F;strong&gt; En sus d’une formation en informatique et mathématique de très haut niveau et toujours en forte connexion avec la recherche académique, l’ENS Paris-Saclay m’a permis de bénéficier d’un environnement de travail exceptionnel, avec des professeurs de qualité, des promotions fantastiques et un accès privilégié au monde de la recherche (stages, séminaires, conférences). Mais au-delà de la formation académique, l’ENS Paris-Saclay donne également une rigueur de travail, une humilité et une ouverture d’esprit qui sont des qualités essentielles, qui sont autant de qualités difficiles à quantifier, mais qui distinguent les normaliens aussi bien en recherche que dans le monde professionnel. Je profite de cet encart pour insister sur l’apport que peut avoir une formation à l’ENS Paris-Saclay en dehors de l’enseignement ou la recherche académique, et que le secteur public hors académique (même hors concours) est une voie tout à fait naturelle et qui reste dans la continuité de l’engagement pour l’intérêt général qui à mon sens fait partie des valeurs de l’ENS Paris-Saclay.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🎉 Ackermann Award 2024 🎉</title>
        <published>2024-11-13T00:00:00+00:00</published>
        <updated>2024-11-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/ackermann-award/"/>
        <id>https://aliaume.fr/site/posts/ackermann-award/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/ackermann-award/">&lt;p&gt;Suite à mon billet décrivant &lt;a href=&quot;&#x2F;prix-de-these-candidature.html&quot;&gt;comment candidater à un prix de thèse&lt;&#x2F;a&gt;, je suis très heureux de vous annoncer que j’ai reçu le prix &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;&quot;&gt;Ackermann&lt;&#x2F;a&gt; 2024 récompensant &lt;a href=&quot;&#x2F;posts&#x2F;2023-09-20-post-defense.html&quot;&gt;ma thèse de doctorat&lt;&#x2F;a&gt;. Ce prix récompense chaque année une thèse exceptionnelle en logique et est décerné par &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;&quot;&gt;l’EACSL&lt;&#x2F;a&gt; lors de la conférence &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;csl-conferences&#x2F;&quot;&gt;CSL&lt;&#x2F;a&gt;. Plus d’informations sur le prix et mon co-lauréat &lt;a href=&quot;https:&#x2F;&#x2F;gdoueneau.github.io&#x2F;&quot;&gt;Gaëtan Douéneau-Tabot&lt;&#x2F;a&gt; sont disponibles sur la page &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;&quot;&gt;officielle du prix de thèse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Je tiens à remercier mes directeurs de thèse, mes collègues et ma famille pour leur soutien tout au long de ces années et je considère comme un formidable encouragement la reconnaissance attestée de mon travail par ce prix.&lt;&#x2F;p&gt;
&lt;p&gt;Pour celles et ceux qui se demandent à quoi ressemble une candidature à un prix de thèse je vous propose, en complément du billet précédent sur le sujet, de consulter &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;prix&#x2F;ackermann-dissertation-abstract.pdf&quot;&gt;mon dossier de candidature&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🧯 Bibadac is Born</title>
        <published>2024-10-14T00:00:00+00:00</published>
        <updated>2024-10-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/bibadac-is-born/"/>
        <id>https://aliaume.fr/site/posts/bibadac-is-born/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/bibadac-is-born/">&lt;p&gt;&lt;strong&gt;TL;DR&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;bibadac-web-woht.shuttle.app&#x2F;&quot;&gt;Bibadac&lt;&#x2F;a&gt; est un outil en ligne de commande permettant de gérer une bibliographie écrite avec &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;BibTeX&quot;&gt;BibTeX&lt;&#x2F;a&gt;. Il est conçu pour répondre à des besoins simples et récurrents comme : formater une bibliographie et vérifier la cohérence des entrées. Son nom est tiré du verbe polonais &lt;em&gt;biadać&lt;&#x2F;em&gt; qui signifie &lt;em&gt;se plaindre&lt;&#x2F;em&gt;, &lt;em&gt;gémir&lt;&#x2F;em&gt;, &lt;em&gt;se lamenter&lt;&#x2F;em&gt;, en ajoutant un &lt;em&gt;b&lt;&#x2F;em&gt; pour &lt;em&gt;Bib TeX&lt;&#x2F;em&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bibadać (verbe):&lt;&#x2F;strong&gt; faire pleurer des fichiers BibTeX.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quel-type-de-chercheur-chercheuse-êtes-vous&quot;&gt;Quel type de chercheur &#x2F; chercheuse êtes-vous ?&lt;&#x2F;h2&gt;
&lt;p&gt;Écrire des articles nécessite de citer des articles. En pratique pour les informaticien·e·s et les mathématicien·ne·s, cela signifie interagir beaucoup avec le format de bibliographies &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;BibTeX&quot;&gt;BibTeX&lt;&#x2F;a&gt;. Ce “format” est très flexible, et en conséquence, il est très facile de faire des erreurs. Cet outil peut vous être utile si vous avez déjà :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Modifié des entrées BibTeX à la main pour retirer des champs.&lt;&#x2F;li&gt;
&lt;li&gt;Pleuré devant des entrées BibTeX illisible parce que mal formatées.&lt;&#x2F;li&gt;
&lt;li&gt;Eu des problèmes de cohérence entre les entrées de votre fichier BibTeX.&lt;&#x2F;li&gt;
&lt;li&gt;Cité des articles en utilisant des liens morts.&lt;&#x2F;li&gt;
&lt;li&gt;Ajouté des champs dans fichier écrit par un·e collègue.&lt;&#x2F;li&gt;
&lt;li&gt;Eu des erreurs de compilation de votre fichier LaTeX à cause de votre fichier BibTeX.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;bibadac&quot;&gt;Bibadac&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Bibadać&lt;&#x2F;strong&gt; est un outil en ligne de commande écrit en &lt;a href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;&quot;&gt;Rust&lt;&#x2F;a&gt; pour gérer des fichiers BibTeX. Il est conçu pour être &lt;em&gt;simple&lt;&#x2F;em&gt; et &lt;em&gt;rapide&lt;&#x2F;em&gt;. Pour lister les potentielles erreurs dans un fichier &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;bibadac&lt;&#x2F;span&gt; check mon-fichier.bib&lt;&#x2F;code&gt;. Pour formater un fichier &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;bibadac&lt;&#x2F;span&gt; format mon-fichier.bib&lt;&#x2F;code&gt;. Pour télécharger les dernières versions des entrées bibliographiques ainsi que &lt;em&gt;tous les PDFs associés&lt;&#x2F;em&gt; &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;bibadac&lt;&#x2F;span&gt; setup mon-fichier.bib&lt;&#x2F;code&gt;.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Encore un nouvel outil ?&lt;&#x2F;strong&gt; Il existe déjà de nombreux outils pour gérer des fichiers BibTeX. Cependant, ces outils sont souvent &lt;em&gt;pénibles&lt;&#x2F;em&gt;. Ils utilisent des interpréteurs (Python, Node.js) et sont donc relativement lourds à déployer, alors que Bibadać est un binaire d’à peine 2 Mo.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; De plus, ils sont souvent assez &lt;em&gt;stricts&lt;&#x2F;em&gt; sur le format de fichier : des erreurs de syntaxes mineures peuvent les faire planter. Là où Bibadać se démarque, c’est qu’il utilise &lt;a href=&quot;https:&#x2F;&#x2F;tree-sitter.github.io&#x2F;tree-sitter&#x2F;&quot;&gt;Tree Sitter&lt;&#x2F;a&gt; pour analyser le fichier d’entrée : cela permet de faire des diagnostics &lt;em&gt;pertinents&lt;&#x2F;em&gt; même sur des fichiers invalides, et de formater des fichiers invalides sur le principe du &lt;em&gt;meilleur effort&lt;&#x2F;em&gt;. De plus, son fonctionnement &lt;em&gt;sans état&lt;&#x2F;em&gt; le rend particulièrement adapté à des pipelines de compilation ou d’intégration continue.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Fonctionnalités.&lt;&#x2F;strong&gt; La principale fonction de Bibadać est de vérifier la cohérence des entrées d’un fichier BibTeX. Cela signifie vérifier l’absence de doublons, de champs vides, d’URLs qui ne sont pas accessibles, de versions périmées d’un document, etc. En plus de cela, Bibadać propose de formater un fichier BibTeX pour le rendre plus lisible, avec la possibilité &lt;em&gt;d’enrichir&lt;&#x2F;em&gt; les entrées avec des informations provenant d’un autre fichier BibTeX. Enfin, Bibadać propose de télécharger des versions “standardisées” des citations issues du fichier d’entrée ainsi que (presque) tous les PDFs associés.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Usage typique.&lt;&#x2F;strong&gt; Vous commencez à collaborer sur un projet, vous téléchargez le fichier BibTeX de votre collègue. Vous lancez &lt;code&gt;bibadac setup&lt;&#x2F;code&gt; pour obtenir tous les documents nécessaires ainsi qu’une base de référence bibliographique &lt;em&gt;à jour&lt;&#x2F;em&gt;. Vous pouvez ensuite vous servir de cette base pour vérifier votre fichier BibTeX, et le formater, l’enrichir au besoin, ou en supprimer certains champs inutiles. Avant de publier votre article, vous pouvez lancer une dernière fois &lt;code&gt;bibadac check&lt;&#x2F;code&gt; pour vérifier que tout est en ordre.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;technologies-développement-déploiement&quot;&gt;Technologies, Développement, Déploiement&lt;&#x2F;h2&gt;
&lt;p&gt;Comme déjà mentionné, Bibadać est écrit en &lt;a href=&quot;https:&#x2F;&#x2F;www.rust-lang.org&#x2F;&quot;&gt;Rust&lt;&#x2F;a&gt;. Le langage possède une excellente communauté, beaucoup de bibliothèques et une &lt;em&gt;toolchain&lt;&#x2F;em&gt; fabuleuse. Le cœur de Bibadać est basé sur &lt;a href=&quot;https:&#x2F;&#x2F;tree-sitter.github.io&#x2F;tree-sitter&#x2F;&quot;&gt;Tree-sitter&lt;&#x2F;a&gt;, un &lt;em&gt;parser&lt;&#x2F;em&gt; générique qui permet de faire des analyses syntaxiques de fichiers de manière efficace et &lt;em&gt;itérative&lt;&#x2F;em&gt;.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Le seul et unique problème avec ce langage est son utilisation des &lt;em&gt;durées de vie nommées&lt;&#x2F;em&gt; qui s’écrivent avec la syntaxe &lt;code class=&quot;sourceCode rust&quot;&gt;&lt;span class=&quot;op&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;ot&quot;&gt;&amp;#39;a&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;, or :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;J’écris avec un clavier &lt;a href=&quot;https:&#x2F;&#x2F;bepo.fr&#x2F;&quot;&gt;BÉPO&lt;&#x2F;a&gt; et je n’ai pas envie de changer de disposition pour écrire du code.&lt;&#x2F;li&gt;
&lt;li&gt;J’utilise un MacPro d’occasion sans y avoir installé Linux, et le &lt;em&gt;driver&lt;&#x2F;em&gt; &lt;a href=&quot;https:&#x2F;&#x2F;bepo.fr&#x2F;&quot;&gt;bépo&lt;&#x2F;a&gt; ne permet pas facilement de taper le caractère &lt;code&gt;&#x27;&lt;&#x2F;code&gt;, qui est systématiquement remplacé par un caractère &lt;code&gt;’&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Afin de faire une petite démonstration en ligne de Bibadać, j’ai écrit une interface web minimaliste, et c’est à ce moment là que j’ai rencontré le premier bémol : j’espérais pouvoir compiler Bibadać vers du WebAssembly pour avoir un démonstrateur sur une page statique, mais cela n’est pas possible à cause de la dépendance à &lt;a href=&quot;https:&#x2F;&#x2F;tree-sitter.github.io&#x2F;tree-sitter&#x2F;&quot;&gt;Tree-sitter&lt;&#x2F;a&gt; et des &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tree-sitter&#x2F;tree-sitter&#x2F;discussions&#x2F;1550&quot;&gt;incompatibilités d’ABI WebAssembly&lt;&#x2F;a&gt;. J’ai donc dû construire une petite API en ligne. Pour sa mise en route j’ai utilisé le service &lt;a href=&quot;https:&#x2F;&#x2F;shuttle.rs&#x2F;&quot;&gt;shuttle.rs&lt;&#x2F;a&gt;, destiné à déployer des applications Rust en ligne de manière simple, rapide, et &lt;em&gt;sans configuration&lt;&#x2F;em&gt;.&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; C’est particulièrement simple à utiliser (une seule commande), et le déploiement de l’application est fait en une dizaine de minutes lors du premier build.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Un jour, peut-être, Bibadać sera un outil incontournable. En attendant, testez le en ligne sur &lt;a href=&quot;https:&#x2F;&#x2F;bibadac-web-woht.shuttle.app&#x2F;&quot;&gt;🧯 Bibadać — Web Demo&lt;&#x2F;a&gt;. Si vous êtes plutôt &lt;em&gt;CURL&lt;&#x2F;em&gt;ieux, vous pouvez directement utiliser l’API:&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode bash&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ex&quot;&gt;curl&lt;&#x2F;span&gt; &lt;span class=&quot;at&quot;&gt;-X&lt;&#x2F;span&gt; POST &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;     &lt;span class=&quot;at&quot;&gt;-H&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;Content-Type: plain&#x2F;text&amp;quot;&lt;&#x2F;span&gt; &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;#cb1-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;     &lt;span class=&quot;at&quot;&gt;-d&lt;&#x2F;span&gt; @mon-fichier.bib &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;#cb1-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;     https:&#x2F;&#x2F;bibadac-web-woht.shuttle.app&#x2F;api&#x2F;check&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Attention, l’utilisation de Sci-Hub est illégale dans de nombreux pays. Si vous utilisez cette fonctionnalité, vous êtes seul responsable de vos actes. En revanche, les documents téléchargés sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; ou des pages personnelles d’auteurs n’ont en général pas de problèmes de légalité.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Notons que c’est quand même énorme pour un si petit programme.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;Pour le moment, ce n’est pas utilisé, mais dans la perspective d’écrire un &lt;em&gt;plugin&lt;&#x2F;em&gt; pour un éditeur de texte, cette fonction permet de faire des analyses d’un fichier &lt;em&gt;pendant que l’utilisateur le modifie&lt;&#x2F;em&gt;.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;C’est-à-dire, que toute la configuration est extraite de l’exécutable lui-même (ou plutôt, de la phase de compilation de l’exécutable), ce qui veut dire que la configuration est toujours &lt;em&gt;à jour&lt;&#x2F;em&gt; avec le code.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Des trains fiables en Europe ?</title>
        <published>2024-10-13T00:00:00+00:00</published>
        <updated>2024-10-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/trains-europe-fiabilite/"/>
        <id>https://aliaume.fr/site/posts/trains-europe-fiabilite/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/trains-europe-fiabilite/">&lt;p&gt;Dans cet article je vais essayer de répondre avec toute la malhonnêteté
possible à la question suivante : &lt;em&gt;peut-on prendre le train en Europe pour
des trajets professionnels réguliers ?&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pour ce faire, je vais me baser sur mon expérience personnelle des trajets
européens en trains depuis mon arrivée en Pologne en 2023. Comme on parle
de trajets &lt;strong&gt;professionnels&lt;&#x2F;strong&gt;, il y a plusieurs questions à prendre en compte.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Est-il &lt;em&gt;facile&lt;&#x2F;em&gt; d’acheter un long trajet en train ?&lt;&#x2F;li&gt;
&lt;li&gt;Est-il &lt;em&gt;facile&lt;&#x2F;em&gt; de &lt;strong&gt;faire acheter&lt;&#x2F;strong&gt; un long trajet en train par son
employeur ?&lt;&#x2F;li&gt;
&lt;li&gt;Y-a-t-il souvent des &lt;em&gt;problèmes&lt;&#x2F;em&gt; sur le trajet ? Quel est l’impact de ces
problèmes ?&lt;&#x2F;li&gt;
&lt;li&gt;Que se passe-t-il en cas de &lt;em&gt;problème&lt;&#x2F;em&gt; sur le trajet ? (Remboursement,
réacheminement, etc.)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;le-moment-anecdotique&quot;&gt;Le moment anecdotique&lt;&#x2F;h2&gt;
&lt;p&gt;Pour mettre en contexte, j’ai effectué un trajet Varsovie – Bordeaux en train
pour me rendre à une conférence en Septembre 2024. Le premier train  de ce long
trajet était un train de nuit Varsovie – Munich. À cause des fortes pluies
Europe Centrale, le train a fait demi-tour à la frontière entre la Pologne et la
République Tchèque. Bien entendu, le reste des trains n’étant pas sur le même
billet, ni même avec la même compagnie, ils n’ont pas été remboursés. Il existe
un [règlement européen][reg-eu] qui protège les passagers de ce genre de
situation, mais&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;en pratique&lt;&#x2F;em&gt; je n’ai jamais réussi à le faire appliquer.&lt;&#x2F;li&gt;
&lt;li&gt;à 3h du matin, dans un train de nuit qui fait demi tour, le service client
de la compagnie ne répond pas et &lt;em&gt;personne&lt;&#x2F;em&gt; ne vous aide à trouver une autre
manière d’effectuer votre trajet.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Pour continuer dans l’anecdotique, le train de nuit Munich – Varsovie qui a été
annulé à l’aller l’a aussi été au retour... Et on touche là aux problèmes de
communication des compagnies ferroviaires. Le billet retour était acheté sur le
site de la Deutsche Bahn, mais était probablement opéré en partie par OBB (la
compagnie autrichienne) et la PKP (la compagnie polonaise). Il a fallu attendre
&lt;strong&gt;le jour même&lt;&#x2F;strong&gt; pour savoir que le train n’existait plus, et ce &lt;em&gt;sans aucune
notification&lt;&#x2F;em&gt; de la part d’aucune des compagnies de train concernées. Pire,
jusqu’à la veille du départ il était possible d’acheter ce même billet en
ligne.&lt;&#x2F;p&gt;
&lt;p&gt;Terminons la séance d’anecdotes ici et prenons un peu de hauteur sur le sujet.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;l-achat-d-un-billet&quot;&gt;L’achat d’un billet&lt;&#x2F;h2&gt;
&lt;p&gt;Pour un trajet entre la France et la Pologne, il faut passer &lt;em&gt;a minima&lt;&#x2F;em&gt; par
l’Allemagne, et potentiellement par la Belgique, l’Autriche ou la République
Tchèque. Dans ce cadre, un certain nombre de compagnies ferroviaires sont
impliquées, et il est souvent &lt;em&gt;difficile&lt;&#x2F;em&gt; de trouver un billet unique couvrant
l’ensemble du trajet.&lt;&#x2F;p&gt;
&lt;p&gt;Si on veut utiliser le site d’une unique compagnie ferroviaire, le plus logique
est celui de la Deutsche Bahn, qui propose des trajets internationaux vers la
France &lt;strong&gt;et&lt;&#x2F;strong&gt; la Pologne. Ainsi, le trajet Varsovie — Berlin peut être vendu
par la PKP (la compagnie polonaise) ou par la Deutsche Bahn (la compagnie
allemande), &lt;em&gt;mais pas toujours&lt;&#x2F;em&gt; et &lt;em&gt;pas forcément&lt;&#x2F;em&gt; au même prix. De plus, il
n’est plus possible depuis le changement de &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.eurostar.com&#x2F;fr-fr&#x2F;a-propos-deurostar&#x2F;thalys-devient-eurostar&quot;&gt;Thalys vers Eurostar&lt;&#x2F;a&gt; d’acheter un
billet Allemagne — France depuis le site de la Deutsche Bahn s’il est opéré par
Eurostar. Dans un cas un peu complexe comme un trajet Varsovie — Bordeaux, il
faudra probablement utiliser &lt;em&gt;chacune&lt;&#x2F;em&gt; des compagnies nationales.&lt;&#x2F;p&gt;
&lt;p&gt;Il existe bien des sites permettant l’achat de billets de train comme
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.trainline.fr&quot;&gt;Trainline&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.omio.fr&quot;&gt;Omio&lt;&#x2F;a&gt;, ou
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.raileurope.com&quot;&gt;RailEurope&lt;&#x2F;a&gt;, mais ceux-ci sont souvent plus chers
que l’achat directement sur le site (frais de gestion), et tous les trajets ne
sont pas visible (limités par l’accès aux API des compagnies ferroviaires). Un
autre désavantage de ces sites est qu’ils forment une couche supplémentaire
entre le client et la compagnie ferroviaire, ce qui rend plus difficile la
résolution de problèmes, d’autant plus que dans un trajet &lt;em&gt;professionnel&lt;&#x2F;em&gt;, il y
a probablement un troisième parti impliquée (l’agence de voyage).&lt;&#x2F;p&gt;
&lt;p&gt;S’ajoute à cela la difficulté de prévoir la disponibilité de trains. Par
exemple, le train de nuit &quot;Paris - Berlin&quot; annoncé en grande pompe
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nightjet.com&#x2F;fr&#x2F;destinations&#x2F;paris-berlin.html&quot;&gt;ici&lt;&#x2F;a&gt; est
régulièrement arrêté pour cause de travaux, comme c’est le cas en ce moment :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Due to extensive construction work in Germany and France, some Nightjet
connections cannot be offered between 12 August and 25 October 2024. The
connections affected are Vienna - Paris, Berlin - Paris and Berlin -
Brussels. From 28 October, all routes will be offered again as scheduled.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Enfin, quand ceux-ci sont disponibles, il est souvent difficile de les acheter.
Certains trains de nuits internationaux ne sont pas réservables plus d’un mois
en avance, et seulement sur certains sites (NightJet, Deutsche Bahn, PKP, SNCF,
etc.) en fonction de l’opérateur sous-jacent.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-faire-achat&quot;&gt;Le « faire achat »&lt;&#x2F;h2&gt;
&lt;p&gt;Vous avez trouvé vos billets de train, avec les prix, des correspondances qui
laissent la place à un retard d’au moins 20 minutes, aux jours qui vous
permettent d’assister à l’événement professionnel auquel vous participez. C’est
là qu’intervient la &lt;em&gt;seconde partie&lt;&#x2F;em&gt; du jeu, et celle-ci sera spécifique à
votre employeur.&lt;&#x2F;p&gt;
&lt;p&gt;L’Université de Varsovie a une politique &lt;em&gt;pro-avion&lt;&#x2F;em&gt;, c’est-à-dire, une agence
de voyage dédiée qui ne réserve (essentiellement) que des billets d’avion. En
particulier, cela veut dire que l’étape 1 &quot;Trouver des billets&quot; est &lt;em&gt;à votre
charge&lt;&#x2F;em&gt;. Cette étape est d’autant plus nécessaire que pour que l’agence de
voyage accepte de réserver un trajet en train il lui faudra&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Le détail &lt;em&gt;précis&lt;&#x2F;em&gt; de tous les trains (numéros, heures) avec le prix total
afin que l’agent de voyage &lt;em&gt;refasse exactement la même chose que vous&lt;&#x2F;em&gt; mais
puisse payer...&lt;&#x2F;li&gt;
&lt;li&gt;Un trajet alternatif en avion, avec son prix, afin de justifier du fait que
le potentiel surcoût du trajet en train est raisonnable.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;em&gt;Cependant&lt;&#x2F;em&gt;, vous n’avez pas terminé. En effet, sur un trajet aussi long, il
peut être intéressant de prendre des trains de nuits, ou de dormir dans une
ville intermédiaire. Dans ce cas, il faudra justifier que &lt;em&gt;l’allongement de la
durée du séjour&lt;&#x2F;em&gt; n’engendre pas non plus un surcoût significatif. Vous avez
dans le pire des cas à fournir &lt;strong&gt;4 estimations&lt;&#x2F;strong&gt; au total : avion long séjour,
avion court séjour, train long séjour, train court séjour.&lt;&#x2F;p&gt;
&lt;p&gt;Une fois que tout est validé par le Doyen de l’université, l’agence peut
réserver les billets qui ont entre temps vu leur prix augmenter de 20% (ou
plus) et&#x2F;ou qui ne sont plus réservables.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;les-problemes-de-trajet&quot;&gt;Les problèmes de trajet&lt;&#x2F;h2&gt;
&lt;p&gt;Admettons que vous ayez réussi à acheter vos billets, que votre employeur ait
accepté de les payer, et que vous soyez en train de voyager. Il reste encore à
... arriver à destination. Vous êtes désormais dans la &lt;em&gt;3ème partie&lt;&#x2F;em&gt; du jeu.
Pour un voyage non-professionnel, cette partie est en général moins stressante,
car on peut se permettre d’arriver avec un ou deux jours de retard.&lt;&#x2F;p&gt;
&lt;p&gt;Pour donner une petite idée des problèmes qui peuvent arriver, voici une liste
(non exhaustive) des embûches que j’ai rencontrées :&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;2024-11-10.&lt;&#x2F;strong&gt; Le trajet Marseille — Paris dure 7h30 du 9 au 12 novembre
2024 inclus pour cause de modernisation de la ligne à grande vitesse entre
Lyon et Paris. Dommage, c’est le moment où je termine mon tour de France des
universités.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2024-10-01.&lt;&#x2F;strong&gt; Le train de nuit Munich — Varsovie est annulé suite aux
fortes pluies en europe centrale, et faute de trajet alternatif pour cause
de travaux entre Berlin et Frankfurt (Oder), je réserve un bus de nuit Paris
— Varsovie (25h de trajet).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2024-09-14.&lt;&#x2F;strong&gt; Le train de nuit Varsovie — Munich est arrêté pour cause de
fortes pluies. Aucun trajet de remplacement n’est mis à disposition. Pour
assister à la conférence Highlights qui se déroule à Bordeaux, j’utilise un
avion.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2024-09-16.&lt;&#x2F;strong&gt; Le trajet Varsovie — Berlin voit sa durée augmenter de 2
heures suite au remplacement d’une portion par un &lt;em&gt;bus de substitution&lt;&#x2F;em&gt;.
Tout espoir d’attraper une correspondance &quot;raisonnable&quot; est inutile.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2024-08-25.&lt;&#x2F;strong&gt; Suite à des retards de trains en Allemagne sur la ligne Köln
— Berlin, je rate le dernier train partant de Berlin pour aller à Varsovie
et dort à Berlin.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;2024-05-18.&lt;&#x2F;strong&gt; Suite à un changement d’horaires de trains, mon trajet Paris
— Varsovie n’est pas faisable, je prends un bus de nuit depuis Frankfurt
(Oder) vers Varsovie après avoir été &lt;em&gt;très mal conseillé&lt;&#x2F;em&gt; par un employé de
la Deutsche Bahn.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ce petit panorama des &lt;em&gt;bugs&lt;&#x2F;em&gt; du train en Europe n’est pas là pour blâmer
particulièrement telle ou telle compagnie, mais pour objectiver le fait que
&lt;em&gt;préparer un long trajet en train&lt;&#x2F;em&gt; qui contient &lt;em&gt;des contraintes horaires&lt;&#x2F;em&gt;
(relativement flexibles ici, à un jour près) est une tâche &lt;strong&gt;non triviale&lt;&#x2F;strong&gt; et
&lt;strong&gt;non reproductible&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;les-problemes-de-remboursement-reacheminement&quot;&gt;Les problèmes de remboursement &#x2F; réacheminement&lt;&#x2F;h2&gt;
&lt;p&gt;Les procédures de remboursement sont souvent &lt;em&gt;compliquées&lt;&#x2F;em&gt; et &lt;em&gt;dans la langue
du pays de la compagnie ferroviaire&lt;&#x2F;em&gt;. Si vous appelez le service client de la
Deutsche Bahn, il vous faudra parler allemand, sauf si vous désirez être mis en
attente sur une ligne en anglais (j’ai testé, au bout de 3h d’attente je me
suis résigné). Le plus dur est de faire valoir que le train annulé&#x2F;retardé a
&lt;em&gt;empêché&lt;&#x2F;em&gt; de prendre un autre train, et que le remboursement doit donc couvrir
l’intégralité du trajet (plus les frais engagés pour le trajet alternatif). En
pratique, je n’ai jamais eu que des remboursements partiels. Peut-être qu’avec
un peu plus de persévérance, ou en passant par un service de résolution de
litiges, j’aurais pu obtenir plus.&lt;&#x2F;p&gt;
&lt;p&gt;Pour ce qui est du réacheminement, la seule chose que j’ai pu obtenir est une
permission de &quot;prendre n’importe quel train&quot; pour effectuer le trajet dans la
journée, qui est donnée par la Deutsche Bahn en cas d’annulation. Sur les
trajets un peu &lt;em&gt;complexes&lt;&#x2F;em&gt; (&amp;gt; 10h et plusieurs correspondances), il est peu
probable que vous puissiez vraiment utiliser cette permission, car elle ne
couvre pas les trains de nuit, et ne fonctionnera pas le lendemain.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Il est &lt;strong&gt;possible&lt;&#x2F;strong&gt; de prendre le train. Il est même possible de prendre le
train pour faire de &lt;strong&gt;très longues distances&lt;&#x2F;strong&gt;. Il est en revanche
&lt;strong&gt;difficile&lt;&#x2F;strong&gt; de prendre le train pour des trajets professionnels &quot;réguliers&quot;.
Ce billet est là pour prendre à contrepied l’idée que le train est un moyen de
transport &lt;em&gt;simple&lt;&#x2F;em&gt; et &lt;em&gt;efficace&lt;&#x2F;em&gt; comme on peut le lire dans les nombreux posts
LinkedIn de personnes qui ont pris le train une fois pour un (très long)
trajet, et qui s’extasient devant la qualité du service. Oui, il est possible
de faire Paris — Istambul. Non, il n’est pas envisageable de &lt;em&gt;systématiser&lt;&#x2F;em&gt; ce
type de trajet en l’état actuel du monde.&lt;&#x2F;p&gt;
&lt;p&gt;Cet &quot;état actuel du monde&quot; est un mélange de problèmes techniques (pas d’API
ouverte pour les horaires de trains, pas de guichet unique d’achat de billets,
pas de source d’information fiable sur l’état du réseau), de problèmes
d’organisation (voyages professionnels très courts et peu flexibles, pas de
politique volontariste au sein des universités, une protection théorique des
passagers très faible en comparaison de l’avion), et de problèmes structurels
du réseau (changements de conducteurs, écartement des rails, travaux de
modernisation, retards fréquents en Allemagne, ...).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🚴 Tour de France en Train</title>
        <published>2024-10-10T00:00:00+00:00</published>
        <updated>2024-10-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/varsovie-tour-de-france/"/>
        <id>https://aliaume.fr/site/posts/varsovie-tour-de-france/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/varsovie-tour-de-france/">&lt;p&gt;Si vous avez une connaissance même minimale du monde de la recherche académique, vous savez certainement que l’obtention d’un poste dit &lt;em&gt;permanent&lt;&#x2F;em&gt; est un objectif assez difficile à atteindre.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Comme dans tout système où il y a un nombre limité de places (et une certaine pression pour les obtenir), des systèmes de sélection sont développés. Idéalement, la fonction publique utilise le système de &lt;em&gt;concours&lt;&#x2F;em&gt; pour sélectionner les candidats les plus &lt;em&gt;compétents&lt;&#x2F;em&gt;. Cependant, pour un poste de chercheur ou d’enseignant-chercheur, la notion même de &lt;em&gt;compétence&lt;&#x2F;em&gt; est très difficile à évaluer objectivement et précisément.&lt;&#x2F;p&gt;
&lt;p&gt;Entendons bien qu’il est possible de comparer des candidats sur des critères objectifs comme le nombre de publications, où des critères subjectifs comme leur impact, leur pertinence ou l’alignement avec les objectifs nationaux de recherche, mais au-delà du tri &lt;em&gt;excellent&lt;&#x2F;em&gt;, &lt;em&gt;bon&lt;&#x2F;em&gt;, &lt;em&gt;moyen&lt;&#x2F;em&gt;, &lt;em&gt;mauvais&lt;&#x2F;em&gt;, il est très difficile de comparer les candidats au sein de ces quatre grandes catégories. Faut-il privilégier un séjour à l’étranger, une publication qui reçoit un prix, une collaboration avec un chercheur de renom, l’écriture d’un livre ?&lt;&#x2F;p&gt;
&lt;p&gt;Dans ce contexte, il y a un système relativement simple et efficace déployé dans tout système assez complexe : les relations sociales. Si vous avez déjà discuté avec les membres du jury, où que ceux-ci connaissent vos travaux &lt;em&gt;avant d’avoir à lire votre dossier&lt;&#x2F;em&gt;, vous partez avec un avantage certain. Bien que ce système ne soit décrit nulle part, il est &lt;em&gt;évident&lt;&#x2F;em&gt; pour tout candidat qu’il &lt;strong&gt;faut&lt;&#x2F;strong&gt; venir présenter ses travaux de recherche dans les universités avant d’y déposer une candidature.&lt;&#x2F;p&gt;
&lt;p&gt;Je me lance donc dans un petit tour de France des universités en partant de la Pologne. Pour limiter l’impact de cette petite escapade, j’utilise des trains pour mes déplacements, ce qui fait d’autant plus de sens que la majorité d’entre eux se situeront en France. Je vais donc partir de Varsovie pour Bordeaux en passant par Berlin, Essen, Paris, Montpellier, Marseille et retour à Paris. Le trajet, comme toujours, &lt;em&gt;ne sera pas reproductible&lt;&#x2F;em&gt;, mais donne une idée des prix et de l’impact écologique d’un tel voyage. Pour le calcul des émissions &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;%C3%89quivalent_CO2&quot;&gt;d’équivalent CO2&lt;&#x2F;a&gt;, j’ai utilisé le site &lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&quot;&gt;Ecopassenger&lt;&#x2F;a&gt;, en suivant la même méthodologie que pour le &lt;a href=&quot;&#x2F;posts&#x2F;varsovie-bordeaux-highlights.html&quot;&gt;premier billet de la série&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;caption&gt;Voyage en train de Varsovie à Bordeaux, Montpellier, Marseille et Paris.&lt;&#x2F;caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 12%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 14%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 14%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 14%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 15%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 9%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 9%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 8%&quot; &#x2F;&gt;
&lt;&#x2F;colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Numéro Train&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Départ (Gare)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Arrivée (Gare)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Départ (Temps)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Arrivée (Temps)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Prix (€)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;CO2 (kg)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;EC 248&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Varsovie&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Berlin&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 05:00:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 09:55:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;30&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;49,6&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;ICE 940&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Berlin&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Essen&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 11:32:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 15:35:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;48&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;12,7&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;EST 9474&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Essen&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Paris&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 15:59:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-30 20:05:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;102&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;6,7&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;INOUI 12263&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Paris&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Bordeaux&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-04 16:04:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-04 18:14:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;55&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2,4&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;INTERCITES 4669&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Bordeaux&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Montpellier&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-05 18:23:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-05 22:58:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;30&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;1,8&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;INTERCITES 4663&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Montpellier&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Marseille&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-07 19:01:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-07 20:36:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;25&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;0,63&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;INOUI 6132&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Marseille&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Paris&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-08 19:04:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-08 22:22:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;65&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;3,2&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;NJ 40469&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Paris&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Berlin&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-19 19:12:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-20 09:16:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;64&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;17,1&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;EC 45&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Berlin&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Varsovie&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-20 09:52:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-11-20 15:08:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;30&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;50&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;449&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;144,13&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;TOTAL&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;figure id=&quot;map-23addc77e31784abf5d1bc061e157dcf9f1276fdfb3482d7edfb56cdc16a7bd8&quot; data-sha256=&quot;23addc77e31784abf5d1bc061e157dcf9f1276fdfb3482d7edfb56cdc16a7bd8&quot; alt=&quot;Une carte de l’europe allant de la France jusqu’à la Pologne où les villes de Varsovie, Berlin, Essen, Paris, Bordeaux, Montpellier et Marseille sont distinguées par des indicateurs verts. Les trajets entre ces villes en train sont des lignes droites bleues traçant une constellation.&quot; title=&quot;Mon tour de France, visuellement.&quot; data-geo-map=&quot;true&quot;&gt;
&lt;p&gt;&lt;img src=&quot;map-23addc77e31784abf5d1bc061e157dcf9f1276fdfb3482d7edfb56cdc16a7bd8.png&quot; title=&quot;Mon tour de France, visuellement.&quot; alt=&quot;Une carte de l’europe allant de la France jusqu’à la Pologne où les villes de Varsovie, Berlin, Essen, Paris, Bordeaux, Montpellier et Marseille sont distinguées par des indicateurs verts. Les trajets entre ces villes en train sont des lignes droites bleues traçant une constellation.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;figcaption&gt;Mon tour de France, visuellement.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;La comparaison avec l’avion n’a tout simplement pas de sens : qui prendrait un avion pour faire Paris - Bordeaux, ou Montpellier - Marseille ? Le découpage même du trajet en plusieurs villes est très adapté à ce moyen de transport. Cela donne quelques pistes pour favoriser l’utilisation du train dans le monde de la recherche : créer une recherche plus &lt;em&gt;itinérante&lt;&#x2F;em&gt; et &lt;em&gt;allonger la durée des séjours&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Je profite de cette seconde analyse des impacts écologiques pour noter que les deux tiers de l’impact écologique de ce voyage sont dus au trajet Varsovie - Berlin et Berlin—Varsovie, dû à la longueur du trajet et à l’utilisation de locomotives diesel. Pour ce trajet, le train est un moyen de transport qui est à peu près aussi polluant qu’un autocar rempli, mais apporte un confort indéniable.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Une autre remarque amusante est le prix du Essen—Paris à l’aller qui est plus élevé que le prix du Paris-Varsovie au retour, ce que j’impute aux pratiques commerciales de la compagnie Eurostar.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Pour un exemple relativement &lt;em&gt;frais&lt;&#x2F;em&gt; d’une telle “découverte journalistique” je renvoie &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Wo8VgZLpv-0?t=226&quot;&gt;à un entretien avec Yasmine Belkaid&lt;&#x2F;a&gt; sur France Inter pour l’émission le 7&#x2F;10. Notons que Yasmine Belkaid est partie aux États-Unis en 2002 car “il n’y avait pas de perspectives de carrière en France”, un sujet qui est donc brûlant de nouveauté. L’entretien est disponible en audio sur &lt;a href=&quot;https:&#x2F;&#x2F;www.radiofrance.fr&#x2F;franceinter&#x2F;podcasts&#x2F;l-invite-de-8h20-le-grand-entretien&#x2F;l-invite-de-8h20-le-grand-entretien-du-mercredi-09-octobre-2024-3633355&quot;&gt;le site de France Inter&lt;&#x2F;a&gt;, mais il n’est pas facile de citer précisément une minute de l’entretien contrairement à la plateforme non libre YouTube.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Ayant récemment utilisé le flixbus Paris—Varsovie de 25h, je confirme que le bus est &lt;em&gt;beaucoup moins agréable&lt;&#x2F;em&gt; que le train.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Peut-on vraiment écrire un module JavaScript (ESM) compatible back et front-end ?</title>
        <published>2024-09-08T00:00:00+00:00</published>
        <updated>2024-09-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/portable-typescript-modules/"/>
        <id>https://aliaume.fr/site/posts/portable-typescript-modules/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/portable-typescript-modules/">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;&quot;&gt;Node.js&lt;&#x2F;a&gt; à sa sortie faisait la promesse d’un langage et d’un paradigme unique pour le développement back et front-end. Un écosystème complexe s’est construit autour depuis : constitué de célèbres frameworks front-end, mais aussi autres outils à tout faire un peu plus obscurs tels que Webpack, Gulp.js ou Babel.&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;prendre-le-train-en-marche.jpg&quot; class=&quot;figure&quot; alt=&quot;Une planche CommitStrip pour illustrer le florilège des bibliothèques Nodes.js&#x2F;JavaScript&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Une planche &lt;a href=&quot;https:&#x2F;&#x2F;www.commitstrip.com&#x2F;fr&#x2F;2015&#x2F;09&#x2F;16&#x2F;how-to-choose-the-right-javascript-framework&#x2F;?setLocale=1&quot;&gt;CommitStrip&lt;&#x2F;a&gt; pour illustrer le florilège des bibliothèques Nodes.js&#x2F;JavaScript&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Cela a contribué, à mon sens, à l’édification d’usines à gaz (en plus de déprimer toute une génération de développeur·euses), et à rendre les sites web de plus en plus difficiles à utiliser. Mais le débat ne se situe pas sur l’utilité et le bon usage de ces technologies, ni sur leur empreinte à l’exécution par ailleurs, mais sur leur avenir.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;les-modules-en-javascript&quot;&gt;Les modules en JavaScript&lt;&#x2F;h2&gt;
&lt;p&gt;Sans vouloir réécrire &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;fr&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Modules&quot;&gt;la très bonne documentation de Mozilla sur le sujet&lt;&#x2F;a&gt;, on peut rappeler que :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Pour pallier le manque d’un système de module en JavaScript, plusieurs systèmes ont vu le jour, dont le système originel de Node.js, CommonJS, et ceux-ci coexistent désormais.&lt;&#x2F;li&gt;
&lt;li&gt;Un système natif aux navigateurs a vu le jour récemment, les &lt;strong&gt;ESM&lt;&#x2F;strong&gt; ou &lt;strong&gt;modules EcmaScript&#x2F;JavaScript&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;On peut imaginer sans prendre de grands risques que ce dernier système devrait remplacer tous les autres dans les prochaines années. Cependant, on peut aussi se demander, dans l’état actuel des technologies, est-il aisé (c’est-à-dire, en un minimum de technologies et langages intermédiaires) d’écrire un tel module TypeScript&#x2F;JavaScript compatible Node.js et navigateur ?&lt;&#x2F;p&gt;
&lt;p&gt;Je vais essayer d’y répondre progressivement, d’abord en jouant avec un module JavaScript dans Node.js, puis d’en faire lui-même un module JavaScript compatible navigateur, et enfin compatible Node.js.&lt;&#x2F;p&gt;
&lt;p&gt;Je testerai aussi, en parallèle et en complément, la nouvelle fonctionnalité d’import JSON.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-projet-node.js-qui-utilise-un-module-javascript-esm-en-typescript&quot;&gt;Un projet Node.js qui utilise un module JavaScript (ESM), en TypeScript&lt;&#x2F;h2&gt;
&lt;p&gt;Pour le moment, c’est encore simple. La &lt;a href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;en&#x2F;learn&#x2F;getting-started&#x2F;nodejs-with-typescript&quot;&gt;documentation de Node.js sur TypeScript&lt;&#x2F;a&gt; recommande d’installer Typescript pour la compilation (et le contrôle de type), puis d’utiliser une librairie tierce telle que &lt;code&gt;ts-node&lt;&#x2F;code&gt; pour l’exécution.&lt;&#x2F;p&gt;
&lt;p&gt;Le projet contient les fichiers suivants :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Un module &lt;code&gt;greeting.ts&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode typescript&quot;&gt;&lt;code class=&quot;sourceCode typescript&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;im&quot;&gt;export&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;const&lt;&#x2F;span&gt; sayHello &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; () &lt;span class=&quot;kw&quot;&gt;=&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;Hello World!&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Un fichier principal &lt;code&gt;index.ts&lt;&#x2F;code&gt; qui appelle ce module :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode typescript&quot;&gt;&lt;code class=&quot;sourceCode typescript&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;#cb2-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;im&quot;&gt;import&lt;&#x2F;span&gt; {sayHello} &lt;span class=&quot;im&quot;&gt;from&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;.&#x2F;greetings&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;#cb2-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;#cb2-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;bu&quot;&gt;console&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;log&lt;&#x2F;span&gt;(&lt;span class=&quot;fu&quot;&gt;sayHello&lt;&#x2F;span&gt;())&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Le fichier de description du paquet &lt;code&gt;package.json&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode json&quot;&gt;&lt;code class=&quot;sourceCode json&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;#cb3-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;#cb3-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;simple-blog-project&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;#cb3-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;version&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;1.0.0&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;#cb3-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;main&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;index.js&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;#cb3-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;scripts&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;#cb3-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;build&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;npx tsc&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-7&quot;&gt;&lt;a href=&quot;#cb3-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;fu&quot;&gt;},&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-8&quot;&gt;&lt;a href=&quot;#cb3-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;keywords&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;ot&quot;&gt;[]&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-9&quot;&gt;&lt;a href=&quot;#cb3-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;author&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-10&quot;&gt;&lt;a href=&quot;#cb3-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;license&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;ISC&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-11&quot;&gt;&lt;a href=&quot;#cb3-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;description&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-12&quot;&gt;&lt;a href=&quot;#cb3-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;devDependencies&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-13&quot;&gt;&lt;a href=&quot;#cb3-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;ts-node&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;^10.9.2&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-14&quot;&gt;&lt;a href=&quot;#cb3-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;typescript&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;^5.6.2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-15&quot;&gt;&lt;a href=&quot;#cb3-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;fu&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-16&quot;&gt;&lt;a href=&quot;#cb3-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Le fichier de configuration du compilateur TypeScript &lt;code&gt;tsconfig.json&lt;&#x2F;code&gt; (initialisé via &lt;code&gt;tsc --init&lt;&#x2F;code&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;&lt;pre class=&quot;sourceCode json&quot;&gt;&lt;code class=&quot;sourceCode json&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a href=&quot;#cb4-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a href=&quot;#cb4-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;compilerOptions&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a href=&quot;#cb4-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;target&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;es2016&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-4&quot;&gt;&lt;a href=&quot;#cb4-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;module&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;commonjs&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;  &lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-5&quot;&gt;&lt;a href=&quot;#cb4-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;esModuleInterop&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;true&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-6&quot;&gt;&lt;a href=&quot;#cb4-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;forceConsistentCasingInFileNames&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;true&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;   &lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-7&quot;&gt;&lt;a href=&quot;#cb4-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;strict&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;true&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;     &lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-8&quot;&gt;&lt;a href=&quot;#cb4-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;dt&quot;&gt;&amp;quot;skipLibCheck&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-9&quot;&gt;&lt;a href=&quot;#cb4-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;fu&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-10&quot;&gt;&lt;a href=&quot;#cb4-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Résultats :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Exécuter ce code via la commande &lt;code&gt;npx ts-node index.ts&lt;&#x2F;code&gt; affiche bel et bien “Hello World!” dans la console.&lt;&#x2F;li&gt;
&lt;li&gt;L’exécuter avec &lt;code&gt;node&lt;&#x2F;code&gt; en le compilant préalablement (&lt;code&gt;npx tsc &amp;amp;&amp;amp; node index.js&lt;&#x2F;code&gt;) fonctionne également.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;et-qui-compile-lui-même-vers-un-module-javascript-esm-compatible-navigateur&quot;&gt;…&lt;em&gt;et qui compile lui-même vers un module JavaScript (ESM), compatible navigateur&lt;&#x2F;em&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;La configuration précédente permet d’obtenir un module au format CommonJS, le format de module originel de Node.js. D’après &lt;a href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;docs&#x2F;handbook&#x2F;modules&#x2F;theory.html#the-module-output-format&quot;&gt;la documentation de TypeScript sur les modules&lt;&#x2F;a&gt;, ce n’est plus recommandé.&lt;&#x2F;p&gt;
&lt;p&gt;TypeScript fournit &lt;a href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;docs&#x2F;handbook&#x2F;modules&#x2F;guides&#x2F;choosing-compiler-options.html&quot;&gt;un guide&lt;&#x2F;a&gt; pour aider à choisir les bonnes options de compilateur (notamment &lt;code&gt;module&lt;&#x2F;code&gt;) en fonction du format de module de sortie désiré. En réalité, je n’ai pas compris ce guide, ni la documentation à propos de l’option &lt;code&gt;module&lt;&#x2F;code&gt; de manière générale.&lt;&#x2F;p&gt;
&lt;p&gt;En testant différentes configurations, j’ai réussi à obtenir un module JavaScript que j’ai pu importer et utiliser dans un navigateur :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dans &lt;code&gt;tsconfig.json&lt;&#x2F;code&gt;, en modifiant la valeur de &lt;code&gt;module&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;&lt;pre class=&quot;sourceCode diff&quot;&gt;&lt;code class=&quot;sourceCode diff&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a href=&quot;#cb5-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;st&quot;&gt;- &amp;quot;module&amp;quot;: &amp;quot;commonjs&amp;quot;,  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a href=&quot;#cb5-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ &amp;quot;module&amp;quot;: &amp;quot;esnext&amp;quot;,  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Dans un nouveau fichier &lt;code&gt;index.html&lt;&#x2F;code&gt;, en important le module (compilé préalablement avec &lt;code&gt;npx tsc&lt;&#x2F;code&gt;) &lt;code&gt;greetings.js&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb6&quot;&gt;&lt;pre class=&quot;sourceCode html&quot;&gt;&lt;code class=&quot;sourceCode html&quot;&gt;&lt;span id=&quot;cb6-1&quot;&gt;&lt;a href=&quot;#cb6-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;!DOCTYPE&lt;&#x2F;span&gt; html&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-2&quot;&gt;&lt;a href=&quot;#cb6-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;html&lt;&#x2F;span&gt;&lt;span class=&quot;ot&quot;&gt; lang&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;quot;en&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-3&quot;&gt;&lt;a href=&quot;#cb6-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;head&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-4&quot;&gt;&lt;a href=&quot;#cb6-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;meta&lt;&#x2F;span&gt;&lt;span class=&quot;ot&quot;&gt; charset&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;quot;UTF-8&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-5&quot;&gt;&lt;a href=&quot;#cb6-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;title&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;Testing modules&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;title&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-6&quot;&gt;&lt;a href=&quot;#cb6-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;head&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-7&quot;&gt;&lt;a href=&quot;#cb6-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;body&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-8&quot;&gt;&lt;a href=&quot;#cb6-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-9&quot;&gt;&lt;a href=&quot;#cb6-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;script&lt;&#x2F;span&gt;&lt;span class=&quot;ot&quot;&gt; type=&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;quot;module&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-10&quot;&gt;&lt;a href=&quot;#cb6-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;im&quot;&gt;import&lt;&#x2F;span&gt; { sayHello } &lt;span class=&quot;im&quot;&gt;from&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;.&#x2F;greetings.js&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-11&quot;&gt;&lt;a href=&quot;#cb6-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;bu&quot;&gt;document&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;querySelector&lt;&#x2F;span&gt;(&lt;span class=&quot;st&quot;&gt;&amp;quot;h1&amp;quot;&lt;&#x2F;span&gt;)&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt;textContent&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;fu&quot;&gt;sayHello&lt;&#x2F;span&gt;()&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-12&quot;&gt;&lt;a href=&quot;#cb6-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;script&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-13&quot;&gt;&lt;a href=&quot;#cb6-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;body&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-14&quot;&gt;&lt;a href=&quot;#cb6-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;html&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Exécuter ce dernier fichier dans un navigateur affiche une page avec pour titre “Hello World!”.&lt;&#x2F;p&gt;
&lt;p&gt;Pour continuer à faire fonctionner &lt;code&gt;ts-node&lt;&#x2F;code&gt; et &lt;code&gt;node&lt;&#x2F;code&gt; (avec les commandes respectives &lt;code&gt;npx ts-node index.ts&lt;&#x2F;code&gt; et &lt;code&gt;npx tsc &amp;amp;&amp;amp; node index.js&lt;&#x2F;code&gt; vues dans la section précédente), il faut aussi :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dans &lt;code&gt;package.json&lt;&#x2F;code&gt;, spécifier le &lt;code&gt;type&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb7&quot;&gt;&lt;pre class=&quot;sourceCode diff&quot;&gt;&lt;code class=&quot;sourceCode diff&quot;&gt;&lt;span id=&quot;cb7-1&quot;&gt;&lt;a href=&quot;#cb7-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ &amp;quot;type&amp;quot;: &amp;quot;module&amp;quot;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Plus étonnant, dans &lt;code&gt;index.ts&lt;&#x2F;code&gt;, importer le module &lt;code&gt;greetings&lt;&#x2F;code&gt; avec son extension &lt;code&gt;.js&lt;&#x2F;code&gt; :&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb8&quot;&gt;&lt;pre class=&quot;sourceCode diff&quot;&gt;&lt;code class=&quot;sourceCode diff&quot;&gt;&lt;span id=&quot;cb8-1&quot;&gt;&lt;a href=&quot;#cb8-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;st&quot;&gt;- import {sayHello} from &amp;quot;.&#x2F;greetings&amp;quot;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-2&quot;&gt;&lt;a href=&quot;#cb8-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ import {sayHello} from &amp;quot;.&#x2F;greetings.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;C’est en fait indiqué dans la documentation :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Node.js ESM &lt;code&gt;import&lt;&#x2F;code&gt; declarations use a strict module resolution algorithm that requires relative paths to include file extensions.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Et discuté dans &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;TypeScript&#x2F;issues&#x2F;16577#issuecomment-703190339&quot;&gt;une issue de TypeScript&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Et il faut ajouter un loader ESM en option de la commande &lt;code&gt;ts-node&lt;&#x2F;code&gt;, soit &lt;code&gt;NODE_OPTIONS=&quot;$NODE_OPTIONS --loader ts-node&#x2F;esm&quot; npx ts-node index.ts&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Le &lt;code&gt;README&lt;&#x2F;code&gt; du projet &lt;code&gt;ts-node&lt;&#x2F;code&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;TypeStrong&#x2F;ts-node?tab=readme-ov-file#native-ecmascript-modules&quot;&gt;résume la situation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;et-utilisable-dans-un-projet-node.js&quot;&gt;…&lt;em&gt;et utilisable dans un projet Node.js&lt;&#x2F;em&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Incroyable mais vrai, ce module peut être importé tel quel dans un projet Node.js !&lt;&#x2F;p&gt;
&lt;p&gt;Pour tester, dans un nouveau projet Node.js :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dans &lt;code&gt;package.json&lt;&#x2F;code&gt;, spécifier &lt;code&gt;&quot;type&quot;: &quot;module&quot;&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Installer le module précédent local via &lt;code&gt;npm install --save CHEMIN_VERS_LE_MODULE&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Créer un fichier &lt;code&gt;index.js&lt;&#x2F;code&gt; qui utilise ce module et l’exécuter : cela fonctionne !&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bonus-en-utilisant-limport-json&quot;&gt;Bonus : En utilisant l’import JSON&lt;&#x2F;h2&gt;
&lt;p&gt;Dans le cas de &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hjonin&#x2F;codemeta-tools&quot;&gt;l’application que je développe&lt;&#x2F;a&gt;, j’avais besoin d’utiliser la &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Modules#loading_non-javascript_resources&quot;&gt;fonctionnalité d’import JSON&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Créer un fichier &lt;code&gt;name.json&lt;&#x2F;code&gt;, que l’on importe dans&lt;code&gt;greetings.ts&lt;&#x2F;code&gt; :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb9&quot;&gt;&lt;pre class=&quot;sourceCode json&quot;&gt;&lt;code class=&quot;sourceCode json&quot;&gt;&lt;span id=&quot;cb9-1&quot;&gt;&lt;a href=&quot;#cb9-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-2&quot;&gt;&lt;a href=&quot;#cb9-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;first&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;Jane&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-3&quot;&gt;&lt;a href=&quot;#cb9-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;dt&quot;&gt;&amp;quot;last&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;Doe&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb9-4&quot;&gt;&lt;a href=&quot;#cb9-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb10&quot;&gt;&lt;pre class=&quot;sourceCode diff&quot;&gt;&lt;code class=&quot;sourceCode diff&quot;&gt;&lt;span id=&quot;cb10-1&quot;&gt;&lt;a href=&quot;#cb10-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ import name from &amp;quot;.&#x2F;name.json&amp;quot; with { type: &amp;quot;json&amp;quot; };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Il faut explicitement spécifier le type pour Typescript. Mais cela rend le module &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Statements&#x2F;import#browser_compatibility&quot;&gt;incompatible avec Firefox&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Il faut aussi activer l’import JSON dans la configuration Typescript, au moyen de l’option &lt;code&gt;resolveJsonModule&lt;&#x2F;code&gt;. Cela nécessite de spécifier également l’option &lt;code&gt;moduleResolution&lt;&#x2F;code&gt; :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb11&quot;&gt;&lt;pre class=&quot;sourceCode diff&quot;&gt;&lt;code class=&quot;sourceCode diff&quot;&gt;&lt;span id=&quot;cb11-1&quot;&gt;&lt;a href=&quot;#cb11-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;st&quot;&gt;- &amp;quot;resolveJsonModule&amp;quot;: false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-2&quot;&gt;&lt;a href=&quot;#cb11-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;st&quot;&gt;- &amp;quot;moduleResolution&amp;quot;: &amp;quot;classic&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-3&quot;&gt;&lt;a href=&quot;#cb11-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ &amp;quot;resolveJsonModule&amp;quot;: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-4&quot;&gt;&lt;a href=&quot;#cb11-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;va&quot;&gt;+ &amp;quot;moduleResolution&amp;quot;: &amp;quot;bundler&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Cette méthode nous permet de créer un module JavaScript compatible back et front-end. Elle a cependant encore des limites. Notamment, si le module fait appel à des dépendances externes, il faut alors l’empaqueter, dans un package npm pour une utilisation dans un project Node.js, dans un “bundle” (le jar du JavaScript) pour une utilisation dans un navigateur. Dans le cas d’un package npm, il ne manque qu’à publier module. Dans le cas d’un bundle, il n’y a, de ce que j’ai retiré de mes recherches, pas d’autre choix que de passer par un outil obscur à tout faire comme Webpack. Je suis à l’écoute de retours sur cette méthode et cet article directement dans le dépôt du &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hjonin&#x2F;codemeta-tools&#x2F;discussions&quot;&gt;projet qui m’a donné du fil à retordre&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;BTW I use Node &amp;gt;= 22&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🚆 Varsovie → Bordeaux en train</title>
        <published>2024-08-29T00:00:00+00:00</published>
        <updated>2024-08-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/varsovie-bordeaux-highlights/"/>
        <id>https://aliaume.fr/site/posts/varsovie-bordeaux-highlights/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/varsovie-bordeaux-highlights/">&lt;p&gt;Cette année je participe à &lt;a href=&quot;https:&#x2F;&#x2F;highlights-conference.org&#x2F;2024&#x2F;cfp&quot;&gt;Highligths 2024&lt;&#x2F;a&gt; qui est un événement se déroulant dans la charmante ville de &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Bordeaux&quot;&gt;Bordeaux&lt;&#x2F;a&gt; en France. J’en profite pour faire un petit encart publicitaire pour cette conférence qui est relativement unique en son genre (au moins en informatique théorique). Cette conférence est centrée sur les avancées en logique, jeux, automates, bases de données, et ce qui s’en rapproche en informatique théorique. Là où son originalité réside est dans le fait qu’elle ne publie pas de papier, et est pensée comme un véritable lieu de rencontre pour la communauté sans les contraintes liées à la publication d’articles. Typiquement, les présentations sont très courtes (~8 minutes dans mon souvenir) et présentent des travaux en cours, des idées, ou des articles déjà publiés mais qui peuvent intéresser la communauté.&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;&#x2F;tcs4f_short.svg&quot; title=&quot;Theoretical Computer Scientists for Future, abbrégé en TCS4F, est écrit en capitales rouge sang devant un globe planétaire vert sombre centré sur l’océan atlantique.&quot; class=&quot;sidefigure&quot; alt=&quot;TCS4F LOGO&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;TCS4F LOGO&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Cette conférence est aussi l’une des rare qui a signée le &lt;a href=&quot;https:&#x2F;&#x2F;tcs4f.org&#x2F;&quot;&gt;manifeste TCS4F&lt;&#x2F;a&gt; qui promeut une informatique théorique &lt;em&gt;compatible&lt;&#x2F;em&gt; avec les objectifs de développement énoncés par exemple lors des &lt;a href=&quot;https:&#x2F;&#x2F;unfccc.int&#x2F;process-and-meetings&#x2F;the-paris-agreement&#x2F;the-paris-agreement&quot;&gt;accords de Paris&lt;&#x2F;a&gt; à la &lt;a href=&quot;https:&#x2F;&#x2F;unfccc.int&#x2F;process-and-meetings&#x2F;conferences&#x2F;past-conferences&#x2F;paris-climate-change-conference-november-2015&#x2F;cop-21&quot;&gt;COP21&lt;&#x2F;a&gt;. En particulier, ce qui a été retenu est l’objectif suivant :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;As an objective, we commit ourselves to reducing our emissions by at least 50% before 2030 relative to pre-2020 levels.&lt;&#x2F;p&gt;
&lt;p&gt;– &lt;a href=&quot;https:&#x2F;&#x2F;tcs4f.org&#x2F;manifesto&#x2F;&quot;&gt;TCS4F Manifesto&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Une des manières de réduire l’empreinte carbone de ces événements a été d’organiser des événements plus longs, liés à d’autres événements de la communauté dans une ville proche. Cela permet de réduire le nombre de déplacements effectués par les chercheurs de la communauté, mais aussi de favoriser des modes de transports moins polluants mais plus lents comme le train : le ratio temps de déplacement &#x2F; temps de conférence devenant plus favorable. L’exemple typique est le &lt;a href=&quot;https:&#x2F;&#x2F;highlights-conference.org&#x2F;2024&#x2F;hesss&quot;&gt;Highlights Extended Stay Support Scheme (HESSS)&lt;&#x2F;a&gt; qui est un mécanisme de support pour les participants à la conférence qui souhaitent rester plus longtemps dans la région pour collaborer avec des chercheurs locaux, avec pour objectif de faire se rencontrer des chercheurs pour un impact carbone moindre.&lt;&#x2F;p&gt;
&lt;figure id=&quot;map-dbd60ea96fedeb6855d9249bf3dcd495c5f410ff1df96e98d0a3bac70bc6fb87&quot; data-geo-map=&quot;true&quot; alt=&quot;Une carte de l’europe allant de la France jusqu’à la Pologne où les villes de Varsovie, Munich, Stuttgart, Mannheim Paris et Bordeaux sont distinguées par des indicateurs verts. Les trajets entre ces villes en train sont des lignes droites bleues traçant une constellation.&quot; title=&quot;Mon trajet Varsovie → Bordeaux en train, visuellement.&quot; data-sha256=&quot;dbd60ea96fedeb6855d9249bf3dcd495c5f410ff1df96e98d0a3bac70bc6fb87&quot;&gt;
&lt;p&gt;&lt;img src=&quot;map-dbd60ea96fedeb6855d9249bf3dcd495c5f410ff1df96e98d0a3bac70bc6fb87.png&quot; title=&quot;Mon trajet Varsovie → Bordeaux en train, visuellement.&quot; alt=&quot;Une carte de l’europe allant de la France jusqu’à la Pologne où les villes de Varsovie, Munich, Stuttgart, Mannheim Paris et Bordeaux sont distinguées par des indicateurs verts. Les trajets entre ces villes en train sont des lignes droites bleues traçant une constellation.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;figcaption&gt;Mon trajet Varsovie → Bordeaux en train, visuellement.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Comme il n’est pas toujours facile de faire accepter à une université de payer pour un billet de train quand l’avion est considéré comme &lt;em&gt;automatique&lt;&#x2F;em&gt; pour ce genre de trajets, j’ai décidé de partager ici mon trajet en train pour aller à Bordeaux et revenir. Pour les prix, j’ai utilisé les sites de réservation en ligne des compagnies ferroviaires, sans réductions le 15 août 2024.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Notons que le trajet que j’ai sélectionné et qui est présenté ci-après n’est pas le plus rapide, et que j’ai préféré utiliser des trains de nuit pour les rendre plus confortables. De plus, je fait un arrêt à Paris pour rendre visite à des amis durant le weekend, ce qui explique le trajet retour tarabiscoté. Cela augmente le prix, mais il n’est pas tout à fait raisonnable de faire 25 heures de train sans dormir. Au total, le trajet dure &lt;strong&gt;44 heures&lt;&#x2F;strong&gt; aller-retour pour un coût de &lt;strong&gt;590€&lt;&#x2F;strong&gt; et une émission de &lt;strong&gt;59 kg de CO2&lt;&#x2F;strong&gt;. Comme la conférence doublée du &lt;a href=&quot;https:&#x2F;&#x2F;highlights-conference.org&#x2F;2024&#x2F;hesss&quot;&gt;HESSS&lt;&#x2F;a&gt; dure 10 jours ouvrés, cela donne un ratio de &lt;strong&gt;4,4 heures de train par jour de conférence&lt;&#x2F;strong&gt; ce qui est lourd, mais reste raisonnable quand on sait qu’environ &lt;strong&gt;30 heures&lt;&#x2F;strong&gt; du voyage sont passées dans un train de nuit.&lt;&#x2F;p&gt;
&lt;p&gt;Pour le calcul des émissions &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;%C3%89quivalent_CO2&quot;&gt;d’équivalent CO2&lt;&#x2F;a&gt;, j’ai utilisé le site &lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&quot;&gt;Ecopassenger&lt;&#x2F;a&gt;. Ce dernier permet de calculer les émissions de CO2 pour un trajet de train en prenant en compte le mix énergétique des pays traversés (en Europe), ce qui est crucial pour ce genre de trajets.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;caption&gt;Trajet Varsovie → Bordeaux en train aller retour 🚆&lt;&#x2F;caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 9%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 11%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 13%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 22%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 19%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 11%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 12%&quot; &#x2F;&gt;
&lt;&#x2F;colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Prix €&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;CO2 kg 🪨&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Train 🚆&lt;&#x2F;th&gt;
&lt;th&gt;Depuis 🚉&lt;&#x2F;th&gt;
&lt;th&gt;Vers 🚉&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Départ 🕓&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Arrivée 🕓&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;145€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=6&amp;amp;ident=cq.072611.1724920235&amp;amp;OK#focus&quot;&gt;22,4&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;IC 60407&lt;&#x2F;td&gt;
&lt;td&gt;Warszawa Centralna&lt;&#x2F;td&gt;
&lt;td&gt;München Hbf&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-14 19:48:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 10:01:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;55€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=1&amp;amp;ident=e0.0158321.1724920417&amp;amp;OK#focus&quot;&gt;3,5&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;ICE 1218&lt;&#x2F;td&gt;
&lt;td&gt;München Hbf&lt;&#x2F;td&gt;
&lt;td&gt;Mannheim Hbf&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 10:46:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 13:28:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;86€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=2&amp;amp;ident=ef.0183971.1724920477&amp;amp;OK#focus&quot;&gt;2&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;TGV 9552&lt;&#x2F;td&gt;
&lt;td&gt;Mannheim Hbf&lt;&#x2F;td&gt;
&lt;td&gt;Paris Gare de L’Est&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 13:42:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 16:52:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;66€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=2&amp;amp;ident=ez.0219941.1724920558&amp;amp;&amp;amp;ecocon=C1-1&quot;&gt;1,5&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;TGV 12213&lt;&#x2F;td&gt;
&lt;td&gt;Paris Montparnasse&lt;&#x2F;td&gt;
&lt;td&gt;Bordeaux Saint-Jean&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 19:11:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-15 21:14:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;71€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=3&amp;amp;ident=fm.0265411.1724920648&amp;amp;REQ0HafasScrollDir=1&amp;amp;ecocon=C3-0&quot;&gt;1,5&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;TGV 8586&lt;&#x2F;td&gt;
&lt;td&gt;Bordeaux-St-Jean&lt;&#x2F;td&gt;
&lt;td&gt;Paris Montparnasse&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-27 20:50:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-27 22:53:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;69€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=1&amp;amp;ident=hp.078561.1724920951&amp;amp;OK#focus&quot;&gt;2,1&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;ICE 9573&lt;&#x2F;td&gt;
&lt;td&gt;Paris Est&lt;&#x2F;td&gt;
&lt;td&gt;Stuttgart Hbf&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-30 10:52:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-30 14:04:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;20€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=2&amp;amp;ident=jl.0197521.1724921222&amp;amp;&amp;amp;ecocon=C1-1&quot;&gt;3,6&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;ICE 517&lt;&#x2F;td&gt;
&lt;td&gt;Stuttgart Hbf&lt;&#x2F;td&gt;
&lt;td&gt;München Hbf&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-30 14:14:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-30 16:26:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;85€&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;http:&#x2F;&#x2F;ecopassenger.org&#x2F;bin&#x2F;query.exe&#x2F;en?ld=uic-eco&amp;amp;L=vs_uic&amp;amp;protocol=https:&amp;amp;seqnr=1&amp;amp;ident=id.0116141.1724921044&amp;amp;OK#focus&quot;&gt;22,4&lt;&#x2F;a&gt; kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;IC 60406&lt;&#x2F;td&gt;
&lt;td&gt;München Hbf&lt;&#x2F;td&gt;
&lt;td&gt;Warszawa Centralna&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-09-30 18:35:00&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2024-10-01 09:08:00&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;590€&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;59 kg&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td&gt;&lt;&#x2F;td&gt;
&lt;td&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;Pour faire une comparaison avec &lt;em&gt;l’avion&lt;&#x2F;em&gt;, qui est le mode de transport privilégié pour ce genre de trajets, j’ai utilisé le site &lt;a href=&quot;https:&#x2F;&#x2F;curb6.com&#x2F;offset&quot;&gt;Curb6&lt;&#x2F;a&gt; qui permet d’estimer les émissions de CO2 pour un trajet en avion en prenant en compte les &lt;em&gt;escales&lt;&#x2F;em&gt;. C’est particulièrement important car le décollage et l’atterrissage sont les moments les plus énergivores pour un avion, le vol de croisière étant comparativement plus économe. Pour un trajet en avion aller-retour Varsovie → Bordeaux, il y a nécessairement au moins une escale, par exemple à l’aéroport &lt;a href=&quot;https:&#x2F;&#x2F;www.parisaeroport.fr&#x2F;&quot;&gt;Charles de Gaulle de Paris&lt;&#x2F;a&gt;. L’estimation fournie par le site est alors de &lt;strong&gt;758,2 kg de CO2&lt;&#x2F;strong&gt;, soit &lt;strong&gt;12,8 fois plus&lt;&#x2F;strong&gt; que le trajet en train. Notons de plus que les émissions de CO2 pour un trajet en avion sont sous-estimées par ce genre de site car elles ne prennent pas en compte le fait que celles-ci ont lieue en haute altitude, ce qui semble avoir un impact non-négligeable selon le site &lt;a href=&quot;https:&#x2F;&#x2F;www.ecopassenger.org&#x2F;&quot;&gt;Ecopassenger&lt;&#x2F;a&gt;.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pour finir, en prenant une réservation &lt;a href=&quot;https:&#x2F;&#x2F;www.airfrance.fr&quot;&gt;Air France &#x2F; KLM&lt;&#x2F;a&gt; pour un vol aller-retour Varsovie → Bordeaux en classe économique avec un bagage en soute, le prix est de &lt;strong&gt;575 €&lt;&#x2F;strong&gt; pour &lt;strong&gt;10h35&lt;&#x2F;strong&gt; de voyage total, avec des émisions estimées par la compagnie de 179 kg CO2e pour l’aller et 204 kg CO2e pour le retour, soit un total de &lt;strong&gt;383 kg CO2e&lt;&#x2F;strong&gt;. Ce qui semble bien en deça de l’estimation de &lt;a href=&quot;https:&#x2F;&#x2F;curb6.com&#x2F;offset&quot;&gt;Curb6&lt;&#x2F;a&gt;, mais reste &lt;strong&gt;6,5 fois plus&lt;&#x2F;strong&gt; émetteur que le trajet en train.&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Notons que ce trajet est seulement &lt;strong&gt;4.2&lt;&#x2F;strong&gt; fois plus rapide que le trajet en train, sans compter les temps additionnels inhérents aux aéroports (contrôles, en dehors des villes, etc).&lt;&#x2F;p&gt;
&lt;p&gt;Un exercice qui peut-être intéressant est d’ajouter aux coûts estimés ici le &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Prix_du_carbone&quot;&gt;prix du carbone&lt;&#x2F;a&gt; tel que conseillé par les économistes pour prendre en compte les externalités négatives des émissions de CO2. En prenant un prix du carbone de &lt;strong&gt;100 €&#x2F;t CO2&lt;&#x2F;strong&gt; (proposé pour 2050 par exemple par le &lt;a href=&quot;https:&#x2F;&#x2F;www.carbonpricingleadership.org&#x2F;news1&#x2F;2017&#x2F;5&#x2F;29&#x2F;daprs-des-conomistes-du-monde-entier-une-tarification-leve-du-carbone-est-ncessaire-pour-une-action-ambitieuse-contre-le-changement-climatique&quot;&gt;rapport de la haute commission sur le prix du carbone du 29 mai 2017&lt;&#x2F;a&gt; porté par &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Joseph_Stiglitz&quot;&gt;Joseph E. Stiglitz&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Nicholas_Stern&quot;&gt;Nicholas Stern&lt;&#x2F;a&gt;), contre &lt;strong&gt;10 USD&#x2F;t CO2&lt;&#x2F;strong&gt; pour plus de 60% des émissions de CO2 actuellement selon &lt;a href=&quot;https:&#x2F;&#x2F;www.statistiques.developpement-durable.gouv.fr&#x2F;edition-numerique&#x2F;chiffres-cles-du-climat-decembre-2022&#x2F;19-la-tarification-du-carbone-dans&quot;&gt;les statistiques du ministère de la transition écologique&lt;&#x2F;a&gt;. En faisant ce calcul, le trajet en train qui émet &lt;strong&gt;59 kg CO2&lt;&#x2F;strong&gt; devrait compter &lt;strong&gt;0,53 €&lt;&#x2F;strong&gt; de coût carbone, alors que l’avion qui émet (d’après Air France) &lt;strong&gt;383 kg CO2&lt;&#x2F;strong&gt; devrait compter &lt;strong&gt;3,83 €&lt;&#x2F;strong&gt; de coût carbone. Sur le tableau suivant, on peut voir que le coût carbone rend le train &lt;em&gt;un peu&lt;&#x2F;em&gt; moins cher que l’avion, mais pas de beaucoup, ce qui pourrait très bien se compenser par des vols &lt;em&gt;low-cost&lt;&#x2F;em&gt; ou le fait de ne pas prendre de bagages en soute.&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;caption&gt;Coût total du trajet Varsovie → Bordeaux en train ou en avion en 2024 et en 2050 en prenant en compte uniquement la variation de prix du carbone, avec un rapport de devises 1 USD = 0.9 EUR et un coût du carbone de 10 USD&#x2F;t CO2.&lt;&#x2F;caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Avion (estimation Airfrance)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Avion (estimation Curb6)&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Train&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prix € (actuel)&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;575 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;575 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;590 €&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;CO2 (kg)&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;383 kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;768 kg&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;59 kg&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Coût carbone (actuel) $&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;3,83 $&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;7,68 $&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;0,59 €&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Coût carbone (2050) €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;38,3 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;76,8 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;5,9 €&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td&gt;Prix € (2050)&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;610 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;645 €&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;595 €&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;En conclusion, aujourd’hui ou en 2050, prendre le train &lt;em&gt;en Europe&lt;&#x2F;em&gt; n’est que très peu une question d’argent &lt;em&gt;si vous prenez vos billets bien en avance&lt;&#x2F;em&gt;, bien que cet argument s’applique aussi à l’avion. Il faut compter un trajet &lt;strong&gt;4 fois plus long&lt;&#x2F;strong&gt; mais avec des émissions entre &lt;strong&gt;6 et 13 fois moins importantes&lt;&#x2F;strong&gt; selon les estimations les plus basses. Enfin, il est important de noter que le train est un mode de transport qui réduit d’autres formes de pollution (particules fines, bruit, etc) et que l’intensité carbone du train en Europe est amenée à diminuer avec &lt;a href=&quot;https:&#x2F;&#x2F;www.groupe-sncf.com&#x2F;fr&#x2F;innovation&#x2F;electrification-frugale-decarboner-petites-lignes&quot;&gt;l’électrification progressive des réseaux ferroviaires&lt;&#x2F;a&gt;, car le taux moyen d’électrification des réseaux ferrés européens de seulement &lt;strong&gt;55 %&lt;&#x2F;strong&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;www.autorite-transports.fr&#x2F;wp-content&#x2F;uploads&#x2F;2022&#x2F;07&#x2F;art_bilan-ferroviaire-europe-2020.pdf&quot;&gt;Figure 5 page 5 du rapport de l’autorité des transports 2020&lt;&#x2F;a&gt;) et la &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;%C3%89lectricit%C3%A9_en_Europe&quot;&gt;décarbonation de la production électrique&lt;&#x2F;a&gt; en cours.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Les prix varient &lt;em&gt;énormément&lt;&#x2F;em&gt; en fonction des dates de réservation comparativement à des billets d’avion. Le &lt;em&gt;15 août&lt;&#x2F;em&gt; était déjà très tardif pour la réservation, et en pratique l’Université de Varsovie n’a pris les billets que le 28 août, avec un coût &lt;span class=&quot;math inline&quot;&gt;\(1.3\)&lt;&#x2F;span&gt; fois supérieur à ce qui est indiqué ici. Tandis qu’un collègue plus prévoyant en a eu pour seulement &lt;strong&gt;390€&lt;&#x2F;strong&gt; pour le même trajet en réservant beaucoup plus tôt.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Notons que des compagnies comme &lt;a href=&quot;https:&#x2F;&#x2F;www.raileurope.com&#x2F;fr&quot;&gt;Rail Europe&lt;&#x2F;a&gt;, la &lt;a href=&quot;https:&#x2F;&#x2F;www.sncf.com&#x2F;fr&quot;&gt;SNCF&lt;&#x2F;a&gt;, ou &lt;a href=&quot;https:&#x2F;&#x2F;www.bahn.com&#x2F;fr&quot;&gt;Deutsche Bahn&lt;&#x2F;a&gt; proposent des calculs de réduction des émissions de CO2 pour les trajets en train. Cependant, ils ne donnent que l’estimation de la réduction et pas le chiffre brut, et utilisent un mix énergétique souvent avantageux, comme expliqué &lt;a href=&quot;https:&#x2F;&#x2F;www.raileurope.com&#x2F;en&#x2F;blog&#x2F;travel-green-calculating-your-carbon-savings&quot;&gt;sur la page de Rail Europe&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;En particulier, ils indiquent qu’un calcul plus précis du &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Radiative_forcing&quot;&gt;RFI&lt;&#x2F;a&gt; qui prend en compte les effets climatiques additionnels des autres émissions (oxydes d’azote, ozone, eau, suie, soufre) est nécessaire pour avoir une bonne estimation des émissions de CO2 pour un trajet en avion lorsque celles-ci sont effectuées en haute altitude.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Pour les détails de mon trajet virtuel en avion, j’ai pris un trajet de Varsovie (WAW) a Bordeaux (BDX) passant par Paris (CDG) avec les vols suivants : AF1147HOP départ 14:05 le 15 septembre 2024 arrivée 16:50 le 15 septembre 2024, AF9424HOP départ 15h30 le même jour, arrivée 16h50. Pour le retour j’ai pris les vols AF9427 puis AF1346 le 28 septembre 2024, départ 11h10, arrivée à CDG à 12h35, puis départ à 13h45 et arrivée à WAW à 16h05.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>🎉 Evert Willem Beth Award 2024 🎉</title>
        <published>2024-08-28T00:00:00+00:00</published>
        <updated>2024-08-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/e-w-beth-award/"/>
        <id>https://aliaume.fr/site/posts/e-w-beth-award/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/e-w-beth-award/">&lt;p&gt;Suite à mon billet décrivant &lt;a href=&quot;&#x2F;prix-de-these-candidature.html&quot;&gt;comment candidater à un prix de thèse&lt;&#x2F;a&gt;, je suis très heureux de vous annoncer que j’ai reçu le prix &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;?page_id=74&quot;&gt;E. W. Beth&lt;&#x2F;a&gt; 2024 récompensant &lt;a href=&quot;&#x2F;posts&#x2F;2023-09-20-post-defense.html&quot;&gt;ma thèse de doctorat&lt;&#x2F;a&gt;. Ce prix récompense chaque année une thèse exceptionnelle en logique et est décerné par l’association &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;&quot;&gt;FoLLI&lt;&#x2F;a&gt;. Plus d’informations sur le prix et mon co-lauréat &lt;a href=&quot;https:&#x2F;&#x2F;konstantinoskokos.github.io&#x2F;&quot;&gt;Konstantinos Kogkalidis&lt;&#x2F;a&gt; sont disponibles sur la page &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;?page_id=74&quot;&gt;officielle du prix de thèse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Je tiens à remercier mes directeurs de thèse, mes collègues et ma famille pour leur soutien tout au long de ces années et je considère comme un formidable encouragement la reconnaissance attestée de mon travail par ce prix.&lt;&#x2F;p&gt;
&lt;p&gt;Pour celles et ceux qui se demandent à quoi ressemble une candidature à un prix de thèse je vous propose, en complément du billet précédent sur le sujet, de consulter &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;prix&#x2F;e-w-beth-dissertation-abstract.pdf&quot;&gt;mon dossier de candidature&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Candidater à un prix de thèse</title>
        <published>2024-08-19T00:00:00+00:00</published>
        <updated>2024-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/candidater-prix-de-these/"/>
        <id>https://aliaume.fr/site/posts/candidater-prix-de-these/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/candidater-prix-de-these/">&lt;p&gt;Après avoir soutenu votre thèse, il est de bon goût de proposer votre candidature à divers prix, afin d’espérer avoir un meilleur dossier lorsque vous postulerez sur des postes permanents en recherche, ou tout simplement pour flatter votre ego.&lt;&#x2F;p&gt;
&lt;p&gt;En informatique théorique, il existe plusieurs prix assez reconnus, en plus des prix qui seront donnés au sein de votre université. Le plus souvent, ces prix sont liés à un autre événement (conférence, école d’été, association) et pour savoir auxquels vous avez une chance d’être sélectionné regarder l’événement de rattachement et la liste des évaluateurs est un bon début. En toute généralité, la candidature à un prix de thèse se fait en envoyant un dossier &lt;em&gt;en anglais&lt;&#x2F;em&gt; contenant un sous ensemble des éléments suivants :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;La thèse ou un lien vers la thèse&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;em&gt;résumé&lt;&#x2F;em&gt; de la thèse&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Des &lt;em&gt;lettres de recommandation&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Les rapports de jury&lt;&#x2F;li&gt;
&lt;li&gt;Un ou des documents certifiant la bonne tenue de la thèse&lt;&#x2F;li&gt;
&lt;li&gt;Un CV du candidat avec une liste des publications&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Pour simplifier la vie des candidats, voilà un petit tableau récapitulatif de ce qui va suivre avec les dates limites de candidature pour le prix de &lt;em&gt;2024&lt;&#x2F;em&gt; (pour les thèses soutenues en &lt;em&gt;2023&lt;&#x2F;em&gt;), le nombre de pages pour le résumé,&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; ainsi que le nombre &lt;strong&gt;maximal&lt;&#x2F;strong&gt; de lettres de recommandation possibles dans le dossier.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 19%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 21%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 23%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 35%&quot; &#x2F;&gt;
&lt;&#x2F;colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Nom du Prix&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;Date Limite&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;Nombre de pages&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;&lt;strong&gt;Lettres de recommandation&lt;&#x2F;strong&gt;&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;#etaps&quot;&gt;ETAPS&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;15 Janvier 2024&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;0&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;span class=&quot;math inline&quot;&gt;\(+\infty\)&lt;&#x2F;span&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;#eatcs&quot;&gt;EATCS&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;7 Mars 2024&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;5&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;1&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;#e.-w.-beth-dissertation-prize&quot;&gt;E. W. Beth Dissertation Prize&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;30 Avril 2024&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;10&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;#eacsl&quot;&gt;EACSL&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;1 Juillet 2024&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;10&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;#gilles-kahn&quot;&gt;Gilles Kahn&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;?? Septembre 2024&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;?&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;2&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;h2 id=&quot;une-candidature-mais-comment&quot;&gt;Une candidature, mais comment ?&lt;&#x2F;h2&gt;
&lt;p&gt;Avant de comprendre comment bien faire une candidature, il faut comprendre comment celle-ci sera évaluée. En général, les prix de thèse sont évalués par des chercheurs, mais pas forcément des chercheurs dans votre domaine. De plus, toutes les thèses ne sont pas lues par tous les évaluateurs. Finalement, l’évaluation se fait souvent par &lt;em&gt;manches&lt;&#x2F;em&gt; successives, où les évaluateurs éliminent des candidats à chaque étape. Dans ce contexte, il est important que votre thèse soit &lt;em&gt;soutenue&lt;&#x2F;em&gt; par la&#x2F;les personnes qui liront votre thèse, et que les &lt;em&gt;documents annexes&lt;&#x2F;em&gt; qui seront lus par tous sont &lt;em&gt;clefs en main&lt;&#x2F;em&gt; pour une argumentation comparative. L’exemple typique est “mais en plus A. a publié dans telle conférence” ou “B. a été invité à donner un cours à tel endroit”.&lt;&#x2F;p&gt;
&lt;p&gt;Il faut donc particulièrement soigner votre CV et votre liste de publications, ainsi que le résumé de thèse qui sera probablement demandé en mettant des blocs en évidence pour une utilisation rapide. Enfin, essayez de trouver des lettres de recommandation de personnes qui sont connues des évaluateurs (qui ne sont pas forcément des chercheurs dans votre domaine, je le rappelle), c’est-à-dire, des gens &lt;em&gt;très&lt;&#x2F;em&gt; connus.&lt;&#x2F;p&gt;
&lt;p&gt;Enfin, un effet légèrement pervers de ces prix est que le domaine très spécifique de la thèse peut être &lt;em&gt;défavorable&lt;&#x2F;em&gt; pour un public non averti. Par exemple, si vous êtes spécialistes de la minimisation des automates, mais qu’en face il y a quelqu’un qui vérifie le programme de lancement des fusées, vous partez nécessairement avec un désavantage, indépendamment de la qualité de vos travaux. Il faut donc bien choisir où soumettre votre candidature, et il me semble plus aisé d’être compétitif dans un prix de thèse &lt;em&gt;international&lt;&#x2F;em&gt; mais sur un domaine spécifique que l’inverse par exemple.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;petite-note-sur-les-différents-prix&quot;&gt;Petite note sur les différents prix&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;eatcs&quot;&gt;EATCS&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;eatcs.org&#x2F;&quot;&gt;L’EATCS&lt;&#x2F;a&gt; pour « European Association for Theoretical Computer Science » est une &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Soci%C3%A9t%C3%A9_savante&quot;&gt;société savante&lt;&#x2F;a&gt; fondée en 1972 et étroitement liée à la conférence &lt;a href=&quot;http:&#x2F;&#x2F;eatcs.org&#x2F;index.php&#x2F;conferences&quot;&gt;ICALP&lt;&#x2F;a&gt;. Le prix de thèse est intitulé « Distinguished Dissertation Award », et sert de vitrine à l’Informatique théorique européenne, mais n’est pas réservée à des thèses soutenues en Europe. Chaque année le comité sélectionne au plus trois thèses, évaluées sous l’angle de leur originalité et de leur impact sur leur domaine respectif de recherche.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lien vers le site du prix de thèse.&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;eatcs.org&#x2F;index.php&#x2F;dissertation-award&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;eatcs.org&#x2F;index.php&#x2F;dissertation-award&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;eacsl&quot;&gt;EACSL&lt;&#x2F;h3&gt;
&lt;p&gt;Le prix Ackermann est donné par &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;&quot;&gt;l’EACSL&lt;&#x2F;a&gt;, une autre société savante, cette fois &lt;em&gt;internationale&lt;&#x2F;em&gt;, fondée en 1992 et qui promeut l’usage de la logique en informatique. La société organise la conférence &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;csl-conferences&#x2F;&quot;&gt;CSL&lt;&#x2F;a&gt;, et c’est à cette occasion que le prix de thèse est remis.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lien vers le site du prix de thèse.&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;submissions&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;www.eacsl.org&#x2F;ackermann-award&#x2F;submissions&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;etaps&quot;&gt;ETAPS&lt;&#x2F;h3&gt;
&lt;p&gt;Le prix de thèse de la conférence européenne &lt;a href=&quot;https:&#x2F;&#x2F;etaps.org&#x2F;&quot;&gt;ETAPS&lt;&#x2F;a&gt; est donné à l’occasion de la conférence annuelle éponyme. ETAPS est en réalité un groupement de quatre conférences scientifiques assez différentes (FoSSaCS, FASE, TACAS et ESOP). La concurrence est donc plus large que pour les autres, car les domaines des thèses soumises sont très divers (génie logiciel, sémantique, solveurs, vérification, etc.).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lien vers le site du prix de thèse.&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;etaps.org&#x2F;awards&#x2F;doctoral-dissertation&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;etaps.org&#x2F;awards&#x2F;doctoral-dissertation&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;e.-w.-beth-dissertation-prize&quot;&gt;E. W. Beth Dissertation Prize&lt;&#x2F;h3&gt;
&lt;p&gt;Le prix de thèse E. W. Beth est donné par l’association &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;&quot;&gt;FoLLI&lt;&#x2F;a&gt;, fondée en 1991, qui promeut la recherche en logique, linguistique et informatique. L’association est notamment connue pour son école d’été &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;?page_id=45&quot;&gt;ESSLLI&lt;&#x2F;a&gt; (European Summer School in Logic, Languages and Information). Le prix est donc très orienté vers la logique.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lien vers le site du prix de thèse.&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;folli.info&#x2F;?page_id=74&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;folli.info&#x2F;?page_id=74&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gilles-kahn&quot;&gt;Gilles Kahn&lt;&#x2F;h3&gt;
&lt;p&gt;Le prix de thèse Gilles Kahn est porté par la &lt;a href=&quot;https:&#x2F;&#x2F;www.socinfo.fr&#x2F;&quot;&gt;Société informatique de France&lt;&#x2F;a&gt;, fondée en 1985. Il faut avoir soutenu son doctorat en informatique dans une école ou université française, mais le domaine n’est pas limité à l’informatique théorique.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lien vers le site du prix de thèse.&lt;&#x2F;strong&gt; &lt;a href=&quot;https:&#x2F;&#x2F;www.socinfo.fr&#x2F;recherche&#x2F;prix-de-these-gilles-kahn&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;www.socinfo.fr&#x2F;recherche&#x2F;prix-de-these-gilles-kahn&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Attention, le résumé n’est pas un “résumé” en tant que tel, mais bien une brochure commerciale servant à &lt;strong&gt;vendre&lt;&#x2F;strong&gt; votre thèse à des &lt;em&gt;non-experts&lt;&#x2F;em&gt;. Cela sera discuté plus tard dans cet article.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Je considère le nombre de pages comme &lt;em&gt;incluant les références bibliographiques&lt;&#x2F;em&gt; ici, c’est donc une estimation dans le cas où le prix de thèse autorise des références arbitrairement longues.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;Tous les prix de thèse demandent une lettre du &lt;em&gt;superviseur&lt;&#x2F;em&gt;, qui n’est pas comptée ici. L’idée étant que le nombre de lettres de recommandation correspond ici au nombre des personnes à contacter en plus du superviseur.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Pandoc pour des articles d’informatique théorique ?</title>
        <published>2024-08-07T00:00:00+00:00</published>
        <updated>2024-08-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/pandoc-is-not-ready/"/>
        <id>https://aliaume.fr/site/posts/pandoc-is-not-ready/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/pandoc-is-not-ready/">&lt;p&gt;TL;DR :&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; est un outil de conversion de documents écrit en &lt;a href=&quot;https:&#x2F;&#x2F;www.haskell.org&#x2F;&quot;&gt;Haskell&lt;&#x2F;a&gt;. Il est très utile pour convertir des documents écrits en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; en d’autres formats, comme &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;fr-fr&#x2F;microsoft-365&#x2F;word&quot;&gt;Word&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.oasis-open.org&#x2F;committees&#x2F;tc_home.php?wg_abbrev=office&quot;&gt;Open Document&lt;&#x2F;a&gt;, ou &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Portable_Document_Format&quot;&gt;PDF&lt;&#x2F;a&gt;. Cet article explique pourquoi il n’est pas actuellement possible de l’utiliser pour écrire des articles d’informatique théorique.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;latex-pour-lécriture-darticles-scientifiques&quot;&gt;LaTeX pour l’écriture d’articles scientifiques&lt;&#x2F;h2&gt;
&lt;p&gt;Écrire un article scientifique, au moins en informatique théorique et en mathématiques, répond à des contraintes explicites et implicites de forme et de fond qui permettent une détection rapide (mais parfois erronée) de la qualité du document. Sans même parler de &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Relecture_par_les_pairs&quot;&gt;relecture par les pairs&lt;&#x2F;a&gt;, un processus relativement coûteux, il est possible de rendre automatique ou semi automatique la détection de « faux&#x2F;mauvais » articles, et c’est ce qui est déployé en pratique par l’archive en ligne de &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, maintenue par &lt;a href=&quot;https:&#x2F;&#x2F;www.library.cornell.edu&#x2F;&quot;&gt;Cornell University Library&lt;&#x2F;a&gt;. Un exemple simple est le respect de certaines conventions d’écritures et règles de typographie, et en mathématiques&#x2F;informatique, cela commence par l’utilisation du système de génération de documents &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;. Je suis assez confiant dans l’idée qu’un article de mathématiques écrit avec un autre système d’écriture part avec un handicap certain.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Mais pourquoi est-ce que ce système est hégémonique ? Et d’ailleurs, pourquoi seulement dans certaines matières techniques ? Sans faire un historique complet de cette technologie, on peut déjà faire remarquer qu’elle remonte à un programme plus ancien, &lt;a href=&quot;https:&#x2F;&#x2F;www.tug.org&#x2F;texlive&#x2F;&quot;&gt;TeX&lt;&#x2F;a&gt; conçu par &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Donald_Knuth&quot;&gt;Donald Knuth&lt;&#x2F;a&gt; dans les années 70, avec comme objectif explicite de permettre l’écriture d’articles utilisant des équations complexes. L’idée était d’écrire un document textuel « simple » (en utilisant les caractères ASCII de l’époque) qui serait ensuite transformé en un document imprimable. Cette étape de transformation permettait au système de gérer &lt;em&gt;automatiquement&lt;&#x2F;em&gt; la mise en page, les numéros de référence, les tables des matières, etc. Ainsi, il suffit d’écrire &lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span class=&quot;fu&quot;&gt;\tableofcontents&lt;&#x2F;span&gt;&lt;&#x2F;code&gt; pour que dans le document final, une table des matières soit générée en lieu et place de cette commande. De même, pour écrire une formule comme &lt;span class=&quot;math inline&quot;&gt;\(\sum_{i = 0}^n \binom{n}{k} x^k y^{n-k}\)&lt;&#x2F;span&gt;, on peut écrire &lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span class=&quot;ss&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;\sum&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;_{i = 0}^n &lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;\binom&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;{n}{k} x^k y^{n-k}$&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;. À mon sens, ce qui a fait le succès de &lt;a href=&quot;https:&#x2F;&#x2F;www.tug.org&#x2F;texlive&#x2F;&quot;&gt;TeX&lt;&#x2F;a&gt; et des variantes basées sur lui sont les propriétés suivantes :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Les documents sont &lt;em&gt;éditables&lt;&#x2F;em&gt;. C’est-à-dire qu’il est possible d’utiliser n’importe quel éditeur de texte, ou programme qui manipule du texte pour modifier le document. De plus, la syntaxe est &lt;em&gt;relativement légère&lt;&#x2F;em&gt; ce qui rend l’édition possible &lt;em&gt;sans béquille logicielle&lt;&#x2F;em&gt;. J’invite le lecteur à essayer de modifier en utilisant uniquement des outils standards un document &lt;a href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;fr-fr&#x2F;microsoft-365&#x2F;word&quot;&gt;Word&lt;&#x2F;a&gt;, qui est une archive contenant des fichiers &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Extensible_Markup_Language&quot;&gt;XML&lt;&#x2F;a&gt; à la syntaxe complexe et peu lisible.&lt;&#x2F;li&gt;
&lt;li&gt;Un corollaire non négligeable de la première propriété et que ces documents sont alors &lt;em&gt;versionnables&lt;&#x2F;em&gt; et facilement &lt;em&gt;archivables&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un système dédié d’écriture d’équations, qui s’intègre parfaitement au reste de la syntaxe et qui permet d’écrire essentiellement &lt;em&gt;toutes les mathématiques connues&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un système de gestion de bibliographie, &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;BibTeX&quot;&gt;bibtex&lt;&#x2F;a&gt;, permet de &lt;em&gt;facilement&lt;&#x2F;em&gt; citer un article, un livre, une conférence, et ce bien avant l’apparition de moteurs comme &lt;a href=&quot;https:&#x2F;&#x2F;www.zotero.org&#x2F;&quot;&gt;Zotero&lt;&#x2F;a&gt; ou &lt;a href=&quot;https:&#x2F;&#x2F;www.mendeley.com&#x2F;&quot;&gt;Mendeley&lt;&#x2F;a&gt;. Pour citer un article, il suffit d’écrire &lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span class=&quot;kw&quot;&gt;\cite&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;nom_de_l_article&lt;&#x2F;span&gt;}&lt;&#x2F;code&gt; et la citation sera écrite &lt;em&gt;au format approprié&lt;&#x2F;em&gt; dans le document final.&lt;&#x2F;li&gt;
&lt;li&gt;Un système de gestion de références croisées, qui permet de dire « voir la figure XX page YY », sans se préoccuper de la page (elle est calculée) ou du numéro de la figure (aussi calculé).&lt;&#x2F;li&gt;
&lt;li&gt;Le système de macro commandes intégré à &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; &#x2F; &lt;a href=&quot;https:&#x2F;&#x2F;www.tug.org&#x2F;texlive&#x2F;&quot;&gt;TeX&lt;&#x2F;a&gt; permet aux &lt;em&gt;éditeurs&lt;&#x2F;em&gt; de définir le style du document, sans que les &lt;em&gt;auteurs&lt;&#x2F;em&gt; aient à se préoccuper de la forme (ou presque). Ainsi, le format des titres, le nombre de colonnes, les marges, la rédaction des citations n’est pas à la charge de l’auteur.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ces arguments en faveur de &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; sont suffisamment forts pour que la communauté de mathématiciens et d’informaticiens s’en emparent. Ne pas pouvoir &lt;em&gt;écrire&lt;&#x2F;em&gt; les mathématiques étant un frein majeur. De plus, la familiarité avec les notions de fichiers texte et de compilation a supprimé le principal défaut de ce système d’écriture : ce qui est écrit n’est &lt;strong&gt;pas&lt;&#x2F;strong&gt; ce qui sera imprimé. C’est ce qui explique que, malgré des avantages indéniables, ce système est délaissé pour des modèles « &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;WYSIWYG&quot;&gt;WYSIWYG&lt;&#x2F;a&gt; » (What You See Is What You Get) comme &lt;a href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;fr-fr&#x2F;microsoft-365&#x2F;word&quot;&gt;Word&lt;&#x2F;a&gt; ou &lt;a href=&quot;https:&#x2F;&#x2F;fr.libreoffice.org&#x2F;&quot;&gt;Libre Office&lt;&#x2F;a&gt; lorsque la majorité du document est précisément du texte et des images, sans formules mathématiques ou de nombreuses références croisées.&lt;&#x2F;p&gt;
&lt;p&gt;Malgré le développement de nombreux outils pour écrire des documents scientifiques dans des logiciels comme &lt;a href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;fr-fr&#x2F;microsoft-365&#x2F;word&quot;&gt;Word&lt;&#x2F;a&gt; ou &lt;a href=&quot;https:&#x2F;&#x2F;fr.libreoffice.org&#x2F;&quot;&gt;Libre Office&lt;&#x2F;a&gt;, l’écriture des mathématiques reste &lt;em&gt;douloureuse&lt;&#x2F;em&gt; avec un éditeur graphique, et la &lt;em&gt;modification&lt;&#x2F;em&gt; de formules est en général un cauchemar. Les systèmes un peu pragmatiques ont directement intégré la syntaxe introduite par &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; dans leur propre système, un exemple typique étant &lt;a href=&quot;https:&#x2F;&#x2F;www.mathjax.org&#x2F;&quot;&gt;MathJax&lt;&#x2F;a&gt; pour les pages web, car &lt;strong&gt;personne&lt;&#x2F;strong&gt; n’écrit directement des formules en &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;MathML&quot;&gt;MathML&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-markup-et-les-langages-modernes&quot;&gt;Le « Markup » et les langages modernes&lt;&#x2F;h2&gt;
&lt;p&gt;Le &lt;em&gt;markup&lt;&#x2F;em&gt; (en Français, le &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Langage_de_balisage&quot;&gt;balisage&lt;&#x2F;a&gt;) est une technique qui consiste à ajouter à un document textuel des annotations qui décrivent une structure arborescente. Le langage de balisage le plus utilisé au monde est probablement le &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;, qui est utilisé pour décrire des pages web. Un exemple typique de fragment &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; est le suivant :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode html&quot;&gt;&lt;code class=&quot;sourceCode html&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;Je suis dans une balise de paragraphe. &lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;strong&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;Je suis en gras.&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;strong&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;Et maintenant, &lt;span class=&quot;dt&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;em&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;je suis en italique&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;em&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;.&lt;span class=&quot;dt&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;p&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;L’utilisation de balises &lt;code&gt;&amp;lt;p&amp;gt;&lt;&#x2F;code&gt;, &lt;code&gt;&amp;lt;strong&amp;gt;&lt;&#x2F;code&gt;, &lt;code&gt;&amp;lt;em&amp;gt;&lt;&#x2F;code&gt; permet de décrire la structure du document, qui sera ensuite interprétée par un navigateur web pour afficher le texte en gras, en italique, etc. Bien entendu, le &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; contient d’autres balises et des possibilités supplémentaires pour décrire des agencements plus complexes de texte, des images, des liens, etc. C’est ce qui donne des pages web comme celle que vous êtes probablement en train de lire.&lt;&#x2F;p&gt;
&lt;p&gt;Cette manière d’écrire textuellement des indications sur la structure d’un document en vue d’une future &lt;em&gt;interprétation&lt;&#x2F;em&gt; n’est pas sans rappeler ce qui a été décrit plus haut au sujet de &lt;a href=&quot;https:&#x2F;&#x2F;www.tug.org&#x2F;texlive&#x2F;&quot;&gt;TeX&lt;&#x2F;a&gt; et de &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;. En effet, bien que &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; ne soit pas &lt;em&gt;techniquement&lt;&#x2F;em&gt; un langage de balisage,&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; c’est la manière dont il est utilisé en pratique par la plupart des &lt;em&gt;auteurs&lt;&#x2F;em&gt; de documents. L’équivalent du fragment &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; précédent en &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; pourrait être le code suivant :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;#cb2-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;Je suis dans un paragraphe. &lt;span class=&quot;fu&quot;&gt;\textbf&lt;&#x2F;span&gt;{Je suis en gras.} Et maintenant,&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;#cb2-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\textit&lt;&#x2F;span&gt;{je suis en italique}.&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Pourquoi ne pas utiliser l’omniprésent &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; pour écrire des articles scientifiques ? Une première réponse est simple : aucune des fonctionnalités qui justifient l’utilisation d’un système aussi complexe que &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; pour écrire des documents n’est disponible en &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;. Même les références croisées, qui sont la force de &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;,&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; ne sont pas destinées &lt;em&gt;à la lecture&lt;&#x2F;em&gt; mais &lt;em&gt;à la navigation&lt;&#x2F;em&gt;.&lt;a href=&quot;#fn5&quot; class=&quot;footnote-ref&quot; id=&quot;fnref5&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;5&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Les formules mathématiques sont un problème ouvert depuis une vingtaine d’années maintenant, et je ne parle même pas des référence bibliographiques. Enfin, le &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; est un langage &lt;em&gt;déclaratif&lt;&#x2F;em&gt; qui ne permet pas de définir de nouvelles balises au sein du document, et cela veut dire qu’écrire un article scientifique en &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; serait très rapidement cauchemardesque.&lt;&#x2F;p&gt;
&lt;p&gt;Une seconde réponse est plus subtile : le &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; est un langage de balisage qui spécifie comment afficher un document &lt;em&gt;à l’écran&lt;&#x2F;em&gt;. En particulier, il est conçu pour être lisible sur des tailles d’écrans différentes, pour être accessible aux personnes handicapées, pour être indexable par les moteurs de recherche, etc. En revanche, il n’est pas (encore) adapté pour construire des documents &lt;em&gt;imprimables&lt;&#x2F;em&gt; qui respectent les standards de la publication scientifique.&lt;&#x2F;p&gt;
&lt;p&gt;Mais alors, pourquoi ne pas simplement utiliser &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; pour écrire des articles d’informatique théorique ? La réponse est simple : &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; n’est pas un langage de balisage, mais un langage de &lt;strong&gt;programmation&lt;&#x2F;strong&gt;. En plus de cela, c’est un &lt;em&gt;mauvais&lt;&#x2F;em&gt; langage de programmation. Cela pose tout un tas de problèmes plus ou moins graves. Les principaux reproches étant selon moi&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;&lt;p&gt;L’absence de &lt;em&gt;grammaire&lt;&#x2F;em&gt; ou même de &lt;em&gt;syntaxe&lt;&#x2F;em&gt; au langage. En réalité, considérer &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; comme un langage à &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Langage_de_balisage&quot;&gt;balisage&lt;&#x2F;a&gt; est une erreur grossière. À tout moment dans le document, on peut écrire une commande qui a pour effet que « la lettre &lt;code&gt;a&lt;&#x2F;code&gt; devient la lettre &lt;code&gt;c&lt;&#x2F;code&gt; ». Cela fait qu’il est &lt;em&gt;impossible&lt;&#x2F;em&gt; de détecter une erreur de syntaxe, et donc&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Les outils qui aident à écrire le code sont très imparfaits&lt;&#x2F;li&gt;
&lt;li&gt;Lorsque &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; n’arrive pas à générer un document correct, il est extrêmement difficile de savoir pourquoi, et la meilleure technique reste de supprimer des bouts de document pour isoler &lt;em&gt;la&lt;&#x2F;em&gt; ligne où une faute de frappe s’est glissée.&lt;&#x2F;li&gt;
&lt;li&gt;Il n’y a pas de &lt;em&gt;prévisualisation&lt;&#x2F;em&gt; rapide possible : pour savoir ce qui sera globalement affiché à la page 6, il faut écrire l’intégralité du document, ce qui peut-être très long si celui-ci est une thèse de 200 pages avec des images.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Le langage de programmation lui-même est &lt;em&gt;terrible&lt;&#x2F;em&gt;. Les programmes écrits sont simultanément &lt;em&gt;très lents&lt;&#x2F;em&gt; et &lt;em&gt;illisibles&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;L’écosystème autour du langage est &lt;em&gt;riche&lt;&#x2F;em&gt; mais du même temps &lt;em&gt;incohérent&lt;&#x2F;em&gt;. Par exemple, on peut être en contact avec 3 systèmes de gestion des citations différents — &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;BibTeX&quot;&gt;bibtex&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;natbib&quot;&gt;natbib&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biblatex&quot;&gt;biblatex&lt;&#x2F;a&gt; —, relativement compatibles, mais pas toujours.&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Les fonctionnalités un peu avancées (bibliographie, index, etc.) utilisent &lt;em&gt;plusieurs passes de compilation&lt;&#x2F;em&gt;. C’est un argument un peu technique, mais pour le néophyte, cela veut dire qu’en fonction du document à écrire, le temps de composition du rendu final peut être multiplié par 3 ou 4.&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Le format de sortie, au départ, était &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Device_Independent_File_Format&quot;&gt;DVI&lt;&#x2F;a&gt;, qui n’est pas utilisé ou presque. Le format &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Portable_Document_Format&quot;&gt;PDF&lt;&#x2F;a&gt; s’est imposé comme standard et est maintenant bien géré, mais il est &lt;em&gt;étrange&lt;&#x2F;em&gt; que la quasi intégralité de la connaissance mondiale soit sous forme de &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; sur un internet mondiale &lt;strong&gt;sauf&lt;&#x2F;strong&gt; la recherche académique qui pourtant repose crucialement sur les &lt;em&gt;citations&lt;&#x2F;em&gt; de ressources pré-existantes. Cela veut aussi dire que tablettes, téléphones et ordinateurs de différentes tailles sont &lt;em&gt;inadaptés&lt;&#x2F;em&gt; comme médiums de lecture d’article, et d’ailleurs beaucoup de chercheurs &lt;em&gt;impriment&lt;&#x2F;em&gt; les articles pour les lire (et les annoter).&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;markdown-et-pandoc&quot;&gt;Markdown et Pandoc&lt;&#x2F;h2&gt;
&lt;p&gt;Le &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; est un langage de balisage léger qui a été conçu pour être lisible par un humain, et qui est facilement convertible en &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;. L’idée de base est de &lt;em&gt;limiter&lt;&#x2F;em&gt; les possibilités de balisage pour se concentrer sur le contenu, et non sur la forme, au point où le mark-&lt;em&gt;up&lt;&#x2F;em&gt; fait simplement partie du document lisible par un humain, d’où le jeu de mot mark-&lt;em&gt;down&lt;&#x2F;em&gt;. Par exemple, le fragment suivant est un exemple de &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode markdown&quot;&gt;&lt;code class=&quot;sourceCode markdown&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;#cb3-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;Je suis dans un paragraphe. **Je suis en gras.** Et maintenant,&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;#cb3-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;*je suis en italique*.&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;#cb3-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;#cb3-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ss&quot;&gt;- &lt;&#x2F;span&gt;Je suis dans une liste&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;#cb3-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ss&quot;&gt;- &lt;&#x2F;span&gt;avec &lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;#cb3-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ss&quot;&gt;- &lt;&#x2F;span&gt;plusieurs&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-7&quot;&gt;&lt;a href=&quot;#cb3-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ss&quot;&gt;- &lt;&#x2F;span&gt;items&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;En tant que format de fichier texte destiné à être converti en &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;, le &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; est un format de fichier &lt;em&gt;encore moins adapté&lt;&#x2F;em&gt; à l’écriture d’articles scientifiques. Cependant, il a plusieurs avantages :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Il est &lt;em&gt;facilement lisible&lt;&#x2F;em&gt; par un humain, ce qui n’est pas le cas du &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; ou du &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, et est un atout considérable pour la &lt;em&gt;conservation&lt;&#x2F;em&gt; des documents et leur &lt;em&gt;archivage&lt;&#x2F;em&gt;,&lt;&#x2F;li&gt;
&lt;li&gt;Il est &lt;em&gt;facilement convertible&lt;&#x2F;em&gt; en &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;, ce qui permet de publier des articles sur le web sans effort.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L’histoire pourrait s’arrêter là : si le format est inadapté, alors il ne faut tout simplement pas l’utiliser. Toutefois, il existe un projet nommé &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; qui permet de convertir des documents écrits en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; en d’autres formats, comme &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;fr-fr&#x2F;microsoft-365&#x2F;word&quot;&gt;Word&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.oasis-open.org&#x2F;committees&#x2F;tc_home.php?wg_abbrev=office&quot;&gt;Open Document&lt;&#x2F;a&gt;, ou &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Portable_Document_Format&quot;&gt;PDF&lt;&#x2F;a&gt;. Cette interopérabilité permet de placer le format &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; comme un format de fichier qui est une sorte de &lt;em&gt;plus petit dénominateur commun&lt;&#x2F;em&gt; entre les différents formats de fichier représentant du texte. Plutôt que de vouloir &lt;em&gt;convertir&lt;&#x2F;em&gt; des documents entre &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, pourquoi ne pas directement écrire en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt;, et utiliser ce fichier pour &lt;em&gt;générer&lt;&#x2F;em&gt; différents documents ? Le gain potentiel est significatif : écrire un article une seule fois et pouvoir le soumettre à différentes conférences (qui utilisent des formats légèrement différents pour les soumissions), le publier sur le web, et en extraire une présentation pour un exposé semble tout bonnement miraculeux.&lt;&#x2F;p&gt;
&lt;p&gt;La raison qui pousse à croire que cela est possible est que &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; vient avec un système de &lt;em&gt;filtres&lt;&#x2F;em&gt;, qui permet d’enrichir la syntaxe de &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; en exécutant du code écrit dans de véritables langages de programmation. En réalité, on peut même imaginer écrire simplement du texte « comme dans un courriel » et utiliser des &lt;em&gt;filtres&lt;&#x2F;em&gt; pour annoter correctement le texte dans différents formats. Un exemple que j’ai &lt;a href=&quot;https:&#x2F;&#x2F;aliaumel.github.io&#x2F;transducer-exercices&#x2F;&quot;&gt;mis en place récemment&lt;&#x2F;a&gt; est la création d’un &lt;em&gt;site web&lt;&#x2F;em&gt; pour un cours d’informatique, qui permet aussi d’avoir des &lt;a href=&quot;&#x2F;enseignement.html#université-de-varsovie&quot;&gt;&lt;em&gt;feuilles de travaux dirigés&lt;&#x2F;em&gt; au format PDF&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;les-articles-scientifiques&quot;&gt;Les articles scientifiques ?&lt;&#x2F;h2&gt;
&lt;p&gt;L’écriture d’articles scientifiques basés sur le système &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; est une sorte de mode qui revient périodiquement sur internet. Selon le créateur de &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; lui-même, &lt;a href=&quot;https:&#x2F;&#x2F;johnmacfarlane.net&#x2F;&quot;&gt;John MacFarlane&lt;&#x2F;a&gt;, il est possible d’écrire des articles scientifiques en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt; et de les convertir en &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; pour les soumettre à des conférences, comme indiqué dans une &lt;a href=&quot;https:&#x2F;&#x2F;johnmacfarlane.net&#x2F;tug-2020-pandoc-for-texnicians.pdf&quot;&gt;présentation&lt;&#x2F;a&gt; donnée à la conférence &lt;a href=&quot;https:&#x2F;&#x2F;tug.org&#x2F;tug2020&#x2F;program.html&quot;&gt;TUG 2020&lt;&#x2F;a&gt;. Cette idée est séduisante et a été reprise par de nombreux blogueurs et auteurs qui ont tenté de décrire leur méthode pour écrire des articles scientifiques en utilisant &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt;, j’en liste quelques-uns ici sans ordre particulier :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;jaantollander.com&#x2F;post&#x2F;scientific-writing-with-markdown&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;jaantollander.com&#x2F;post&#x2F;scientific-writing-with-markdown&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;brainbaking.com&#x2F;post&#x2F;2021&#x2F;02&#x2F;writing-academic-papers-in-markdown&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;brainbaking.com&#x2F;post&#x2F;2021&#x2F;02&#x2F;writing-academic-papers-in-markdown&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;blog.kathyreid.id.au&#x2F;2020&#x2F;12&#x2F;27&#x2F;academic-writing-workflow&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;blog.kathyreid.id.au&#x2F;2020&#x2F;12&#x2F;27&#x2F;academic-writing-workflow&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;opensource.com&#x2F;article&#x2F;18&#x2F;9&#x2F;pandoc-research-paper&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;opensource.com&#x2F;article&#x2F;18&#x2F;9&#x2F;pandoc-research-paper&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;nextlevel-blog.de&#x2F;blog&#x2F;pandoc&#x2F;&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;nextlevel-blog.de&#x2F;blog&#x2F;pandoc&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pandoc-scholar&#x2F;pandoc-scholar&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;pandoc-scholar&#x2F;pandoc-scholar&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Au cœur de ces systèmes, on retrouve bien sûr &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; et son système de &lt;em&gt;filtres&lt;&#x2F;em&gt; qui agît essentiellement comme un &lt;em&gt;gestionnaire d’effets algébriques&lt;&#x2F;em&gt; pour ceux que cette analogie aide. Ainsi, plusieurs filtres ont trouvé une place centrale, similaire à celle des paquets &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; les plus utilisés :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jgm&#x2F;pandoc-citeproc&quot;&gt;Pandoc Citeproc&lt;&#x2F;a&gt; utilisé pour gérer les citations bibliographiques&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lierdakil&#x2F;pandoc-crossref&quot;&gt;Pandoc Crossref&lt;&#x2F;a&gt; utilisé pour gérer les références croisées entre les éléments du document&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Cependant, il ne semble pas y avoir un consensus sur la manière d’écrire les théorèmes, définitions, preuves et autres éléments d’articles mathématiques en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt;. De plus, il faut remarquer que le &lt;em&gt;filtre&lt;&#x2F;em&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jgm&#x2F;pandoc-citeproc&quot;&gt;Pandoc Citeproc&lt;&#x2F;a&gt; utilise en réalité une &lt;em&gt;syntaxe&lt;&#x2F;em&gt; qui a été spécialement ajoutée dans l’arbre de syntaxe abstrait de &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; pour gérer les citations bibliographiques, et les deux sont tellement liés que le filtre a été directement intégré dans le programme principal. Cela tend à montrer que &lt;em&gt;l’extensibilité&lt;&#x2F;em&gt; est toute relative, et demande en général un couplage très fort avec le programme principal.&lt;&#x2F;p&gt;
&lt;p&gt;En réalité, tous les exemples donnés plus hauts fonctionnent &lt;em&gt;à peu près&lt;&#x2F;em&gt;, mais aucun n’est adapté à une publication d’un véritable article. En particulier, il manque&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Un système de gestion des équations mathématiques, et particulièrement des &lt;em&gt;macros&lt;&#x2F;em&gt;. Pour le moment, &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; est capable de comprendre &lt;em&gt;certaines&lt;&#x2F;em&gt; macros, mais il faut ruser pour les utiliser dans différents formats simultanément, et globalement la solution est &lt;em&gt;écrire du &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; directement&lt;&#x2F;em&gt; en espérant que la conversion dans d’autres formats ne casse pas trop de choses.&lt;&#x2F;li&gt;
&lt;li&gt;Un système de gestion des références croisées équivalent ou supérieur à celui de &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;. En particulier, le fabuleux package &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;knowledge&quot;&gt;Knowledge&lt;&#x2F;a&gt; développé par Thomas Colcombet n’a aucun équivalent pour le moment. Notons d’ailleurs que les références entre des éléments du document et des &lt;em&gt;symboles mathématiques&lt;&#x2F;em&gt; dans une équation sont très difficiles à gérer.&lt;&#x2F;li&gt;
&lt;li&gt;Une gestion très manuelle des inclusions de fichiers, une fonctionnalité pourtant cruciale dès que les documents deviennent un peu longs.&lt;&#x2F;li&gt;
&lt;li&gt;Cela peut sembler « trivial », mais il faut réellement gérer les formats demandés par les conférences. Que cela soit dans le traitement des méta-données, dans les styles de citations, la liste des paquets utilisés et même la « chaîne de compilation » demandée. Certaines conférences utilisent des styles qui requièrent &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;BibTeX&quot;&gt;bibtex&lt;&#x2F;a&gt;, là où &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; utilise au choix &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;natbib&quot;&gt;natbib&lt;&#x2F;a&gt; ou &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biblatex&quot;&gt;biblatex&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un système de prévisualisation rapide et la capacité de faire des &lt;em&gt;aller-retours&lt;&#x2F;em&gt; entre le code et le rendu final. Dans l’écosystème &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, c’est le projet &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;SyncTeX&quot;&gt;synctex&lt;&#x2F;a&gt; qui permet de faire cela, et l’essayer c’est l’adopter.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;En fait, tout le monde semble passer sous silence le besoin d’écrire des formules mathématiques complexes (et interopérables) dans un article scientifique en déléguant cette tâche. D’ailleurs, certains auteurs vont plus loin et écrivent directement du code &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; dans leur document, car il sera conservé tel quel à l’export : mais alors, où est l’intérêt de l’écrire en &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;Markdown&lt;&#x2F;a&gt;, si le seul format où l’export est correct est le &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; ?&lt;&#x2F;p&gt;
&lt;p&gt;Un des systèmes le plus avancé que j’ai trouvé est &lt;a href=&quot;https:&#x2F;&#x2F;quarto.org&#x2F;&quot;&gt;Quarto&lt;&#x2F;a&gt; (anciennement nommé RStudio), qui est un système de publication scientifique basé sur &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; et qui permet de suivre un chercheur (en statistiques, économie ou sciences sociales principalement) tout au long de son processus de recherche, de l’analyse des données statistiques avec le langage &lt;a href=&quot;https:&#x2F;&#x2F;www.r-project.org&#x2F;&quot;&gt;R&lt;&#x2F;a&gt; jusqu’à la publication de l’article en passant par la rédaction du manuscrit. Il semble y avoir un réel effort pour permettre la rédaction de documents, par exemple en ayant une gestion des figures, théorèmes et des références croisées, avec beaucoup d’options et un outil un peu « clef en main » pour génerer des exports &lt;strong&gt;corrects&lt;&#x2F;strong&gt; dans plusieurs formats. Cependant, même avec ce système, l’écriture des mathématiques reste un angle mort.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Pour écrire des articles de blog, un peu de mathématiques, et même des feuilles de travaux dirigés, &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;Pandoc&lt;&#x2F;a&gt; est un outil formidable. Mais il n’est pas adapté pour l’écriture d’articles scientifiques (en informatique théorique et en mathématiques), quoi qu’en dise le dernier &lt;em&gt;proof of concept&lt;&#x2F;em&gt; que l’on trouve sur internet.&lt;&#x2F;p&gt;
&lt;p&gt;Si vous n’aimez pas écrire du &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, ce qui est complètement compréhensible, alors le mieux est de simplement… En écrire le plus simplement possible, avec le moins de paquets et de macros possibles. Cela rendra plus facile une éventuelle conversion ultérieure (mais vers quel format ?) et permettra de garder le document lisible par un humain.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;L’abréviation de « Too Long; Didn’t Read », c’est-à-dire, de trop long, pas lu.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;L’objectif de cet article n’est pas de défendre le système de publication actuel, qui possède de nombreux défauts, mais seulement de mettre en lumière le préjugé existant et auto-alimenté envers les documents qui ne sont pas rédigés avec &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;C’est un point qui peut sembler relativement mineur, mais qui va expliquer une grande partie des reproches qui seront fait à &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; dans cet article…&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Le mot HTML est en réalité l’acronyme de « HyperText Markup Language », où le « HyperText » signifie précisément la capacité à décrire des &lt;em&gt;liens&lt;&#x2F;em&gt; entre différents documents ou à l’intérieur d’un même document, je renvoie à la &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Hypertexte&quot;&gt;page Wikipédia sur Hypertexte&lt;&#x2F;a&gt; pour un historique un peu plus approfondi de la notion, en utilisant moi-même… un lien hypertexte.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn5&quot;&gt;&lt;p&gt;Typiquement, les destinations des liens sont &lt;em&gt;cachées&lt;&#x2F;em&gt; à l’utilisateur, pour des raisons de lisibilité. En particulier, les liens &lt;em&gt;internes&lt;&#x2F;em&gt; à un même document &lt;a href=&quot;https:&#x2F;&#x2F;html.spec.whatwg.org&#x2F;&quot;&gt;HTML&lt;&#x2F;a&gt; sont traités comme les autres : pas de « voir page 66 », « définition 12 » ou « au prochain chapitre », seulement un lien cliquable.&lt;a href=&quot;#fnref5&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Restaurants de Varsovie</title>
        <published>2024-08-03T00:00:00+00:00</published>
        <updated>2024-08-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/restaurants-de-varsovie/"/>
        <id>https://aliaume.fr/site/posts/restaurants-de-varsovie/</id>
        
        <summary type="html">&lt;p&gt;Après une année à Varsovie, voici une petite compilation (non exhaustive) des adresses de « fooding » qui valent le coup. Je liste restaurants, cafés, boulangeries et bars, avec une catégorisation un peu arbitraire. Ce qui est listé est toujours &lt;em&gt;testé&lt;&#x2F;em&gt; et &lt;em&gt;approuvé&lt;&#x2F;em&gt;, c’est-à-dire, que j’y suis allé et que c’était une bonne expérience. Comme tout n’est pas comparable, et ne sera pas au goût de tous, j’ajoute quelques commentaires pour chaque adresse…&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Autobóz — Retour d’expérience</title>
        <published>2024-07-30T00:00:00+00:00</published>
        <updated>2024-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/autoboz/"/>
        <id>https://aliaume.fr/site/posts/autoboz/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/autoboz/">&lt;p&gt;Cette année j’ai eu l’occasion de co-organiser avec &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;users&#x2F;mfortin&#x2F;index&quot;&gt;Marie Fortin&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;chana-wk.github.io&#x2F;&quot;&gt;Chana Weil-Kennedy&lt;&#x2F;a&gt; le séminaire &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt;, et je pense intéressant de partager mon ressenti sur cette expérience. Pour celles et ceux qui, comme moi il y a peu, ne connaissent pas &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt;, cet événement est décrit sur sa page officielle dans la langue de Shakespeare comme suit :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Autobóz is a yearly week-long invitational research camp on Logic, Automata, and Games. We strive to find each year a remote location to allow a group of about 25 young researchers to work in a distraction-free environment.&lt;&#x2F;p&gt;
&lt;p&gt;Started as a workshop for PhD students in Warsaw, Autobóz has grown to include researchers from all over the world, and multiple publications are direct consequences of the interactions fostered during these meetings.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Cependant, si je devais le décrire en Français, j’utiliserais plutôt les termes suivants :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;C’est une semaine de travail collaboratif pour jeunes chercheurs et chercheuses&lt;&#x2F;li&gt;
&lt;li&gt;La thématique de travail est relativement large (au sein de l’informatique théorique)&lt;&#x2F;li&gt;
&lt;li&gt;C’est un très petit événement avec une organisation minimaliste&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;N’ayant jamais participé à de tels événements, je dois dire que j’étais simultanément assez anxieux et enthousiaste. En effet, sur des groupes plus expérimentés et plus nombreux comme les événements au &lt;a href=&quot;https:&#x2F;&#x2F;www.cirm-math.fr&#x2F;&quot;&gt;CIRM&lt;&#x2F;a&gt; à Marseille ou à &lt;a href=&quot;https:&#x2F;&#x2F;www.dagstuhl.de&#x2F;&quot;&gt;Daghstuhl&lt;&#x2F;a&gt; en Allemagne, l’organisation est paradoxalement plus simple, car plus formelle : de ma courte expérience, il y a de nombreux exposés et très peu (ou même pas du tout) de sessions de travail en petits groupes.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Au contraire, &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt; est un événement où l’emploi du temps est très ouvert, et qui nécessite donc une plus grande attention des organisatrices et organisateurs. L’idée de pouvoir collaborer toute une semaine avec des collègues sur des sujets de recherche concrets m’a beaucoup plu, et je dois dire que sur ce point-là je n’ai pas été déçu (et je pense que c’est le cas de la plupart des participant·e·s).&lt;&#x2F;p&gt;
&lt;p&gt;J’ai été invité à rejoindre l’organisation d’&lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;2024&quot;&gt;Autobóz 2024&lt;&#x2F;a&gt; par &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;users&#x2F;mfortin&#x2F;index&quot;&gt;Marie Fortin&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;chana-wk.github.io&#x2F;&quot;&gt;Chana Weil-Kennedy&lt;&#x2F;a&gt;, elles-mêmes contactées auparavant par le comité de suivi de l’événement.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Je suis arrivé assez tardivement dans le comité d’organisation, ce qui a été étrangement plus simple, car certaines décisions avaient déjà été prises (en particulier la localisation et les dates). De plus, nous avions à notre disposition une archive de tous les documents utilisés par le comité d’organisation de l’année 2023 ainsi que les réponses à un questionnaire de « retour d’expérience », ce qui nous a été très précieux pour se faire une idée des délais, des coûts et pour préparer l’organisation. Cependant, il a peut-être manqué une feuille de route plus claire, ce que nous avons tenté de produire cette année pour servir de base aux futures éditions d’&lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;préparer-un-événement-de-recherche-à-petite-échelle&quot;&gt;Préparer un événement de recherche à petite échelle&lt;&#x2F;h2&gt;
&lt;p&gt;Même si je n’ai pas été intégralement en charge de cette partie de l’organisation, je pense qu’il est important de noter que la préparation de tels événements destinés à un public très restreint (25 personnes) pose plusieurs problèmes très concrets :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il faut convaincre les gens de venir dans un lieu isolé et peu connu durant une période de vacances,&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; potentiellement impliquant des coûts de transport élevés et des demandes de visa.&lt;&#x2F;li&gt;
&lt;li&gt;Il faut s’assurer que les participants puissent être financés, ce qui est souvent plus difficile pour les jeunes chercheurs et chercheuses, et qui n’est pas rendu plus simple par le fait que ce n’est ni une conférence ni une école d’été.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Une solution partielle à ces problèmes est d’accoler l’événement à un autre événement de plus grande envergure avec une thématique similaire. Dans notre cas, il a été décidé d’organiser &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;2024&quot;&gt;Autobóz 2024&lt;&#x2F;a&gt; juste après &lt;a href=&quot;https:&#x2F;&#x2F;compose.ioc.ee&#x2F;icalp2024&#x2F;&quot;&gt;ICALP&#x2F;LICS&#x2F;FSCD 2024&lt;&#x2F;a&gt; en Estonie. Notons que cela permet aussi de réduire l’empreinte environnementale de l’événement en permettant aux participant·e·s de ne faire qu’un seul voyage pour les deux événements.&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;La partie la plus difficile de l’organisation a été de choisir les participants. En effet, &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt; est un événement basé sur les invitations et non pas sur une soumission de candidature. L’exercice est intéressant en tant qu’organisateur puisqu’il s’agit alors de bien connaître les membres de la communauté et de « découvrir » les nouveaux doctorants et post-doctorants. Une grande aide a été d’avoir la liste des participants des années précédentes, des listes de suggestions laissées par les membres du comité de suivi, ainsi que les réponses au questionnaire de « retour d’expérience » de l’année précédente.&lt;&#x2F;p&gt;
&lt;p&gt;Notre interprétation de la « philosophie d’&lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;&quot;&gt;Autobóz&lt;&#x2F;a&gt; » a été de chercher à avoir un peu moins d’une moitié de personnes ayant déjà participé à l’événement seulement pour avoir un groupe moteur dans l’organisation du travail.&lt;a href=&quot;#fn5&quot; class=&quot;footnote-ref&quot; id=&quot;fnref5&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;5&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; De plus, l’événement étant destiné à des jeunes chercheurs, nous avons essayé d’équilibrer les proportions de doctorants, de post-doctorants et de chercheurs (fraîchement) permanents. Si nous avons essayé d’avoir une proportion raisonnable de femmes, nous n’avions pas fixé une borne fixe à 50 %, ce qui avait été le cas l’année précédente.&lt;&#x2F;p&gt;
&lt;p&gt;Une fois une liste deux ou trois fois trop longue de candidats potentiels établie, nous avons décidé de faire une invitation « par vague ». Je ne sais pas si cette stratégie était optimale, car cela demandait finalement beaucoup de suivi et de relances pour s’assurer que les gens répondaient, savoir qui en était où dans le processus de réponse, etc. De plus, j’ai utilisé une solution « maison » de publipostage basée sur &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;pandoc&lt;&#x2F;a&gt; et un script &lt;a href=&quot;https:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;python&lt;&#x2F;a&gt; pour envoyer des mails, ce qui a été très pratique, mais s’est avéré inefficace car ceux-ci sont tombés dans le dossier de spam pour beaucoup de personnes.&lt;&#x2F;p&gt;
&lt;p&gt;Pour terminer sur la préparation de l’événement, je pense qu’il ne faut pas négliger le choix des outils de communication. Nous avons utilisé une instance de &lt;a href=&quot;https:&#x2F;&#x2F;nextcloud.com&#x2F;&quot;&gt;Nextcloud&lt;&#x2F;a&gt; hébergée par &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;&quot;&gt;l’IRIF&lt;&#x2F;a&gt; pour partager les documents (factures, formulaires, modèles de courriels, etc.) ce qui s’est avéré &lt;em&gt;infiniment&lt;&#x2F;em&gt; plus pratique que simplement transférer tous les fichiers par courriel tout le temps. L’utilisation d’une feuille de calcul partagée s’est avérée être la chose la plus adaptée pour gérer le suivi des invitations, même si &lt;a href=&quot;https:&#x2F;&#x2F;framacalc.org&#x2F;&quot;&gt;framacalc&lt;&#x2F;a&gt; n’est pas le plus ergonomique des outils.&lt;&#x2F;p&gt;
&lt;p&gt;J’en profite pour souligner que (pour des données non-sensibles) une feuille de calcul partagée avec &lt;em&gt;tous les participants&lt;&#x2F;em&gt; est un moyen de communication &lt;em&gt;extrêmement puissant&lt;&#x2F;em&gt; et remplace avantageusement un formulaire en ligne ou des échanges de mails. Dans notre cas, cela permettait aux invités de savoir qui d’autre allait venir, de remplir leur régime alimentaire, de coordonner leur arrivée à Tallinn, le tout encore une fois sans nécessiter d’interactions particulières.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;parlons-argent&quot;&gt;Parlons argent&lt;&#x2F;h3&gt;
&lt;p&gt;Jusqu’à présent, j’ai évité de parler d’argent, car cela a été le point noir de l’organisation. En effet, pour organiser ce type d’événement, il est nécessaire d’obtenir un fond de départ pour payer les réservations pour le transport, le logement et la nourriture sur place. Dans notre cas, cela n’a pas été un problème. Le problème arrive au moment où il faut faire payer les participants. En effet, nous avions opté sans trop réfléchir pour un système en apparence raisonnable mais qui s’est avéré être &lt;em&gt;désastreux&lt;&#x2F;em&gt; : avancer les frais pour les participant·e·s, et leur demander de nous rembourser après l’événement, en passant par un système géré par le &lt;a href=&quot;https:&#x2F;&#x2F;www.cnrs.fr&#x2F;&quot;&gt;CNRS&lt;&#x2F;a&gt;, c’est-à-dire une combinaison de &lt;a href=&quot;https:&#x2F;&#x2F;www.scienceconf.org&#x2F;&quot;&gt;scienceconf&lt;&#x2F;a&gt; et de &lt;a href=&quot;https:&#x2F;&#x2F;www.cnrs.fr&#x2F;fr&#x2F;la-facturation-electronique&quot;&gt;Chorus&lt;&#x2F;a&gt;. À l’heure où j’écris, il n’est toujours pas possible pour les personnes ayant participé à &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;2024&quot;&gt;Autobóz 2024&lt;&#x2F;a&gt; de payer leurs frais d’inscription, et parfois je me demande si cela sera possible un jour, pour le moment, la date annoncée est septembre 2024 (soit 2 mois après l’événement).&lt;&#x2F;p&gt;
&lt;p&gt;Si je devais conseiller quelque chose, c’est de ne &lt;em&gt;pas faire ça&lt;&#x2F;em&gt;, et de demander à l’hébergement de créer une facture par personne pour que celles-ci payent directement et se fassent rembourser par leur institution.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;une-fois-sur-place&quot;&gt;Une fois sur place&lt;&#x2F;h2&gt;
&lt;p&gt;J’avais beaucoup d’appréhension sur le déroulement de la semaine, et je dois dire que j’ai été agréablement surpris. Globalement, il n’y a eu aucun problème grave (à part une cheville foulée et un porte-monnaie perdu), et organiser n’a pas été une charge insurmontable. Je pense que c’est en grande partie dû à l’organisation en amont et le charisme de &lt;a href=&quot;https:&#x2F;&#x2F;chana-wk.github.io&#x2F;&quot;&gt;Chana&lt;&#x2F;a&gt;. Je propose quelques conseils qui me semblent pertinents :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Créer un groupe de discussion sur une messagerie instantanée (par exemple &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;WhatsApp&quot;&gt;whatsapp&lt;&#x2F;a&gt;) ce qui permet au groupe de se coordonner&lt;a href=&quot;#fn6&quot; class=&quot;footnote-ref&quot; id=&quot;fnref6&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;6&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; et de sociabiliser plus facilement.&lt;&#x2F;li&gt;
&lt;li&gt;Organiser des sessions plénières le matin et le soir pour discuter des problèmes ouverts, de l’organisation des groupes, mais aussi des autres activités (randonnées, baignades, vélo, etc.).&lt;&#x2F;li&gt;
&lt;li&gt;Prévoir du café et des gâteaux pour les pauses, et ne pas sous-estimer la gourmandise des chercheurs et chercheuses.&lt;&#x2F;li&gt;
&lt;li&gt;Insister régulièrement sur le fait que les groupes doivent être inclusifs, et sur la possibilité de rejoindre à tout moment un autre groupe.&lt;&#x2F;li&gt;
&lt;li&gt;Essayer de parler à chaque participant quelques minutes chaque jour.&lt;&#x2F;li&gt;
&lt;li&gt;Prendre le contact des organisateurs locaux de l’événement auquel vous êtes accolé. Cela permet d’appeler en urgence une personne ayant un tournevis un dimanche à 16h pour démonter des tableaux blancs afin qu’ils rentrent dans le bus que vous avez réservé.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;continuation&quot;&gt;Continuation&lt;&#x2F;h2&gt;
&lt;p&gt;À la fin de ces événements, il ne faut pas oublier de faire remplir aux participants un formulaire de retour d’expérience, et de constituer une petite archive des documents utilisés pour l’organisation qui servira de base pour les éditions suivantes. Ah, et n’oubliez pas les doctorants qui doivent désormais &lt;em&gt;valider des crédits&lt;&#x2F;em&gt; pour soutenir leur thèse et qui peuvent tirer profit d’une &lt;em&gt;attestation de participation&lt;&#x2F;em&gt; pour éviter d’avoir à suivre des cours sur la microbiologie marine afin de valider leur thèse en informatique fondamentale. Mais la question de la formation doctorale est pour un autre article…&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Cela laisse d’ailleurs peu de places pour les jeunes chercheurs et chercheuses, ou pour la création de collaborations, et en général peu de choses « scientifiquement concrètes » résultent de tels événements.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Ce comité était composé de &lt;a href=&quot;https:&#x2F;&#x2F;www.davidpurser.net&#x2F;&quot;&gt;David Purser&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;georgekenison.github.io&#x2F;&quot;&gt;George Kenison&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;fmazowiecki.github.io&#x2F;&quot;&gt;Filip Mazowiecki&lt;&#x2F;a&gt;. Il a été particulièrement utile pour nous guider dans l’organisation et nous mettre en contact avec l’organisation de &lt;a href=&quot;https:&#x2F;&#x2F;compose.ioc.ee&#x2F;icalp2024&#x2F;&quot;&gt;ICALP&#x2F;LICS&#x2F;FSCD 2024&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;En effet, si l’objectif est aussi d’avoir de jeunes chercheurs, il est important de ne pas organiser d’événement durant leurs heures d’enseignement.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;En réalité, il est plutôt question de reporter l’impact carbone sur le plus gros événement. D’ailleurs, un certain nombre de personnes ne sont venues qu’à &lt;a href=&quot;https:&#x2F;&#x2F;autoboz.org&#x2F;2024&quot;&gt;Autobóz 2024&lt;&#x2F;a&gt; et non à &lt;a href=&quot;https:&#x2F;&#x2F;compose.ioc.ee&#x2F;icalp2024&#x2F;&quot;&gt;ICALP&#x2F;LICS&#x2F;FSCD 2024&lt;&#x2F;a&gt;, ce qui relativise l’impact de cette stratégie.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn5&quot;&gt;&lt;p&gt;Comme la semaine est uniquement dédiée à la résolution collaborative de problèmes, ce qui est assez rare, il est important d’avoir des personnes qui ont déjà travaillé de cette manière pour guider les autres et créer une dynamique.&lt;a href=&quot;#fnref5&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn6&quot;&gt;&lt;p&gt;Par exemple, pour que les gens n’oublient pas de manger, sachent qui part en balade, où est le groupe de travail de tel problème, etc.&lt;a href=&quot;#fnref6&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Publication robuste sur arXiv</title>
        <published>2024-06-23T00:00:00+00:00</published>
        <updated>2024-06-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/publication-robuste-sur-arxiv/"/>
        <id>https://aliaume.fr/site/posts/publication-robuste-sur-arxiv/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/publication-robuste-sur-arxiv/">&lt;p&gt;Afin de rendre les articles de recherche publics et facilement accessibles&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; il est d’usage en informatique, mathématiques et en physique de publier des versions &lt;em&gt;preprint&lt;&#x2F;em&gt; sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;. Notons qu’utiliser le terme de &lt;em&gt;prépublication&lt;&#x2F;em&gt; est totalement hypocrite, puisque la publication sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; est bien souvent&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;La seule accessible sans “paywall”,&lt;&#x2F;li&gt;
&lt;li&gt;La seule contenant les &lt;em&gt;annexes&lt;&#x2F;em&gt; et toutes les preuves techniques,&lt;&#x2F;li&gt;
&lt;li&gt;La seule effectivement mise à jour (typos, erreurs, etc.) avec une véritable gestion des versions.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Cependant, n’étant pas revue par les pairs, ce type de publication n’est pas considéré comme une publication “officielle” et il est préférable de citer des versions publiées dans des “journaux&#x2F;conférences respectables” pour garantir la qualité des résultats.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ainsi, l’auteur ou l’autrice consciencieux·se aura essentiellement &lt;strong&gt;trois&lt;&#x2F;strong&gt; versions de son papier : une version pour &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, une version pour les relecteurs et une version pour la publication finale.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Dans cet article, je me concentre sur la publication sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; et les petites astuces qui rendent celle-ci plus facile. Je pars aussi du principe que l’article est écrit en utilisant le système &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; et une certaine familiarité avec ce langage et son écosystème.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-gestion-des-annexes&quot;&gt;La gestion des annexes&lt;&#x2F;h2&gt;
&lt;p&gt;Plutôt que de faire une version &lt;em&gt;complètement distincte&lt;&#x2F;em&gt; de votre document sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, ce qui nécessite un travail non-trivial il est parfois plus simple de simplement garder les annexes du papier original. Cependant, la lecture d’un tel papier devient rapidement fastidieuse, avec les allers-retours incessants entre les annexes et le corps du texte. Une solution économique et plutôt élégante est la suivante : utiliser un environnement &lt;code&gt;proofof&lt;&#x2F;code&gt; pour les preuves, et y faire référence avec une commande &lt;code&gt;\proofref&lt;&#x2F;code&gt;, en suivant le code suivant.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% Créé un environnement de preuve pour les résultats en annexe,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% qui prend en argument le label d’un théorème dans le texte principal,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;#cb1-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% et produit une preuve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;#cb1-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% \begin{proof}[Preuve de \cref{the-label}]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;#cb1-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% \phantomsection\label{the-label:proof}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;#cb1-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% contenu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;#cb1-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% \end{proof}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;#cb1-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\NewDocumentEnvironment&lt;&#x2F;span&gt;{proofof}{m}{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-9&quot;&gt;&lt;a href=&quot;#cb1-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\IfValueTF&lt;&#x2F;span&gt;{#1}{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-10&quot;&gt;&lt;a href=&quot;#cb1-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}[Proof of &lt;span class=&quot;kw&quot;&gt;\cref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;} on page &lt;span class=&quot;kw&quot;&gt;\pageref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;}]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-11&quot;&gt;&lt;a href=&quot;#cb1-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\phantomsection\label&lt;&#x2F;span&gt;{#1:proof}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-12&quot;&gt;&lt;a href=&quot;#cb1-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    }{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-13&quot;&gt;&lt;a href=&quot;#cb1-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-14&quot;&gt;&lt;a href=&quot;#cb1-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    }&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-15&quot;&gt;&lt;a href=&quot;#cb1-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\let\oldqedsymbol\qedsymbol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-16&quot;&gt;&lt;a href=&quot;#cb1-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\renewcommand\qedsymbol&lt;&#x2F;span&gt;{&lt;span class=&quot;fu&quot;&gt;\hyperref&lt;&#x2F;span&gt;[#1]{&lt;span class=&quot;fu&quot;&gt;\oldqedsymbol&lt;&#x2F;span&gt;}}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-17&quot;&gt;&lt;a href=&quot;#cb1-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-18&quot;&gt;&lt;a href=&quot;#cb1-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-19&quot;&gt;&lt;a href=&quot;#cb1-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\renewcommand\qedsymbol&lt;&#x2F;span&gt;{&lt;span class=&quot;fu&quot;&gt;\oldqedsymbol&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-20&quot;&gt;&lt;a href=&quot;#cb1-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-21&quot;&gt;&lt;a href=&quot;#cb1-21&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-22&quot;&gt;&lt;a href=&quot;#cb1-22&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;% Fait référence à une preuve en annexe si elle existe&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-23&quot;&gt;&lt;a href=&quot;#cb1-23&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\NewDocumentCommand&lt;&#x2F;span&gt;{&lt;span class=&quot;fu&quot;&gt;\proofref&lt;&#x2F;span&gt;}{m}{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-24&quot;&gt;&lt;a href=&quot;#cb1-24&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% Si la preuve existe, alors on construit un lien&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-25&quot;&gt;&lt;a href=&quot;#cb1-25&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% sinon, rien n’est affiché&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-26&quot;&gt;&lt;a href=&quot;#cb1-26&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% \hyperref[#1:proof]{Proof of \cref{#1}}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-27&quot;&gt;&lt;a href=&quot;#cb1-27&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\IfRefUndefinedExpandable&lt;&#x2F;span&gt;{#1:proof}{}{&lt;span class=&quot;co&quot;&gt;%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-28&quot;&gt;&lt;a href=&quot;#cb1-28&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\hfill\hyperref&lt;&#x2F;span&gt;[#1:proof]{(Proof p.&lt;span class=&quot;kw&quot;&gt;\pageref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1:proof&lt;&#x2F;span&gt;})}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-29&quot;&gt;&lt;a href=&quot;#cb1-29&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    }&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-30&quot;&gt;&lt;a href=&quot;#cb1-30&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Attention.&lt;&#x2F;strong&gt; Pour utiliser les macros définies ci-dessus, il est nécessaire d’avoir chargé les paquets &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;hyperref&quot;&gt;hyperref&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;cleveref&quot;&gt;cleveref&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;xparse&quot;&gt;xparse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Avec cet environnement, il est possible de faire référence à une preuve en annexe avec la commande &lt;code&gt;\proofref{the-label}&lt;&#x2F;code&gt; qui affichera un lien vers la preuve en annexe si celle-ci existe. L’avantage de cette méthode est que produire l’article “publié” devient très facile : il suffit de ne pas inclure les preuves. Notons que cette méthode est aussi utile pour la version destinée aux relecteurs.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;#cb2-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;lemma&lt;&#x2F;span&gt;}[Mon lemme préféré]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;#cb2-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;\label&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;assoc:lem&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;#cb2-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    Pour tout &lt;span class=&quot;ss&quot;&gt;$x,y,z &lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;\in&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;\mathbb&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;{Z}$&lt;&#x2F;span&gt;,&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;#cb2-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;ss&quot;&gt;$(x + y) + z = x + (y + z)$&lt;&#x2F;span&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;#cb2-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\proofref&lt;&#x2F;span&gt;{assoc:lem}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;#cb2-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;lemma&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;#cb2-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a href=&quot;#cb2-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;...&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-9&quot;&gt;&lt;a href=&quot;#cb2-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-10&quot;&gt;&lt;a href=&quot;#cb2-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proofof&lt;&#x2F;span&gt;}{assoc:lem}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-11&quot;&gt;&lt;a href=&quot;#cb2-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    Voici ma preuve...&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-12&quot;&gt;&lt;a href=&quot;#cb2-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Lorsque les théorèmes sont complexes il est souvent utile de &lt;em&gt;reformuler&lt;&#x2F;em&gt; les énoncés devant les preuves en annexe. Pour cela, il est possible d’utiliser l’environnement &lt;code&gt;restatable&lt;&#x2F;code&gt; du paquet &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;thm-restate&quot;&gt;thm-restate&lt;&#x2F;a&gt; et sa version plus agréable fournie par &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;thmtools&quot;&gt;thmtools&lt;&#x2F;a&gt;, les deux étant souvent déjà inclus dans les modèles de document pour les conférences en informatique. Cette approche se combine particulièrement bien avec les macros précédentes qui sont à changer comme suit.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;#cb3-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\NewDocumentEnvironment&lt;&#x2F;span&gt;{proofof}{ m }{&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;#cb3-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% Vérifie que la commande \#1 existe&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;#cb3-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% Si oui, cela veut dire que l’on peut rappeler le théorème&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;#cb3-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% en prenant soin de construire une commande&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;#cb3-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;% qui signale que nous sommes bien dans un environnement &amp;quot;rappelé&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;#cb3-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\ifcsname&lt;&#x2F;span&gt; #1&lt;span class=&quot;fu&quot;&gt;\endcsname&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-7&quot;&gt;&lt;a href=&quot;#cb3-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\def\isInsideRestatedTheorem&lt;&#x2F;span&gt;{1}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-8&quot;&gt;&lt;a href=&quot;#cb3-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\csname&lt;&#x2F;span&gt; #1&lt;span class=&quot;fu&quot;&gt;\endcsname*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-9&quot;&gt;&lt;a href=&quot;#cb3-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-10&quot;&gt;&lt;a href=&quot;#cb3-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}[Proof of {&lt;span class=&quot;kw&quot;&gt;\cref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;}} page {&lt;span class=&quot;kw&quot;&gt;\pageref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;}}]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-11&quot;&gt;&lt;a href=&quot;#cb3-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\phantomsection&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-12&quot;&gt;&lt;a href=&quot;#cb3-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;kw&quot;&gt;\label&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1:proof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-13&quot;&gt;&lt;a href=&quot;#cb3-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}{&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-14&quot;&gt;&lt;a href=&quot;#cb3-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-15&quot;&gt;&lt;a href=&quot;#cb3-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-16&quot;&gt;&lt;a href=&quot;#cb3-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\noindent\hyperref&lt;&#x2F;span&gt;[#1]{&lt;span class=&quot;ss&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;\triangleright&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;$&lt;&#x2F;span&gt; Go back to &lt;span class=&quot;kw&quot;&gt;\cref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;} on page &lt;span class=&quot;kw&quot;&gt;\pageref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1&lt;&#x2F;span&gt;}}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-17&quot;&gt;&lt;a href=&quot;#cb3-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-18&quot;&gt;&lt;a href=&quot;#cb3-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-19&quot;&gt;&lt;a href=&quot;#cb3-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-20&quot;&gt;&lt;a href=&quot;#cb3-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\NewDocumentCommand&lt;&#x2F;span&gt;{&lt;span class=&quot;fu&quot;&gt;\proofref&lt;&#x2F;span&gt;}{ m }{&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-21&quot;&gt;&lt;a href=&quot;#cb3-21&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\IfRefUndefinedExpandable&lt;&#x2F;span&gt;{#1:proof}{}{&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-22&quot;&gt;&lt;a href=&quot;#cb3-22&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;co&quot;&gt;% Si la preuve existe, mais que l’on est dans un environnement&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-23&quot;&gt;&lt;a href=&quot;#cb3-23&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;co&quot;&gt;% qui est &amp;quot;rappelé&amp;quot;, alors la référence n’est quand même&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-24&quot;&gt;&lt;a href=&quot;#cb3-24&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;co&quot;&gt;% pas affichée.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-25&quot;&gt;&lt;a href=&quot;#cb3-25&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\ifdefined\isInsideRestatedTheorem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-26&quot;&gt;&lt;a href=&quot;#cb3-26&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-27&quot;&gt;&lt;a href=&quot;#cb3-27&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\hfill\hyperref&lt;&#x2F;span&gt;[#1:proof]{&lt;span class=&quot;fu&quot;&gt;\textsf&lt;&#x2F;span&gt;{(Proof p.&lt;span class=&quot;kw&quot;&gt;\pageref&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;#1:proof&lt;&#x2F;span&gt;})}}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-28&quot;&gt;&lt;a href=&quot;#cb3-28&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;fu&quot;&gt;\fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-29&quot;&gt;&lt;a href=&quot;#cb3-29&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    }&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-30&quot;&gt;&lt;a href=&quot;#cb3-30&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;&lt;strong&gt;Attention.&lt;&#x2F;strong&gt; Pour utiliser les macros définies ci-dessus, il est nécessaire d’avoir chargé les paquets &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;thm-restate&quot;&gt;thm-restate&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;thmtools&quot;&gt;thmtools&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;hyperref&quot;&gt;hyperref&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;cleveref&quot;&gt;cleveref&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;xparse&quot;&gt;xparse&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Voici un exemple utilisant cette seconde version des macros.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a href=&quot;#cb4-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;lemma&lt;&#x2F;span&gt;}[&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a href=&quot;#cb4-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;      name={My Super Lemma}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a href=&quot;#cb4-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    , restate={super-lemma}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-4&quot;&gt;&lt;a href=&quot;#cb4-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    , label={super-lemma}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-5&quot;&gt;&lt;a href=&quot;#cb4-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;]&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-6&quot;&gt;&lt;a href=&quot;#cb4-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    A nice statement.&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-7&quot;&gt;&lt;a href=&quot;#cb4-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;fu&quot;&gt;\proofref&lt;&#x2F;span&gt;{super-lemma}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-8&quot;&gt;&lt;a href=&quot;#cb4-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;lemma&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-9&quot;&gt;&lt;a href=&quot;#cb4-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-10&quot;&gt;&lt;a href=&quot;#cb4-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;...&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-11&quot;&gt;&lt;a href=&quot;#cb4-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-12&quot;&gt;&lt;a href=&quot;#cb4-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proofof&lt;&#x2F;span&gt;}{super-lemma}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-13&quot;&gt;&lt;a href=&quot;#cb4-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    Here is the proof of the super-lemma.&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-14&quot;&gt;&lt;a href=&quot;#cb4-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;proofof&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;les-métadonnées&quot;&gt;Les métadonnées&lt;&#x2F;h2&gt;
&lt;p&gt;Lors du processus de soumission sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, il est nécessaire de fournir un certain nombre de métadonnées, dont la liste est décrite sur leur &lt;a href=&quot;https:&#x2F;&#x2F;info.arxiv.org&#x2F;help&#x2F;prep.html&quot;&gt;page de FAQ dédiée&lt;&#x2F;a&gt;. Lors de la soumission d’un article, il sera &lt;em&gt;nécessaire&lt;&#x2F;em&gt; ou &lt;em&gt;fortement conseillé&lt;&#x2F;em&gt; de fournir les informations suivantes :&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Titre&lt;&#x2F;strong&gt;: Le titre de l’article, où il est possible d’utiliser des commandes &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; de base (pour les mathématiques ou des accents). Cependant, je pense qu’il est préférable d’utiliser des &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;UTF-8&quot;&gt;caractères unicode standards&lt;&#x2F;a&gt; pour les accents et les symboles mathématiques.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Auteurs&lt;&#x2F;strong&gt;: Les noms des auteurs, rien de bien passionnant ici, mis à part qu’il reste conseillé d’utiliser des caractères unicode plutôt que des commandes &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Résumé&lt;&#x2F;strong&gt;: Un court résumé, au format plein texte, pouvant utiliser quelques symboles mathématiques. En particulier, il n’est pas possible d’utiliser des &lt;em&gt;citations&lt;&#x2F;em&gt; dans cette partie ! Il est d’usage que ce résumé soit aussi celui qui sert de préliminaire à l’article lui-même.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Catégories arXiv&lt;&#x2F;strong&gt;: Avant de pouvoir soumettre un article sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, il est nécessaire de choisir une (ou plusieurs) catégories pour celui-ci. Les plus “traditionnelles” en informatique théorique sont &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;list&#x2F;cs.LO&#x2F;recent&quot;&gt;cs.LO&lt;&#x2F;a&gt; (logique en informatique) et &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;list&#x2F;cs.FL&#x2F;recent&quot;&gt;cs.FL&lt;&#x2F;a&gt; (théorie des langages formels).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mots-clés&lt;&#x2F;strong&gt;: Une courte liste de mots clefs, comme &lt;code&gt;weighted automata&lt;&#x2F;code&gt;, &lt;code&gt;finite model theory&lt;&#x2F;code&gt; ou autres.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Nombre de pages&lt;&#x2F;strong&gt;: Ce n’est pas &lt;em&gt;stricto-sensu&lt;&#x2F;em&gt; nécessaire, mais cela permet de faire une &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Somme_de_contr%C3%B4le&quot;&gt;somme de contrôle&lt;&#x2F;a&gt; du pauvre.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Format de document&lt;&#x2F;strong&gt;: Normalement celui-ci est facile à remplir, si vous ne marquez pas &lt;code&gt;pdf&lt;&#x2F;code&gt; il y a un problème…&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DOI&lt;&#x2F;strong&gt;: Si l’article est déjà publié dans une version légèrement différente dans un journal ou une conférence. Cette information est utile pour permettre aux lecteurs de “remonter” vers une citation “acceptable” des résultats de l’article.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Licence&lt;&#x2F;strong&gt;: Il est possible de choisir une licence pour l’article, par exemple une licence &lt;a href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;&quot;&gt;Creative Commons&lt;&#x2F;a&gt;. En général, je sélectionne la licence &lt;code&gt;CC-BY-SA&lt;&#x2F;code&gt; qui permet une réutilisation libre de l’article, à condition de citer les auteurs et de redistribuer l’article sous la même licence.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Catégorie AMS, ACM&lt;&#x2F;strong&gt;: Afin de permettre une meilleure indexation et découvrabilité des articles, il est recommandé de fournir des catégories &lt;a href=&quot;https:&#x2F;&#x2F;www.ams.org&#x2F;&quot;&gt;AMS&lt;&#x2F;a&gt; pour les articles mathématiques et &lt;a href=&quot;https:&#x2F;&#x2F;www.acm.org&#x2F;&quot;&gt;ACM&lt;&#x2F;a&gt; pour les articles en informatique. Voir la &lt;a href=&quot;#les-catégories-arxiv-ams-et-acm&quot;&gt;section suivante&lt;&#x2F;a&gt; pour plus de détails.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Comme ces informations sont de toute manière demandées par certaines conférences et qu’il est &lt;em&gt;terrible&lt;&#x2F;em&gt; d’utiliser un environnement &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTML&#x2F;Element&#x2F;textarea&quot;&gt;textarea&lt;&#x2F;a&gt; HTML simple pour écrire du texte, c’est une bonne pratique d’écrire dans un fichier séparé toutes ces informations déjà prêtes. Cela joue le double rôle de simplification de la soumission (il suffit de copier-coller) et de documentation du projet.&lt;&#x2F;p&gt;
&lt;p&gt;La partie la plus “pénible” de ce processus, au moins pour les premières soumissions, est certainement l’écriture des catégories AMS&#x2F;ACM et arXiv qui font l’objet de la sous section suivante.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;les-catégories-ams-et-acm&quot;&gt;Les catégories AMS et ACM&lt;&#x2F;h3&gt;
&lt;p&gt;Afin de permettre une bonne indexation des articles, de multiples référentiels existent. Les plus “importants” en informatique théorique sont certainement les codes de &lt;a href=&quot;https:&#x2F;&#x2F;www.ams.org&#x2F;&quot;&gt;l’AMS&lt;&#x2F;a&gt; (American Mathematical Society), de &lt;a href=&quot;https:&#x2F;&#x2F;www.acm.org&#x2F;&quot;&gt;l’ACM&lt;&#x2F;a&gt; (Association for Computing Machinery) et de &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;The arXiv&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Les codes AMS liés à l’informatique théorique se trouvent sur leur page dédiée à &lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Qxx&amp;amp;btn=Current&quot;&gt;l’informatique&lt;&#x2F;a&gt; et leur page dédiée à &lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03D05&amp;amp;btn=Current&quot;&gt;la logique&lt;&#x2F;a&gt;. En résumé, ceux qui peuvent être utiles pour moi sont les suivants:&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;caption&gt;Résumé des codes &lt;a href=&quot;https:&#x2F;&#x2F;www.ams.org&#x2F;&quot;&gt;AMS&lt;&#x2F;a&gt; utiles pour l’informatique théorique.&lt;&#x2F;caption&gt;
&lt;colgroup&gt;
&lt;col style=&quot;width: 26%&quot; &#x2F;&gt;
&lt;col style=&quot;width: 73%&quot; &#x2F;&gt;
&lt;&#x2F;colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;Code AMS&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Description&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q01&quot;&gt;68Q01&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;General topics in the theory of computing&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q70&quot;&gt;68Q70&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Algebraic theory of languages and automata&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q45&quot;&gt;68Q45&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Formal languages and automata&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q60&quot;&gt;68Q60&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Specification and verification (program logics, model checking, etc.)&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q19&quot;&gt;68Q19&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Descriptive complexity and finite models&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Q99&quot;&gt;68Q99&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;None of the above, but in the section &lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=68Qxx&amp;amp;btn=Current&quot;&gt;Theory of computing&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03Bxx&quot;&gt;03Bxx&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;General logic&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03B70&quot;&gt;03B70&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Logic in computer science&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03Cxx&quot;&gt;03Cxx&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Model theory&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03C13&quot;&gt;03C13&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Model theory of finite structures&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03Dxx&quot;&gt;03Dxx&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Computability and recursion theory&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mathscinet.ams.org&#x2F;mathscinet&#x2F;msc&#x2F;msc2020.html?t=03D05&quot;&gt;03D05&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Automata and formal grammars in connection with logical questions&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;!--
&lt;p&gt;F. Theory of Computation
F.0 GENERAL
F.1 COMPUTATION BY ABSTRACT DEVICES
F.1.0 General
F.1.1 Models of Computation (F.4.1)
F.1.2 Modes of Computation
F.3 LOGICS AND MEANINGS OF PROGRAMS
F.3.2 Semantics of Programming Languages
F.4 MATHEMATICAL LOGIC AND FORMAL LANGUAGES
F.4.1 Mathematical Logic
F.4.2 Grammars and Other Rewriting Systems
F.4.3 Formal Languages
--&amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;Les codes ACM qui peuvent être utiles en logique, automate et théorie des langages sont les suivants dans la sous catégorie “F” pour la théorie du calcul. Si je comprends bien, le site &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; utilise &lt;a href=&quot;https:&#x2F;&#x2F;www.acm.org&#x2F;publications&#x2F;computing-classification-system&#x2F;1998&#x2F;ccs98&quot;&gt;la liste ACM CSS de 1998&lt;&#x2F;a&gt;, dont je liste ci-après les catégories utiles pour moi.&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;caption&gt;Les quelques catégories ACM qui me correspondent.&lt;&#x2F;caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: right;&quot;&gt;ACM CCS&lt;&#x2F;th&gt;
&lt;th style=&quot;text-align: left;&quot;&gt;Description&lt;&#x2F;th&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.1&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Theory of Computation&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.1.1&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Models of Computation&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.3.2&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Semantics of Programming Languages&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.4.1&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Mathematical Logic&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.4.2&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Grammars and Other Rewriting Systems&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: right;&quot;&gt;F.4.3&lt;&#x2F;td&gt;
&lt;td style=&quot;text-align: left;&quot;&gt;Formal Languages&lt;&#x2F;td&gt;
&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;Cependant, pour certaines conférences, il faudra aussi utiliser des codes ACM plus récents, par exemple en utilisant leur outil &lt;a href=&quot;https:&#x2F;&#x2F;dl.acm.org&#x2F;ccs&quot;&gt;visual CCS&lt;&#x2F;a&gt;. Bien que cela ne soit pas &lt;em&gt;stricto-sensu&lt;&#x2F;em&gt; nécessaire à une soumission sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt;, il est de bon goût d’avoir les mêmes méta-données dans le document et sur la plateforme qui l’héberge. &lt;a href=&quot;https:&#x2F;&#x2F;dl.acm.org&#x2F;ccs&quot;&gt;L’outil fourni par l’ACM&lt;&#x2F;a&gt; permet de générer du magnifique code &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Extensible_Markup_Language&quot;&gt;XML&lt;&#x2F;a&gt; à intégrer directement dans le fichier &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; de l’article. Un exemple de code prêt à être intégré dans un fichier &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; est le suivant :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;&lt;pre class=&quot;sourceCode latex&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a href=&quot;#cb5-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\begin&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;CCSXML&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a href=&quot;#cb5-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&amp;lt;ccs2012&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-3&quot;&gt;&lt;a href=&quot;#cb5-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-4&quot;&gt;&lt;a href=&quot;#cb5-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003753&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-5&quot;&gt;&lt;a href=&quot;#cb5-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Models of computation&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-6&quot;&gt;&lt;a href=&quot;#cb5-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-7&quot;&gt;&lt;a href=&quot;#cb5-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-8&quot;&gt;&lt;a href=&quot;#cb5-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-9&quot;&gt;&lt;a href=&quot;#cb5-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003790&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-10&quot;&gt;&lt;a href=&quot;#cb5-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Logic&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-11&quot;&gt;&lt;a href=&quot;#cb5-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-12&quot;&gt;&lt;a href=&quot;#cb5-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-13&quot;&gt;&lt;a href=&quot;#cb5-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-14&quot;&gt;&lt;a href=&quot;#cb5-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003790.10002990&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-15&quot;&gt;&lt;a href=&quot;#cb5-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Logic and verification&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-16&quot;&gt;&lt;a href=&quot;#cb5-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-17&quot;&gt;&lt;a href=&quot;#cb5-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-18&quot;&gt;&lt;a href=&quot;#cb5-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-19&quot;&gt;&lt;a href=&quot;#cb5-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003790.10003792&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-20&quot;&gt;&lt;a href=&quot;#cb5-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Proof theory&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-21&quot;&gt;&lt;a href=&quot;#cb5-21&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-22&quot;&gt;&lt;a href=&quot;#cb5-22&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-23&quot;&gt;&lt;a href=&quot;#cb5-23&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-24&quot;&gt;&lt;a href=&quot;#cb5-24&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003790.10003799&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-25&quot;&gt;&lt;a href=&quot;#cb5-25&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Finite Model Theory&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-26&quot;&gt;&lt;a href=&quot;#cb5-26&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-27&quot;&gt;&lt;a href=&quot;#cb5-27&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-28&quot;&gt;&lt;a href=&quot;#cb5-28&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-29&quot;&gt;&lt;a href=&quot;#cb5-29&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10003766&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-30&quot;&gt;&lt;a href=&quot;#cb5-30&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Formal languages and automata theory&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-31&quot;&gt;&lt;a href=&quot;#cb5-31&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-32&quot;&gt;&lt;a href=&quot;#cb5-32&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-33&quot;&gt;&lt;a href=&quot;#cb5-33&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;   &amp;lt;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-34&quot;&gt;&lt;a href=&quot;#cb5-34&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_id&amp;gt;10003752.10010124&amp;lt;&#x2F;concept_id&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-35&quot;&gt;&lt;a href=&quot;#cb5-35&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_desc&amp;gt;Theory of computation~Semantics and reasoning&amp;lt;&#x2F;concept_desc&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-36&quot;&gt;&lt;a href=&quot;#cb5-36&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;concept_significance&amp;gt;500&amp;lt;&#x2F;concept_significance&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-37&quot;&gt;&lt;a href=&quot;#cb5-37&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;       &amp;lt;&#x2F;concept&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-38&quot;&gt;&lt;a href=&quot;#cb5-38&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt; &amp;lt;&#x2F;ccs2012&amp;gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-39&quot;&gt;&lt;a href=&quot;#cb5-39&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;\end&lt;&#x2F;span&gt;{&lt;span class=&quot;ex&quot;&gt;CCSXML&lt;&#x2F;span&gt;}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-40&quot;&gt;&lt;a href=&quot;#cb5-40&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-41&quot;&gt;&lt;a href=&quot;#cb5-41&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Models of computation}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-42&quot;&gt;&lt;a href=&quot;#cb5-42&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Logic}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-43&quot;&gt;&lt;a href=&quot;#cb5-43&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Logic and verification}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-44&quot;&gt;&lt;a href=&quot;#cb5-44&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Proof theory}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-45&quot;&gt;&lt;a href=&quot;#cb5-45&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Finite Model Theory}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-46&quot;&gt;&lt;a href=&quot;#cb5-46&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Formal languages and automata theory}&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-47&quot;&gt;&lt;a href=&quot;#cb5-47&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;\ccsdesc&lt;&#x2F;span&gt;[500]{Theory of computation~Semantics and reasoning}&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;préparer-le-document&quot;&gt;Préparer le document&lt;&#x2F;h2&gt;
&lt;p&gt;Pour éviter les problèmes de fichiers manquants, de commentaires qui restent à jamais dans une archive publique et pour simplifier le processus de soumission, il peut être utile d’utiliser un petit utilitaire bien pratique : &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;latexpand&quot;&gt;latexpand&lt;&#x2F;a&gt;. Si vous utilisez &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;bibtex&quot;&gt;bibtex&lt;&#x2F;a&gt;, il est possible de l’utiliser pour intégrer les références bibliographiques directement dans le fichier &lt;code&gt;tex&lt;&#x2F;code&gt; principal en utilisant l’option &lt;code&gt;--expand-bbl&lt;&#x2F;code&gt;, si vous avez plutôt un journal qui utilise le &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biber&quot;&gt;biber&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biblatex&quot;&gt;biblatex&lt;&#x2F;a&gt; une autre option &lt;code&gt;--biber&lt;&#x2F;code&gt; est à votre disposition. L’utilisation typique est alors la suivante :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb6&quot;&gt;&lt;pre class=&quot;sourceCode bash&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb6-1&quot;&gt;&lt;a href=&quot;#cb6-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ex&quot;&gt;latexpand&lt;&#x2F;span&gt; &lt;span class=&quot;at&quot;&gt;--empty-comments&lt;&#x2F;span&gt; &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-2&quot;&gt;&lt;a href=&quot;#cb6-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;          &lt;span class=&quot;at&quot;&gt;--expand-bbl&lt;&#x2F;span&gt; mon-article.bbl &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-3&quot;&gt;&lt;a href=&quot;#cb6-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;          mon-article.tex &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; mon-article.flat.tex&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Bien entendu, il n’est pas possible d’intégrer simplement &lt;em&gt;tous les fichiers&lt;&#x2F;em&gt; dans le code &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; principal&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;, il est alors utile de créer une archive un peu &lt;em&gt;minimale&lt;&#x2F;em&gt; contenant les fichiers annexes (principalement des images). Comme il est relativement impossible de se souvenir précisément de &lt;a href=&quot;https:&#x2F;&#x2F;xkcd.com&#x2F;1168&#x2F;&quot;&gt;l’utilisation de la commande &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;fu&quot;&gt;tar&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; je rappelle ci-dessous un exemple d’utilisation pour créer une archive &lt;code&gt;tar.gz&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb7&quot;&gt;&lt;pre class=&quot;sourceCode bash&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb7-1&quot;&gt;&lt;a href=&quot;#cb7-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;tar&lt;&#x2F;span&gt; &lt;span class=&quot;at&quot;&gt;-czf&lt;&#x2F;span&gt; mon-archive.tar.gz &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-2&quot;&gt;&lt;a href=&quot;#cb7-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;         mon-papier.arxiv.tex &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-3&quot;&gt;&lt;a href=&quot;#cb7-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;         LICENSE &lt;span class=&quot;dt&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb7-4&quot;&gt;&lt;a href=&quot;#cb7-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;         mon-image.png &lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Pour terminer, une petite remarque sur le fait que si votre code commence par un commentaire (&lt;code&gt;%&lt;&#x2F;code&gt;) alors le système &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;d’arXiv&lt;&#x2F;a&gt; ne le compilera probablement pas correctement, et il faudra indiquer clairement au système d’utiliser &lt;code&gt;pdflatex&lt;&#x2F;code&gt; via une commande &lt;a href=&quot;https:&#x2F;&#x2F;info.arxiv.org&#x2F;help&#x2F;submit_tex.html#considerations-for-pdflatex-submissions&quot;&gt;&lt;code class=&quot;sourceCode latex&quot;&gt;&lt;span class=&quot;fu&quot;&gt;\pdfoutput&lt;&#x2F;span&gt;=1&lt;&#x2F;code&gt; dans les &lt;em&gt;5 premières lignes du fichier&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tester-le-rendu&quot;&gt;Tester le rendu&lt;&#x2F;h2&gt;
&lt;p&gt;Lors d’une soumission, le système &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; compile le code &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; de l’article et demande une vérification manuelle du rendu final avant de valider la soumission (qui est rendue publique quelques jours plus tard). Pour éviter les aller-retours inutiles entre le code source, l’archive &lt;code&gt;tar.gz&lt;&#x2F;code&gt; et le rendu final, il est possible d’utiliser une image Docker pour créer un environnement isolé de compilation en utilisant l’image officielle &lt;a href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;r&#x2F;texlive&#x2F;texlive&quot;&gt;texlive&#x2F;texlive&lt;&#x2F;a&gt;. Il est aussi possible&#x2F;conseillé d’utiliser un système d’intégration continue pour vérifier la bonne compilation du papier au fil de l’écriture, comme décrit dans le billet &lt;a href=&quot;&#x2F;posts&#x2F;docker-and-github-actions.html&quot;&gt;Docker et Actions Github&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-exemple-de-makefile&quot;&gt;Un exemple de Makefile&lt;&#x2F;h2&gt;
&lt;p&gt;Pour simplifier la collaboration avec d’autres auteurs et pour ne pas se retrouver perdu quand on revient 5 mois plus tard dans le dossier d’un papier déjà publié, il est particulièrement utile d’avoir une documentation. Comme personne n’écrit jamais de documentation, et que lorsqu’elle existe, elle est obsolète, il est plus raisonnable d’utiliser un &lt;code&gt;Makefile&lt;&#x2F;code&gt; pour automatiser le processus de compilation et de nettoyage. Un exemple de &lt;code&gt;Makefile&lt;&#x2F;code&gt; est donné ci-dessous.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb8&quot;&gt;&lt;pre class=&quot;sourceCode makefile&quot;&gt;&lt;code class=&quot;sourceCode makefile&quot;&gt;&lt;span id=&quot;cb8-1&quot;&gt;&lt;a href=&quot;#cb8-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;ot&quot;&gt;.PHONY:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; all clean&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-2&quot;&gt;&lt;a href=&quot;#cb8-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-3&quot;&gt;&lt;a href=&quot;#cb8-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Nom du fichier principal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-4&quot;&gt;&lt;a href=&quot;#cb8-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;mon-article&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-5&quot;&gt;&lt;a href=&quot;#cb8-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-6&quot;&gt;&lt;a href=&quot;#cb8-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;all:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-7&quot;&gt;&lt;a href=&quot;#cb8-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-8&quot;&gt;&lt;a href=&quot;#cb8-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Compilation du fichier principal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-9&quot;&gt;&lt;a href=&quot;#cb8-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# en utilisant latexmk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-10&quot;&gt;&lt;a href=&quot;#cb8-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;$(PAPER).pdf:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;.tex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-11&quot;&gt;&lt;a href=&quot;#cb8-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;er&quot;&gt;    &lt;&#x2F;span&gt;latexmk -pdf -pdflatex=&lt;span class=&quot;st&quot;&gt;&amp;quot;pdflatex -interaction=nonstopmode&amp;quot;&lt;&#x2F;span&gt; &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.tex&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-12&quot;&gt;&lt;a href=&quot;#cb8-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-13&quot;&gt;&lt;a href=&quot;#cb8-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-14&quot;&gt;&lt;a href=&quot;#cb8-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Création d’une version &amp;quot;arXiv&amp;quot; du papier&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-15&quot;&gt;&lt;a href=&quot;#cb8-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# qui inclut les fichiers annexes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-16&quot;&gt;&lt;a href=&quot;#cb8-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# et les références bibliographiques&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-17&quot;&gt;&lt;a href=&quot;#cb8-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# en supprimant les commentaires&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-18&quot;&gt;&lt;a href=&quot;#cb8-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;$(PAPER).arxiv.tex:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-19&quot;&gt;&lt;a href=&quot;#cb8-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;er&quot;&gt;    &lt;&#x2F;span&gt;latexpand -o &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tex \&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-20&quot;&gt;&lt;a href=&quot;#cb8-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;              &lt;span class=&quot;ch&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;-empty-comments &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-21&quot;&gt;&lt;a href=&quot;#cb8-21&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;              --expand-bbl &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;.bbl &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-22&quot;&gt;&lt;a href=&quot;#cb8-22&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;              &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;.tex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-23&quot;&gt;&lt;a href=&quot;#cb8-23&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-24&quot;&gt;&lt;a href=&quot;#cb8-24&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Création d’une archive tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-25&quot;&gt;&lt;a href=&quot;#cb8-25&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# pour soumission sur arXiv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-26&quot;&gt;&lt;a href=&quot;#cb8-26&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;$(PAPER).arxiv.tar.gz:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;.arxiv.tex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-27&quot;&gt;&lt;a href=&quot;#cb8-27&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;er&quot;&gt;    &lt;&#x2F;span&gt;tar -czf &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tar.gz \&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-28&quot;&gt;&lt;a href=&quot;#cb8-28&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;             &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tex \&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-29&quot;&gt;&lt;a href=&quot;#cb8-29&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;             LICENSE \&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-30&quot;&gt;&lt;a href=&quot;#cb8-30&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;             mon-image.png&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-31&quot;&gt;&lt;a href=&quot;#cb8-31&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-32&quot;&gt;&lt;a href=&quot;#cb8-32&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Compilation autonome de l’archive dans un conteneur&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-33&quot;&gt;&lt;a href=&quot;#cb8-33&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# jetable pour tester le rendu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-34&quot;&gt;&lt;a href=&quot;#cb8-34&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;$(PAPER).arxiv.pdf:&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;.arxiv.tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-35&quot;&gt;&lt;a href=&quot;#cb8-35&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;# décompresse l’archive dans un dossier temporaire&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-36&quot;&gt;&lt;a href=&quot;#cb8-36&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    tar -xzf &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tar.gz -C &#x2F;tmp&#x2F;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-37&quot;&gt;&lt;a href=&quot;#cb8-37&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;# compile l’archive dans un conteneur jetable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-38&quot;&gt;&lt;a href=&quot;#cb8-38&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    docker run --rm -v &#x2F;tmp&#x2F;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv:&#x2F;workdir \&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-39&quot;&gt;&lt;a href=&quot;#cb8-39&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;                    &lt;span class=&quot;ch&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;w &#x2F;workdir &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-40&quot;&gt;&lt;a href=&quot;#cb8-40&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;                    texlive&#x2F;texlive &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-41&quot;&gt;&lt;a href=&quot;#cb8-41&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;                    latexmk -pdf -pdflatex=&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;quot;pdflatex -interaction=nonstopmode&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;.arxiv.tex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-42&quot;&gt;&lt;a href=&quot;#cb8-42&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-43&quot;&gt;&lt;a href=&quot;#cb8-43&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;co&quot;&gt;# Nettoyage des fichiers temporaires&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-44&quot;&gt;&lt;a href=&quot;#cb8-44&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;dv&quot;&gt;clean:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-45&quot;&gt;&lt;a href=&quot;#cb8-45&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;er&quot;&gt;    &lt;&#x2F;span&gt;latexmk -c&lt;&#x2F;span&gt;
&lt;span id=&quot;cb8-46&quot;&gt;&lt;a href=&quot;#cb8-46&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    rm -f &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tex &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.tar.gz &lt;span class=&quot;ch&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;dt&quot;&gt;PAPER&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;)&lt;&#x2F;span&gt;.arxiv.pdf&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Vous n’avez plus d’excuse pour ne pas mettre vos articles avec tout le contenu sur une archive ouverte.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Par exemple, en suivant une démarche de &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Science_ouverte&quot;&gt;science ouverte&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Notons que, plus ou moins explicitement en informatique, le processus de relecture des conférences s’appuie principalement sur les critères de &lt;em&gt;nouveauté&lt;&#x2F;em&gt; et &lt;em&gt;d’intérêt scientifique&lt;&#x2F;em&gt; au détriment d’une vérification rigoureuse des preuves, souvent laissées en annexe et rarement lues.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;Si le papier est rejeté, et envoyé à d’autres conférences, le nombre de “versions” augmente artificiellement puisque chaque conférence possède son propre modèle de document et ses propres contraintes de mise en page, en particulier de nombre de pages maximal (ce qui change ce qui est en annexe &#x2F; dans le corps du texte).&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Il est techniquement possible de créer de nouveaux fichiers depuis du code &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, et donc d’inclure des fichiers binaires directement dans le code source, dont la première étape serait alors de les décompresser lors d’une première passe de compilation. Je n’ai pas eu le temps d’expérimenter cette méthode, mais je garde l’idée en tête.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Github Actions et Docker</title>
        <published>2024-06-22T00:00:00+00:00</published>
        <updated>2024-06-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/github-docker/"/>
        <id>https://aliaume.fr/site/posts/github-docker/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/github-docker/">&lt;p&gt;J’essaie de plus en plus d’utiliser des techniques &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Int%C3%A9gration_continue&quot;&gt;d’intégration continue&lt;&#x2F;a&gt; et de &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;D%C3%A9ploiement_continu&quot;&gt;déploiement continu&lt;&#x2F;a&gt; pour mes projets, même s’ils sont principalement des projets de type “papier de recherche”, c’est-à-dire, utilisant &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;. Cela répond à plusieurs problématiques très concrètes :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Qui n’a pas déjà eu un mail d’un collègue disant “le document ne compile pas”, alors que tout fonctionnait parfaitement sur notre machine ?&lt;&#x2F;li&gt;
&lt;li&gt;Qui n’a pas déjà eu une mauvaise surprise en poussant un document sur &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;&quot;&gt;arXiv&lt;&#x2F;a&gt; et en obtenant une&#x2F;des erreurs de compilation et&#x2F;ou un rendu complètement différent ?&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Cela devient d’autant plus important lorsque vous avez vos propres petits scripts pour automatiser certaines tâches. Typiquement, pour générer des documents PDFs à partir d’images en SVG via &lt;a href=&quot;https:&#x2F;&#x2F;inkscape.org&#x2F;&quot;&gt;Inkscape&lt;&#x2F;a&gt;, ou un utilitaire pour &lt;em&gt;aplatir&lt;&#x2F;em&gt; les fichiers sources &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; avant de les envoyer à un éditeur en utilisant &lt;a href=&quot;https:&#x2F;&#x2F;www.ctan.org&#x2F;pkg&#x2F;latexpand&quot;&gt;latexpand&lt;&#x2F;a&gt;. Dans mon cas, j’essaie d’utiliser de plus en plus du &lt;a href=&quot;https:&#x2F;&#x2F;daringfireball.net&#x2F;projects&#x2F;markdown&#x2F;&quot;&gt;markdown&lt;&#x2F;a&gt; et le convertir en &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt; avec l’aide de &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;pandoc&lt;&#x2F;a&gt;, pour des raisons que je ne vais pas détailler ici. Comme &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;pandoc&lt;&#x2F;a&gt; repose sur la notion de &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;filters.html&quot;&gt;“filtre”&lt;&#x2F;a&gt; pour effectuer des transformations de documents, ceux-ci étant (souvent) écrits en &lt;a href=&quot;https:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;, il est alors nécessaire de gérer un environnement virtuel &lt;a href=&quot;https:&#x2F;&#x2F;www.python.org&#x2F;&quot;&gt;Python&lt;&#x2F;a&gt;, les versions des dépendances, entre les paquets python, la version de &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;pandoc&lt;&#x2F;a&gt;, celle de &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Même si ce n’est pas idéal pour tout un tas de raisons éthiques, j’ai commencé à utiliser &lt;a href=&quot;https:&#x2F;&#x2F;&quot;&gt;Github Actions&lt;&#x2F;a&gt; pour automatiser les tâches de compilation de mes documents. Le maître mot ici est “reproductibilité”.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;L’exemple prototypique d’une telle action est la suivante&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode yaml&quot;&gt;&lt;code class=&quot;sourceCode yaml&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Build LaTeX document&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;#cb1-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;push&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;#cb1-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;branches&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;#cb1-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;#cb1-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;#cb1-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;build&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;#cb1-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ubuntu-latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-9&quot;&gt;&lt;a href=&quot;#cb1-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;steps&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-10&quot;&gt;&lt;a href=&quot;#cb1-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; actions&#x2F;checkout@v2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-11&quot;&gt;&lt;a href=&quot;#cb1-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Install LaTeX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-12&quot;&gt;&lt;a href=&quot;#cb1-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; sudo apt-get install texlive-full&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-13&quot;&gt;&lt;a href=&quot;#cb1-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Install inkscape&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-14&quot;&gt;&lt;a href=&quot;#cb1-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; sudo apt-get install inkscape&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-15&quot;&gt;&lt;a href=&quot;#cb1-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Install python3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-16&quot;&gt;&lt;a href=&quot;#cb1-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; sudo apt-get install python3 python3-pip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-17&quot;&gt;&lt;a href=&quot;#cb1-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Install required packages&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-18&quot;&gt;&lt;a href=&quot;#cb1-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; pip3 install -r requirements.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-19&quot;&gt;&lt;a href=&quot;#cb1-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Build LaTeX document&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-20&quot;&gt;&lt;a href=&quot;#cb1-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; pdflatex -interaction=nonstopmode -halt-on-error document.tex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Cette méthode est intéressante, car on peut automatiser la création de &lt;em&gt;pdfs&lt;&#x2F;em&gt; qui seront visibles sur la page du projet, que l’on peut vraiment faire de la gestion sémantique des versions, mais pose par ailleurs plusieurs problèmes :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il est extrêmement fastidieux de faire la liste exhaustive des dépendances, surtout quand on utilise un système d’exploitation qui n’est pas le &lt;code&gt;ubuntu-latest&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Tester le bon fonctionnement de l’action en local est compliqué.&lt;&#x2F;li&gt;
&lt;li&gt;Utiliser du &lt;a href=&quot;https:&#x2F;&#x2F;yaml.org&#x2F;&quot;&gt;Yaml&lt;&#x2F;a&gt; comme un langage de programmation est une hérésie, et il faudra changer ce fichier de configuration lors d’une migration sur une autre forge.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Pour pallier ces problèmes, j’ai essayé deux solutions assez différentes. La première est d’utiliser &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;NixOs&lt;&#x2F;a&gt; pour gérer les dépendances, un choix assez raisonnable quand on sait que leur argument principal est la reproductibilité&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nix is a tool that takes a unique approach to package management and system configuration. Learn how to make reproducible, declarative and reliable systems.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;La seconde est d’utiliser &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; pour créer une image contenant toutes les dépendances nécessaires à la compilation du document.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lapproche-nixos&quot;&gt;L’approche &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;NixOs&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;!-- Courte présentation de Nix et de guix June 15, 2003; 21 years ago Eelco
Dolstra The Nix package manager employs a model in which software packages are
each installed into unique directories with immutable contents. These directory
names correspond to cryptographic hashes that take into account all
dependencies of a package, including other packages managed by Nix. As a
result, Nix package names are content identifying since packages with the same
name will have had the same inputs including build platform and therefore the
same build result.[4]
--&gt;
&lt;p&gt;Afin de répondre aux problématiques de gestion des versions de paquets et de reproductibilité, &lt;a href=&quot;https:&#x2F;&#x2F;edolstra.github.io&#x2F;&quot;&gt;Eelco Dolstra&lt;&#x2F;a&gt; a créé le gestionnaire de paquets &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; en 2003. Au cœur de son fonctionnement il y a la notion de &lt;em&gt;répertoires uniques et immuables&lt;&#x2F;em&gt; : pour chaque logiciel un répertoire est créé et son contenu &lt;em&gt;ne changera jamais&lt;&#x2F;em&gt;. L’identification du logiciel s’effectue à l’aide d’un hash cryptographique qui prend en compte toutes les dépendances du logiciel, y compris les autres logiciels gérés par &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt;. Cela permet de faire coexister des “arbres de dépendances” très différents sur un même système en utilisant des alias bien sentis.&lt;&#x2F;p&gt;
&lt;p&gt;La mise en pratique de cette idée s’avère un peu plus complexe, car le système repose sur un langage de programmation spécifique pour décrire les dépendances d’un projet (et permettre de calculer les identités associées). Je trouve ce langage tout simplement hideux. Cependant, pour une utilisation “simple”, cela restera relativement lisible.&lt;&#x2F;p&gt;
&lt;p&gt;Pour déclarer un environnement de développement adapté à notre projet, il suffit de créer un fichier &lt;code&gt;shell.nix&lt;&#x2F;code&gt; dans le dossier racine du projet dans ce langage &lt;em&gt;turing complet&lt;&#x2F;em&gt;, &lt;em&gt;paresseux&lt;&#x2F;em&gt;, &lt;em&gt;avec un typage dynamique&lt;&#x2F;em&gt;, une syntaxe &lt;em&gt;incompréhensible&lt;&#x2F;em&gt; et &lt;em&gt;très peu de documentation&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode nix&quot;&gt;&lt;code class=&quot;sourceCode nix&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;#cb2-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;op&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;pkgs&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;?&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;import&lt;&#x2F;span&gt; &amp;lt;nixpkgs&amp;gt; &lt;span class=&quot;op&quot;&gt;{}&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;}&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;#cb2-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;pkgs&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;mkShell &lt;span class=&quot;op&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;#cb2-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;va&quot;&gt;buildInputs&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;with&lt;&#x2F;span&gt; pkgs&lt;span class=&quot;op&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;[&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;#cb2-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    texlive&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;combined&lt;span class=&quot;op&quot;&gt;.&lt;&#x2F;span&gt;scheme-full&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;#cb2-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    inkscape&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;#cb2-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    python3&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;#cb2-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;op&quot;&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a href=&quot;#cb2-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;op&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Une fois ce code écrit, on peut simplement utiliser la commande &lt;code&gt;nix-shell&lt;&#x2F;code&gt; pour entrer dans un environnement où toutes les dépendances sont installées. Cette méthode a été décrite dans un billet de blog de &lt;a href=&quot;https:&#x2F;&#x2F;determinate.systems&#x2F;posts&#x2F;nix-github-actions&#x2F;&quot;&gt;Luc Perkins&lt;&#x2F;a&gt; pour &lt;a href=&quot;https:&#x2F;&#x2F;determinate.systems&#x2F;&quot;&gt;Determinate Systems&lt;&#x2F;a&gt;. Cela permet de tester en local le processus de compilation et simplifie le fichier de configuration de l’action, où les installations sont remplacées par ces trois commandes&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode yaml&quot;&gt;&lt;code class=&quot;sourceCode yaml&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;#cb3-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Install Nix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;#cb3-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; DeterminateSystems&#x2F;nix-installer-action@main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;#cb3-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; DeterminateSystems&#x2F;magic-nix-cache-action@main  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;#cb3-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Build LaTeX document&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;#cb3-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; nix develop --command &amp;quot;pdflatex -interaction=nonstopmode -halt-on-error document.tex&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Notons que pour simplifier encore plus le fichier de configuration, il est de bon goût de créer un fichier &lt;code&gt;Makefile&lt;&#x2F;code&gt; dans la syntaxe de &lt;a href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;make&#x2F;&quot;&gt;GNU Make&lt;&#x2F;a&gt;, qui permet de simplement écrire &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;fu&quot;&gt;make&lt;&#x2F;span&gt; all&lt;&#x2F;code&gt;, &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;fu&quot;&gt;make&lt;&#x2F;span&gt; tests&lt;&#x2F;code&gt;, &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;fu&quot;&gt;make&lt;&#x2F;span&gt; clean&lt;&#x2F;code&gt;, plutôt que des commandes longues et compliquées. Cela a pour autre avantage de permettre une meilleure découvrabilité du système de construction : sur un grand nombre de plateformes, écrire &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;fu&quot;&gt;make&lt;&#x2F;span&gt;&lt;&#x2F;code&gt; suivi de la touche &lt;code&gt;TAB&lt;&#x2F;code&gt; permet d’afficher toutes les commandes disponibles.&lt;&#x2F;p&gt;
&lt;p&gt;Il y a tout de même plusieurs inconvénients à cette méthode :&lt;&#x2F;p&gt;
&lt;ol type=&quot;a&quot;&gt;
&lt;li&gt;En réalité, les exécutables présents sur votre machine sont toujours accessibles depuis l’environnement &lt;code&gt;nix-shell&lt;&#x2F;code&gt;. Cela veut dire qu’il est toujours possible de découvrir des dépendances mal spécifiées bien trop tard.&lt;&#x2F;li&gt;
&lt;li&gt;Malgré la présence d’un cache, le temps de compilation reste assez long.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;lapproche-docker&quot;&gt;L’approche &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Introduits en 2006 sous le nom de “conteneurs de processus”, les “Control Groups” &lt;a href=&quot;https:&#x2F;&#x2F;www.kernel.org&#x2F;doc&#x2F;Documentation&#x2F;cgroup-v1&#x2F;cgroups.txt&quot;&gt;CGROUPS&lt;&#x2F;a&gt; ont été intégrés à la version 2.6.24 du noyau Linux. Cette nouvelle fonctionnalité visait à isoler des &lt;em&gt;groupes&lt;&#x2F;em&gt; de processus en leur limitant l’accès à certaines ressources (CPU, mémoire, réseau, etc.). En utilisant cette technologie, une forme relativement légère de virtualisation a été créée sous le nom de &lt;a href=&quot;https:&#x2F;&#x2F;linuxcontainers.org&#x2F;&quot;&gt;LXC&lt;&#x2F;a&gt; pour “Linux Containers”. L’intérêt est un coût en ressources bien plus faible que les machines virtuelles traditionnelles, tout en offrant une isolation suffisante pour la plupart des cas d’utilisation.&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Basé sur &lt;a href=&quot;https:&#x2F;&#x2F;linuxcontainers.org&#x2F;&quot;&gt;LXC&lt;&#x2F;a&gt; et d’autres technologies (libvirt, ou systemd-nspawn), &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; a été crée en 2013 par &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Solomon_Hykes&quot;&gt;Solomon Hykes&lt;&#x2F;a&gt; et est devenu un outil incontournable sur “le cloud” (comprendre, vendre du temps de machine à des entreprises, sans avoir à maintenir un parc de machines virtuelles). Le principal atout a été de standardiser un format &lt;em&gt;d’image&lt;&#x2F;em&gt; afin de permettre l’échange et la centralisation de &lt;em&gt;conteneurs&lt;&#x2F;em&gt; “prêts à l’emploi”.&lt;a href=&quot;#fn5&quot; class=&quot;footnote-ref&quot; id=&quot;fnref5&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;5&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Pour créer une image &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;, il suffit de créer un fichier &lt;code&gt;Dockefile&lt;&#x2F;code&gt; dans le dossier racine du projet. Par exemple, pour une image contenant les dépendances nécessaires à la compilation de documents &lt;a href=&quot;https:&#x2F;&#x2F;www.latex-project.org&#x2F;&quot;&gt;LaTeX&lt;&#x2F;a&gt;, plus quelques logiciels utiles comme &lt;a href=&quot;https:&#x2F;&#x2F;pandoc.org&#x2F;&quot;&gt;pandoc&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.gnu.org&#x2F;software&#x2F;make&#x2F;&quot;&gt;make&lt;&#x2F;a&gt; ou &lt;a href=&quot;https:&#x2F;&#x2F;inkscape.org&#x2F;&quot;&gt;Inkscape&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;&lt;pre class=&quot;sourceCode dockerfile&quot;&gt;&lt;code class=&quot;sourceCode dockerfile&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a href=&quot;#cb4-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;FROM&lt;&#x2F;span&gt; pandoc&#x2F;latex:latest&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a href=&quot;#cb4-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;RUN&lt;&#x2F;span&gt; &lt;span class=&quot;ex&quot;&gt;apk&lt;&#x2F;span&gt; add &lt;span class=&quot;at&quot;&gt;--no-cache&lt;&#x2F;span&gt; make&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a href=&quot;#cb4-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;RUN&lt;&#x2F;span&gt; &lt;span class=&quot;ex&quot;&gt;apk&lt;&#x2F;span&gt; add &lt;span class=&quot;at&quot;&gt;--no-cache&lt;&#x2F;span&gt; inkscape&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Fort de ce nouveau document (dont la syntaxe est relativement plus lisible que celle de &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt;), il est possible de créer une image &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; en utilisant une commande dans le style de &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;docker&lt;&#x2F;span&gt; build &lt;span class=&quot;at&quot;&gt;-t&lt;&#x2F;span&gt; my-image .&lt;&#x2F;code&gt;. Une fois l’image créée, il est possible de lancer un conteneur à partir de cette image en utilisant la commande &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;docker&lt;&#x2F;span&gt; run &lt;span class=&quot;at&quot;&gt;-it&lt;&#x2F;span&gt; my-image&lt;&#x2F;code&gt;. À des fins de test, il est souvent utile de &lt;em&gt;monter&lt;&#x2F;em&gt; un volume pour que les fichiers du projet soient accessibles, la commande ressemble alors à &lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span class=&quot;ex&quot;&gt;docker&lt;&#x2F;span&gt; run &lt;span class=&quot;at&quot;&gt;-it&lt;&#x2F;span&gt; &lt;span class=&quot;at&quot;&gt;-v&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span class=&quot;bu&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span class=&quot;va&quot;&gt;)&lt;&#x2F;span&gt;:&#x2F;work my-image&lt;&#x2F;code&gt;. L’objectif ici n’est pas de fournir un tutoriel complet au logiciel &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;, je vais donc m’arrêter là pour les commandes de base.&lt;&#x2F;p&gt;
&lt;p&gt;À ce stade, on obtient un premier avantage par rapport à &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; : l’image ne contient pas les logiciels de la machine hôte, et on se rend donc directement compte des problèmes potentiels.&lt;&#x2F;p&gt;
&lt;p&gt;La seule question restante est alors : “Mais comment utiliser cette image dans une action &lt;a href=&quot;https:&#x2F;&#x2F;&quot;&gt;Github Actions&lt;&#x2F;a&gt; ?” J’ai cru dans un premier temps qu’il faudrait passer par le &lt;a href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;&quot;&gt;Docker Hub&lt;&#x2F;a&gt;, ce qui nécessiterait d’avoir des identifiants, une gestion des versions, etc. De plus, il est un peu étrange de créer (et de publier) une image qui n’a de sens que pour un seul projet.&lt;&#x2F;p&gt;
&lt;p&gt;J’ai découvert par hasard qu’il était possible de s’appuyer sur le &lt;a href=&quot;https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;packages&#x2F;guides&#x2F;publishing-docker-images&quot;&gt;Github Container Registry&lt;&#x2F;a&gt;, qui pour stocker des images &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; directement sur le dépôt &lt;a href=&quot;https:&#x2F;&#x2F;www.github.com&quot;&gt;Github&lt;&#x2F;a&gt;. Un bonus de cette approche est que ces images sont ajoutées comme “artéfacts” du projet, ce qui veut dire qu’une personne peut venir la télécharger pour se servir directement de l’environnement de développement du projet.&lt;&#x2F;p&gt;
&lt;p&gt;Pour automatiser la création de l’image, il suffit de créer un fichier de configuration adéquat qui peut ressembler à celui ci-dessous :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;&lt;pre class=&quot;sourceCode yaml&quot;&gt;&lt;code class=&quot;sourceCode yaml&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a href=&quot;#cb5-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Build Docker Image&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a href=&quot;#cb5-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-3&quot;&gt;&lt;a href=&quot;#cb5-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;workflow_dispatch&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-4&quot;&gt;&lt;a href=&quot;#cb5-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-5&quot;&gt;&lt;a href=&quot;#cb5-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;env&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-6&quot;&gt;&lt;a href=&quot;#cb5-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;REGISTRY&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ghcr.io&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-7&quot;&gt;&lt;a href=&quot;#cb5-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;IMAGE_NAME&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ github.repository }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-8&quot;&gt;&lt;a href=&quot;#cb5-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-9&quot;&gt;&lt;a href=&quot;#cb5-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-10&quot;&gt;&lt;a href=&quot;#cb5-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;build-and-push-image&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-11&quot;&gt;&lt;a href=&quot;#cb5-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ubuntu-latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-12&quot;&gt;&lt;a href=&quot;#cb5-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;permissions&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-13&quot;&gt;&lt;a href=&quot;#cb5-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;contents&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; read&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-14&quot;&gt;&lt;a href=&quot;#cb5-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;packages&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; write&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-15&quot;&gt;&lt;a href=&quot;#cb5-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;steps&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-16&quot;&gt;&lt;a href=&quot;#cb5-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Checkout repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-17&quot;&gt;&lt;a href=&quot;#cb5-17&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; actions&#x2F;checkout@v4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-18&quot;&gt;&lt;a href=&quot;#cb5-18&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Extract metadata (tags, labels) for Docker&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-19&quot;&gt;&lt;a href=&quot;#cb5-19&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;id&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; meta&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-20&quot;&gt;&lt;a href=&quot;#cb5-20&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; docker&#x2F;metadata-action@v5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-21&quot;&gt;&lt;a href=&quot;#cb5-21&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;with&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-22&quot;&gt;&lt;a href=&quot;#cb5-22&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;images&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ env.REGISTRY }}&#x2F;${{ env.IMAGE_NAME }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-23&quot;&gt;&lt;a href=&quot;#cb5-23&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Log in to the Container Registry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-24&quot;&gt;&lt;a href=&quot;#cb5-24&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; docker&#x2F;login-action@v3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-25&quot;&gt;&lt;a href=&quot;#cb5-25&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;with&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-26&quot;&gt;&lt;a href=&quot;#cb5-26&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;registry&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ env.REGISTRY }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-27&quot;&gt;&lt;a href=&quot;#cb5-27&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;username&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ github.actor }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-28&quot;&gt;&lt;a href=&quot;#cb5-28&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;password&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ secrets.GITHUB_TOKEN }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-29&quot;&gt;&lt;a href=&quot;#cb5-29&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Build and push Docker image&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-30&quot;&gt;&lt;a href=&quot;#cb5-30&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; docker&#x2F;build-push-action@v5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-31&quot;&gt;&lt;a href=&quot;#cb5-31&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;with&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-32&quot;&gt;&lt;a href=&quot;#cb5-32&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;context&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-33&quot;&gt;&lt;a href=&quot;#cb5-33&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;file&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Dockerfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-34&quot;&gt;&lt;a href=&quot;#cb5-34&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;push&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-35&quot;&gt;&lt;a href=&quot;#cb5-35&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;tags&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ steps.meta.outputs.tags }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-36&quot;&gt;&lt;a href=&quot;#cb5-36&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;labels&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ${{ steps.meta.outputs.labels }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;La partie importante ici est de ne pas créer l’image à chaque lancement ou de manière automatique, mais de proposer un &lt;em&gt;bouton&lt;&#x2F;em&gt; pour le faire (c’est la ligne &lt;code&gt;workflow_dispatch&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;L’utilisation de l’image dans une action est alors très simple, il suffit de spécifier que l’action doit s’effectuer dans un conteneur en spécifiant l’image à utiliser. Avec un peu de templating, on arrive même à écrire un fichier “prêt à copier-coller”&lt;a href=&quot;#fn6&quot; class=&quot;footnote-ref&quot; id=&quot;fnref6&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;6&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; qui ressemble à ceci :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb6&quot;&gt;&lt;pre class=&quot;sourceCode yaml&quot;&gt;&lt;code class=&quot;sourceCode yaml&quot;&gt;&lt;span id=&quot;cb6-1&quot;&gt;&lt;a href=&quot;#cb6-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;. . .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-2&quot;&gt;&lt;a href=&quot;#cb6-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;fu&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-3&quot;&gt;&lt;a href=&quot;#cb6-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;build&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-4&quot;&gt;&lt;a href=&quot;#cb6-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ubuntu-latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-5&quot;&gt;&lt;a href=&quot;#cb6-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;container&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-6&quot;&gt;&lt;a href=&quot;#cb6-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;image&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; ghcr.io&#x2F;${{ github.actor }}&#x2F;${{ github.repository }}:main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-7&quot;&gt;&lt;a href=&quot;#cb6-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;steps&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-8&quot;&gt;&lt;a href=&quot;#cb6-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Checkout repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-9&quot;&gt;&lt;a href=&quot;#cb6-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; actions&#x2F;checkout@v4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-10&quot;&gt;&lt;a href=&quot;#cb6-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Builds the tar.gz archive&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-11&quot;&gt;&lt;a href=&quot;#cb6-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;run&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; make all&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-12&quot;&gt;&lt;a href=&quot;#cb6-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;      &lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; Upload artifacts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-13&quot;&gt;&lt;a href=&quot;#cb6-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;uses&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; actions&#x2F;upload-artifact@v4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-14&quot;&gt;&lt;a href=&quot;#cb6-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;        &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;with&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-15&quot;&gt;&lt;a href=&quot;#cb6-15&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;name&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; artifacts.tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb6-16&quot;&gt;&lt;a href=&quot;#cb6-16&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;at&quot;&gt;          &lt;&#x2F;span&gt;&lt;span class=&quot;fu&quot;&gt;path&lt;&#x2F;span&gt;&lt;span class=&quot;kw&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;at&quot;&gt; artifacts.tar.gz&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;En pratique, j’ai trouvé que l’approche &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; était plus simple à mettre en place, plus rapide et plus efficace. L’image est mise en cache et il est &lt;em&gt;extrêmement rare&lt;&#x2F;em&gt; d’avoir à la recréer (sauf changement majeur dans le projet). Par ailleurs, il est très facile de tester en local comment la compilation s’effectue dans le conteneur : l’exemple typique du moment est l’incompatibilité entre &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biber&quot;&gt;biber&lt;&#x2F;a&gt; et &lt;a href=&quot;https:&#x2F;&#x2F;ctan.org&#x2F;pkg&#x2F;biblatex&quot;&gt;biblatex&lt;&#x2F;a&gt; en fonction du mode d’installation…&lt;&#x2F;p&gt;
&lt;p&gt;L’approche &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; garde l’avantage d’être agnostique au système d’exploitation utilisé, et est “sans frictions” : il suffit de taper &lt;code&gt;nix-shell&lt;&#x2F;code&gt; et tout est automatisé. Il est possible d’utiliser &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; pour générer des images &lt;a href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt; “minimales”. En pratique cependant, il est assez difficile de savoir ce dont l’action lancée par &lt;a href=&quot;https:&#x2F;&#x2F;&quot;&gt;Github Actions&lt;&#x2F;a&gt; aura besoin (git? ruby? python?). De plus, pour les utilisateurs qui ne veulent pas installer un autre gestionnaire de paquets,&lt;a href=&quot;#fn7&quot; class=&quot;footnote-ref&quot; id=&quot;fnref7&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;7&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; il reste nécessaire de bien lister les dépendances et fournir une idée approximative de leur méthode d’installation (le contraire de &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; donc).&lt;&#x2F;p&gt;
&lt;p&gt;En conclusion, je garde sous le coude un fichier &lt;code&gt;shell.nix&lt;&#x2F;code&gt;, un &lt;code&gt;Dockerfile&lt;&#x2F;code&gt; et une partie du &lt;code&gt;README&lt;&#x2F;code&gt; dédiée à la gestion des dépendances, tous étant en réalité complémentaires.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;On pensera par exemple à la plateforme &lt;a href=&quot;https:&#x2F;&#x2F;www.ipol.im&#x2F;&quot;&gt;IPOL&lt;&#x2F;a&gt; et à la &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=bCT53QqNu_g&quot;&gt;reproductibilité&lt;&#x2F;a&gt; des résultats scientifiques pour le traitement d’images.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Attention, cette action ne fonctionne certainement pas. En pratique, &lt;code&gt;pip3&lt;&#x2F;code&gt; utilisé depuis la ligne de commande nécessite de créer un environnement virtuel pour ne pas casser les paquets systèmes. Vu que tout cela est déjà dans une machine virtuelle, créer un tel environnement n’a pas de sens et il faudrait plutôt utiliser l’argument &lt;code&gt;--break-system-packages&lt;&#x2F;code&gt; de &lt;code&gt;pip3&lt;&#x2F;code&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;la première est pour installer &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt;, la seconde pour utiliser un cache de dépendances afin de ne pas recompiler à chaque lancement de l’action.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Je n’ai &lt;em&gt;aucune&lt;&#x2F;em&gt; référence pour étayer cette affirmation.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn5&quot;&gt;&lt;p&gt;Il suffit de regarder sur le site de &lt;a href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;&quot;&gt;Docker Hub&lt;&#x2F;a&gt; pour voir le nombre d’images disponibles, toutes &lt;em&gt;subtilement&lt;&#x2F;em&gt; différentes.&lt;a href=&quot;#fnref5&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn6&quot;&gt;&lt;p&gt;C’est-à-dire qui ne contient aucune constante relative au dépôt écrite en dur.&lt;a href=&quot;#fnref6&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn7&quot;&gt;&lt;p&gt;Et d’ailleurs, pourquoi installer &lt;a href=&quot;https:&#x2F;&#x2F;nixos.org&#x2F;&quot;&gt;Nix&lt;&#x2F;a&gt; plutôt que son concurrent &lt;a href=&quot;https:&#x2F;&#x2F;guix.gnu.org&#x2F;&quot;&gt;Guix&lt;&#x2F;a&gt; ?&lt;a href=&quot;#fnref7&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Localité et théorèmes de préservation</title>
        <published>2023-11-16T00:00:00+00:00</published>
        <updated>2023-11-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/local-tarski/"/>
        <id>https://aliaume.fr/site/posts/local-tarski/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/local-tarski/">&lt;p&gt;Ce document est le résumé en français de l’article de &lt;span class=&quot;citation&quot; data-cites=&quot;preservation:LOP22&quot;&gt;Lopez (&lt;a href=&quot;#ref-preservation:LOP22&quot; role=&quot;doc-biblioref&quot;&gt;2022&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt; présenté à la conférence LICS 2022, dont le pdf, les slides de présentations, ainsi que le fichier &lt;code&gt;bibtex&lt;&#x2F;code&gt; associé sont disponibles &lt;a href=&quot;&#x2F;research&#x2F;conferences&quot;&gt;sur ma page web&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;résumé&quot;&gt;Résumé&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article s’intéresse au pouvoir expressif d’un fragment de la logique du premier ordre dérivé de la forme normale de Gaifman, nommément, les combinaisons &lt;em&gt;positives&lt;&#x2F;em&gt; de formules closes basiques locales. Nous montrons que ces dernières ont le même pouvoir expressif que les formules closes &lt;em&gt;existentielles locales&lt;&#x2F;em&gt;, c’est-à-dire les formules obtenues en considérant la clôture existentielle d’une formule locale. De plus, dans le cadre des structures arbitraires, les formules existentielles locales ont le même pouvoir expressif que les formules préservées par les &lt;em&gt;plongements élémentaires locaux&lt;&#x2F;em&gt;, ce qui correspond à une généralisation du théorème de Łoś-Tarski. En effet, ce dernier considère les formules existentielles, qui sont précisément les formules existentielles &lt;span class=&quot;math inline&quot;&gt;\(0\)&lt;&#x2F;span&gt;-locales. Comme il est d’usage, ce théorème de préservation ne relativise pas à la classe des structures &lt;em&gt;finies&lt;&#x2F;em&gt;, et nous démontrons de plus que les problèmes associés à cet échec (décider si une formule est préservée, décider si une formule est équivalente à une combinaison positive de formules closes basiques locales, etc.) sont indécidables.&lt;&#x2F;p&gt;
&lt;p&gt;Nous montrons cependant que la compréhension des formules existentielles locales permet d’obtenir une caractérisation des classes de structures finies, héréditaires et closes sous union disjointe, pour lesquelles le théorème de Łoś-Tarski relativise, en montrant que ce sont exactement celles où le théorème de Łoś-Tarski relativise &lt;em&gt;localement&lt;&#x2F;em&gt;, c’est-à-dire, relativise aux voisinages des structures de la classe. Cette caractérisation permet de déduire simplement des résultats préexistants, et de construire de nouvelles classes de structures où le théorème de Łoś-Tarski relativise.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contextualisation&quot;&gt;Contextualisation&lt;&#x2F;h1&gt;
&lt;p&gt;Le théorème de Łoś-Tarski est un résultat classique de la théorie des modèles, dans la lignée des théorèmes de préservation &lt;span class=&quot;citation&quot; data-cites=&quot;chang1990model&quot;&gt;(voir par exemple &lt;a href=&quot;#ref-chang1990model&quot; role=&quot;doc-biblioref&quot;&gt;Chang et Keisler 1990, vol. 73, sect. 5.2&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. En toute généralité, un théorème de préservation sert de pont entre deux classes de formules au premier ordre, l’une définie syntaxiquement, l’autre définie de manière sémantique.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Théorème &lt;span class=&quot;citation&quot; data-cites=&quot;los55 tarski54&quot;&gt;(&lt;a href=&quot;#ref-los55&quot; role=&quot;doc-biblioref&quot;&gt;Łoś 1955&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-tarski54&quot; role=&quot;doc-biblioref&quot;&gt;Tarski 1954&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;strong&gt; Soit &lt;span class=&quot;math inline&quot;&gt;\(\sigma\)&lt;&#x2F;span&gt; une signature relationnelle finie, et &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; une formule dans &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{FO}[\sigma]\)&lt;&#x2F;span&gt;. Les deux propriétés suivantes sont équivalentes :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il existe une formule &lt;strong&gt;existentielle&lt;&#x2F;strong&gt; &lt;span class=&quot;math inline&quot;&gt;\(\psi\)&lt;&#x2F;span&gt; équivalente à &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt;,&lt;&#x2F;li&gt;
&lt;li&gt;Pour toute paire &lt;span class=&quot;math inline&quot;&gt;\(A \subseteq_iB\)&lt;&#x2F;span&gt; de structures, si &lt;span class=&quot;math inline&quot;&gt;\(A \models \varphi\)&lt;&#x2F;span&gt;, alors &lt;span class=&quot;math inline&quot;&gt;\(B \models \varphi\)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Comme de nombreux résultats de la théorie des modèles, les théorèmes de préservation reposent en général sur l’utilisation du théorème de compacité de la logique au premier ordre. Ce dernier certifie qu’un ensemble &lt;span class=&quot;math inline&quot;&gt;\(T\)&lt;&#x2F;span&gt; de formules possède un modèle&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; si et seulement si toute partie finie de &lt;span class=&quot;math inline&quot;&gt;\(T\)&lt;&#x2F;span&gt; possède un modèle. Ce théorème fondamental de la théorie des modèles ne relativise pas à l’ensemble des structures finies. En effet, il existe un ensemble de formules qui ne possède aucun modèle fini, mais dont toute partie finie possède un modèle fini. Il suffit par exemple de considérer les formules &lt;span class=&quot;math inline&quot;&gt;\(\varphi_n\)&lt;&#x2F;span&gt; disant “il existe au moins &lt;span class=&quot;math inline&quot;&gt;\(n\)&lt;&#x2F;span&gt; éléments distincts”. Une structure &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt; qui satisfait &lt;span class=&quot;math inline&quot;&gt;\(\varphi_n\)&lt;&#x2F;span&gt; pour tout &lt;span class=&quot;math inline&quot;&gt;\(n\)&lt;&#x2F;span&gt; ne peut pas être finie, mais tout sous ensemble fini des formules &lt;span class=&quot;math inline&quot;&gt;\(\varphi_n\)&lt;&#x2F;span&gt; est satisfait par une structure finie &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt; “assez grande”.&lt;&#x2F;p&gt;
&lt;p&gt;Cependant, ce n’est pas parce que la preuve des théorèmes de préservation utilise un résultat qui ne relativise pas aux structures finies que les théorèmes eux-mêmes ne relativisent pas au cas fini. On peut imaginer d’autres preuves, plus combinatoires, qui permettraient d’obtenir ces correspondances entre syntaxe et sémantique dans ce cadre plus restreint. Notons que la relativisation du théorème de Łoś-Tarski au cas fini n’est pas triviale : plus de formules sont équivalentes lorsque l’on restreint notre attention aux modèles finis, mais simultanément, plus de formules sont préservées par extensions lorsque l’on restreint notre attention aux structures finies.&lt;&#x2F;p&gt;
&lt;p&gt;Pour une majorité de théorèmes de préservation, il a été rapidement démontré qu’ils ne relativisent pas au cas fini &lt;span class=&quot;citation&quot; data-cites=&quot;tait1959counterexample stolboushkin95 gurevitch84 ajtai1994datalog Kuperberg21&quot;&gt;(voir par exemple &lt;a href=&quot;#ref-tait1959counterexample&quot; role=&quot;doc-biblioref&quot;&gt;Tait 1959&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-stolboushkin95&quot; role=&quot;doc-biblioref&quot;&gt;Stolboushkin 1995&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-gurevitch84&quot; role=&quot;doc-biblioref&quot;&gt;Gurevich 1984&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-ajtai1994datalog&quot; role=&quot;doc-biblioref&quot;&gt;Ajtai et Gurevich 1994&lt;&#x2F;a&gt;; ou plus récemment &lt;a href=&quot;#ref-Kuperberg21&quot; role=&quot;doc-biblioref&quot;&gt;Kuperberg 2021&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, avec une exception notable : le théorème de préservation par homomorphisme. La question du théorème de préservation par homomorphisme est restée ouverte jusqu’à ce que sa relativisation au cas fini soit démontrée par &lt;span class=&quot;citation&quot; data-cites=&quot;Rossman08&quot;&gt;Rossman (&lt;a href=&quot;#ref-Rossman08&quot; role=&quot;doc-biblioref&quot;&gt;2008&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, environ 49 ans après le premier contre exemple fourni par Tait.&lt;&#x2F;p&gt;
&lt;p&gt;En parallèle des résultats négatifs obtenus sur la classe des structures finies, les relativisations des théorèmes de préservations à des classes encore plus restreintes de structures (avec degré borné, héréditaires, etc.) ont été étudiées &lt;span class=&quot;citation&quot; data-cites=&quot;atserias2006preservation atserias2008preservation dawar20 harwath2014preservation&quot;&gt;(pour citer quelques exemples, on peut s’intéresser aux résultats de &lt;a href=&quot;#ref-atserias2006preservation&quot; role=&quot;doc-biblioref&quot;&gt;Atserias, Dawar, et Kolaitis 2006&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-atserias2008preservation&quot; role=&quot;doc-biblioref&quot;&gt;Atserias, Dawar, et Grohe 2008&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-dawar20&quot; role=&quot;doc-biblioref&quot;&gt;Dawar et Sankaran 2021&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-harwath2014preservation&quot; role=&quot;doc-biblioref&quot;&gt;Harwath, Heimberg, et Schweikardt 2015&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Concrètement, le théorème de Łoś-Tarski &lt;span id=&quot;relativises&quot; class=&quot;def&quot;&gt;relativise&lt;&#x2F;span&gt; à une classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures lorsque les deux propositions suivantes sont équivalentes pour toute formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi \in \mathsf{FO}[\sigma]\)&lt;&#x2F;span&gt; :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il existe une formule existentielle &lt;span class=&quot;math inline&quot;&gt;\(\psi\)&lt;&#x2F;span&gt; équivalente à &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; sur la classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt;, i.e., pour toute structure &lt;span class=&quot;math inline&quot;&gt;\(A \in \mathcal{C}\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(A \models \varphi\)&lt;&#x2F;span&gt; si et seulement si &lt;span class=&quot;math inline&quot;&gt;\(A \models \psi\)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;La formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; est préservée par extensions sur &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt;, i.e., pour toute paire &lt;span class=&quot;math inline&quot;&gt;\(A,B\)&lt;&#x2F;span&gt; de structures dans &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt;, telles que &lt;span class=&quot;math inline&quot;&gt;\(A \subseteq_iB\)&lt;&#x2F;span&gt;, si &lt;span class=&quot;math inline&quot;&gt;\(A \models \varphi\)&lt;&#x2F;span&gt;, alors &lt;span class=&quot;math inline&quot;&gt;\(B \models \varphi\)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Dans le cas particulier où &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; est la classe de toutes les structures, on obtient le théorème de Łoś-Tarski. Lorsqu’on relativise le théorème aux structures finies (&lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; est la classe de toutes les structures finies), la relativisation est fausse &lt;span class=&quot;citation&quot; data-cites=&quot;tait1959counterexample&quot;&gt;(&lt;a href=&quot;#ref-tait1959counterexample&quot; role=&quot;doc-biblioref&quot;&gt;Tait 1959&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Le théorème de Łoś-Tarski relativise cependant à n’importe quelle classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures finies contenant un nombre fini de structures, ainsi qu’aux classes &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures finies &lt;em&gt;héréditaires&lt;&#x2F;em&gt;, &lt;em&gt;de degré borné&lt;&#x2F;em&gt; et &lt;em&gt;closes par union disjointe&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;atserias2008preservation&quot;&gt;(&lt;a href=&quot;#ref-atserias2008preservation&quot; role=&quot;doc-biblioref&quot;&gt;Atserias, Dawar, et Grohe 2008&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. La preuve de ce dernier résultat de relativisation repose sur les techniques de théorie des modèles &lt;em&gt;finis&lt;&#x2F;em&gt;, comme la &lt;em&gt;localité&lt;&#x2F;em&gt; de la logique du premier ordre.&lt;&#x2F;p&gt;
&lt;p&gt;En effet, le théorème de Gaifman permet de réécrire n’importe quelle formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi \in \mathsf{FO}[\sigma]\)&lt;&#x2F;span&gt; en une combinaison Booléenne de formules &lt;em&gt;basiques locales&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;gaifman1982local&quot;&gt;(&lt;a href=&quot;#ref-gaifman1982local&quot; role=&quot;doc-biblioref&quot;&gt;Gaifman 1982&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Une conséquence de ce résultat est que la valeur de vérité d’une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; pour une structure &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt; ne dépend que des comportements &lt;em&gt;locaux&lt;&#x2F;em&gt; observables dans la structure &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt;. Dans les preuves de relativisation, le théorème de localité sert de substitut au théorème de compacité de la logique au premier ordre, en permettant de réduire le théorème au comportement local de la classe de structure étudiée.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contributions&quot;&gt;Contributions&lt;&#x2F;h1&gt;
&lt;p&gt;La première contribution de cet article est l’introduction et la caractérisation de la classe des formules &lt;em&gt;existentielles locales&lt;&#x2F;em&gt;. Les formules existentielles locales sont obtenues comme la clôture existentielle des formules locales. En comparaison, les formules &lt;em&gt;basiques locales&lt;&#x2F;em&gt; apparaissant dans la forme normale de Gaifman sont obtenues en quantifiant existentiellement sur un &lt;em&gt;ensemble &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt;-indépendant&lt;&#x2F;em&gt; de témoins d’une formule locale avec une unique variable libre. Nous montrons dans un premier théorème que les formules existentielles locales ont la même expressivité que les combinaisons Booléennes &lt;em&gt;positives&lt;&#x2F;em&gt; de formules basiques locales. Ce résultat ne dépend pas de la classe de structure &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; considérée. Sur la classe de toutes les structures, les formules existentielles locales ont la même expressivité que les formules préservées par les &lt;em&gt;plongements élémentaires locaux&lt;&#x2F;em&gt;, ce qui correspond à un nouveau théorème de préservation associé à ce fragment.&lt;&#x2F;p&gt;
&lt;p&gt;Le théorème de préservation par &lt;em&gt;plongements élémentaires locaux&lt;&#x2F;em&gt;, comme la vaste majorité des théorèmes de préservation, ne relativise pas aux structures finies. C’est la seconde contribution de cet article. En plus de fournir un exemple de formule préservée par plongements élémentaires locaux sur les structures finies qui n’est équivalente à aucune formule existentielle locale, nous prouvons les résultats suivants :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;On ne peut pas décider si une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; est préservée par plongements élémentaires locaux sur la classe des structures finies.&lt;&#x2F;li&gt;
&lt;li&gt;On ne peut pas décider si une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; est équivalente à une formule existentielle locale sur la classe des structures finies.&lt;&#x2F;li&gt;
&lt;li&gt;Il n’existe pas d’algorithme qui, étant donné une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; et une garantie que celle-ci est équivalente à une formule existentielle locale, calcule une formule existentielle locale équivalente à &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ces théorèmes d’impossibilités sont obtenus sur une signature &lt;span class=&quot;math inline&quot;&gt;\(\sigma\)&lt;&#x2F;span&gt; contenant trois relations binaires et de multiples relations unaires. Il est certainement possible de limiter l’utilisation de ces prédicats, mais le résultat ainsi formulé est plus simple et possède l’avantage de se prêter à une analyse plus fine.&lt;&#x2F;p&gt;
&lt;p&gt;En effet, les formules existentielles locales peuvent se paramétrer en fonction du rayon &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; de localité de la formule existentiellement quantifiée. Ce paramètre &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; peut servir de curseur pour passer des formules existentielles &lt;span class=&quot;math inline&quot;&gt;\(0\)&lt;&#x2F;span&gt;-locales, qui sont précisément les formules existentielles, aux formules &lt;span class=&quot;math inline&quot;&gt;\(\infty\)&lt;&#x2F;span&gt;-locales, qui capturent toutes les formules au premier ordre (sur les structures finies). Les &lt;em&gt;plongements élémentaires locaux&lt;&#x2F;em&gt; peuvent, de la même manière, être paramétrés ce rayon &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; de localité. Ainsi, une formule préservée par &lt;em&gt;plongements élémentaires &lt;span class=&quot;math inline&quot;&gt;\(0\)&lt;&#x2F;span&gt;-locaux&lt;&#x2F;em&gt; est précisément préservée par extensions, alors qu’une formule préservée par &lt;em&gt;plongements élémentaires &lt;span class=&quot;math inline&quot;&gt;\(\infty\)&lt;&#x2F;span&gt;-locaux&lt;&#x2F;em&gt; est (sur les structures finies) précisément préservée par &lt;em&gt;union disjointe&lt;&#x2F;em&gt; : si &lt;span class=&quot;math inline&quot;&gt;\(A \models \varphi\)&lt;&#x2F;span&gt;, alors &lt;span class=&quot;math inline&quot;&gt;\(A \uplus B \models \varphi\)&lt;&#x2F;span&gt;, pour toute paire &lt;span class=&quot;math inline&quot;&gt;\(A,B\)&lt;&#x2F;span&gt; de structures finies.&lt;&#x2F;p&gt;
&lt;p&gt;Il existe deux autres paramètres naturels sur les formules existentielles locales : le rang de quantification &lt;span class=&quot;math inline&quot;&gt;\(q\)&lt;&#x2F;span&gt; de la formule locale sous-jacente et le nombre &lt;span class=&quot;math inline&quot;&gt;\(k\)&lt;&#x2F;span&gt; de variables libres quantifiées existentiellement. En faisant varier les paramètres &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(q\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\(k\)&lt;&#x2F;span&gt; sur les formules existentielles locales, et sur les plongements élémentaires locaux, on obtient une relaxation de la propriété de préservation formulée comme suit : toute formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; préservée par plongements élémentaires &lt;span class=&quot;math inline&quot;&gt;\((r,q,k)\)&lt;&#x2F;span&gt;-locaux sur les structures finies est équivalente à une formule existentielle locale sur les structures finies. Cette propriété de préservation est fausse quand &lt;span class=&quot;math inline&quot;&gt;\(r = q = k = \infty\)&lt;&#x2F;span&gt;, mais devient vraie pour certains choix de paramètres. L’article fournit une caractérisation complète des paramètres &lt;span class=&quot;math inline&quot;&gt;\(r,q,k\)&lt;&#x2F;span&gt; tels que la propriété est vraie, et montre en particulier qu’elle est vraie pour &lt;span class=&quot;math inline&quot;&gt;\(r = 0\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\(q,k =
\infty\)&lt;&#x2F;span&gt;. Ce dernier résultat, troisième contribution de l’article, se traduit comme suit :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; préservée par extensions sur les structures finies est équivalente à une formule existentielle locale.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Plus généralement, pour n’importe quelle classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures finies, héréditaire et close par union disjointe, une formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; préservée par extensions sur la classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; est équivalente (sur cette même classe) à une formule existentielle locale. Ce théorème combinatoire (non trivial) peut se traduire en termes de forme normale de Gaifman, grâce aux résultats précédents. Il implique que toute formule &lt;span class=&quot;math inline&quot;&gt;\(\varphi\)&lt;&#x2F;span&gt; préservée par extensions sur les structures finies (ou autre classe satisfaisant les hypothèses du théorème) possède une forme normale de Gaifman &lt;em&gt;sans négations&lt;&#x2F;em&gt;. Cela extrait l’essence des preuves de relativisation du théorème de Łoś-Tarski basées sur la forme normale de Gaifman, dans un cadre beaucoup plus général.&lt;&#x2F;p&gt;
&lt;p&gt;En utilisant l’existence d’une formule équivalente existentielle locale donnée par le théorème ci-dessus, prouver que le théorème de Łoś-Tarski relativise à une classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures héréditaire et close par union disjointe se réduit à l’étude des formules existentielles locales préservées par extensions. Il est alors aisé de déduire le théorème suivant, dit &lt;em&gt;local-à-global&lt;&#x2F;em&gt;, qui est la quatrième et principale contribution de l’article : les deux propriétés suivantes sont équivalentes pour toute classe héréditaire &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt; de structures finies close par union disjointe&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Le théorème de Łoś-Tarski relativise à la classe &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt;,&lt;&#x2F;li&gt;
&lt;li&gt;Pour tout &lt;span class=&quot;math inline&quot;&gt;\(r,k \in \mathbb{N}\)&lt;&#x2F;span&gt;, le théorème de Łoś-Tarski relativise à la classe des voisinages de rayon &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; centrés en &lt;span class=&quot;math inline&quot;&gt;\(k\)&lt;&#x2F;span&gt; points des structures de &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{C}\)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;De ce théorème, on déduit immédiatement le résultat prouvé par &lt;span class=&quot;citation&quot; data-cites=&quot;atserias2008preservation&quot;&gt;Atserias, Dawar, et Grohe (&lt;a href=&quot;#ref-atserias2008preservation&quot; role=&quot;doc-biblioref&quot;&gt;2008&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. De plus, on peut construire une hiérarchie stricte de propriétés, strictement plus faibles que celles introduites par Atserias, Dawar et Grohe, impliquant la relativisation du théorème de Łoś-Tarski.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article introduit une variante positive du théorème de localité de Gaifman, caractérisée par les formules existentielles locales et la préservation par plongements élémentaires locaux. Dans certaines classes de structures finies, les formules préservées par extensions possèdent systématiquement une forme normale de Gaifman positive, ce qui permet de réduire la relativisation du théorème de Łoś-Tarski à sa version localisée. Cette technique de preuve s’avère particulièrement efficace, puisqu’elle généralise strictement les résultats précédemment obtenus.&lt;&#x2F;p&gt;
&lt;p&gt;La notion de &lt;em&gt;localité positive&lt;&#x2F;em&gt; semble particulièrement pertinente pour étudier les théorèmes de préservation, mais pourrait aussi servir d’outil, au même titre que le théorème de localité, dans la théorie des modèles finis. En particulier, cette notion semble généraliser la forme normale de Gaifman existentielle proposée par &lt;span class=&quot;citation&quot; data-cites=&quot;grohe2004existential&quot;&gt;Grohe et Wöhrle (&lt;a href=&quot;#ref-grohe2004existential&quot; role=&quot;doc-biblioref&quot;&gt;2004&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Une des limitations de l’article, inhérente aux approches par localité, est que certaines classes de structures sont aussi complexes localement que globalement. C’est par exemple le cas des cliques, dont les voisinages de rayon &lt;span class=&quot;math inline&quot;&gt;\(1\)&lt;&#x2F;span&gt; contiennent toute la structure. Notons que, dans le cas des cliques, la classe obtenue en inversant la relation d’arête (les ensembles indépendants de sommets) est particulièrement bien adaptée aux techniques de localité (les voisinages sont réduits à un unique point). Il manque ainsi une théorie de la localité &lt;em&gt;modulo renversements&lt;&#x2F;em&gt; (flips en anglais).&lt;&#x2F;p&gt;
&lt;h1 class=&quot;unnumbered&quot; id=&quot;références&quot;&gt;Références&lt;&#x2F;h1&gt;
&lt;div id=&quot;refs&quot; class=&quot;references csl-bib-body hanging-indent&quot; data-entry-spacing=&quot;0&quot; role=&quot;list&quot;&gt;
&lt;div id=&quot;ref-ajtai1994datalog&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Ajtai, Miklós, et Yuri Gurevich. 1994. &lt;span&gt;« Datalog vs first-order logic »&lt;&#x2F;span&gt;. &lt;em&gt;J. Comput. Syst. Sci.&lt;&#x2F;em&gt; 49 (3): 562‑88. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0022-0000(05)80071-6&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0022-0000(05)80071-6&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-atserias2008preservation&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Atserias, Albert, Anuj Dawar, et Martin Grohe. 2008. &lt;span&gt;« Preservation under extensions on well-behaved finite structures »&lt;&#x2F;span&gt;. &lt;em&gt;SIAM J. Comput.&lt;&#x2F;em&gt; 38 (4): 1364‑81. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&#x2F;060658709&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&#x2F;060658709&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-atserias2006preservation&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Atserias, Albert, Anuj Dawar, et Phokion G. Kolaitis. 2006. &lt;span&gt;« On preservation under homomorphisms and unions of conjunctive queries »&lt;&#x2F;span&gt;. &lt;em&gt;J. ACM&lt;&#x2F;em&gt; 53 (2): 208‑37. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;1131342.1131344&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;1131342.1131344&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-chang1990model&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Chang, Chen Chung, et H. Jerome Keisler. 1990. &lt;em&gt;Model Theory&lt;&#x2F;em&gt;. Vol. 73. Studies in Logic et the Foundations of Mathematics. Elsevier.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-dawar20&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Dawar, Anuj, et Abhisekh Sankaran. 2021. &lt;span&gt;« &lt;span&gt;Extension Preservation in the Finite and Prefix Classes of First Order Logic&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. In &lt;em&gt;Proc. CSL’21&lt;&#x2F;em&gt;, 183:18:1‑13. LIPIcs. LZI. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.CSL.2021.18&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;LIPIcs.CSL.2021.18&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-gaifman1982local&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Gaifman, Haim. 1982. &lt;span&gt;« On local and non-local properties »&lt;&#x2F;span&gt;. In &lt;em&gt;Proc. Herbrand Symposium&lt;&#x2F;em&gt;, 107:105‑35. Studies in Logic et the Foundations of Mathematics. Elsevier. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0049-237X(08)71879-2&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0049-237X(08)71879-2&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-grohe2004existential&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Grohe, Martin, et Stefan Wöhrle. 2004. &lt;span&gt;« An existential locality theorem »&lt;&#x2F;span&gt;. &lt;em&gt;Ann. Pure Appl. Logic&lt;&#x2F;em&gt; 129 (1–3): 131‑48. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.apal.2004.01.005&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.apal.2004.01.005&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-gurevitch84&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Gurevich, Yuri. 1984. &lt;span&gt;« Toward logic tailored for computational complexity »&lt;&#x2F;span&gt;. In &lt;em&gt;Computation and Proof Theory, Proceedings of LC’84&lt;&#x2F;em&gt;, 1104:175‑216. Lecture Notes in Mathematics. Springer. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;BFb0099486&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;BFb0099486&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-harwath2014preservation&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Harwath, Frederik, Lucas Heimberg, et Nicole Schweikardt. 2015. &lt;span&gt;« &lt;span&gt;Preservation and decomposition theorems for bounded degree structures&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. &lt;em&gt;Log. Meth. Comput. Sci.&lt;&#x2F;em&gt; 11 (4). &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.2168&#x2F;LMCS-11(4:17)2015&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.2168&#x2F;LMCS-11(4:17)2015&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-Kuperberg21&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Kuperberg, Denis. 2021. &lt;span&gt;« Positive First-order Logic on Words »&lt;&#x2F;span&gt;. In &lt;em&gt;Proc. LICS’21&lt;&#x2F;em&gt;, 1‑13. &lt;span&gt;IEEE&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS52264.2021.9470602&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS52264.2021.9470602&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-preservation:LOP22&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Lopez, Aliaume. 2022. &lt;span&gt;« When Locality Meets Preservation »&lt;&#x2F;span&gt;. Conf. In &lt;em&gt;Proceedings of the 37th Annual &lt;span&gt;ACM&lt;&#x2F;span&gt;&#x2F;&lt;span&gt;IEEE&lt;&#x2F;span&gt; Symposium on Logic in Computer Science&lt;&#x2F;em&gt;, 1‑14. &lt;span&gt;LICS&lt;&#x2F;span&gt; ’22. New York, &lt;span&gt;NY&lt;&#x2F;span&gt;, &lt;span&gt;USA&lt;&#x2F;span&gt;: Association for Computing Machinery. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;3531130.3532498&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;3531130.3532498&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-los55&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Łoś, Jerzy. 1955. &lt;span&gt;« On the extending of models &lt;span&gt;(I)&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. &lt;em&gt;Fund. Math.&lt;&#x2F;em&gt; 42 (1): 38‑54. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4064&#x2F;fm-42-1-38-54&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4064&#x2F;fm-42-1-38-54&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-Rossman08&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Rossman, Benjamin. 2008. &lt;span&gt;« Homomorphism preservation theorems »&lt;&#x2F;span&gt;. &lt;em&gt;J. ACM&lt;&#x2F;em&gt; 55 (3): 15:1‑53. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;1379759.1379763&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;1379759.1379763&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-stolboushkin95&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Stolboushkin, Alexei P. 1995. &lt;span&gt;« Finitely monotone properties »&lt;&#x2F;span&gt;. In &lt;em&gt;Proc. LICS’95&lt;&#x2F;em&gt;, 324‑30. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1995.523267&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1995.523267&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-tait1959counterexample&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Tait, William W. 1959. &lt;span&gt;« A counterexample to a conjecture of &lt;span&gt;S&lt;&#x2F;span&gt;cott and &lt;span&gt;S&lt;&#x2F;span&gt;uppes »&lt;&#x2F;span&gt;. &lt;em&gt;J. Symb. Logic&lt;&#x2F;em&gt; 24 (1): 15‑16. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.2307&#x2F;2964569&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.2307&#x2F;2964569&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-tarski54&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Tarski, Alfred. 1954. &lt;span&gt;« Contributions to the Theory of Models. &lt;span&gt;I&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. &lt;em&gt;Indag. Math. (Proc.)&lt;&#x2F;em&gt; 57: 572‑81. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1385-7258(54)50074-0&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1385-7258(54)50074-0&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;On utilise la notation &lt;span class=&quot;math inline&quot;&gt;\(A \subseteq_iB\)&lt;&#x2F;span&gt; pour désigner l’existence d’une fonction &lt;span class=&quot;math inline&quot;&gt;\(h \colon A \to B\)&lt;&#x2F;span&gt; telle que pour tout tuple &lt;span class=&quot;math inline&quot;&gt;\(\vec{a} \in A\)&lt;&#x2F;span&gt;, et toute relation &lt;span class=&quot;math inline&quot;&gt;\(R \in \sigma\)&lt;&#x2F;span&gt;, si &lt;span class=&quot;math inline&quot;&gt;\(\vec{a} \in R^A\)&lt;&#x2F;span&gt;, alors &lt;span class=&quot;math inline&quot;&gt;\(h(\vec{a}) \in R^B\)&lt;&#x2F;span&gt;. Une telle fonction est un morphisme qui témoigne que &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt; est une &lt;em&gt;sous-structure induite&lt;&#x2F;em&gt; de &lt;span class=&quot;math inline&quot;&gt;\(B\)&lt;&#x2F;span&gt;, ou bien, de manière équivalente que &lt;span class=&quot;math inline&quot;&gt;\(B\)&lt;&#x2F;span&gt; est une &lt;em&gt;extension&lt;&#x2F;em&gt; de &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Comprendre, il existe une structure &lt;span class=&quot;math inline&quot;&gt;\(A\)&lt;&#x2F;span&gt; telle que pour tout &lt;span class=&quot;math inline&quot;&gt;\(\varphi \in T\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(A \models \varphi\)&lt;&#x2F;span&gt;. On dit aussi que l’ensemble &lt;span class=&quot;math inline&quot;&gt;\(T\)&lt;&#x2F;span&gt; est &lt;em&gt;satisfiable&lt;&#x2F;em&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fonctions Z-polyrégulières</title>
        <published>2023-11-15T00:00:00+00:00</published>
        <updated>2023-11-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/z-polyregular/"/>
        <id>https://aliaume.fr/site/posts/z-polyregular/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/z-polyregular/">&lt;p&gt;Ce document est le résumé en français de l’article de &lt;span class=&quot;citation&quot; data-cites=&quot;polyregular:CDA23&quot;&gt;Colcombet, Douéneau-Tabot, et Lopez (&lt;a href=&quot;#ref-polyregular:CDA23&quot; role=&quot;doc-biblioref&quot;&gt;2023&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt; présenté à la conférence LICS 2023, dont le pdf, les slides de présentations, ainsi que le fichier &lt;code&gt;bibtex&lt;&#x2F;code&gt; associé sont disponibles &lt;a href=&quot;&#x2F;research&#x2F;conferences&quot;&gt;sur ma page web&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;résumé&quot;&gt;Résumé&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article étudie une classe de fonction particulièrement robuste des mots finis vers les entiers relatifs. Ces fonctions, nommées &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyregulières, admettent de nombreuses caractérisations équivalentes en termes de logique, d’expressions rationelles, d’automates pondérés, et de transducteurs. Après avoir démontré l’équivalence (effective) de ces définitions, nous nous intéressons à deux problèmes de décision. Dans un premier temps, nous montrons que le degré de croissance d’une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulière (c’est-à-dire, le plus petit &lt;span class=&quot;math inline&quot;&gt;\(k\)&lt;&#x2F;span&gt; tel que &lt;span class=&quot;math inline&quot;&gt;\(f(w) = \mathcal{O}(|w|^k)\)&lt;&#x2F;span&gt;) est calculable et correspond précisément au nombre minimal de variables requises pour exprimer la fonction à l’aide de formules &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{MSO}\)&lt;&#x2F;span&gt;. Dans un second temps, nous montrons que la définissabilité au premier ordre des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières est décidable. Ce résultat est obtenu grâce à l’introduction d’une notion nouvelle de transducteur résiduel, ainsi que d’une présentation sémantique de la notion d’apériodicité dans le cas des fonctions.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contextualisation&quot;&gt;Contextualisation&lt;&#x2F;h1&gt;
&lt;p&gt;Les automates déterministes reconnaissent des langages réguliers. Ces mêmes langages peuvent se caractériser par une présentation syntaxique &lt;span class=&quot;citation&quot; data-cites=&quot;kleene1956representation&quot;&gt;(les expressions régulières de &lt;a href=&quot;#ref-kleene1956representation&quot; role=&quot;doc-biblioref&quot;&gt;Kleene et al. 1956&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, une présentation logique &lt;span class=&quot;citation&quot; data-cites=&quot;buchi1960weak&quot;&gt;(basée sur &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{MSO}\)&lt;&#x2F;span&gt;, voir &lt;a href=&quot;#ref-buchi1960weak&quot; role=&quot;doc-biblioref&quot;&gt;Büchi 1960&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, ainsi qu’une présentation algébrique &lt;span class=&quot;citation&quot; data-cites=&quot;schutzenberger1961definition&quot;&gt;(sur la base des monoïdes finis &lt;a href=&quot;#ref-schutzenberger1961definition&quot; role=&quot;doc-biblioref&quot;&gt;Marcel Paul Schützenberger 1961&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Au sein des langages réguliers, une classe particulièrement intéressante possède, elle aussi une présentation multiple : celle des langages sans étoile. Ces langages se décrivent aussi bien en terme d’automates &lt;span class=&quot;citation&quot; data-cites=&quot;mcnaughton1971counter&quot;&gt;(les automates sans compteurs de &lt;a href=&quot;#ref-mcnaughton1971counter&quot; role=&quot;doc-biblioref&quot;&gt;McNaughton et Papert 1971&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, d’expressions régulières &lt;span class=&quot;citation&quot; data-cites=&quot;schutzenberger1965finite&quot;&gt;(les expressions sans étoile &lt;a href=&quot;#ref-schutzenberger1965finite&quot; role=&quot;doc-biblioref&quot;&gt;M. P. Schützenberger 1965&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, de logique &lt;span class=&quot;citation&quot; data-cites=&quot;perrin1986first&quot;&gt;(la logique au premier ordre &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{FO}\)&lt;&#x2F;span&gt;, voir &lt;a href=&quot;#ref-perrin1986first&quot; role=&quot;doc-biblioref&quot;&gt;Perrin et Pin 1986&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;, et d’algèbre &lt;span class=&quot;citation&quot; data-cites=&quot;schutzenberger1965finite&quot;&gt;(les monoïdes finis apériodiques &lt;a href=&quot;#ref-schutzenberger1965finite&quot; role=&quot;doc-biblioref&quot;&gt;M. P. Schützenberger 1965&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;De l’équivalence des présentations des langages sans étoile découle la décidabilité du problème suivant : étant donné un langage régulier &lt;span class=&quot;math inline&quot;&gt;\(L\)&lt;&#x2F;span&gt;, décider s’il est sans étoile. En effet, décider si un monoïde est apériodique est relativement simple, tout comme décider si un automate est sans compteurs. Cependant, la décision repose aussi sur l’existence d’automates (ou de monoïdes) &lt;em&gt;canoniques&lt;&#x2F;em&gt; associées aux langages (respectivement l’automate minimal et le monoïde syntaxique), sans quoi les algorithmes susmentionnés ne permettent pas de conclure.&lt;&#x2F;p&gt;
&lt;p&gt;Les langages réguliers sont un cas particulier de fonctions des mots vers les entiers (relatifs) où les valeurs de la fonction sont prises dans le sous ensemble &lt;span class=&quot;math inline&quot;&gt;\(\mathord{\{ 0,1 \}}\)&lt;&#x2F;span&gt;. De nombreux travaux ont entrepris de généraliser la notion de régularité à des fonctions mot-à-mot, c’est-à-dire, à des fonctions &lt;span class=&quot;math inline&quot;&gt;\(f \colon \Sigma^* \to \Gamma^*\)&lt;&#x2F;span&gt;, en lieu et place des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathop{\mathbf{1}_{L}}
\colon \Sigma^* \to \mathord{\{ 0,1 \}}\)&lt;&#x2F;span&gt;. Ces tentatives ont mené à une myriade de classes de fonctions non équivalentes (comme les fonctions séquentielles, rationnelles, régulières, polyrégulières, etc.). Les problèmes de décision associés à ces classes, et en particulier le problème de l’apériodicité, deviennent beaucoup plus difficiles à appréhender dans le cadre fonctionnel &lt;span class=&quot;citation&quot; data-cites=&quot;scott1967some&quot;&gt;(voir &lt;a href=&quot;#ref-scott1967some&quot; role=&quot;doc-biblioref&quot;&gt;Scott 1967&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;. Un obstacle conceptuel majeur provient de l’absence d’objet canonique (similaire à l’automate minimal d’un langage) associé à la fonction dans de nombreux modèles. Ainsi, il n’est pas surprenant que la récente démonstration de la décidabilité de l’apériodicité pour les fonctions rationnelles repose sur la construction d’un tel “objet canonique” sur lequel l’apériodicité est clairement visible &lt;span class=&quot;citation&quot; data-cites=&quot;filiot2016aperiodicity filiot2018canonical&quot;&gt;(&lt;a href=&quot;#ref-filiot2016aperiodicity&quot; role=&quot;doc-biblioref&quot;&gt;Filiot, Gauwin, et Lhote 2016&lt;&#x2F;a&gt;; &lt;a href=&quot;#ref-filiot2018canonical&quot; role=&quot;doc-biblioref&quot;&gt;Filiot et al. 2018&lt;&#x2F;a&gt;)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contributions-de-larticle&quot;&gt;Contributions de l’article&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article (ré-)introduit une classe de fonctions des mots vers les entiers relatifs qui généralise les langages réguliers tout en conservant leurs propriétés de décidabilité ainsi que les différentes caractérisations de ceux-ci. Dans un premier temps, nous montrons l’équivalence (effective) des différentes présentations en termes de logique, d’expressions, d’automates pondérés, ainsi que de transducteurs.&lt;&#x2F;p&gt;
&lt;p&gt;Par la suite, nous proposons un algorithme de minimisation du nombre de variables nécessaires pour exprimer une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulière &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt;. Cela met en évidence l’égalité entre le nombre minimal de variables nécessaires et le degré de croissance de la fonction &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt; (qui est donc calculable). Ce résultat est &lt;em&gt;très simple&lt;&#x2F;em&gt; à obtenir pour des fonctions à valeur dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt; (où il était déjà connu), mais plus subtil à obtenir dans le cadre des fonctions à valeur dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;, à cause des compensations possibles entre termes négatifs et termes positifs. La décidabilité du degré de croissance permet ensuite l’élaboration d’un objet canonique associé à une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulière : le transducteur des résiduels. Sa définition utilise la possibilité de &lt;em&gt;soustraire&lt;&#x2F;em&gt; des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières, ce qui était jusque-là un handicap dans les preuves. Sa construction est effective grâce à la décidabilité du degré de croissance.&lt;&#x2F;p&gt;
&lt;p&gt;À partir de cet objet canonique, on peut alors décider si une fonction &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulière &lt;span class=&quot;math inline&quot;&gt;\(f\)&lt;&#x2F;span&gt; est définissable au premier ordre (i.e., est sans étoile ou apériodique). Nous montrons que la définissabilité au premier ordre coïncide bien avec la notion d’apériodicité dans le cas des langages, et que les caractérisations alternatives se généralises aux fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières : le transducteur des résiduels est sans compteur, les valeurs propres associées à la présentation algébrique sont &lt;span class=&quot;math inline&quot;&gt;\(0\)&lt;&#x2F;span&gt; ou &lt;span class=&quot;math inline&quot;&gt;\(1\)&lt;&#x2F;span&gt;, la fonction s’écrit avec une expression sans étoile. De plus, nous introduisons une caractérisation sémantique originale qui généralise la notion d’apériodicité dans les monoïdes au cas des fonctions à valeur dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt; en termes de polynômes. Les résultats de cette seconde partie de l’article reposent crucialement sur l’étude préalable des fonctions &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-polyrégulières faite dans la première partie de l’article.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article décrit une classe extrêmement robuste de fonctions généralisant les langages réguliers, qui admet de multiples caractérisations, et dont les principaux problèmes d’appartenance (degré de croissance, apériodicité) sont décidables et possèdent une procédure effective de conversion. Nous pensons que ces résultats, bien que reposant crucialement sur la possibilité de compenser des erreurs grâce aux sorties négatives (qui peut se concevoir comme une forme limitée de &lt;em&gt;backtracking&lt;&#x2F;em&gt;), peuvent se généraliser (avec des preuves plus combinatoires) au cadre des fonctions à valeur dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{N}\)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, la définition de fonctions apériodiques à valeur dans &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt; ne coïncide pas avec les précédentes tentatives de généralisations des langages sans étoile aux séries rationnelles, et semble donner une direction prometteuse pour définir les “séries rationnelles apériodiques”.&lt;&#x2F;p&gt;
&lt;h1 class=&quot;unnumbered&quot; id=&quot;références&quot;&gt;Références&lt;&#x2F;h1&gt;
&lt;div id=&quot;refs&quot; class=&quot;references csl-bib-body hanging-indent&quot; data-entry-spacing=&quot;0&quot; role=&quot;list&quot;&gt;
&lt;div id=&quot;ref-buchi1960weak&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Büchi, J Richard. 1960. &lt;span&gt;« Weak second-order arithmetic and finite automata »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematical Logic Quarterly&lt;&#x2F;em&gt; 6 (1-6).
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-polyregular:CDA23&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Colcombet, Thomas, Gaëtan Douéneau-Tabot, et Aliaume Lopez. 2023. &lt;span&gt;« &lt;span class=&quot;math inline&quot;&gt;\(\mathbb{Z}\)&lt;&#x2F;span&gt;-Polyregular Functions »&lt;&#x2F;span&gt;. Conf. In &lt;em&gt;2023 38th Annual ACM&#x2F;IEEE Symposium on Logic in Computer Science (LICS)&lt;&#x2F;em&gt;, 1‑13. Los Alamitos, CA, USA: IEEE Computer Society. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS56636.2023.10175685&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS56636.2023.10175685&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-filiot2016aperiodicity&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Filiot, Emmanuel, Olivier Gauwin, et Nathan Lhote. 2016. &lt;span&gt;« Aperiodicity of rational functions is PSPACE-complete »&lt;&#x2F;span&gt;. In &lt;em&gt;36th IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science (FSTTCS 2016)&lt;&#x2F;em&gt;. Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-filiot2018canonical&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Filiot, Emmanuel, Olivier Gauwin, Nathan Lhote, et Anca Muscholl. 2018. &lt;span&gt;« On canonical models for rational functions over infinite words »&lt;&#x2F;span&gt;. In &lt;em&gt;38th IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science (FSTTCS)&lt;&#x2F;em&gt;. Vol. 122. Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-kleene1956representation&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Kleene, Stephen C et al. 1956. &lt;span&gt;« Representation of events in nerve nets and finite automata »&lt;&#x2F;span&gt;. &lt;em&gt;Automata studies&lt;&#x2F;em&gt; 34: 3‑41.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-mcnaughton1971counter&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
McNaughton, Robert, et Seymour A Papert. 1971. &lt;em&gt;Counter-Free Automata&lt;&#x2F;em&gt;. The MIT Press.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-perrin1986first&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Perrin, Dominique, et Jean-Eric Pin. 1986. &lt;span&gt;« First-order logic and star-free sets »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Computer and System Sciences&lt;&#x2F;em&gt; 32 (3): 393‑406.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-schutzenberger1965finite&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Schützenberger, M. P. 1965. &lt;span&gt;« On finite monoids having only trivial subgroups »&lt;&#x2F;span&gt;. &lt;em&gt;Information and Control&lt;&#x2F;em&gt; 8 (2): 190‑94. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0019-9958(65)90108-7&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0019-9958(65)90108-7&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-schutzenberger1961definition&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Schützenberger, Marcel Paul. 1961. &lt;span&gt;« On the definition of a family of automata »&lt;&#x2F;span&gt;. &lt;em&gt;Inf. Control.&lt;&#x2F;em&gt; 4 (2-3): 245‑70.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-scott1967some&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Scott, Dana. 1967. &lt;span&gt;« Some definitional suggestions for automata theory »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Computer and System Sciences&lt;&#x2F;em&gt; 1 (2): 187‑212.
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Points Fixes et Topologies Nœthériennes</title>
        <published>2023-11-14T00:00:00+00:00</published>
        <updated>2023-11-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/fossacs-paper/"/>
        <id>https://aliaume.fr/site/posts/fossacs-paper/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/fossacs-paper/">&lt;p&gt;Ce document est le résumé en français de l’article &lt;span class=&quot;citation&quot; data-cites=&quot;topology:LOP23&quot;&gt;Lopez (2023)&lt;&#x2F;span&gt; présenté à la conférence FoSSaCS 2023, dont le pdf, les slides de présentations, ainsi que le fichier &lt;code&gt;bibtex&lt;&#x2F;code&gt; associé sont disponibles &lt;a href=&quot;&#x2F;research&#x2F;conferences&quot;&gt;sur ma page web&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;résumé&quot;&gt;Résumé&lt;&#x2F;h1&gt;
&lt;p&gt;Les espaces Nœthériens sont une famille d’espaces topologiques qui généralisent la notion de beau préordre, et qui peuvent être utilisés afin de démontrer la terminaison de programmes. En particulier, les espaces Nœthériens ont été utilisés pour vérifier des systèmes de transitions dont la description topologique est plus adaptée qu’une présentation en terme d’ordres partiels. L’objectif de l’article est de décrire une topologie Nœthérienne sur des espaces définis par induction. Cet objectif est atteint au moyen d’un théorème plus général de points fixe, lui-même basé sur un argument de mauvaise séquence minimale topologique.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contextualisation&quot;&gt;Contextualisation&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;beaux-préordres-terminaison-et-systèmes-de-transitions&quot;&gt;Beaux préordres, terminaison, et systèmes de transitions&lt;&#x2F;h2&gt;
&lt;p&gt;Soit &lt;span class=&quot;math inline&quot;&gt;\((Q, \leq)\)&lt;&#x2F;span&gt; un ensemble muni d’un préordre, c’est-à-dire d’une relation transitive et symétrique. Une séquence &lt;span class=&quot;math inline&quot;&gt;\((x_n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt; est &lt;span id=&quot;good-seq&quot; class=&quot;def&quot;&gt;bonne&lt;&#x2F;span&gt; lorsqu’il existe une paire &lt;span class=&quot;math inline&quot;&gt;\(i &amp;lt; j\)&lt;&#x2F;span&gt; d’indices, tels que &lt;span class=&quot;math inline&quot;&gt;\(x_i \leq x_j\)&lt;&#x2F;span&gt;. Au contraire, une séquence est dite &lt;span id=&quot;bad-seq&quot; class=&quot;def&quot;&gt;mauvaise&lt;&#x2F;span&gt; lorsqu’elle n’est pas bonne.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Exemple:&lt;&#x2F;strong&gt; la séquence &lt;span class=&quot;math inline&quot;&gt;\((n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt; est &lt;a href=&quot;#good-seq&quot;&gt;bonne&lt;&#x2F;a&gt; dans &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{Z},\leq)\)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Exemple:&lt;&#x2F;strong&gt; la séquence &lt;span class=&quot;math inline&quot;&gt;\((-n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt; est &lt;a href=&quot;#bad-seq&quot;&gt;mauvaise&lt;&#x2F;a&gt; dans &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{Z}, \leq)\)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Un &lt;span id=&quot;wqo&quot; class=&quot;def&quot;&gt;beau préordre&lt;&#x2F;span&gt; est un ensemble &lt;span class=&quot;math inline&quot;&gt;\((Q, \leq)\)&lt;&#x2F;span&gt; tel que toute séquence &lt;span class=&quot;math inline&quot;&gt;\((x_n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt; d’éléments dans &lt;span class=&quot;math inline&quot;&gt;\(Q\)&lt;&#x2F;span&gt; est &lt;a href=&quot;#good-seq&quot;&gt;bonne&lt;&#x2F;a&gt;. On peut par exemple déduire des exemples précédents que &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{Z}, \leq)\)&lt;&#x2F;span&gt; n’est pas un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;, et prouver séparément que &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N}, \leq)\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Une notion similaire, qui apparaît fréquemment en informatique est la notion d’ordre &lt;span id=&quot;wf&quot; class=&quot;def&quot;&gt;bien fondé&lt;&#x2F;span&gt;, dont la définition est la suivante : un préordre &lt;span class=&quot;math inline&quot;&gt;\((Q, \leq)\)&lt;&#x2F;span&gt; est &lt;span class=&quot;def&quot;&gt;bien fondé&lt;&#x2F;span&gt; lorsque toute séquence (strictement) décroissante stationne. C’est-à-dire, pour toute séquence &lt;span class=&quot;math inline&quot;&gt;\((x_n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt; d’éléments de &lt;span class=&quot;math inline&quot;&gt;\(Q\)&lt;&#x2F;span&gt;, telle que &lt;span class=&quot;math inline&quot;&gt;\(x_n \leq x_m\)&lt;&#x2F;span&gt; lorsque &lt;span class=&quot;math inline&quot;&gt;\(m \leq n\)&lt;&#x2F;span&gt;, il existe un &lt;span class=&quot;math inline&quot;&gt;\(n_0 \in \mathbb{N}\)&lt;&#x2F;span&gt; à partir duquel &lt;span class=&quot;math inline&quot;&gt;\(x_n = x_{n_0}\)&lt;&#x2F;span&gt; pour tout &lt;span class=&quot;math inline&quot;&gt;\(n \geq n_0\)&lt;&#x2F;span&gt;. Une autre formulation est qu’il n’existe pas de séquences infinies décroissantes.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;La différence entre les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; et les &lt;a href=&quot;#wf&quot;&gt;ordres bien fondés&lt;&#x2F;a&gt; peut se comprendre en regardant les implications suivantes pour un ensemble préordonné fixé &lt;span class=&quot;math inline&quot;&gt;\((Q, \leq)\)&lt;&#x2F;span&gt; :&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span class=&quot;math display&quot;&gt;\[\begin{align*}
    &amp;amp; Q \text{ bien fondé } \land Q \text{ totalement ordonné } \\
    \implies &amp;amp;
    Q \text{ beau préordre } \\
    \implies &amp;amp;
    Q \text{ bien fondé } \quad .
\end{align*}\]&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cette généralisation des &lt;a href=&quot;#wf&quot;&gt;ordres bien fondés&lt;&#x2F;a&gt; peut servir à prouver la terminaison de certains programmes. Par exemple, prenons l’algorithme récursif suivant :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; program(a : int, b : &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, c : &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; a &lt;span class=&quot;op&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;or&lt;&#x2F;span&gt; b &lt;span class=&quot;op&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;or&lt;&#x2F;span&gt; c &lt;span class=&quot;op&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;#cb1-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;#cb1-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  c &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; random.choice([&lt;span class=&quot;st&quot;&gt;&amp;quot;r&amp;quot;&lt;&#x2F;span&gt;, &lt;span class=&quot;st&quot;&gt;&amp;quot;l&amp;quot;&lt;&#x2F;span&gt;])&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;#cb1-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; c &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;r&amp;quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;#cb1-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    a,b,c &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; a &lt;span class=&quot;op&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, b, &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;#cb1-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  &lt;span class=&quot;cf&quot;&gt;elif&lt;&#x2F;span&gt; c &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;l&amp;quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;#cb1-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    a,b,c &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;&lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt;c, b&lt;span class=&quot;op&quot;&gt;-&lt;&#x2F;span&gt;&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-9&quot;&gt;&lt;a href=&quot;#cb1-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;  program(a,b,c)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;On peut montrer que ce programme termine sur toute instance en utilisant le fait que &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N}^3, \leq)\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; où les inégalités se calculent point à point. En effet, imaginons une exécution infinie du programme et regardons l’évolution des valeurs du triplet &lt;span class=&quot;math inline&quot;&gt;\((a_n,b_n,c_n)_{n \in \mathbb{N}}\)&lt;&#x2F;span&gt;, en fonction du nombre d’appels récursif. Cette séquence est &lt;a href=&quot;#bad-seq&quot;&gt;mauvaise&lt;&#x2F;a&gt; dans &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N}^3, \leq)\)&lt;&#x2F;span&gt;, car si &lt;span class=&quot;math inline&quot;&gt;\(n &amp;lt; m\)&lt;&#x2F;span&gt;, soit la branche &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; a été prise au moins une fois, auquel cas &lt;span class=&quot;math inline&quot;&gt;\(b_n &amp;gt; b_m\)&lt;&#x2F;span&gt;, ou bien seulement la branche &lt;span class=&quot;math inline&quot;&gt;\(r\)&lt;&#x2F;span&gt; a été prise, auquel cas &lt;span class=&quot;math inline&quot;&gt;\(a_n &amp;gt; a_m\)&lt;&#x2F;span&gt;. Comme &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N}^3, \leq)\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;, il n’y a pas de &lt;a href=&quot;#bad-seq&quot;&gt;mauvaise séquence&lt;&#x2F;a&gt; infinie. Ainsi, ce programme termine bien sur toute entrée.&lt;&#x2F;p&gt;
&lt;p&gt;Notons qu’un argument utilisant un &lt;a href=&quot;#wf&quot;&gt;ordre bien fondé&lt;&#x2F;a&gt; est aussi possible, mais nécessite de faire un choix en donnant une importance plus grande à certaines composantes. L’utilisation de &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; a été rendue très simple par le fait que ceux-ci peuvent se construire aisément par composition pour étudier des configurations plus complexes. Dans ce cas précis, démontrer que &lt;span class=&quot;math inline&quot;&gt;\((\mathbb{N}^3, \leq)\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; est une conséquence du lemme de Dickson : le produit de deux &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, avec l’ordre produit, est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Il est possible de systématiser l’approche utilisée pour prouver la terminaison de notre programme exemple, en étudiant les &lt;a href=&quot;#bad-seq&quot;&gt;mauvaises séquences&lt;&#x2F;a&gt; de configurations du programme, et même d’en déduire des bornes sur le temps d’exécution &lt;span class=&quot;citation&quot; data-cites=&quot;figueira_ackermannian_2011 schmitzHdr&quot;&gt;(Figueira et al. 2011; Schmitz 2017)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;En tant qu’objet combinatoire, les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; apparaissent régulièrement &lt;span class=&quot;citation&quot; data-cites=&quot;kruskal1972theory&quot;&gt;(Kruskal 1972)&lt;&#x2F;span&gt; dans des domaines variés de l’informatique, allant de la théorie des graphes avec le théorème de Robertson et Seymour &lt;span class=&quot;citation&quot; data-cites=&quot;ROBSEM04&quot;&gt;(Robertson et Seymour 2004)&lt;&#x2F;span&gt;, la théorie des nombres &lt;span class=&quot;citation&quot; data-cites=&quot;higman1952ordering&quot;&gt;(Higman 1952)&lt;&#x2F;span&gt;. Néanmoins, ce qui va motiver notre étude est l’application des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; aux preuves de terminaison d’algorithmes, qui ont eu un succès notable dans leur application aux “Systèmes de Transitions Bien Structurés” (&lt;span id=&quot;wsts&quot;&gt;WSTS&lt;&#x2F;span&gt;) &lt;span class=&quot;citation&quot; data-cites=&quot;abdulla_general_1996 abdulla_verifying_1998 finkel_well_structured_2001 WQOInComputerScience&quot;&gt;(Abdulla et al. 1996; Abdulla et Jonsson 1998; Finkel et Schnoebelen 2001; Goubault-Larrecq et al. 2016)&lt;&#x2F;span&gt;. L’article d’&lt;span class=&quot;citation&quot; data-cites=&quot;abdulla_general_1996&quot;&gt;Abdulla et al. (1996)&lt;&#x2F;span&gt; a reçu en 2016 le prestigieux “LICS Test-of-Time Award” avec la description suivante :&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;The LICS-1996 paper “General decidability theorems for infinite-state systems” authored by Abdulla, Cerans, Jonsson and Tsay showed that various verification problems are decidable for well-structured transition systems (WSTS). WSTS is a general class of infinite systems that subsumes a number of important computation models such as Petri nets and lossy channel systems. While the notion of WSTS was introduced in 1990 by Finkel with a slightly restricted format, the present paper proved the decidability of the coverability problem for the general class introduced there by describing a backward algorithm. This powerful technique has been quite influential in the field, and cited ever since as a standard reference on WSTS.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;un-beau-préordre-pathologique-et-des-espaces-topologiques&quot;&gt;Un beau préordre pathologique, et des espaces topologiques&lt;&#x2F;h2&gt;
&lt;p&gt;Un problème de taille limite l’utilisation des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, particulièrement dans l’étude de systèmes de transitions infinis : l’ensemble &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}(X)\)&lt;&#x2F;span&gt; des parties d’un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;, muni de son ordre naturel &lt;span class=&quot;math inline&quot;&gt;\(\leq_{\mathsf{hoare}}\)&lt;&#x2F;span&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;rado_1954&quot;&gt;(Rado 1954)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Cela est problématique car cette construction est utile, par exemple pour déterminiser un système &lt;span class=&quot;citation&quot; data-cites=&quot;jancar_note_1999 segoufin_bottom_up_2017 abdulla_general_1996&quot;&gt;(Jančar 1999; Segoufin et Figueira 2017; Abdulla et al. 1996)&lt;&#x2F;span&gt;. Afin de rendre précis les considérations qui suivent, écrivons désormais &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\colon \mathsf{Préordres}\to \mathsf{Préordres}\)&lt;&#x2F;span&gt; l’opération qui associe à un préordre &lt;span class=&quot;math inline&quot;&gt;\((X, \leq)\)&lt;&#x2F;span&gt;, le préordre &lt;span class=&quot;math inline&quot;&gt;\((\mathcal{P}(X), \leq_{\mathsf{hoare}})\)&lt;&#x2F;span&gt;. Le problème soulevé par Rado peut se reformuler ainsi : il existe un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; &lt;span class=&quot;math inline&quot;&gt;\((X, \leq)\)&lt;&#x2F;span&gt;, tel que &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}(X,\leq)\)&lt;&#x2F;span&gt; n’est pas un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;. Ce problème a été contourné de trois manières différentes :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Une première solution est de contourner subtilement le besoin d’avoir des parties infinies, et se ramener à l’étude des sous-ensembles finis (qui lui est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;). Cette technique est &lt;em&gt;ad-hoc&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Une seconde solution est de travailler avec des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; qui ne sont pas pathologiques, c’est-à-dire, avec des pré-meilleurs-ordres &lt;span class=&quot;citation&quot; data-cites=&quot;pouzet1972bel milner1985basic&quot;&gt;(Pouzet 1972; Milner 1985)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Une troisième et dernière approche a été proposée par &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2007noetherian&quot;&gt;Goubault-Larrecq (2007)&lt;&#x2F;span&gt;, qui a remarqué que la notion mathématique d’espace topologique Nœthérien &lt;span class=&quot;math inline&quot;&gt;\((X, \tau)\)&lt;&#x2F;span&gt; pouvait jouer le rôle d’une &lt;em&gt;généralisation&lt;&#x2F;em&gt; des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; à un cadre topologique, dans lequel la construction de l’ensemble des parties n’est pas problématique.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Dans cet article, on s’intéresse à l’approche topologique proposée par les espaces Nœthériens. Dans ce cadre, les analogues topologiques des &lt;a href=&quot;#wsts&quot;&gt;WSTS&lt;&#x2F;a&gt; possèdent des propriétés similaires en terme de décidabilité, et on peut même construire un équivalent de méthodes avancées comme l’analyse &lt;em&gt;en avant&lt;&#x2F;em&gt; de Karp et Miller sur des réseaux de Pétri &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2012verif&quot;&gt;(Goubault-Larrecq 2010)&lt;&#x2F;span&gt;. Par ailleurs, la nature topologique de ces espaces permet de capturer des arguments de terminaison provenant aussi bien de la théorie des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, que d’arguments algébriques sur des idéaux de polynômes, ce qui a permis, par exemple, la vérification de “programmes polynomiaux concurrents sur canaux avec perte” par &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2012verif&quot;&gt;Goubault-Larrecq (2010)&lt;&#x2F;span&gt;. Les polynômes sont intégrés dans le cadre des espaces Nœthériens au travers de résultats de géométrie algébrique et la notion de &lt;em&gt;clôture de Zariski&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2013non&quot;&gt;(voir l’Exercice 9.7.53 de Goubault-Larrecq 2013)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;En résumé, il y a deux solutions concurrentes pour résoudre de manière systématique le problème posé par l’ensemble de Rado. Le premier est de &lt;em&gt;restreindre&lt;&#x2F;em&gt; l’ensemble des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; d’intérêts à une classe laissée stable par &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\)&lt;&#x2F;span&gt; (les pré-meilleurs-ordres). Une seconde est de &lt;em&gt;généraliser&lt;&#x2F;em&gt; les ensembles considérés, de manière à conserver les propriétés de décidabilité désirées, tout en incluant l’ensemble de Rado et son ensemble des parties (les espaces Nœthériens). Il faut comprendre que, dans cette seconde approche, on ne peut se contenter de &lt;em&gt;restreindre&lt;&#x2F;em&gt; l’opération &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\)&lt;&#x2F;span&gt;, il faut inventer une nouvelle opération, &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{top}}\)&lt;&#x2F;span&gt;, qui opère sur des espaces topologiques, et coïncide avec &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\)&lt;&#x2F;span&gt; sur les préordres. Ainsi, &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{top}}\colon \mathsf{E.Topologiques}\to \mathsf{E.Topologiques}\)&lt;&#x2F;span&gt; appliqué à l’ensemble de Rado produit un espace topologique Nœthérien, qui ne correspond pas à un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;les-limites-de-lapproche-nœthérienne&quot;&gt;Les limites de l’approche Nœthérienne&lt;&#x2F;h2&gt;
&lt;p&gt;À chaque topologie &lt;span class=&quot;math inline&quot;&gt;\(\tau\)&lt;&#x2F;span&gt; sur un espace &lt;span class=&quot;math inline&quot;&gt;\(Q\)&lt;&#x2F;span&gt;, on peut associer son &lt;span id=&quot;spec&quot; class=&quot;def&quot;&gt;préordre de spécialisation&lt;&#x2F;span&gt; &lt;span class=&quot;math inline&quot;&gt;\(\leq_\tau\)&lt;&#x2F;span&gt; sur &lt;span class=&quot;math inline&quot;&gt;\(Q\)&lt;&#x2F;span&gt;. Les topologies Nœthériennes généralisent les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; dans le sens où, pour chaque &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;, il existe une topologie Nœthérienne dont il est le &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt;.&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;a href=&quot;#fn5&quot; class=&quot;footnote-ref&quot; id=&quot;fnref5&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;5&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Au contraire, plusieurs topologies peuvent avoir le même préordre de spécialisation.&lt;&#x2F;p&gt;
&lt;p&gt;Tout l’intérêt des espaces Nœthériens réside dans le fait qu’il existe des topologies Nœthériennes dont le &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt; n’est pas un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;. Cependant, cette liberté pose la question de la validité de la généralisation, dans un sens que nous allons décrire maintenant. Le lemme de Dickson prouve que si &lt;span class=&quot;math inline&quot;&gt;\((X, \leq_X)\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\((Y, \leq_Y)\)&lt;&#x2F;span&gt; sont des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, alors leur produit &lt;span class=&quot;math inline&quot;&gt;\(X \times Y\)&lt;&#x2F;span&gt;, muni de l’ordre produit &lt;span class=&quot;math inline&quot;&gt;\((x_1, y_1) \leq (x_2, y_2)\)&lt;&#x2F;span&gt; si et seulement si &lt;span class=&quot;math inline&quot;&gt;\(x_1 \leq x_2\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\(y_1 \leq y_2\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;. Un analogue topologique de ce lemme est le fait que, pour deux espaces Nœthériens &lt;span class=&quot;math inline&quot;&gt;\((X, \tau_X)\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\((Y,\tau_Y)\)&lt;&#x2F;span&gt;, le produit &lt;span class=&quot;math inline&quot;&gt;\(X \times Y\)&lt;&#x2F;span&gt; est Nœthérien … &lt;em&gt;pour une certaine topologie&lt;&#x2F;em&gt;. Pour prétendre que le lemme topologique est une généralisation du lemme de Dickson, on peut proposer les conditions suivantes&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Si &lt;span class=&quot;math inline&quot;&gt;\(\tau_X\)&lt;&#x2F;span&gt; a pour &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt; &lt;span class=&quot;math inline&quot;&gt;\(\leq_X\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\(\tau_Y\)&lt;&#x2F;span&gt; a pour &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt; &lt;span class=&quot;math inline&quot;&gt;\(\leq_Y\)&lt;&#x2F;span&gt;, alors la topologie choisie pour le produit devrait avoir pour &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt; l’ordre produit &lt;span class=&quot;math inline&quot;&gt;\(\leq_{X \times Y}\)&lt;&#x2F;span&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Si &lt;span class=&quot;math inline&quot;&gt;\(\tau_X\)&lt;&#x2F;span&gt; est la topologie la plus fine associée à &lt;span class=&quot;math inline&quot;&gt;\(\leq_X\)&lt;&#x2F;span&gt;, &lt;span class=&quot;math inline&quot;&gt;\(\tau_Y\)&lt;&#x2F;span&gt; est la topologie la plus fine associée à &lt;span class=&quot;math inline&quot;&gt;\(\leq_Y\)&lt;&#x2F;span&gt;, et que &lt;span class=&quot;math inline&quot;&gt;\(\leq_X\)&lt;&#x2F;span&gt; et &lt;span class=&quot;math inline&quot;&gt;\(\leq_Y\)&lt;&#x2F;span&gt; sont des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, alors &lt;span class=&quot;math inline&quot;&gt;\(\tau_{X \times Y}\)&lt;&#x2F;span&gt; est la topologie la plus fine associée à &lt;span class=&quot;math inline&quot;&gt;\(\leq_{X \times Y}\)&lt;&#x2F;span&gt;, qui est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Dans le cas du produit, il existe une topologie naturelle (au sens catégorique) pour cet espace, la &lt;span class=&quot;def&quot;&gt;topologie produit&lt;&#x2F;span&gt;. Cette topologie vérifie les points 1 et 2 précédents. Mais on peut imaginer d’autres topologies, beaucoup plus étranges, qui satisfont 1 et 2. En particulier, sur des espaces topologiques qui ne proviennent pas d’espaces préordonnés, le constructeur est &lt;em&gt;extrêmement libre&lt;&#x2F;em&gt;, puisqu’il existe de nombreuses topologies dont le &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt; est un préordre donné.&lt;a href=&quot;#fn6&quot; class=&quot;footnote-ref&quot; id=&quot;fnref6&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;6&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Cette question de &lt;em&gt;canonicité&lt;&#x2F;em&gt; de la topologie associée à un constructeur peut sembler anecdotique, mais elle se retrouve de manière non triviale dans la généralisation de théorèmes plus poussés sur les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, comme le fait que &lt;span class=&quot;math inline&quot;&gt;\(X^*\)&lt;&#x2F;span&gt; est un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; lorsqu’il est muni de la relation d’inclusion de sous mots de Higman, et que &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; était déjà lui-même un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;higman1952ordering&quot;&gt;(Higman 1952)&lt;&#x2F;span&gt;. Le lemme de Higman topologique, proposé par &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2013non&quot;&gt;Goubault-Larrecq (2013)&lt;&#x2F;span&gt;, propose une définition &lt;em&gt;ad-hoc&lt;&#x2F;em&gt; de la topologie sous-mot, vérifiant les points 1 et 2. De même, la généralisation du théorème de Kruskal, qui traite d’un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; sur les arbres &lt;span class=&quot;citation&quot; data-cites=&quot;kruskal1972theory&quot;&gt;(Kruskal 1972)&lt;&#x2F;span&gt; au cadre topologique d passe par la construction d’une topologie &lt;em&gt;bien choisie&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2013non&quot;&gt;(Goubault-Larrecq 2013)&lt;&#x2F;span&gt;. Dans les deux cas, le cadre topologique proposé est &lt;em&gt;une&lt;&#x2F;em&gt; généralisation possible du cas des préordres.&lt;&#x2F;p&gt;
&lt;p&gt;Dans le cas des préordres, les preuves du lemme de Higman et du théorème de Kruskal reposent généralement sur un argument de &lt;em&gt;mauvaise séquence minimale&lt;&#x2F;em&gt; introduit par &lt;span class=&quot;citation&quot; data-cites=&quot;nash_williams_wqo_1965&quot;&gt;Nash-Williams (1965)&lt;&#x2F;span&gt;. Les preuves utilisant cette technique sont assez subtiles, et peuvent facilement s’avérer erronnées &lt;span class=&quot;citation&quot; data-cites=&quot;gallier_ann_1997 Singh2013SimplifiedPO&quot;&gt;(voir par exemple l’erratum de Gallier 1997; et une preuve correcte par Singh, Shuaibu, et Ndayawo 2013)&lt;&#x2F;span&gt;. De plus, ces arguments ne sont pas compositionnels, pour chaque constructeur (mots, arbres, etc.) il faut construire un nouvel argument de mauvaise séquence minimale adapté &lt;span class=&quot;citation&quot; data-cites=&quot;dershowitz_gap_2003 Daligault2010&quot;&gt;(voir par exemple Dershowitz et Tzameret 2003; et Daligault, Rao, et Thomassé 2010)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Les analogues topologiques du lemme de Higman et du théorème de Kruskal obtenus pour les espaces Nœthériens reposent aussi sur des arguments de mauvaise séquence minimale, mais dans une version &lt;em&gt;topologique&lt;&#x2F;em&gt; &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2013non&quot;&gt;(Goubault-Larrecq 2013, vol. 22, sect. 9.7)&lt;&#x2F;span&gt;. Il faut noter cependant que les définitions comme les preuves ont une complexité accrue par rapport à leurs homologues préordonnés, et que l’argument de mauvaise séquence topologique minimale est encore plus subtil &lt;span class=&quot;citation&quot; data-cites=&quot;goubault2022err&quot;&gt;(voir l’errata n. 26 de l’article de blog Goubault-Larrecq 2022b)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;constructions-inductives&quot;&gt;Constructions inductives&lt;&#x2F;h2&gt;
&lt;p&gt;Il est possible d’argumenter que, déjà dans le cas des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, le choix de l’ordre sur les mots finis ou les arbres a une grande importance, et qu’il comporte une part d’arbitraire. Cependant, les travaux de &lt;span class=&quot;citation&quot; data-cites=&quot;HASEGAWA2002113&quot;&gt;Hasegawa (2002)&lt;&#x2F;span&gt; ont démontré que, dans un cadre assez générique, on peut définir de manière naturelle un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; sur des constructions inductives. Pour fixer une notation, on considère un &lt;em&gt;foncteur&lt;&#x2F;em&gt; &lt;span class=&quot;math inline&quot;&gt;\(F \colon \mathsf{Préordres}
\to \mathsf{Préordres}\)&lt;&#x2F;span&gt;, qui préserve les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, et l’objectif est de définir un &lt;a href=&quot;#wqo&quot;&gt;beau préordre&lt;&#x2F;a&gt; sur le plus petit point fixe de &lt;span class=&quot;math inline&quot;&gt;\(F\)&lt;&#x2F;span&gt; (qui existera grâce à des conditions supplémentaires posées sur &lt;span class=&quot;math inline&quot;&gt;\(F\)&lt;&#x2F;span&gt;). Le cadre catégorique proposé par Hasegawa permet de retrouver les théorèmes de Kruskal et le lemme de Higman à partir de la définition inductive des mots et des arbres. On peut noter que, suivant des motivations différentes, le récent travail de &lt;span class=&quot;citation&quot; data-cites=&quot;freund2020kruskal&quot;&gt;Freund (2020)&lt;&#x2F;span&gt; sur le théorème de Kruskal donne un autre cadre catégorique permettant de définir des &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; sur des constructions inductives, qui coïncide bien avec les notions usuelles dans le cas des mots finis et des arbres finis. Ces deux résultats semblent relativement peu connus et utilisés par la communauté, ce qui peut s’expliquer par leur cadre théorique reposant sur des constructions non triviales en théories des catégories, et donc relativement hermétique.&lt;&#x2F;p&gt;
&lt;p&gt;Dans le cas des espaces Nœthériens, il n’existe pas de construction générique permettant de définir une topologie sur des espaces &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; construits comme des points fixes. De plus, les conditions placées dans les deux cadres catégoriques susmentionnés implique que les constructeurs &lt;span class=&quot;math inline&quot;&gt;\(F\)&lt;&#x2F;span&gt; considérés doivent avoir un support fini, ce qui exclut d’office une grande famille de constructeurs pour les espaces Nœthériens. Le fait d’avoir un support fini revient à dire que, pour tout élément &lt;span class=&quot;math inline&quot;&gt;\(a \in F(X)\)&lt;&#x2F;span&gt;, il existe un sous ensemble fini &lt;span class=&quot;math inline&quot;&gt;\(Y \subseteq_{\mathsf{fin}}X\)&lt;&#x2F;span&gt; tel que &lt;span class=&quot;math inline&quot;&gt;\(a\)&lt;&#x2F;span&gt; est construit à partir des éléments de &lt;span class=&quot;math inline&quot;&gt;\(Y\)&lt;&#x2F;span&gt;. C’est bien le cas des mots et des arbres, mais cela exclut &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\)&lt;&#x2F;span&gt; par exemple. De plus, de récents travaux sur les espaces Nœthériens ont démontré la possibilité (et l’intérêt) de placer des topologies Nœthériennes sur des espaces qui ne sont pas immédiatement obtenus comme des plus petits points fixes, comme les mots infinis &lt;span class=&quot;citation&quot; data-cites=&quot;goubaultlarrecq2021infinitary&quot;&gt;(Goubault-Larrecq 2022a)&lt;&#x2F;span&gt;, ou les mots de longueur ordinale &lt;span class=&quot;citation&quot; data-cites=&quot;goubaultlarrecq2022infinitary&quot;&gt;(Goubault-Larrecq, Halfon, et Lopez 2022)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;contributions-de-larticle&quot;&gt;Contributions de l’article&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article apporte deux contributions principales. La première est l’introduction d’un théorème de plus petit point fixe pour les topologies Nœthériennes, basé sur un argument de mauvaise séquence minimale topologique. La seconde est l’utilisation de ce théorème pour déduire une topologie Nœthérienne sur des espaces définis inductivement.&lt;&#x2F;p&gt;
&lt;p&gt;Notons que la première contribution dévie significativement des analogues proposés dans le cadre des préordres. En effet, au lieu de considérer une suite d’espaces topologiques définie par l’équation &lt;span class=&quot;math inline&quot;&gt;\(X_{n+1} = F(X_n)\)&lt;&#x2F;span&gt;, où le constructeur &lt;span class=&quot;math inline&quot;&gt;\(F\)&lt;&#x2F;span&gt; fait varier simultanément l’ensemble des points de l’espace et sa topologie, on considère un ensemble &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; fixé de points et une fonction &lt;span class=&quot;math inline&quot;&gt;\(F\)&lt;&#x2F;span&gt; qui raffine une topologie sur &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;. Dans ce cadre la construction de l’espace &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; est découplée de la construction de la topologie sur &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt;. En particulier, l’espace &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; lui-même n’a pas besoin d’être défini par induction. Le théorème isole une condition suffisante très simple qui garantit que le plus petit point fixe est Nœthérien. En particulier, cela permet d’encapsuler toute la complexité des preuves par mauvaise séquence topologique minimale dans un théorème aux hypothèses simples (hors de tout cadre catégorique en particulier).&lt;&#x2F;p&gt;
&lt;p&gt;Dans le cas plus spécifique où l’espace &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; est lui-même défini par une équation de plus petit point fixe, une définition inductive d’une &lt;em&gt;topologie&lt;&#x2F;em&gt; sur &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; permet d’utiliser le théorème précédent et d’équiper &lt;span class=&quot;math inline&quot;&gt;\(X\)&lt;&#x2F;span&gt; d’une topologie Nœthérienne, directement dérivée de sa construction inductive. Cela généralise la construction de &lt;span class=&quot;citation&quot; data-cites=&quot;HASEGAWA2002113&quot;&gt;Hasegawa (2002)&lt;&#x2F;span&gt; au cadre topologique, au sens où, dans le cas des préordres, on retrouve exactement ce que donne le cadre proposé par &lt;span class=&quot;citation&quot; data-cites=&quot;HASEGAWA2002113&quot;&gt;Hasegawa (2002)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Tout au long de l’article, de nombreux exemples de constructions (mots finis, arbres finis, mots infinis, mots transfinis, arbres avec branchement ordinal, etc.) sont proposés afin d’illustrer comment le théorème de point fixe permet de généraliser les résultats déjà connus avec des preuves plus simples, en proposer de nouveaux, mais aussi montrer que cette approche &lt;em&gt;uniforme&lt;&#x2F;em&gt; donne une légitimité nouvelle aux généralisations topologiques des constructions sur les ordres : les topologies proposées, faute d’être les plus topologies Nœthériennes les plus fines sur un espace donné,&lt;a href=&quot;#fn7&quot; class=&quot;footnote-ref&quot; id=&quot;fnref7&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;7&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; sont obtenues par un procédé uniforme.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h1&gt;
&lt;p&gt;Cet article propose une condition sémantique simple permettant de garantir qu’une topologie obtenue comme un plus petit point fixe est Nœthérienne. L’idée principale est de fixer l’espace et ne faire varier que la topologie, ce qui simplifie grandement les équations et évite l’introduction d’un cadre catégorique. Par la suite, il est possible d’utiliser ce théorème de point fixe sur les &lt;em&gt;topologies&lt;&#x2F;em&gt; pour en déduire un théorème de point fixes sur les &lt;em&gt;espaces topologiques&lt;&#x2F;em&gt; dans le cade catégorique idoine.&lt;&#x2F;p&gt;
&lt;p&gt;Le théorème de point fixe sur les topologies semble être la bonne abstraction des arguments de mauvaise séquence minimale topologique. Tout comme ces derniers, il ne fournit aucun contrôle sur les invariants ordinaux des topologies Nœthériennes ainsi construites. En ce sens, il manque encore à la théorie une manière de contrôler quantitativement les espaces Nœthériens définis par induction.&lt;&#x2F;p&gt;
&lt;h1 class=&quot;unnumbered&quot; id=&quot;références&quot;&gt;Références&lt;&#x2F;h1&gt;
&lt;div id=&quot;refs&quot; class=&quot;references csl-bib-body hanging-indent&quot; data-entry-spacing=&quot;0&quot; role=&quot;list&quot;&gt;
&lt;div id=&quot;ref-abdulla_general_1996&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Abdulla, Parosh Aziz, Karlis Čerāns, Bengt Jonsson, et Yih-Kuen Tsay. 1996. &lt;span&gt;« General decidability theorems for infinite-state systems »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of LICS’96&lt;&#x2F;em&gt;, 313‑21. IEEE. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1996.561359&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.1996.561359&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-abdulla_verifying_1998&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Abdulla, Parosh Aziz, et Bengt Jonsson. 1998. &lt;span&gt;« Verifying networks of timed processes »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of TACAS’98&lt;&#x2F;em&gt;, 1384:298‑312. Lecture &lt;span&gt;Notes&lt;&#x2F;span&gt; in &lt;span&gt;Computer&lt;&#x2F;span&gt; &lt;span&gt;Science&lt;&#x2F;span&gt;. Springer. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;BFb0054179&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;BFb0054179&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-Daligault2010&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Daligault, Jean, Michael Rao, et Stéphan Thomassé. 2010. &lt;span&gt;« Well-&lt;span&gt;Q&lt;&#x2F;span&gt;uasi-&lt;span&gt;O&lt;&#x2F;span&gt;rder of &lt;span&gt;R&lt;&#x2F;span&gt;elabel &lt;span&gt;F&lt;&#x2F;span&gt;unctions »&lt;&#x2F;span&gt;. &lt;em&gt;Order&lt;&#x2F;em&gt; 27 (3): 301‑15. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s11083-010-9174-0&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;s11083-010-9174-0&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-dershowitz_gap_2003&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Dershowitz, Nachum, et Iddo Tzameret. 2003. &lt;span&gt;« Gap &lt;span&gt;Embedding&lt;&#x2F;span&gt; for &lt;span&gt;Well&lt;&#x2F;span&gt;-&lt;span&gt;Quasi&lt;&#x2F;span&gt;-&lt;span&gt;Orderings&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of WoLLIC’03&lt;&#x2F;em&gt;, 84:80‑90. Electronic Notes in Theoretical Computer Science. Elsevier. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1571-0661(04)80846-6&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S1571-0661(04)80846-6&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-figueira_ackermannian_2011&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Figueira, Diego, Santiago Figueira, Sylvain Schmitz, et Philippe Schnoebelen. 2011. &lt;span&gt;« Ackermannian and &lt;span&gt;Primitive&lt;&#x2F;span&gt;-&lt;span&gt;Recursive&lt;&#x2F;span&gt; &lt;span&gt;Bounds&lt;&#x2F;span&gt; with &lt;span&gt;Dickson&lt;&#x2F;span&gt;’s &lt;span&gt;Lemma&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of LICS’11&lt;&#x2F;em&gt;, 269‑78. IEEE. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.2011.39&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.2011.39&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-finkel_well_structured_2001&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Finkel, Alain, et Philippe Schnoebelen. 2001. &lt;span&gt;« Well-structured transition systems everywhere! »&lt;&#x2F;span&gt; &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt;, &lt;span&gt;ISS&lt;&#x2F;span&gt;, 256 (1): 63‑92. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0304-3975(00)00102-X&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0304-3975(00)00102-X&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-freund2020kruskal&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Freund, Anton. 2020. &lt;span&gt;« From &lt;span&gt;K&lt;&#x2F;span&gt;ruskal’s &lt;span&gt;T&lt;&#x2F;span&gt;heorem to &lt;span&gt;F&lt;&#x2F;span&gt;riedman’s gap condition »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematical Structures in Computer Science&lt;&#x2F;em&gt; 30 (8): 952‑75. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;S0960129520000298&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;S0960129520000298&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-gallier_ann_1997&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Gallier, Jean H. 1997. &lt;span&gt;« Ann. &lt;span&gt;Pure&lt;&#x2F;span&gt; &lt;span&gt;Appl&lt;&#x2F;span&gt;. &lt;span&gt;Logic&lt;&#x2F;span&gt;: &lt;span&gt;Erratum&lt;&#x2F;span&gt; to &lt;span&gt;“&lt;span&gt;What&lt;&#x2F;span&gt;’s so special about &lt;span&gt;Kruskal&lt;&#x2F;span&gt;’s &lt;span&gt;T&lt;&#x2F;span&gt;heorem and the ordinal &lt;span class=&quot;math inline&quot;&gt;\(\Gamma_0\)&lt;&#x2F;span&gt;? &lt;span&gt;A&lt;&#x2F;span&gt; survey of some results in proof theory”&lt;&#x2F;span&gt; [53 (1991) 199–260] »&lt;&#x2F;span&gt;. &lt;em&gt;Annals of Pure and Applied Logic&lt;&#x2F;em&gt; 89 (2): 275. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0168-0072(97)00043-2&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0168-0072(97)00043-2&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubault2007noetherian&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Goubault-Larrecq, Jean. 2007. &lt;span&gt;« On &lt;span&gt;N&lt;&#x2F;span&gt;oetherian spaces »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of LICS’07&lt;&#x2F;em&gt;, 453‑62. IEEE. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.2007.34&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1109&#x2F;LICS.2007.34&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubault2012verif&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2010. &lt;span&gt;« Noetherian &lt;span&gt;S&lt;&#x2F;span&gt;paces in &lt;span&gt;V&lt;&#x2F;span&gt;erification »&lt;&#x2F;span&gt;. In &lt;em&gt;Proceedings of ICALP’10&lt;&#x2F;em&gt;, 6199:2‑21. Lecture Notes in Computer Science. Springer. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-642-14162-1_2&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-642-14162-1_2&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubault2013non&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2013. &lt;em&gt;Non-Hausdorff Topology and Domain Theory&lt;&#x2F;em&gt;. Vol. 22. New Mathematical Monographs. Cambridge University Press. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;CBO9781139524438&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&#x2F;CBO9781139524438&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubaultlarrecq2021infinitary&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2022a. &lt;span&gt;« Infinitary &lt;span&gt;N&lt;&#x2F;span&gt;oetherian &lt;span&gt;C&lt;&#x2F;span&gt;onstructions &lt;span&gt;I&lt;&#x2F;span&gt;. &lt;span&gt;I&lt;&#x2F;span&gt;nfinite &lt;span&gt;W&lt;&#x2F;span&gt;ords »&lt;&#x2F;span&gt;. &lt;em&gt;Colloquium Mathematicum&lt;&#x2F;em&gt;, nᵒ 168: 257‑86. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4064&#x2F;cm8077-4-2021&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4064&#x2F;cm8077-4-2021&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubault2022err&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
———. 2022b. &lt;span&gt;« &lt;span&gt;Non-Hausdorff Topology and Domain Theory. Electronic supplements to the book&lt;&#x2F;span&gt; – Errata »&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;projects.lsv.ens-cachan.fr&#x2F;topology&#x2F;?page_id=12&quot; class=&quot;uri&quot;&gt;https:&#x2F;&#x2F;projects.lsv.ens-cachan.fr&#x2F;topology&#x2F;?page_id=12&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-goubaultlarrecq2022infinitary&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Goubault-Larrecq, Jean, Simon Halfon, et Aliaume Lopez. 2022. &lt;span&gt;« &lt;span&gt;I&lt;&#x2F;span&gt;nfinitary &lt;span&gt;N&lt;&#x2F;span&gt;oetherian &lt;span&gt;C&lt;&#x2F;span&gt;onstructions &lt;span&gt;II&lt;&#x2F;span&gt;. &lt;span&gt;T&lt;&#x2F;span&gt;ransfinite &lt;span&gt;W&lt;&#x2F;span&gt;ords and the &lt;span&gt;R&lt;&#x2F;span&gt;egular &lt;span&gt;S&lt;&#x2F;span&gt;ubword &lt;span&gt;T&lt;&#x2F;span&gt;opology »&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.48550&#x2F;arXiv.2202.05047&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.48550&#x2F;arXiv.2202.05047&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-WQOInComputerScience&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Goubault-Larrecq, Jean, Monika Seisenberger, Victor L. Selivanov, et Andreas Weiermann. 2016. &lt;span&gt;« Well &lt;span&gt;Q&lt;&#x2F;span&gt;uasi-&lt;span&gt;O&lt;&#x2F;span&gt;rders in &lt;span&gt;C&lt;&#x2F;span&gt;omputer &lt;span&gt;S&lt;&#x2F;span&gt;cience (&lt;span&gt;D&lt;&#x2F;span&gt;agstuhl &lt;span&gt;S&lt;&#x2F;span&gt;eminar 16031) »&lt;&#x2F;span&gt;. &lt;em&gt;Dagstuhl Reports&lt;&#x2F;em&gt; 6 (1): 69‑98. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;DagRep.6.1.69&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.4230&#x2F;DagRep.6.1.69&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-HASEGAWA2002113&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Hasegawa, Ryu. 2002. &lt;span&gt;« Two applications of analytic functors »&lt;&#x2F;span&gt;. &lt;em&gt;Theoretical Computer Science&lt;&#x2F;em&gt; 272 (1): 113‑75. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0304-3975(00)00349-2&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0304-3975(00)00349-2&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-higman1952ordering&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Higman, Graham. 1952. &lt;span&gt;« Ordering by divisibility in abstract algebras »&lt;&#x2F;span&gt;. &lt;em&gt;Proceedings of the London Mathematical Society&lt;&#x2F;em&gt; 3 (1): 326‑36. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;plms&#x2F;s3-2.1.326&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;plms&#x2F;s3-2.1.326&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-jancar_note_1999&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Jančar, Petr. 1999. &lt;span&gt;« A note on well quasi-orderings for powersets »&lt;&#x2F;span&gt;. &lt;em&gt;Information Processing Letters&lt;&#x2F;em&gt; 72 (5): 155‑60. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0020-0190(99)00149-0&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;S0020-0190(99)00149-0&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-kruskal1972theory&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Kruskal, Joseph B. 1972. &lt;span&gt;« The theory of well-quasi-ordering: A frequently discovered concept »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Combinatorial Theory, Series A&lt;&#x2F;em&gt; 13 (3): 297‑305. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0097-3165(72)90063-5&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;0097-3165(72)90063-5&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-topology:LOP23&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Lopez, Aliaume. 2023. &lt;span&gt;« Fixed Points and Noetherian Topologies »&lt;&#x2F;span&gt;. Conf. In &lt;em&gt;Foundations of Software Science and Computation Structures&lt;&#x2F;em&gt;, édité par Orna Kupferman et Pawel Sobocinski, 13992:456‑76. Springer Nature Switzerland. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-031-30829-1_22&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-3-031-30829-1_22&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-milner1985basic&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Milner, Eric C. 1985. &lt;span&gt;« Basic wqo-and bqo-theory »&lt;&#x2F;span&gt;. In &lt;em&gt;Graphs and order&lt;&#x2F;em&gt;, 147:487‑502. Springer. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-94-009-5315-4_14&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&#x2F;978-94-009-5315-4_14&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-nash_williams_wqo_1965&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Nash-Williams, Crispin St. John Alvah. 1965. &lt;span&gt;« On well-quasi-ordering transfinite sequences »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematical Proceedings of the Cambridge Philosophical Society&lt;&#x2F;em&gt; 61 (1): 33‑39.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-pouzet1972bel&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Pouzet, Maurice. 1972. &lt;span&gt;« Un bel ordre d’abritement et ses rapports avec les bornes d’une multirelation »&lt;&#x2F;span&gt;. &lt;em&gt;CR Acad. Sci. Paris S&lt;span&gt;é&lt;&#x2F;span&gt;r. AB&lt;&#x2F;em&gt; 274: A1677‑80.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-rado_1954&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Rado, R. 1954. &lt;span&gt;« Partial well-ordering of sets of vectors »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematika&lt;&#x2F;em&gt; 1 (2): 89‑95. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;S0025579300000565&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1112&#x2F;S0025579300000565&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-ROBSEM04&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Robertson, Neil, et P. D. Seymour. 2004. &lt;span&gt;« Graph Minors. XX. Wagner’s conjecture »&lt;&#x2F;span&gt;. &lt;em&gt;Journal of Combinatorial Theory, Series B&lt;&#x2F;em&gt; 92 (2): 325‑57. https:&#x2F;&#x2F;doi.org&#x2F;&lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2004.08.001&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&#x2F;j.jctb.2004.08.001&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-schmitzHdr&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Schmitz, Sylvain. 2017. &lt;span&gt;« &lt;span&gt;Algorithmic Complexity of Well-Quasi-Orders&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. Habilitation à diriger des recherches, &lt;span&gt;&lt;span&gt;É&lt;&#x2F;span&gt;cole normale sup&lt;span&gt;é&lt;&#x2F;span&gt;rieure Paris-Saclay&lt;&#x2F;span&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;tel.archives-ouvertes.fr&#x2F;tel-01663266&quot;&gt;https:&#x2F;&#x2F;tel.archives-ouvertes.fr&#x2F;tel-01663266&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-lectureNotesWqo&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Schmitz, Sylvain, et Philippe Schnoebelen. 2012. &lt;span&gt;« &lt;span&gt;Algorithmic Aspects of WQO Theory&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. France. &lt;a href=&quot;https:&#x2F;&#x2F;cel.archives-ouvertes.fr&#x2F;cel-00727025&quot;&gt;https:&#x2F;&#x2F;cel.archives-ouvertes.fr&#x2F;cel-00727025&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-segoufin_bottom_up_2017&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Segoufin, Luc, et Diego Figueira. 2017. &lt;span&gt;« Bottom-up automata on data trees and vertical &lt;span&gt;XPath&lt;&#x2F;span&gt; »&lt;&#x2F;span&gt;. &lt;em&gt;Logical Methods in Computer Science&lt;&#x2F;em&gt; 13. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.23638&#x2F;LMCS-13(4:5)2017&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.23638&#x2F;LMCS-13(4:5)2017&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-Singh2013SimplifiedPO&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Singh, Devendra, Ali Maianguwa Shuaibu, et Ndayawo. 2013. &lt;span&gt;« Simplified Proof of &lt;span&gt;K&lt;&#x2F;span&gt;ruskal’s &lt;span&gt;T&lt;&#x2F;span&gt;ree &lt;span&gt;T&lt;&#x2F;span&gt;heorem »&lt;&#x2F;span&gt;. &lt;em&gt;Mathematical Theory and Modeling&lt;&#x2F;em&gt; 3: 93‑100. &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.13140&#x2F;RG.2.2.12298.39363&quot;&gt;https:&#x2F;&#x2F;doi.org&#x2F;10.13140&#x2F;RG.2.2.12298.39363&lt;&#x2F;a&gt;.
&lt;&#x2F;div&gt;
&lt;div id=&quot;ref-almost_full:DCW12&quot; class=&quot;csl-entry&quot; role=&quot;listitem&quot;&gt;
Vytiniotis, Dimitrios, Thierry Coquand, et David Wahlstedt. 2012. &lt;span&gt;« Stop When You Are Almost-Full »&lt;&#x2F;span&gt;. In &lt;em&gt;Interactive Theorem Proving&lt;&#x2F;em&gt;, édité par Lennart Beringer et Amy Felty, 250‑65. Berlin, Heidelberg: Springer Berlin Heidelberg.
&lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;En travaillant dans un cadre mathématique traditionnel, de nombreuses définitions de &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt; et &lt;a href=&quot;#wf&quot;&gt;d’ordres bien fondés&lt;&#x2F;a&gt; sont équivalentes, mais il faudra faire attention si on travaille dans un cadre plus constructif. On peut regarder par exemple le travail sur les relations “almost full” en logique intuitionniste &lt;span class=&quot;citation&quot; data-cites=&quot;almost_full:DCW12&quot;&gt;(Vytiniotis, Coquand, et Wahlstedt 2012)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;c’est par exemple une conséquence de la définition donnée dans certaines notes de cours &lt;span class=&quot;citation&quot; data-cites=&quot;lectureNotesWqo&quot;&gt;(Schmitz et Schnoebelen 2012, Définition 1.4)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;C’est-à-dire, le préordre de Hoare, qui est défini par &lt;span class=&quot;math inline&quot;&gt;\(X \leq_h Y\)&lt;&#x2F;span&gt; si pour tout &lt;span class=&quot;math inline&quot;&gt;\(x \in X\)&lt;&#x2F;span&gt;, il existe &lt;span class=&quot;math inline&quot;&gt;\(y \in Y\)&lt;&#x2F;span&gt; tel que &lt;span class=&quot;math inline&quot;&gt;\(x \leq y\)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Il est possible de renforcer cette affirmation, mais ce n’est pas utile pour cette introduction.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn5&quot;&gt;&lt;p&gt;N’ayant jamais défini la notion d’espace topologique, d’espace Nœthérien, ce résumé ne définira pas non plus le &lt;a href=&quot;#spec&quot;&gt;préordre de spécialisation&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref5&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn6&quot;&gt;&lt;p&gt;Remarquons aussi que la propriété (2) n’a pas de sens si l’on considère des constructions qui ne préservent pas les &lt;a href=&quot;#wqo&quot;&gt;beaux préordres&lt;&#x2F;a&gt;, ce qui est précisément le cas de l’opération &lt;span class=&quot;math inline&quot;&gt;\(\mathcal{P}_{\mathsf{ord}}\)&lt;&#x2F;span&gt;.&lt;a href=&quot;#fnref6&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn7&quot;&gt;&lt;p&gt;Il n’y a pas de topologie Nœthérienne la plus fine sur ces espaces en général.&lt;a href=&quot;#fnref7&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Le Script Python en Ligne de Commande</title>
        <published>2023-10-28T00:00:00+00:00</published>
        <updated>2023-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/command-line-python-script/"/>
        <id>https://aliaume.fr/site/posts/command-line-python-script/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/command-line-python-script/">&lt;p&gt;Dans l’épisode précédent, le logiciel &lt;a href=&quot;https:&#x2F;&#x2F;www.libreoffice.org&#x2F;discover&#x2F;calc&#x2F;&quot;&gt;Libre Office Calc&lt;&#x2F;a&gt; avait été utilisé (avec succès) pour facilement ajouter des tags sur des lignes dans un fichier CSV, et en extraire rapidement un résumé. Dans cet article, je propose de passer d’une solution utilisant un logiciel généraliste&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; à un “logiciel métier” (où progiciel) avec les objectifs suivants :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Conserver autant que possible les avantages proposés par l’approche utilisant un tableur (possibilité d’interruption, sauvegarde, édition non-linéaire, complétion, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Résoudre les problèmes posés par l’interface (l’espace “efficace” est ridicule, les dates ne sont pas faciles à comprendre, les nombres ne sont pas toujours bien pris en compte, etc.)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Le résultat, visible dans le &lt;code&gt;asciinema&lt;&#x2F;code&gt; ci-après, est relativement satisfaisant, et déjà utilisable pour des petites quantités de lignes (&amp;lt; 100). Le code est disponible sur &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&quot;&gt;GitHub&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;div id=&quot;demo&quot; href=&quot;csv-python-demo.cast&quot;&gt;
&lt;&#x2F;div&gt;
&lt;script&gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; {
    let demo = document.getElementById(&quot;demo&quot;);
    let link = demo.getAttribute(&quot;href&quot;);
    console.log(demo, link);
    AsciinemaPlayer.create(link, demo);
  });
&lt;&#x2F;script&gt;
&lt;h2 id=&quot;création-de-linvite-de-commande&quot;&gt;Création de l’invite de commande&lt;&#x2F;h2&gt;
&lt;p&gt;Le programme se découpe en trois phases, mimant celles utilisées dans l’approche par tableur. Dans une première phase d’ouverture du fichier CSV, l’objectif est d’obtenir une “vue” du fichier qui corresponde à ce que l’utilisateur désire. Dans la seconde phase, l’utilisateur peut ajouter des annotations aux différentes lignes, de manière non-linéaire. Enfin, dans une troisième phase, l’utilisateur obtient un résumé succinct de son annotation.&lt;&#x2F;p&gt;
&lt;p&gt;Les deux premières phases sont, abstraitement, un calcul de point fixe : l’utilisateur va modifier des paramètres jusqu’à ce qu’un état satisfaisant (fixe) soit obtenu. La dernière phase est plus classique et consiste juste à afficher des données, sans aucune interaction utilisateur. Le code total fait moins de &lt;span class=&quot;math inline&quot;&gt;\(450\)&lt;&#x2F;span&gt; lignes de python complètement standard, qui se permet le luxe d’un petit nombre de commentaires.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;récupération-du-csv&quot;&gt;Récupération du CSV&lt;&#x2F;h3&gt;
&lt;p&gt;La première phase du programme dans son utilisation standard est l’ouverture d’un fichier CSV à annoter. Le développement de ce logiciel suit une approche &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Data-driven_programming&quot;&gt;data-driven&lt;&#x2F;a&gt;, et la première chose à faire est de spécifier quelles sont les données en entrée et en sortie de cette phase. L’entrée est assez raisonnable, puisque c’est simplement un chemin vers le fichier CSV &lt;code class=&quot;sourceCode python&quot;&gt;path : Path&lt;&#x2F;code&gt;. La sortie doit être une version structurée de ce fichier, et sans trop grande ambition, on arrive à la définition suivante :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;class&lt;&#x2F;span&gt; CSVFile(BaseModel):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;#cb1-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    content: List[List[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;]] &lt;span class=&quot;co&quot;&gt;# le tableau représenté par le CSV&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;#cb1-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    start:   &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;             &lt;span class=&quot;co&quot;&gt;# la ligne à partir de laquelle il faut lire les données&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;#cb1-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    path:    Path            &lt;span class=&quot;co&quot;&gt;# le chemin du fichier CSV originel&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Notons que cette approche est minimaliste. Le format CSV ne spécifie pas énormément de choses,&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; et en particulier on peut imaginer avoir des lignes “superflues” (en-têtes) au début du fichier. Même cela présuppose que le fichier est dans un format raisonnable, ce qui peut très bien ne pas correspondre à un type spécifique de fichier CSV.&lt;&#x2F;p&gt;
&lt;p&gt;Au cœur de l’ouverture du fichier CSV on trouve cette procédure &lt;code&gt;interactive_parse_csv(p: Path) -&amp;gt; CSVFile&lt;&#x2F;code&gt;. Celle-ci est définie par un point fixe à partir de la fonction &lt;code&gt;csv.reader&lt;&#x2F;code&gt; du module &lt;code&gt;csv&lt;&#x2F;code&gt;. Abstraitement, &lt;code&gt;csv.reader&lt;&#x2F;code&gt;, en plus du fichier CSV, prend un certain nombre d’arguments &lt;span class=&quot;math inline&quot;&gt;\(\mathsf{CsvOpts}\)&lt;&#x2F;span&gt; permettant de lire le fichier (le plus évident étant le choix du caractère séparateur des lignes). On peut donc voir la fonction &lt;code&gt;csv.reader&lt;&#x2F;code&gt; comme une fonction &lt;span class=&quot;math inline&quot;&gt;\(f \colon \mathsf{Path} \times \mathsf{CsvOpts}\to \mathsf{CsvFile}\)&lt;&#x2F;span&gt;, ce qui est plus ou moins le rôle de la fonction d’emballage &lt;code&gt;parse_csv&lt;&#x2F;code&gt; dans le code. L’utilisateur peut alors être modélisé comme une fonction &lt;span class=&quot;math inline&quot;&gt;\(u \colon \mathsf{CsvFile}\to \mathsf{CsvOpts}\)&lt;&#x2F;span&gt;, car il peut corriger les paramètres en fonction de ce qu’il voit affiché. Ainsi, le chemin &lt;span class=&quot;math inline&quot;&gt;\(p\)&lt;&#x2F;span&gt; étant fixé, le programme essaie de trouver un point fixe &lt;span class=&quot;math inline&quot;&gt;\(c\)&lt;&#x2F;span&gt; de la fonction &lt;span class=&quot;math inline&quot;&gt;\(u \circ f(p, \cdot)\)&lt;&#x2F;span&gt;, et retourne simplement &lt;span class=&quot;math inline&quot;&gt;\(f(p, c)\)&lt;&#x2F;span&gt;. À la fin des fins, &lt;span class=&quot;math inline&quot;&gt;\(\text{interactiveParseCsv}(p) = f(p, \mu c. u(f(p,c)))\)&lt;&#x2F;span&gt;, et c’est précisément ce que fait le code (avec une boucle &lt;code&gt;while&lt;&#x2F;code&gt; pour calculer le point fixe).&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;csv-parse-loop-plain.svg&quot; alt=&quot;Illustration graphique du calcul de point fixe.&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Illustration graphique du calcul de point fixe.&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;À ces considérations théoriques structurant le programme, on peut ajouter quelques remarques plus pratiques qui améliorent considérablement l’expérience utilisateur (et ce à moindre coût). Déjà, le code tel que proposé commence par calculer &lt;span class=&quot;math inline&quot;&gt;\(f(p,c)\)&lt;&#x2F;span&gt; avec un &lt;span class=&quot;math inline&quot;&gt;\(c\)&lt;&#x2F;span&gt; initial correspondant à &lt;span class=&quot;math inline&quot;&gt;\(90\%\)&lt;&#x2F;span&gt; des cas d’usages (le séparateur est une virgule, la première ligne est une ligne d’en-têtes, etc.). C’est définitivement ce qu’il faut faire, puisque cela veut dire que &lt;span class=&quot;math inline&quot;&gt;\(90\%\)&lt;&#x2F;span&gt; du temps, l’utilisateur à juste à dire “oui”. Ensuite, l’utilisateur va avoir un aperçu de ce qui est compris du fichier CSV avec les paramètres actuels : il faut lui donner plusieurs lignes de références, le nombre de colonnes et quelques informations permettant de détecter instantanément si les données seront bien valides. Enfin, lorsqu’on demande à modifier les paramètres (dans le cas où l’utilisateur désire les changer), considérer par défaut que l’utilisateur veut les garder identiques et permettre de simplement utiliser la touche &lt;code&gt;ENTRÉE&lt;&#x2F;code&gt; pour passer à la modification suivante. Souvent, il suffit de faire varier un unique paramètre pour corriger le comportement du programme, et cela simplifie beaucoup le travail de l’utilisateur de penser uniquement &lt;em&gt;à ce qui doit changer&lt;&#x2F;em&gt;, et pas à &lt;em&gt;l’intégralité de la configuration&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;création-des-colonnes&quot;&gt;Création des colonnes&lt;&#x2F;h3&gt;
&lt;p&gt;Une fois que le programme a bien découpé le fichier CSV en une matrice, il reste encore à comprendre ce que veulent dire les cases de cette matrice. Pour cela, on veut remplacer les lignes de la matrice par une structure de données plus riche, qui correspond à l’image mentale d’une liste de dépenses :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;&lt;pre class=&quot;sourceCode python sidefigure&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;#cb2-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;class&lt;&#x2F;span&gt; CSVLine(BaseModel):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;#cb2-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    content: List[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;]                &lt;span class=&quot;co&quot;&gt;# la ligne originale&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;#cb2-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dates:   Dict[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;, datetime.date] &lt;span class=&quot;co&quot;&gt;# les dates présentes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;#cb2-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    tag:     Optional[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;]            &lt;span class=&quot;co&quot;&gt;# l’annotation proposée&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;#cb2-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    infos:   Dict[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;, &lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;]           &lt;span class=&quot;co&quot;&gt;# des colonnes informatives&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;#cb2-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    debit:   &lt;span class=&quot;bu&quot;&gt;float&lt;&#x2F;span&gt;                    &lt;span class=&quot;co&quot;&gt;# le débit (négatif)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;#cb2-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    credit:  &lt;span class=&quot;bu&quot;&gt;float&lt;&#x2F;span&gt;                    &lt;span class=&quot;co&quot;&gt;# le crédit (positif)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Pour passer d’une ligne de notre matrice actuelle, de type &lt;code&gt;List[str]&lt;&#x2F;code&gt; à une telle structure, il nous suffit d’avoir une table de traduction (aussi appelée “mapping”) que l’on peut formaliser comme ci-après :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;#cb3-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;class&lt;&#x2F;span&gt; CSVMapping(BaseModel):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;#cb3-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dates:  Dict[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;, &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;] &lt;span class=&quot;co&quot;&gt;# quelles colonnes ont des dates&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;#cb3-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    tag:    &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;            &lt;span class=&quot;co&quot;&gt;# quelle colonne contient le tag&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;#cb3-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    infos:  Dict[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;, &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;] &lt;span class=&quot;co&quot;&gt;# quelles colonnes contiennent des informations&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;#cb3-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    debit:  &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;            &lt;span class=&quot;co&quot;&gt;# quelle est la colonne de débit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;#cb3-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    credit: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;            &lt;span class=&quot;co&quot;&gt;# quelle est la colonne de crédit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Notons qu’on aurait pu choisir une représentation différente, qui donne plutôt une liste &lt;code&gt;List[Type]&lt;&#x2F;code&gt; associant à chaque indice un type de case. On aurait alors eu un type &lt;code&gt;Date&lt;&#x2F;code&gt;, un type &lt;code&gt;Credit&lt;&#x2F;code&gt;, un type &lt;code&gt;Debit&lt;&#x2F;code&gt;, etc. Cette approche, implicitement, suppose que le &lt;code&gt;CSVMapping&lt;&#x2F;code&gt; ci-dessus représente une &lt;em&gt;fonction&lt;&#x2F;em&gt;, partant des indices du fichier CSV, et arrivant aux différents types de données. C’est absolument faux. Il est possible que le CSV contienne une seule colonne pour le débit et le crédit, ou que certaines cases servent dans plusieurs parties de notre structure de ligne, et d’ailleurs, une grande partie des colonnes d’un fichier CSV bien fourni sont inutiles lors de l’annotation.&lt;&#x2F;p&gt;
&lt;p&gt;Exactement comme pour la lecture du CSV, on peut demander à l’utilisateur d’écrire son &lt;code&gt;CSVMapping&lt;&#x2F;code&gt; pour produire une structure de donnée plus facile à traiter définie comme suit :&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb4&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb4-1&quot;&gt;&lt;a href=&quot;#cb4-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;class&lt;&#x2F;span&gt; State(BaseModel):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-2&quot;&gt;&lt;a href=&quot;#cb4-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    version:  &lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;              &lt;span class=&quot;co&quot;&gt;# la version actuelle du programme&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-3&quot;&gt;&lt;a href=&quot;#cb4-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    cursor:   &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;              &lt;span class=&quot;co&quot;&gt;# la position de l’utilisateur dans le CSV&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-4&quot;&gt;&lt;a href=&quot;#cb4-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    mapping:  CSVMapping       &lt;span class=&quot;co&quot;&gt;# le mapping défni par l’utilisateur&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-5&quot;&gt;&lt;a href=&quot;#cb4-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    data:     List[CSVLine]    &lt;span class=&quot;co&quot;&gt;# le fichier CSV &amp;quot;interprété&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb4-6&quot;&gt;&lt;a href=&quot;#cb4-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    unparsed: List[List[&lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;]]  &lt;span class=&quot;co&quot;&gt;# le fichier CSV &amp;quot;originel&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h3 id=&quot;annotations&quot;&gt;Annotations !&lt;&#x2F;h3&gt;
&lt;p&gt;De manière amusante, la partie la moins intéressante techniquement est l’annotation. En effet, il s’agit de nouveau d’un calcul de point fixe dont l’état est représenté par &lt;code&gt;State&lt;&#x2F;code&gt;. Là où l’annotation devient intéressante c’est sur les décisions ergonomiques qui lui sont associées. Le code de la fonction de modification est le suivant :&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb5&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb5-1&quot;&gt;&lt;a href=&quot;#cb5-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; interactive_modify(s : State, p : Path):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-2&quot;&gt;&lt;a href=&quot;#cb5-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;while&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;True&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-3&quot;&gt;&lt;a href=&quot;#cb5-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;bu&quot;&gt;print&lt;&#x2F;span&gt;(&lt;span class=&quot;st&quot;&gt;&amp;quot;&amp;quot;&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-4&quot;&gt;&lt;a href=&quot;#cb5-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        print_summary(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-5&quot;&gt;&lt;a href=&quot;#cb5-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        print_line_calendar(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-6&quot;&gt;&lt;a href=&quot;#cb5-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        print_line_summary(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-7&quot;&gt;&lt;a href=&quot;#cb5-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        print_line_balance(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-8&quot;&gt;&lt;a href=&quot;#cb5-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        print_line_status(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-9&quot;&gt;&lt;a href=&quot;#cb5-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        i_action &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;input&lt;&#x2F;span&gt;(&lt;span class=&quot;st&quot;&gt;&amp;quot;Action: &amp;quot;&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-10&quot;&gt;&lt;a href=&quot;#cb5-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; i_action &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;q&amp;quot;&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;or&lt;&#x2F;span&gt; i_action &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;quot;quit&amp;quot;&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-11&quot;&gt;&lt;a href=&quot;#cb5-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            &lt;span class=&quot;cf&quot;&gt;break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-12&quot;&gt;&lt;a href=&quot;#cb5-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        action &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; actions.get(i_action, update_tag(i_action))&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-13&quot;&gt;&lt;a href=&quot;#cb5-13&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        action(s)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb5-14&quot;&gt;&lt;a href=&quot;#cb5-14&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        write_state(s, p)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Typiquement, on affiche un certain nombre d’informations à l’utilisateur, avant d’attendre une commande de sa part (et recommencer). Notons que l’état est enregistré sur le disque à chaque étape, permettant de se prémunir contre toute interruption inopportune dans le processus d’annotation. Ce que voit l’utilisateur est typiquement découpé en quatre parties.&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;&lt;p&gt;Une première partie informe sur la &lt;em&gt;position dans le document&lt;&#x2F;em&gt; et &lt;em&gt;l’état général du document&lt;&#x2F;em&gt;. C’est répondre à “où suis-je”. L’affichage choisi est le suivant, où la première ligne sert à indiquer combien d’annotations sont effectuées et la seconde donne une représentation graphique de la position dans la liste (entre crochets) ainsi que des annotations posées (croisillons).&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;N: 13 &#x2F; 15. 2 items skipped.
####_#_###[#]####&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Une seconde partie informe sur les &lt;em&gt;dates&lt;&#x2F;em&gt; présentes dans la dépense en cours d’examen. C’est un calendrier (ou deux) avec des dates en surbrillance.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;     October 2024
 Mo Tu We Th Fr Sa Su
     1  2  3  4  5  6
  7  8  9 10 11 12 13
 14 15 16 17 18 19 20
 21 22 23 24 25 26 27
 28 29 30 31&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Une troisième partie affiche de manière compacte les informations non temporelles associées à la dépense courante.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;  [Libelle operation]     VIR FACT PharmacieBaguette
  [Libelle simplifie]     FACT PharmacieBaguette
  [Categorie]             Vacances
  [Sous categorie]        -
                          +0.00 &#x2F; -42.75      42.75
  [tag]                   pharma&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;p&gt;Enfin, une dernière partie de l’affichage récupère l’entrée utilisateur.&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt; Action:&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Cet affichage est largement plus compact que son correspondant côté tableur et l’interface est globalement plus efficace. En particulier, il n’y a pas d’information superflue (boutons, options, autres lignes), tout en gardant une capacité à rapidement se repérer dans le tableau. Le tout est doublé d’un choix d’actions utilisateur simple et puissant :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Des actions de déplacement &lt;code&gt;&amp;lt; « » &amp;gt;&lt;&#x2F;code&gt; qui permettent de se déplacer à la dépense suivante &#x2F; précédente ou suivante non annotée &#x2F; précédente non annotée.&lt;&#x2F;li&gt;
&lt;li&gt;Une action &lt;code&gt;quit&lt;&#x2F;code&gt; ou &lt;code&gt;q&lt;&#x2F;code&gt; permettant de terminer l’annotation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Tout le reste&lt;&#x2F;em&gt; permettant de placer une annotation sur la dépense courante (ou la remplacer si elle existe déjà) et se déplacer à la dépense suivante. Avec, bien sûr, l’exception de l’action vide qui ne change pas l’annotation, ce qui donne le plaisir de simplement maintenir la touche &lt;code&gt;ENTRÉE&lt;&#x2F;code&gt; pour naviguer chronologiquement dans les dépenses.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;affichage-dun-joli-calendrier&quot;&gt;Affichage d’un joli calendrier&lt;&#x2F;h2&gt;
&lt;p&gt;Si la majorité du code écrit est &lt;em&gt;triviale&lt;&#x2F;em&gt;, il y a une partie particulièrement pénible reliée à l’affichage du calendrier. Une solution pour afficher un tel calendrier aurait été de &lt;em&gt;coder&lt;&#x2F;em&gt; l’affichage, mais il existe dans la bibliothèque standard de python un &lt;a href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;calendar.html&quot;&gt;module &lt;code&gt;calendar&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; prévu à cet effet. &lt;a href=&quot;https:&#x2F;&#x2F;fr.wiktionary.org&#x2F;wiki&#x2F;là_où_le_bât_blesse&quot;&gt;Là où le bât blesse&lt;&#x2F;a&gt;, c’est que les calendriers ainsi définis ne peuvent pas facilement afficher plusieurs dates comme étant “sélectionnées”. Rien qu’un peu de surcharge d’opérations ne puisse régler cependant.&lt;&#x2F;p&gt;
&lt;p&gt;Avant de se lancer dans le code, il faut savoir que pour mettre de la couleur dans un terminal, on peut utiliser les &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ANSI_escape_code&quot;&gt;codes d’échappement ASCII&lt;&#x2F;a&gt;, par exemple écrire dans le terminal &lt;code&gt;\033[7m a \033[0m b&lt;&#x2F;code&gt; écrira la lettre &lt;code&gt;a&lt;&#x2F;code&gt; avec un fond différent de la lettre &lt;code&gt;b&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;On peut donc créer une classe qui hérite de &lt;code&gt;calendar.TextCalendar&lt;&#x2F;code&gt; (fournie par le module &lt;code&gt;calendar&lt;&#x2F;code&gt;), et surcharger la méthode &lt;code&gt;formatday&lt;&#x2F;code&gt; qui s’occupe d’écrire le numéro du jour sous forme d’une chaine de caractères.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb10&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb10-1&quot;&gt;&lt;a href=&quot;#cb10-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;class&lt;&#x2F;span&gt; DayInMonthHighlightingCalendar(calendar.TextCalendar):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-2&quot;&gt;&lt;a href=&quot;#cb10-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; &lt;span class=&quot;fu&quot;&gt;__init__&lt;&#x2F;span&gt;(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;, days_to_highlight : List[datetime.date]):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-3&quot;&gt;&lt;a href=&quot;#cb10-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;bu&quot;&gt;super&lt;&#x2F;span&gt;().&lt;span class=&quot;fu&quot;&gt;__init__&lt;&#x2F;span&gt;()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-4&quot;&gt;&lt;a href=&quot;#cb10-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;._days_to_highlight &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; days_to_highlight&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-5&quot;&gt;&lt;a href=&quot;#cb10-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-6&quot;&gt;&lt;a href=&quot;#cb10-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;co&quot;&gt;# surcharge de la méthode qui affiche les jours&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-7&quot;&gt;&lt;a href=&quot;#cb10-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; formatday(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;, day: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, weekday: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, width: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;) &lt;span class=&quot;op&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-8&quot;&gt;&lt;a href=&quot;#cb10-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;super&lt;&#x2F;span&gt;().formatday(day, weekday, width)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-9&quot;&gt;&lt;a href=&quot;#cb10-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; SHOULD_BE_HIGHLIGHTED(day, weekday):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-10&quot;&gt;&lt;a href=&quot;#cb10-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;ss&quot;&gt;f&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\033&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;[7m&lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;{&lt;&#x2F;span&gt;s&lt;span class=&quot;sc&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\033&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;[0m&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb10-11&quot;&gt;&lt;a href=&quot;#cb10-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; s&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Jusque-là tout semble bien se passer, sauf que, comme on peut s’en rendre compte dans le programme précédent, il reste à écrire la fonction &lt;code&gt;SHOULD_BE_HIGHLIGHTED&lt;&#x2F;code&gt;. Cela ne devrait pas être trop compliqué, vu que la classe possède une liste de jours à mettre en évidence… Mais si on regarde plus attentivement les arguments de la fonction &lt;code&gt;formatday&lt;&#x2F;code&gt;, elle ne possède pas assez d’information pour retrouver quel jour (de quelle année) elle est en train d’afficher. La variable &lt;code&gt;day&lt;&#x2F;code&gt; contient un entier entre &lt;code&gt;0&lt;&#x2F;code&gt; et &lt;code&gt;31&lt;&#x2F;code&gt;,&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; tandis que la variable &lt;code&gt;weekday&lt;&#x2F;code&gt; contient un entier entre &lt;code&gt;1&lt;&#x2F;code&gt; et &lt;code&gt;7&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Il s’agit alors d’ajouter à cette fonction de nouveaux arguments comme suit&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb11&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb11-1&quot;&gt;&lt;a href=&quot;#cb11-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; formatday(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;, day: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, weekday: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, width: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, year: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, month: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;) &lt;span class=&quot;op&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;str&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-2&quot;&gt;&lt;a href=&quot;#cb11-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;super&lt;&#x2F;span&gt;().formatday(day, weekday, width)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-3&quot;&gt;&lt;a href=&quot;#cb11-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; day &lt;span class=&quot;op&quot;&gt;!=&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt; &lt;span class=&quot;kw&quot;&gt;and&lt;&#x2F;span&gt; datetime.date(year, month, day) &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;._days_to_highlight:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-4&quot;&gt;&lt;a href=&quot;#cb11-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;ss&quot;&gt;f&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\033&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;[7m&lt;&#x2F;span&gt;&lt;span class=&quot;sc&quot;&gt;{&lt;&#x2F;span&gt;s&lt;span class=&quot;sc&quot;&gt;}&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\033&lt;&#x2F;span&gt;&lt;span class=&quot;ss&quot;&gt;[0m&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb11-5&quot;&gt;&lt;a href=&quot;#cb11-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; s&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Commence alors un jeu de piste pour trouver, dans le code de la classe &lt;code&gt;calendar.TextCalendar&lt;&#x2F;code&gt; les différentes fonctions qui font appel à &lt;code&gt;formatday&lt;&#x2F;code&gt;, afin de leur ajouter ces nouveaux paramètres. On trouve aisément le code de &lt;code&gt;formatweek&lt;&#x2F;code&gt; qui est à peu près la seule partie qui utilise &lt;code&gt;formatday&lt;&#x2F;code&gt;, et le jeu continue : on ajoute les arguments à &lt;code&gt;formatweek&lt;&#x2F;code&gt; afin de pouvoir corriger l’appel de fonction, et on recherchera par la suite tous les appels à &lt;code&gt;formatweek&lt;&#x2F;code&gt; dans le code de la classe &lt;code&gt;calendar.TextCalendar&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb12&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb12-1&quot;&gt;&lt;a href=&quot;#cb12-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; formatweek(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;, theweek : List[Tuple[&lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;,&lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;]], width : &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, year: &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;, month : &lt;span class=&quot;bu&quot;&gt;int&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb12-2&quot;&gt;&lt;a href=&quot;#cb12-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;.join(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;.formatday(d, wd, width, year, month) &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; (d,wd) &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; theweek)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;À ce moment précis, j’ai été plutôt chanceux, puisque la fonction qui appelle &lt;code&gt;formatweek&lt;&#x2F;code&gt; possède déjà les bons arguments (et le cercle infernal s’arrête ici). Il suffit de recopier le code de la fonction, et d’ajouter simplement &lt;code&gt;theyear&lt;&#x2F;code&gt; et &lt;code&gt;themonth&lt;&#x2F;code&gt; à l’appel de &lt;code&gt;formatweek&lt;&#x2F;code&gt; pour terminer notre calendrier illuminé.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb13&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb13-1&quot;&gt;&lt;a href=&quot;#cb13-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; formatmonth(&lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;, theyear, themonth, w&lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;, l&lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-2&quot;&gt;&lt;a href=&quot;#cb13-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        w &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;max&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;2&lt;&#x2F;span&gt;, w)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-3&quot;&gt;&lt;a href=&quot;#cb13-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        l &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;max&lt;&#x2F;span&gt;(&lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;, l)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-4&quot;&gt;&lt;a href=&quot;#cb13-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;.formatmonthname(theyear, themonth, &lt;span class=&quot;dv&quot;&gt;7&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt; (w &lt;span class=&quot;op&quot;&gt;+&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;) &lt;span class=&quot;op&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;1&lt;&#x2F;span&gt;)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-5&quot;&gt;&lt;a href=&quot;#cb13-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; s.rstrip()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-6&quot;&gt;&lt;a href=&quot;#cb13-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;+=&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt; l&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-7&quot;&gt;&lt;a href=&quot;#cb13-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;+=&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;.formatweekheader(w).rstrip()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-8&quot;&gt;&lt;a href=&quot;#cb13-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        s &lt;span class=&quot;op&quot;&gt;+=&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt; l&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-9&quot;&gt;&lt;a href=&quot;#cb13-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;for&lt;&#x2F;span&gt; week &lt;span class=&quot;kw&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;.monthdays2calendar(theyear, themonth):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-10&quot;&gt;&lt;a href=&quot;#cb13-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            s &lt;span class=&quot;op&quot;&gt;+=&lt;&#x2F;span&gt; &lt;span class=&quot;va&quot;&gt;self&lt;&#x2F;span&gt;.formatweek(week, w, theyear, themonth).rstrip()&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-11&quot;&gt;&lt;a href=&quot;#cb13-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;            s &lt;span class=&quot;op&quot;&gt;+=&lt;&#x2F;span&gt; &lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span class=&quot;st&quot;&gt;&amp;#39;&lt;&#x2F;span&gt; &lt;span class=&quot;op&quot;&gt;*&lt;&#x2F;span&gt; l&lt;&#x2F;span&gt;
&lt;span id=&quot;cb13-12&quot;&gt;&lt;a href=&quot;#cb13-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; s&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Un dernier problème apparaît lorsqu’on veut afficher le calendrier correspondant à une dépense : il arrive souvent que les dates associées à une dépense soient &lt;a href=&quot;https:&#x2F;&#x2F;fr.wiktionary.org&#x2F;wiki&#x2F;à_cheval&quot;&gt;“à cheval”&lt;&#x2F;a&gt; sur deux mois, par exemple parce que la date de l’opération et la date du débit effectif sont séparées de quelques jours. Il convient alors de faire un petit peu attention dans la fonction &lt;code&gt;print_line_calendar&lt;&#x2F;code&gt;, par exemple en faisant comme dans le code qui suit.&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb14&quot;&gt;&lt;pre class=&quot;sourceCode python&quot;&gt;&lt;code class=&quot;sourceCode python&quot;&gt;&lt;span id=&quot;cb14-1&quot;&gt;&lt;a href=&quot;#cb14-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;span class=&quot;kw&quot;&gt;def&lt;&#x2F;span&gt; print_line_calendar(s: State):&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-2&quot;&gt;&lt;a href=&quot;#cb14-2&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    dates &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; s.data[s.cursor].dates&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-3&quot;&gt;&lt;a href=&quot;#cb14-3&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-4&quot;&gt;&lt;a href=&quot;#cb14-4&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;len&lt;&#x2F;span&gt;(dates) &lt;span class=&quot;op&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;dv&quot;&gt;0&lt;&#x2F;span&gt;:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-5&quot;&gt;&lt;a href=&quot;#cb14-5&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        &lt;span class=&quot;cf&quot;&gt;return&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-6&quot;&gt;&lt;a href=&quot;#cb14-6&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-7&quot;&gt;&lt;a href=&quot;#cb14-7&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    min_date &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;min&lt;&#x2F;span&gt;(dates.values())&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-8&quot;&gt;&lt;a href=&quot;#cb14-8&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    max_date &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;bu&quot;&gt;max&lt;&#x2F;span&gt;(dates.values())&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-9&quot;&gt;&lt;a href=&quot;#cb14-9&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    cal &lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt; DayInMonthHighlightingCalendar(days_to_highlight&lt;span class=&quot;op&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;bu&quot;&gt;list&lt;&#x2F;span&gt;(dates.values()))&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-10&quot;&gt;&lt;a href=&quot;#cb14-10&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    cal.prmonth(min_date.year, min_date.month)&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-11&quot;&gt;&lt;a href=&quot;#cb14-11&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;    &lt;span class=&quot;cf&quot;&gt;if&lt;&#x2F;span&gt; min_date.year &lt;span class=&quot;op&quot;&gt;!=&lt;&#x2F;span&gt; max_date.year &lt;span class=&quot;kw&quot;&gt;or&lt;&#x2F;span&gt; min_date.month &lt;span class=&quot;op&quot;&gt;!=&lt;&#x2F;span&gt; max_date.month:&lt;&#x2F;span&gt;
&lt;span id=&quot;cb14-12&quot;&gt;&lt;a href=&quot;#cb14-12&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;        cal.prmonth(max_date.year, max_date.month)&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;h2 id=&quot;ceci-nest-pas-un-logiciel&quot;&gt;Ceci n’est pas un logiciel&lt;&#x2F;h2&gt;
&lt;p&gt;En conclusion, le petit script (assez facile à faire) est à l’utilisation beaucoup plus efficace que la méthode utilisant &lt;a href=&quot;https:&#x2F;&#x2F;www.libreoffice.org&#x2F;discover&#x2F;calc&#x2F;&quot;&gt;Libre Office Calc&lt;&#x2F;a&gt;. De plus, cela a été relativement facile à écrire et le code est assez simple pour être robuste aux évolutions d’export des CSVs de ma banque. Un des avantages non négligeables de l’affichage plus compact est qu’il est possible d’avoir une fenêtre ouverte sur l’internet ou sur son calendrier personnel afin de vérifier les endroits &#x2F; événements correspondants à une dépense.&lt;&#x2F;p&gt;
&lt;p&gt;Je n’attendais pas une victoire aussi écrasante d’un script en terme d’ergonomie (particulièrement d’un script en ligne de commande) et je me demande si les prochains épisodes utilisant une interface graphique ne vont pas voir la qualité du logiciel diminuer.&lt;&#x2F;p&gt;
&lt;p&gt;Cependant, je tiens à préciser que ce &lt;em&gt;script&lt;&#x2F;em&gt; n’est pas un programme. En particulier, il ne possède aucun test unitaire, n’a pas de possibilités d’internationalisation, n’utilise pas de programme de saisie comme &lt;a href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3&#x2F;library&#x2F;readline.html&quot;&gt;readline&lt;&#x2F;a&gt;, ne définit pas un package, n’est pas portable, et encore bien d’autres. La comparaison avec &lt;a href=&quot;https:&#x2F;&#x2F;www.libreoffice.org&#x2F;discover&#x2F;calc&#x2F;&quot;&gt;Libre Office Calc&lt;&#x2F;a&gt; n’est donc pas &lt;em&gt;équitable&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;C’est-à-dire, &lt;a href=&quot;https:&#x2F;&#x2F;www.libreoffice.org&#x2F;discover&#x2F;calc&#x2F;&quot;&gt;Libre Office Calc&lt;&#x2F;a&gt;, si vous n’avez pas suivi, c’est le point de référence qui servira à l’évaluation du programme proposé dans cet article.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Cela ne veut pas dire qu’il est facile à décoder ! Il existe une liste de &lt;a href=&quot;https:&#x2F;&#x2F;donatstudios.com&#x2F;Falsehoods-Programmers-Believe-About-CSVs&quot;&gt;préconceptions (fausses)&lt;&#x2F;a&gt; à propos du format CSV. De manière amusante, c’est aussi vrai pour &lt;a href=&quot;https:&#x2F;&#x2F;infiniteundo.com&#x2F;post&#x2F;25326999628&#x2F;falsehoods-programmers-believe-about-time&quot;&gt;la gestion des dates&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;On peut remarquer que dans les structures de données choisies, on garde souvent “trop” d’informations. C’est inutile jusqu’à ce que cela devienne indispensable. En effet, garder les lignes “non lues” et garder la version du logiciel ayant produit cet état permet de sérialiser (dans un fichier par exemple) l’état du programme sans trop se poser de questions.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;&lt;code&gt;0&lt;&#x2F;code&gt; voulant dire que le jour ne fait pas partie du mois, par exemple parce qu’on est en train d’afficher la dernière semaine d’un mois, et que la semaine “déborde” sur le mois suivant. C’est un choix comme un autre, mais particulièrement étrange puisqu’on oublie le numéro du jour par la même occasion.&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Fête de la Science et Informatique Débranchée</title>
        <published>2023-10-18T00:00:00+00:00</published>
        <updated>2023-10-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/fete-de-la-science/"/>
        <id>https://aliaume.fr/site/posts/fete-de-la-science/</id>
        
        <summary type="html">&lt;p&gt;Ceci est un petit billet qui sert à faire un retour d’expérience sur l’organisation d’événements tels que la &lt;a href=&quot;https:&#x2F;&#x2F;www.fetedelascience.fr&#x2F;&quot;&gt;fête de la science&lt;&#x2F;a&gt;, qui cherchent à vulgariser l’informatique (fondamentale) à des enfants.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>The Spreadsheet Method</title>
        <published>2023-10-17T00:00:00+00:00</published>
        <updated>2023-10-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/the-spreadsheet-method/"/>
        <id>https://aliaume.fr/site/posts/the-spreadsheet-method/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/the-spreadsheet-method/">&lt;p&gt;Dans cet article, je propose une solution simple qui utilise &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LibreOffice&quot;&gt;Libre Office&lt;&#x2F;a&gt; pour répondre au problème de “tagger” des dépenses, et produire une présentation synthétique du résultat.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ouverture-du-fichier&quot;&gt;Ouverture du fichier&lt;&#x2F;h2&gt;
&lt;p&gt;Comme pour tous les articles dans cette série de posts, on commence par essayer d’ouvrir un fichier de notre set d’exemples &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&quot;&gt;disponible sur GitHub&lt;&#x2F;a&gt;. Dans cet article, nous allons utiliser &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LibreOffice&quot;&gt;Libre Office&lt;&#x2F;a&gt;.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Pour commencer, j’ai utilisé la variante &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&#x2F;blob&#x2F;main&#x2F;data&#x2F;01-sheet-simple.csv&quot;&gt;&#x2F;data&#x2F;01-sheet-simple.csv&lt;&#x2F;a&gt; qui contient un fichier très court et très simple.&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;sheet-import-libre-office.png&quot; alt=&quot;Ouverture du fichier CSV&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Ouverture du fichier CSV&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Les points positifs de &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LibreOffice&quot;&gt;Libre Office&lt;&#x2F;a&gt; arrivent assez vite dans ce test :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;On peut choisir l’encodage du fichier.&lt;&#x2F;li&gt;
&lt;li&gt;Le type de séparateur.&lt;&#x2F;li&gt;
&lt;li&gt;La ligne de départ.&lt;&#x2F;li&gt;
&lt;li&gt;Et on a une visualisation en temps réel de la table qui en résulte.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;C’est assez intuitif, et je vous redirige vers la figure correspondante pour la capture d’écran qui va bien™.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;visualisation&quot;&gt;Visualisation&lt;&#x2F;h2&gt;
&lt;p&gt;Passé cette première interface minimaliste, on arrive sur un tableur plutôt complet, dont la capture d’écran correspondante se trouve &lt;a href=&quot;csv-libre-office.png&quot;&gt;ici&lt;&#x2F;a&gt;. Il y a désormais plus de choses à dire. Sans surprise pour un logiciel plus généraliste, l’interface est beaucoup plus remplie : on peut calculer (sur notre exemple) que seulement &lt;span class=&quot;math inline&quot;&gt;\(35\%\)&lt;&#x2F;span&gt; de l’interface sert à afficher nos données, alors que les &lt;span class=&quot;math inline&quot;&gt;\(65\%\)&lt;&#x2F;span&gt; restants sont une multitude de boutons, barres de défilement, options, et autres menus. Pour refaire le calcul, il suffit de mesurer les aires sur &lt;a href=&quot;csv-libre-office-space-usage.png&quot;&gt;la figure suivante&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Cette première analyse est un à charge, car le logiciel n’est pas dédié à notre tâche. Mais cela sert justement de référence pour nos futures itérations. Par ailleurs, il existe une fonction qui permet de « cacher une colonne »,&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; ce qui nous fait gagner de la place.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, certaines des fonctions vont servir, comme par exemple le menu qui permet d’accéder à la fonction « rechercher&#x2F;remplacer ».&lt;a href=&quot;#fn4&quot; class=&quot;footnote-ref&quot; id=&quot;fnref4&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;4&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Enfin, l’espace supplémentaire sur la feuille de calcul va servir à créer un second tableau de synthèse sur nos dépenses.&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;csv-libre-office.png&quot; alt=&quot;Visualisation du fichier CSV&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Visualisation du fichier CSV&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure&gt;
&lt;img src=&quot;csv-libre-office-space-usage.png&quot; alt=&quot;Utilisation de l’espace par Libre Office&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Utilisation de l’espace par Libre Office&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure&gt;
&lt;img src=&quot;libre-office-hide-columns.png&quot; alt=&quot;Supression des colonnes inutiles&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Supression des colonnes inutiles&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;annotation-des-dépenses&quot;&gt;Annotation des dépenses&lt;&#x2F;h2&gt;
&lt;figure&gt;
&lt;img src=&quot;libre-office-auto-fill.png&quot; alt=&quot;Remplissage avec complétion automatique&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Remplissage avec complétion automatique&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;p&gt;Une fois la visualisation corrigée pour avoir assez d’espace à l’écran, on peut passer à l’annotation à proprement parler. Pour cela, on créé une colonne supplémentaire savamment intitulée &lt;code&gt;Tag&lt;&#x2F;code&gt;, et on commence à remplir. Le fait de ne pas avoir décidé &lt;em&gt;a priori&lt;&#x2F;em&gt; des catégories ne pose pas un énorme problème parce que le logiciel essaie de compléter ce que l’on tape à partir des données déjà entrées dans la même colonne (voir &lt;a href=&quot;libre-office-auto-fill.png&quot;&gt;la figure illustrant la complétion automatique&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;En revanche, l’annotation à proprement parler n’est pas aisée pour plusieurs raisons :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;La ligne courante n’est pas surlignée, même si le numéro de ligne est mis en couleur. Cela fait que sur un plus grand nombre de colonnes on ne peut pas naviguer de manière fiable (sur les versions &lt;code&gt;02&lt;&#x2F;code&gt; et &lt;code&gt;03&lt;&#x2F;code&gt; des feuilles de &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&quot;&gt;csv-tagger&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Les informations ne sont pas disposées visuellement : en pratique, on voudrait utiliser un format différent pour &lt;code&gt;CB&lt;&#x2F;code&gt; et &lt;code&gt;VIREMENT&lt;&#x2F;code&gt; et le nom de l’entreprise.&lt;&#x2F;li&gt;
&lt;li&gt;Les dates ne sont pas compréhensibles facilement : en pratique, annoter une dépense qui date d’un mois auparavant pose des problèmes en terme de mémoire, et savoir le jour de la semaine ainsi qu’avoir un calendrier pour visualiser les différentes dates d’un seul coup (sur les versions &lt;code&gt;03&lt;&#x2F;code&gt; des feuilles de &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&quot;&gt;csv-tagger&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;synthèse-des-dépenses&quot;&gt;Synthèse des dépenses&lt;&#x2F;h2&gt;
&lt;p&gt;Reste à discuter de la création de la feuille de synthèse. Parce que je ne sais pas me servir du logiciel, et que je pars du principe que personne ne le sait, je me limite à une construction simple. Dans des colonnes inutilisées, on crée un tableau dont les colonnes sont les différents tags,&lt;a href=&quot;#fn5&quot; class=&quot;footnote-ref&quot; id=&quot;fnref5&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;5&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; et deux lignes, une pour les crédits, une pour les débits. Celles-ci sont remplies grâce à la formule suivante :&lt;&#x2F;p&gt;
&lt;pre class=&quot;macro&quot;&gt;&lt;code&gt;SUMIF([check-range]; [equal-condition]; [sum-range])&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Le tout se fait très visuellement, comme le montre &lt;a href=&quot;libre-office-formula-sum.png&quot;&gt;la capture d’écran des formules&lt;&#x2F;a&gt;, car le logiciel met en avant les zones sélectionnées sur la feuille de calcul. Si on ne s’y prend pas bien, il faudra rentrer &lt;span class=&quot;math inline&quot;&gt;\(n \times 2\)&lt;&#x2F;span&gt; formules, où &lt;span class=&quot;math inline&quot;&gt;\(n\)&lt;&#x2F;span&gt; est le nombre de catégories, car la technique de « faire glisser la formule » ne marche pas bien dans ce cadre. En faisant un peu attention et en préfixant les zones par un dollar,&lt;a href=&quot;#fn6&quot; class=&quot;footnote-ref&quot; id=&quot;fnref6&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;6&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; on peut entrer seulement &lt;span class=&quot;math inline&quot;&gt;\(2\)&lt;&#x2F;span&gt; formules et « faire glisser ».&lt;&#x2F;p&gt;
&lt;p&gt;Le système est assez simple et se met en place en un nombre linéaire de clics, ce qui est assez appréciable. Cependant, il ne fonctionne pas tel quel, car &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LibreOffice&quot;&gt;Libre Office&lt;&#x2F;a&gt; s’attend à trouver des virgules comme séparateur de nombre. Ce qui n’est pas le cas des CSV, où ceux-ci sont représentés avec des points.&lt;a href=&quot;#fn7&quot; class=&quot;footnote-ref&quot; id=&quot;fnref7&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;7&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; Il faudra donc passer par un petit &lt;a href=&quot;libre-office-replace-numbers.png&quot;&gt;rechercher remplacer dans la zone des crédits&lt;&#x2F;a&gt; et débits pour que la magie du &lt;code&gt;SUMIF&lt;&#x2F;code&gt; opère.&lt;&#x2F;p&gt;
&lt;figure&gt;
&lt;img src=&quot;libre-office-formula-sum.png&quot; alt=&quot;Création des formules de résumé&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Création des formules de résumé&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;figure&gt;
&lt;img src=&quot;libre-office-replace-numbers.png&quot; alt=&quot;Remplacement des points par des virgules&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Remplacement des points par des virgules&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;h2 id=&quot;conclusions&quot;&gt;Conclusions&lt;&#x2F;h2&gt;
&lt;p&gt;Le système basé sur une feuille de calcul possède les avantages suivants :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il ne nécessite pas de mise en place complexe, on double clique et on travaille.&lt;a href=&quot;#fn8&quot; class=&quot;footnote-ref&quot; id=&quot;fnref8&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;8&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Le « workflow » est très flexible, et on peut imaginer changer certaines procédures en fonction des colonnes disponibles.&lt;&#x2F;li&gt;
&lt;li&gt;On peut à tout moment sauvegarder&lt;a href=&quot;#fn9&quot; class=&quot;footnote-ref&quot; id=&quot;fnref9&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;9&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; le fichier et reprendre son travail plus tard.&lt;&#x2F;li&gt;
&lt;li&gt;La saisie n’est pas désagréable et assez rapide.&lt;&#x2F;li&gt;
&lt;li&gt;La création de statistiques &lt;strong&gt;simples&lt;&#x2F;strong&gt; est facile.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;En revanche, les points suivants laissent beaucoup de place à l’amélioration :&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;On ne tire aucun profit des différents types de champs, tous sont traités comme du texte brut, sauf pour les nombres (et cela demande une opération spécifique).&lt;&#x2F;li&gt;
&lt;li&gt;L’affichage des dates est problématique.&lt;&#x2F;li&gt;
&lt;li&gt;Sur beaucoup de colonnes, on s’y perd facilement.&lt;&#x2F;li&gt;
&lt;li&gt;On ne peut pas&lt;a href=&quot;#fn10&quot; class=&quot;footnote-ref&quot; id=&quot;fnref10&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;10&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; facilement “concaténer” deux feuilles, par exemple deux CSV provenant de deux comptes différents.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;figure&gt;
&lt;img src=&quot;libre-office-final-result.png&quot; alt=&quot;Résultat final&quot; &#x2F;&gt;
&lt;figcaption aria-hidden=&quot;true&quot;&gt;Résultat final&lt;&#x2F;figcaption&gt;
&lt;&#x2F;figure&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;J’utilise la version &lt;code&gt;LibreOffice 6.0.7.3 00m0(Build:3)&lt;&#x2F;code&gt; qui est dans les dépôts de ma vénérable &lt;code&gt;Ubuntu 18.04.6 LTS&lt;&#x2F;code&gt;.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;Dans ce fichier, les colonnes sont séparées par des virgules. On peut aussi bien utiliser la version &lt;code&gt;.tsv&lt;&#x2F;code&gt; dans ce test sans que cela ne change grand chose, puisque &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LibreOffice&quot;&gt;Libre Office&lt;&#x2F;a&gt; utilise le point-virgule comme séparateur par default.&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;Cette fonction s’obtient via un clic droit sur le nom de la colonne, comme indiqué dans la capture d’écran &lt;a href=&quot;libre-office-hide-columns.png&quot;&gt;suppression des colonnes inutiles&lt;&#x2F;a&gt;.&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn4&quot;&gt;&lt;p&gt;Même s’il paraît étrange à ce stade d’avoir besoin de la fonction « rechercher &#x2F; remplacer » dans un travail d’annotation de données…&lt;a href=&quot;#fnref4&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn5&quot;&gt;&lt;p&gt;Ceux-ci sont rentrés à la main, et ne sont pas automatiquement générés à partir de ce qui existe dans la colonne &lt;code&gt;Tag&lt;&#x2F;code&gt; du tableur.&lt;a href=&quot;#fnref5&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn6&quot;&gt;&lt;p&gt;Cela indique au logiciel que la position de cette zone est absolue et non pas relative à la case actuelle.&lt;a href=&quot;#fnref6&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn7&quot;&gt;&lt;p&gt;De plus, le logiciel (ou sa variante propriétaire) est assez connu du grand public pour que les utilisateurs aient déjà leurs marques.&lt;a href=&quot;#fnref7&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn8&quot;&gt;&lt;p&gt;De plus, le logiciel (ou sa variante propriétaire) est assez connu du grand public pour que les utilisateurs aient déjà leurs marques.&lt;a href=&quot;#fnref8&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn9&quot;&gt;&lt;p&gt;Attention ! Il ne faut &lt;em&gt;surtout pas&lt;&#x2F;em&gt; sauvegarder le résultat au format CSV, sinon toutes les formules seront perdues.&lt;a href=&quot;#fnref9&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn10&quot;&gt;&lt;p&gt;Une version plus correcte de cette phrase est que je ne sais pas comment faire.&lt;a href=&quot;#fnref10&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>L’Après Soutenance</title>
        <published>2023-09-20T00:00:00+00:00</published>
        <updated>2023-09-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/post-defense/"/>
        <id>https://aliaume.fr/site/posts/post-defense/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/post-defense/">&lt;p&gt;C’est terminé, ma &lt;a href=&quot;&#x2F;posts&#x2F;2023-08-23-thesis-defense.html&quot;&gt;soutenance de thèse&lt;&#x2F;a&gt; s’est bien déroulée. Vous pouvez trouver les &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;defense&#x2F;2023-09-12-defense-slides.pdf&quot;&gt;diapositives utilisées&lt;&#x2F;a&gt;, un &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;defense&#x2F;2023-09-12-defense-audio.mp4&quot;&gt;enregistrement audio&lt;&#x2F;a&gt; de la soutenance, ainsi que la &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;defense&#x2F;2023-09-12-defense-video.mp4&quot;&gt;vidéo&lt;&#x2F;a&gt; correspondante. J’ai fait le choix éditorial de garder sans modification les diapositives, l’audio et la vidéo, ce qui fait que les trois sources d’information restent cohérentes. En particulier, il est possible de télécharger les slides et l’audio pour “reconstruire” la vidéo en limitant votre bande passante, et ce sans manquer la partie amusante à la &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;defense&#x2F;2023-09-12-defense-video.mp4#t=00:26:00&quot;&gt;26ème minute&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>UI et UX pour petits programmes</title>
        <published>2023-09-20T00:00:00+00:00</published>
        <updated>2023-09-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/ui-ux-small-programs-1/"/>
        <id>https://aliaume.fr/site/posts/ui-ux-small-programs-1/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/ui-ux-small-programs-1/">&lt;p&gt;Cet article est le premier d’une série dont l’objectif est de comparer différentes approches à la création d’interfaces (graphiques ou non) pour des petits programmes.&lt;&#x2F;p&gt;
&lt;p&gt;L’idée a germé lors d’une séance de comptabilité où il était question de retrouver dans un export &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Comma-separated_values&quot;&gt;CSV&lt;&#x2F;a&gt; de mon compte en banque les transactions qui devaient être considérées comme “vacances en groupe” au milieu de plein de dépenses sans aucun rapport. On peut argumenter qu’il est plus simple d’utiliser une application dédiée pour annoter au fur et à mesure les dépenses (il en existe beaucoup). Cependant:&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il faut faire confiance en sa capacité à ajouter (en doublon donc) dans une autre base de données les dépenses au fur et à mesure&lt;&#x2F;li&gt;
&lt;li&gt;Il faut avoir un accès régulier à internet ou une capacité d’utilisation hors ligne.&lt;&#x2F;li&gt;
&lt;li&gt;L’objectif n’est pas de “régulariser” les dépenses entre plusieurs amis, mais bien de savoir combien a été dépensé au total sur un certain poste.&lt;&#x2F;li&gt;
&lt;li&gt;De toute manière la donnée supplémentaire n’existant pas, il faut ajouter l’information externe (vacances ou pas) &lt;em&gt;quelque part&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Pour toutes ces raisons, nous allons désormais admettre le besoin suivant : pouvoir annoter facilement un fichier CSV avec un nombre fini de catégories.&lt;a href=&quot;#fn1&quot; class=&quot;footnote-ref&quot; id=&quot;fnref1&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;1&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;une-première-approche-un-tableur&quot;&gt;Une première approche … Un tableur&lt;&#x2F;h2&gt;
&lt;p&gt;La manière la plus standard dans le monde pour répondre à la problématique susmentionnée est bien entendu de charger le fichier CSV dans un logiciel de feuille de calcul,&lt;a href=&quot;#fn2&quot; class=&quot;footnote-ref&quot; id=&quot;fnref2&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;2&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt; et d’ajouter une colonne “à la main.” La procédure est alors la suivante&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Ouvrir le fichier CSV.&lt;&#x2F;li&gt;
&lt;li&gt;Sélectionner le bon format de séparateur.&lt;&#x2F;li&gt;
&lt;li&gt;Se rendre compte que les nombres ne sont pas avec le bon format.&lt;&#x2F;li&gt;
&lt;li&gt;Cacher les colonnes inutiles afin que les informations tiennent sur un écran 13 pouces.&lt;&#x2F;li&gt;
&lt;li&gt;Ajouter un en-tête de colonne pour la catégorie.&lt;&#x2F;li&gt;
&lt;li&gt;Parcourir le tableur ligne à ligne.
&lt;ol type=&quot;a&quot;&gt;
&lt;li&gt;Pour chaque ligne, essayer de se souvenir de la dépense à partir du nom de la transaction.&lt;a href=&quot;#fn3&quot; class=&quot;footnote-ref&quot; id=&quot;fnref3&quot; role=&quot;doc-noteref&quot;&gt;&lt;sup&gt;3&lt;&#x2F;sup&gt;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Si la dépense est trop mystérieuse, regarder la date et retrouver le jour de la semaine à partir d’un calendrier.&lt;&#x2F;li&gt;
&lt;li&gt;Si cela reste mystérieux, taper le nom du bénéficiaire dans votre moteur de recherche favori.&lt;&#x2F;li&gt;
&lt;li&gt;Sinon, considérer la dépense comme “personnelle.”&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Exporter le fichier en CSV.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Étrangement, ce processus n’est pas si pénible. Mais l’interface est extrêmement compliquée pour une tâche qui semble particulièrement simple et bien définie.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cétait-une-ruse&quot;&gt;C’était une ruse&lt;&#x2F;h2&gt;
&lt;p&gt;Cette longue introduction (sans code) était une ruse pour introduire un problème et une “implémentation de référence” à base d’un logiciel de feuille de calcul qui permet de comparer différentes approches à la création de petits programmes métiers au périmètre extrêmement restreint. Dans les prochains articles, nous verrons comment une approche en ligne de commande avec un script &lt;code&gt;Python&lt;&#x2F;code&gt; trouve ses limites, comment une interface graphique avec &lt;code&gt;Gtk&lt;&#x2F;code&gt; introduit une complexité supplémentaire, mais aussi comment utiliser des technologies “hype” comme &lt;code&gt;React&lt;&#x2F;code&gt; pour répondre à ce problème très simple.&lt;&#x2F;p&gt;
&lt;p&gt;Tout le code écrit se trouvera &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AliaumeL&#x2F;csv-tagger&quot;&gt;dans un dépôt public&lt;&#x2F;a&gt; qui servira de carnet de laboratoire pour cette excursion dans la construction de logiciels et d’interfaces “métiers.”&lt;&#x2F;p&gt;
&lt;section id=&quot;footnotes&quot; class=&quot;footnotes footnotes-end-of-document&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr &#x2F;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;&lt;p&gt;Notons que cette tâche est assez générique et correspond aussi bien à notre exemple d’annotation de dépenses qu’à la création d’un jeu de données pour faire de l’apprentissage supervisé.&lt;a href=&quot;#fnref1&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn2&quot;&gt;&lt;p&gt;On pense bien sûr à libre office calc…&lt;a href=&quot;#fnref2&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;li id=&quot;fn3&quot;&gt;&lt;p&gt;Et ce n’est pas toujours facile !&lt;a href=&quot;#fnref3&quot; class=&quot;footnote-back&quot; role=&quot;doc-backlink&quot;&gt;↩︎&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;&#x2F;section&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Thesis Defense</title>
        <published>2023-08-23T00:00:00+00:00</published>
        <updated>2023-08-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/thesis-defense/"/>
        <id>https://aliaume.fr/site/posts/thesis-defense/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/thesis-defense/">&lt;link rel=&quot;stylesheet&quot; href=&quot;https:&#x2F;&#x2F;cdnjs.cloudflare.com&#x2F;ajax&#x2F;libs&#x2F;font-awesome&#x2F;6.4.2&#x2F;css&#x2F;all.min.css&quot;&#x2F;&gt; &lt;link rel=&quot;stylesheet&quot; href=&quot;https:&#x2F;&#x2F;unpkg.com&#x2F;leaflet@1.9.4&#x2F;dist&#x2F;leaflet.css&quot;
   integrity=&quot;sha256-p4NxAoJBhIIN+hmNHrzRCf9tD&#x2F;miZyoHS5obTRR9BMY=&quot;
   crossorigin=&quot;&quot;&#x2F;&gt;
&lt;script src=&quot;https:&#x2F;&#x2F;unpkg.com&#x2F;leaflet@1.9.4&#x2F;dist&#x2F;leaflet.js&quot;
   integrity=&quot;sha256-20nQCchB9co0qIjJZRGuk2&#x2F;Z9VM+kNiyxNV1lvTlZBo=&quot;
   crossorigin=&quot;&quot;&gt;
&lt;&#x2F;script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;.&#x2F;style-timeline.css&quot;&#x2F;&gt;
&lt;script src=&quot;map-view.js&quot; defer&gt; &lt;&#x2F;script&gt;
&lt;p&gt;I will defend my thesis on the &lt;strong&gt;12th of September 2023&lt;&#x2F;strong&gt; in Paris. If you are interested in attending, please continue reading this post.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;participation&quot;&gt;Participation&lt;&#x2F;h2&gt;
&lt;p&gt;If you wish to participate, please say so. This will ensure that enough food and drinks are available.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;framadate.org&#x2F;rHk9YfhOfuOMTJfo&quot;&gt;Here is a link to the framaform&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jury-composition&quot;&gt;Jury Composition&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Serenella Cerrito&lt;&#x2F;strong&gt;, Professeure des Universités, Université Paris Saclay, Univ EVRY, France&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Anuj Dawar&lt;&#x2F;strong&gt;, Professor, University of Cambridge&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Arnaud Durand&lt;&#x2F;strong&gt;, Professeur des Universités, Université Paris-Cité&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Patrice Ossona de Mendez&lt;&#x2F;strong&gt;, Chargé de Recherche, EHESS&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Daniela Petrisan&lt;&#x2F;strong&gt;, Maîtresse de Conférences, Université Paris-Cité&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Luca Reggio&lt;&#x2F;strong&gt;, Senior Fellow Researcher, University College London&lt;&#x2F;p&gt;
&lt;h2 id=&quot;abstract&quot;&gt;Abstract&lt;&#x2F;h2&gt;
&lt;p&gt;The thesis is titled &lt;em&gt;First Order Preservation Theorems in Finite Model Theory : Locality, Topology, and Limit Constructions.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You will find a brief abstract of the thesis manuscript hereafter.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Preservation Theorems in first-order logic are a collection of results derived from classical Model Theory. These results establish a direct correspondence between the semantic properties of formulas and the syntactic constraints imposed on the language used to express them. However, studying these theorems becomes notably challenging when focusing on finite models, which is unfortunate given that the field of Finite Model Theory is better equipped to describe phenomena occurring in Computer Science. This thesis presents a systematic approach to investigating Preservation Theorems within the realm of Finite Model Theory. The traditional ad-hoc proofs are replaced with a theoretical framework that generalizes techniques based on locality, and introduces a topological presentation of preservation theorems called logically presented pre-spectral spaces. Introducing these topological spaces enables us to develop a compositional theory for preservation theorems. Additionally, this thesis takes an initial stride towards systematically examining preservation theorems across inductively defined classes of finite structures. It accomplishes this by proving a generic fixed point theorem for a topological extension of logically presented pre-spectral spaces, specifically Noetherian spaces.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;For a preprint of the document, you can click &lt;a href=&quot;&#x2F;ressources&#x2F;these&#x2F;defense&#x2F;2023-09-12-defense-manuscript.pdf&quot;&gt;on this link&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;&#x2F;h2&gt;
&lt;div class=&quot;timeline&quot;&gt;
&lt;dl&gt;
&lt;dt&gt;13:50:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Opening of the &lt;a href=&quot;#thesis-defense-room&quot;&gt;thesis defense room&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;14:00:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Start of the thesis defense.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;15:00:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Questions and discussions.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;16:00:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Setup of the tables, food and drinks for the &lt;a href=&quot;#thesis-defense-celebration&quot;&gt;thesis defense celebration&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;16:20:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Celebration.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;19:00:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Cleaning up the celebration.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;19:30:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Departure for &lt;a href=&quot;#le-five&quot;&gt;Le Five&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;20:00:00 (UTC+0200)&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Arrival at &lt;a href=&quot;#le-five&quot;&gt;Le Five&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;&#x2F;dl&gt;
&lt;&#x2F;div&gt;
&lt;h2 class=&quot;places&quot; id=&quot;places&quot;&gt;Places&lt;&#x2F;h2&gt;
&lt;div id=&quot;map&quot;&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;thesis-defense-room&quot;&gt;Thesis Defense Room&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;where-is-it&quot;&gt;Where is it?&lt;&#x2F;h4&gt;
&lt;pre class=&quot;map-point&quot; data-icon=&quot;fa-graduation-cap&quot; data-gps=&quot;48,8267429;2,3825999&quot;&gt;&lt;code&gt;Salle 127
Bâtiment Olympe de Gouges
8 Place Paul Ricoeur
75013, Paris&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It will also be available online via Zoom using the &lt;a href=&quot;https:&#x2F;&#x2F;u-paris.zoom.us&#x2F;j&#x2F;87470312969?pwd=SVk3cXFydkVjRStHYnd2NWpRVm1Gdz09&quot;&gt;following link&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;ID de réunion : 874 7031 2969
Code secret : 151406&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;how-to-get-there&quot;&gt;How to get there?&lt;&#x2F;h4&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;e&#x2F;eb&#x2F;Paris_transit_icons_-_Tram.svg&quot; class=&quot;metro&quot; alt=&quot;tram-logo-paris&quot; &#x2F;&gt; Using the Parisian Trams&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;e&#x2F;ee&#x2F;Paris_transit_icons_-_Tram_3a.svg&quot; class=&quot;metro&quot; alt=&quot;tram-line-3a&quot; &#x2F;&gt; T3a, Station “Avenue de France”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;c&#x2F;c1&#x2F;Paris_transit_icons_-_M%C3%A9tro.svg&quot; class=&quot;metro&quot; alt=&quot;metro-logo-paris&quot; &#x2F;&gt; Using the Parisian Subway System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;9&#x2F;93&#x2F;Paris_transit_icons_-_M%C3%A9tro_14.svg&quot; class=&quot;metro&quot; alt=&quot;metro-line-fourteen&quot; &#x2F;&gt; Metro 14, exit 2&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;6&#x2F;69&#x2F;Paris_transit_icons_-_RER.svg&quot; class=&quot;metro&quot; alt=&quot;rer-logo-paris&quot; &#x2F;&gt; Using the Parisian Express Railway System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;f&#x2F;f6&#x2F;Paris_transit_icons_-_RER_C.svg&quot; class=&quot;metro&quot; alt=&quot;rer-line-C&quot; &#x2F;&gt; RER C, exit 5, “Rue des Grands Moulins”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;6&#x2F;66&#x2F;V%C3%A9lib%E2%80%99_logo.svg&quot; class=&quot;metro&quot; alt=&quot;velib-logo-paris&quot; &#x2F;&gt; Using the Parisian Bike Renting System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Station “Quai Panhard et Levassor”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dd&gt;
&lt;p&gt;Station “Marie-Andrée Lagroua Weill-Hallé - Françoise Dolto”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;&#x2F;dl&gt;
&lt;h3 id=&quot;thesis-defense-celebration&quot;&gt;Thesis Defense Celebration&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;where-is-it-1&quot;&gt;Where is it?&lt;&#x2F;h4&gt;
&lt;pre&gt;&lt;code&gt;Cour intérieure
Bâtiment Olympe de Gouges
8 Place Paul Ricoeur
75013, Paris&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;how-to-get-there-1&quot;&gt;How to get there?&lt;&#x2F;h4&gt;
&lt;p&gt;Cf &lt;a href=&quot;#thesis-defense-room&quot;&gt;how to get to the defense room&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;drinks-and-party&quot;&gt;Drinks and Party&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;where-is-it-2&quot;&gt;Where is it?&lt;&#x2F;h4&gt;
&lt;p id=&quot;le-five&quot;&gt;
&lt;pre class=&quot;map-point&quot; data-icon=&quot;fa-beer&quot; data-gps=&quot;48,8514857;2,3379094&quot;&gt;&lt;code&gt;Le Five
5 Rue Saint-Sulpice
75006, Paris&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;&#x2F;p&gt;
&lt;h4 id=&quot;how-to-get-there-2&quot;&gt;How to get there?&lt;&#x2F;h4&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;c&#x2F;c1&#x2F;Paris_transit_icons_-_M%C3%A9tro.svg&quot; class=&quot;metro&quot; alt=&quot;metro-logo-paris&quot; &#x2F;&gt; Using the Parisian Subway System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;7&#x2F;76&#x2F;Paris_transit_icons_-_M%C3%A9tro_4.svg&quot; class=&quot;metro&quot; alt=&quot;metro-line-four&quot; &#x2F;&gt; Metro 4, exit 2, “Carrefour de l’Odéon”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;2&#x2F;24&#x2F;Paris_transit_icons_-_M%C3%A9tro_10.svg&quot; class=&quot;metro&quot; alt=&quot;metro-line-ten&quot; &#x2F;&gt; Metro 10, exit 2, “Carrefour de l’Odéon”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;6&#x2F;69&#x2F;Paris_transit_icons_-_RER.svg&quot; class=&quot;metro&quot; alt=&quot;rer-logo-paris&quot; &#x2F;&gt; Using the Parisian Express Railway System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;f&#x2F;fd&#x2F;Paris_transit_icons_-_RER_B.svg&quot; class=&quot;metro&quot; alt=&quot;rer-line-B&quot; &#x2F;&gt; RER B, exit 1, “Quai Saint-Michel (Notre-Dame)”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dd&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;f&#x2F;f6&#x2F;Paris_transit_icons_-_RER_C.svg&quot; class=&quot;metro&quot; alt=&quot;rer-line-C&quot; &#x2F;&gt; RER C, exit 1, “Quai Saint-Michel (Notre-Dame)”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dt&gt;&lt;img src=&quot;https:&#x2F;&#x2F;upload.wikimedia.org&#x2F;wikipedia&#x2F;commons&#x2F;6&#x2F;66&#x2F;V%C3%A9lib%E2%80%99_logo.svg&quot; class=&quot;metro&quot; alt=&quot;velib-logo-paris&quot; &#x2F;&gt; Using the Parisian Bike Renting System&lt;&#x2F;dt&gt;
&lt;dd&gt;
&lt;p&gt;Station “Quatre Vents - Carrefour de l’Odéon”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dd&gt;
&lt;p&gt;Station “Marché Saint-Germain”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;dd&gt;
&lt;p&gt;Station “Sénat - Condé”&lt;&#x2F;p&gt;
&lt;&#x2F;dd&gt;
&lt;&#x2F;dl&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>La pire manière de préparer une vidéo promotionnelle</title>
        <published>2023-06-27T00:00:00+00:00</published>
        <updated>2023-06-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/lics-presentation/"/>
        <id>https://aliaume.fr/site/posts/lics-presentation/</id>
        
        <summary type="html">&lt;p&gt;Ce petit billet va décrire comment (ne pas) créer une vidéo pour une conférence, en espérant que cela serve à d’autres.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Rejoindre l’administration publique après un doctorat</title>
        <published>2022-11-29T00:00:00+00:00</published>
        <updated>2022-11-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/presentation-dptinfo/"/>
        <id>https://aliaume.fr/site/posts/presentation-dptinfo/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/presentation-dptinfo/">&lt;p&gt;Avec &lt;a href=&quot;https:&#x2F;&#x2F;gdoueneau.github.io&#x2F;&quot;&gt;Gaëtan Douéneau-Tabot&lt;&#x2F;a&gt; nous avons parlé devant les élèves du département informatique de l’ENS Paris-Saclay pour présenter le &lt;a href=&quot;&#x2F;ressources&#x2F;docteurs-admin&quot;&gt;rapport sur l’emploi des docteurs dans l’administration&lt;&#x2F;a&gt; avec une focalisation thématique sur le devenir des normaliens. Bien que les ordres de grandeurs des docteurs normaliens dans l’administration soient sensiblement différents de ceux dans la population générale des docteurs, l’analyse qualitative de leur statuts se révèle assez similaire pour en tirer des enseignements généraux.&lt;&#x2F;p&gt;
&lt;p&gt;L’objectif de cette intervention était de présenter les carrières dans l’administration publique hors recherche à des normaliens « futurs docteurs », et les inviter à réfléchir au parcours qu’ils souhaitent effectuer après leur thèse.&lt;&#x2F;p&gt;
&lt;p&gt;Les slides sont disponibles ci-après, mais le lien du quiz interactif est bien entendu caduc: &lt;a href=&quot;&#x2F;ressources&#x2F;publications&#x2F;Talks%2000&#x2F;2022-DPTINFO-ENS-presentation.pdf&quot;&gt;lien vers les slides&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Gestion des liens dans un document</title>
        <published>2022-10-19T00:00:00+00:00</published>
        <updated>2022-10-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/knowledge-management/"/>
        <id>https://aliaume.fr/site/posts/knowledge-management/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/knowledge-management/">&lt;p&gt;L’objectif de ce petit billet est d’introduire une extension du système d’édition de documents &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LaTeX&quot;&gt;LaTeX&lt;&#x2F;a&gt;, permettant de gérer les bases de connaissances via des liens. L’idée est de commencer par expliquer ce qui existe, et de positionner cette extension par rapport aux autres technologies existantes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pourquoi-mettre-des-liens-dans-un-document&quot;&gt;Pourquoi mettre des liens dans un document ?&lt;&#x2F;h2&gt;
&lt;p&gt;Dans un papier de recherche, il y a essentiellement deux raisons pour lesquelles ont veut utiliser un lien:&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Pour renvoyer le lecteur à une source externe de connaissances.&lt;&#x2F;li&gt;
&lt;li&gt;Pour aider le lecteur à naviguer au sein du document.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Dans un document de recherche, on aura par exemple des références externes (i.e., des citations), ainsi que des références internes à des sections ou points d’intérêt dans le document. Cette idée consistant à systématiquement intégrer au document les références permettant de découvrir les autres documents liés aux domaines, font des articles de recherche une base de connaissance &lt;strong&gt;explorable&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Cette idée est celle qui a longtemps guidé la construction des pages sur le web, où les liens internes&#x2F;externes sont cruciaux pour naviguer et retrouver l’information disponible. Néanmoins, cette méthode se heurte à plusieurs murs de complexité:&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il n’est pas possible pour un humain d’explorer tout le graphe.&lt;&#x2F;li&gt;
&lt;li&gt;Les liens peuvent ne plus être valides, il faut une maintenance constante des correspondances entre liens et documents cités.&lt;&#x2F;li&gt;
&lt;li&gt;Les documents sont hétérogènes, et donc les formats de lien varient.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;En particulier, sur un « document » comme wikipedia, il faut nécessairement ajouter aux liens internes aux pages, un moyen de chercher directement dans le contenu des pages, et de faire référence à des pages, et des sections particulières des pages. C’est ce qui est obtenu en regardant les &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Uniform_Resource_Identifier&quot;&gt;URI&lt;&#x2F;a&gt; proposées sur wikipedia: elles ont la forme &lt;code&gt;http:&#x2F;&#x2F;[langue].wikipedia.org&#x2F;wiki&#x2F;[nom-de-page]#[nom-de-section]&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Un exemple particulièrement mauvais de site web est celui de &lt;a href=&quot;https:&#x2F;&#x2F;ens-paris-saclay.fr&#x2F;&quot;&gt;l’ENS Paris-Saclay&lt;&#x2F;a&gt; qui ne permet pas du tout de retrouver facilement l’arborescence des pages disponibles, ni de retrouver simplement l’information. Plus généralement, dans un livre on aimera la présence d’un index, d’une table des matières, des figures, et la présence généralisée de pointeurs aidant à la navigation au sein du document.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;des-liens-dans-du-texte&quot;&gt;Des liens dans du texte&lt;&#x2F;h2&gt;
&lt;p&gt;Un problème loin d’être anodin se pose lorsque vous avez des liens dans un document: comment doivent-ils être affichés ? Cela peut sembler une question futile, il n’en est rien. Un certain nombre de documents sont destinés à l’impression, parfois sans couleurs, où la question est cruciale. Pour des documents plus interactifs (PDF, page web), il est nécessaire de penser à l’accessibilité: fournir un texte alternatif pour les liens, et préciser ce vers quoi ils doivent mener est crucial pour la pérennisation du document. Si on en croit un article de blog publié par CloudFare intitulé &lt;a href=&quot;https:&#x2F;&#x2F;blog.cloudflare.com&#x2F;the-history-of-the-url&#x2F;&quot;&gt;The History of the URL&lt;&#x2F;a&gt;, un nombre croissant de liens sont des &lt;em&gt;liens morts&lt;&#x2F;em&gt;, c’est-à-dire dont la destination n’existe plus:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;journals.cambridge.org&#x2F;action&#x2F;displayAbstract?fromPage=online&amp;amp;aid=9282809&amp;amp;fileId=S1472669614000255&quot;&gt;One half&lt;&#x2F;a&gt; of the URLs referenced by US Supreme Court opinions point to pages which no longer exist. If you were reading an academic paper in 2011, written in 2001, you have better than even odds that any given URL &lt;a href=&quot;https:&#x2F;&#x2F;bmcbioinformatics.biomedcentral.com&#x2F;articles&#x2F;10.1186&#x2F;1471-2105-14-S14-S5&quot;&gt;won’t be valid&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;— &lt;a href=&quot;https:&#x2F;&#x2F;blog.cloudflare.com&#x2F;the-history-of-the-url&#x2F;&quot;&gt;The History of the URL&lt;&#x2F;a&gt;, Section “Snapchat the Supreme Court”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Le problème est encore plus visible pour les références qui pointent vers des parties du même document, car l’échelle de temps est beaucoup plus courte. Si vous avez une table dans un rapport, nommée &lt;code&gt;Table 1&lt;&#x2F;code&gt;, alors vous pouvez y faire référence en disant &lt;code&gt;voir Table 1&lt;&#x2F;code&gt;. Mais ajouter une autre table à votre document … et l’intégralité des liens est à reconstruire. Vous avez quelque chose de pire qu’un lien mort: un faux lien.&lt;&#x2F;p&gt;
&lt;p&gt;Le problème des “références cassées” se règle généralement par le biais d’une autorité centrale qui &lt;em&gt;assigne&lt;&#x2F;em&gt; un identifiant unique à chaque document, sans relation avec l’endroit où le document est disponible. Les numéros &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ISBN&quot;&gt;ISBN&lt;&#x2F;a&gt; ou les &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Digital_object_identifier&quot;&gt;DOI&lt;&#x2F;a&gt; rentrent complètement dans cette catégorie. Dans le cas de références internes d’un document écrit avec LaTeX, cela se traduit concrètement via l’attribution de &lt;code&gt;labels&lt;&#x2F;code&gt; à certaines parties du document.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;résumé-du-cahier-des-charges&quot;&gt;Résumé du cahier des charges&lt;&#x2F;h2&gt;
&lt;p&gt;Pour gérer correctement les liens dans un document on veut facilement pouvoir faire les choses suivantes&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Utiliser une autorité centrale pour assigner des identifiants uniques.&lt;&#x2F;li&gt;
&lt;li&gt;Proposer plusieurs manières de parler d’une même ressource.&lt;&#x2F;li&gt;
&lt;li&gt;Intégrer un maximum d’informations dans le texte pour permettre de retrouver l’élément cité, sans nuire à la lisibilité.&lt;&#x2F;li&gt;
&lt;li&gt;Permettre l’exploration des liens.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;ce-qui-existe-pour-linstant-en-latex&quot;&gt;Ce qui existe pour l’instant en LaTeX&lt;&#x2F;h2&gt;
&lt;p&gt;Dans un document &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;LaTeX&quot;&gt;LaTeX&lt;&#x2F;a&gt;, les &lt;em&gt;liens internes&lt;&#x2F;em&gt; sont obtenus par une double passe. Dans un premier temps, on définit des &lt;em&gt;points d’intérêts&lt;&#x2F;em&gt; dans le document via une commande &lt;code&gt;\label&lt;&#x2F;code&gt;. Dans un second temps, on peut alors créer des liens vers ce point d’intérêt avec la commande &lt;code&gt;\ref&lt;&#x2F;code&gt; ou &lt;code&gt;\pageref&lt;&#x2F;code&gt;. En terme de cahier des charges, cela ne répond à presque aucun des pré-requis.&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;L’autorité qui gère les identifiants n’est pas centralisée: c’est l’auteur qui est le point de synchronisation. Pour un document à plusieurs auteurs, les identifiants sont éparpillés dans le document, et il n’y a pas de moyen de garantir une cohérence interne.&lt;&#x2F;li&gt;
&lt;li&gt;On ne peut pas référencer un même identifiant de plusieurs manières. En pratique, on peut seulement retrouver la page où l’étiquette est placée via &lt;code&gt;\pageref&lt;&#x2F;code&gt;, et retrouver un &lt;em&gt;numéro associé à l’étiquette&lt;&#x2F;em&gt; via la commande &lt;code&gt;\ref&lt;&#x2F;code&gt;. Ainsi, on doit écrire &lt;code&gt;Figure \ref{identifiant}&lt;&#x2F;code&gt; pour que s’affiche &lt;code&gt;Figure 2&lt;&#x2F;code&gt; dans le document final. Si l’identifiant a été changé et ne correspond plus à une figure, le lien reste valide, mais le texte est incorrect.&lt;&#x2F;li&gt;
&lt;li&gt;Il n’est en général pas possible de préciser des marqueurs spatiaux ou sémantiques pour aider le lecteur à se repérer. Ainsi, “en haut de la page”, “avant la définition”, “au début de la section”, sont autant de phrases qui sont à ré écrire dès que les éléments cités changent de place.&lt;&#x2F;li&gt;
&lt;li&gt;LaTeX propose de faire une table des matières via &lt;code&gt;\tableofcontents&lt;&#x2F;code&gt;. Il est aussi possible de faire une liste des figures, des tableaux, mais le processus n’est pas générique. Par exemple, écrire une liste des “définitions utilisées” dans un chapitre n’est pas une attente réaliste au vu de la technologie employée.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Plus généralement, il y a deux énormes problèmes dans cette gestion des liens. Le premier est qu’elle ignore totalement l’une des principales utilités de LaTeX, à savoir, la typographie des expressions mathématiques. Le second est que cette gestion se fait séparément des références externes, et celles-ci sont elles-mêmes découpées en deux parties: les hyperliens classiques, et les citations bibliographiques.&lt;&#x2F;p&gt;
&lt;p&gt;Des solutions partielles existent pour les problèmes cités. Le paquet &lt;a href=&quot;https:&#x2F;&#x2F;www.ctan.org&#x2F;pkg&#x2F;natbib&quot;&gt;natbib&lt;&#x2F;a&gt; propose de faciliter l’écriture des citations en permettant d’écrire des commandes comme &lt;code&gt;\citet[see][Theorem 1.6]{label}&lt;&#x2F;code&gt;, se traduisant en &lt;code&gt;Auteur 1, ... [see Theorem 1.6 of 2]&lt;&#x2F;code&gt;. De même, un paquet comme &lt;a href=&quot;https:&#x2F;&#x2F;www.ctan.org&#x2F;pkg&#x2F;cleveref&quot;&gt;cleveref&lt;&#x2F;a&gt; ajoute une commande &lt;code&gt;\cref{label}&lt;&#x2F;code&gt; permettant d’ajouter automatiquement les dénominations (Figure, Théorème, Définition, Table) avant le numéro associé.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;une-approche-en-deux-étapes&quot;&gt;Une approche en deux étapes&lt;&#x2F;h2&gt;
&lt;p&gt;Bien que proposant énormément de fonctionnalités, le paquet &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;~colcombe&#x2F;knowledge_en.html&quot;&gt;knowledge&lt;&#x2F;a&gt; développé par &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;~colcombe&quot;&gt;Thomas Colcombet&lt;&#x2F;a&gt; donne une réponse simple au problème des références internes, de la même manière que les &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;ISBN&quot;&gt;ISBN&lt;&#x2F;a&gt; ou les &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Digital_object_identifier&quot;&gt;DOI&lt;&#x2F;a&gt;. En utilisant ce paquet, deux commandes sont disponibles &lt;code&gt;\intro&lt;&#x2F;code&gt; et &lt;code&gt;\kl&lt;&#x2F;code&gt; (l’équivalent de label et cite), avec comme seule différence que la gestion des correspondances est déléguée à une autorité tierce. En pratique, les utilisateurs du paquet se voient écrire un document &lt;code&gt;knowledges.kl&lt;&#x2F;code&gt; contenant pour chaque “notion du document” une variété de synonymes et des propriétés stylistiques.&lt;&#x2F;p&gt;
&lt;p&gt;L’introduction d’un document tiers simplifie la collaboration, la découverte, et la ré-utilisation des liens du document. Elle permet aussi de répondre, de manière rudimentaire, aux besoins évoqués plus haut. L’utilisation de synonymes autorise d’écrire &lt;code&gt;\kl{La première section}&lt;&#x2F;code&gt; dans le corps du document, et d’expliquer dans la base de connaissances que &lt;code&gt;La première section&lt;&#x2F;code&gt; est la même chose que &lt;code&gt;Section 1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Par ailleurs, le paquet autorise l’utilisation de liens pour les références mathématiques, permettant de cliquer sur un symbole pour voir son introduction… magique non?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dans-un-futur-proche&quot;&gt;Dans un futur proche ?&lt;&#x2F;h2&gt;
&lt;p&gt;On est encore loin d’une gestion correcte des liens dans un document, puisque &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;~colcombe&#x2F;knowledge_en.html&quot;&gt;knowledge&lt;&#x2F;a&gt; n’unifie pas les citation bibliographiques, les liens externes, et les liens internes. S’il propose de s’interfacer avec la librairie &lt;a href=&quot;https:&#x2F;&#x2F;www.ctan.org&#x2F;pkg&#x2F;cleveref&quot;&gt;cleveref&lt;&#x2F;a&gt;, cela reste une manière très simpliste d’exprimer la position d’une connaissance dans le document. De plus, le système de connaissances fonctionne en vase clos: dans le document final comme dans ses métadonnées, rien n’existe pour permettre l’exploration des liens.&lt;&#x2F;p&gt;
&lt;p&gt;En conclusion, le paquet &lt;a href=&quot;https:&#x2F;&#x2F;www.irif.fr&#x2F;~colcombe&#x2F;knowledge_en.html&quot;&gt;knowledge&lt;&#x2F;a&gt; possède un énorme potentiel en terme d’écriture collaborative, de rédaction de documents volumineux, et même de création de graphes de connaissances. Reste à savoir comment le faire évoluer vers une solution complète au problème posé. Avec un peu de chance, il y aura bientôt un nouveau billet de blog sur les avancées développées avec Thomas…&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>De l’emploi des docteurs dans les administrations publiques</title>
        <published>2021-11-21T00:00:00+00:00</published>
        <updated>2021-11-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/docteurs-administrations/"/>
        <id>https://aliaume.fr/site/posts/docteurs-administrations/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/docteurs-administrations/">&lt;p&gt;Dans le courant de l’année 2021 j’ai fondé avec Gaëtan Douéneau et Laurent Prosperi l’Initiative Docteurs et Administrations (IDeA) dont l’objectif est de cartographier l’emploi et le recrutement des docteurs au sein du public hors académique, toute discipline confondue. Nos questions étaient extrêmement simples&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Que font les #docteurs qui rejoignent l’#administration publique ?&lt;&#x2F;li&gt;
&lt;li&gt;Et comment sont-ils recrutés ?&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ce questionnement est venu de nos expériences personnelles et d’un chiffre : &lt;strong&gt;plus de 18 000 docteurs sont employés dans le secteur public, hors postes de recherche, enseignement ou praticiens&lt;&#x2F;strong&gt; d’après l’Enquête emploi en continu de l’INSEE. Corroboré par le suivant: &lt;strong&gt;19%&lt;&#x2F;strong&gt; des docteurs diplômés en 2014 travaillent dans le public hors académique 3 ans après leur soutenance de thèse.&lt;&#x2F;p&gt;
&lt;p&gt;Plus qu’un long discours, je vous invite donc à consulter le &lt;a href=&quot;&#x2F;ressources&#x2F;docteurs-admin.pdf&quot;&gt;rapport sur l’emploi des docteurs dans l’administration&lt;&#x2F;a&gt; à consommer et partager sans modération.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Retour d’expérience sur le projet EIG</title>
        <published>2021-11-14T00:00:00+00:00</published>
        <updated>2021-11-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/retour-eig/"/>
        <id>https://aliaume.fr/site/posts/retour-eig/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/retour-eig/">&lt;p&gt;Il fallait bien faire un jour une rétrospective sur l’utilisation du dispositif de césure de thèse pour travailler dans une administration publique sur un poste non académique. Avant de se lancer, fixons un peu les termes, j’utilise le terme « publique hors académique » pour désigner les postes ouverts avec un &lt;em&gt;contrat de droit public&lt;&#x2F;em&gt; mais dont les missions ne sont pas des missions de &lt;em&gt;recherche&lt;&#x2F;em&gt; ni &lt;em&gt;d’enseignement&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quelques-rappels-sur-la-césure&quot;&gt;Quelques rappels sur la césure&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;les-dispositifs-de-césure&quot;&gt;Les dispositifs de césure&lt;&#x2F;h3&gt;
&lt;p&gt;La césure de thèse suit les mêmes règles que les césures universitaires ; c’est une période durant laquelle le doctorant cesse ses activités de recherche et n’est plus intégré à son unité de recherche. Sa durée est au minimum d’un semestre et elle est limitée à deux semestres consécutifs. Le point de départ pour vos recherches documentaires sur la césure se trouve sur &lt;a href=&quot;https:&#x2F;&#x2F;www.enseignementsup-recherche.gouv.fr&#x2F;pid34333&#x2F;la-cesure.html&quot;&gt;le site officiel du gouvernement&lt;&#x2F;a&gt;. Il faudra donc trouver une activité sur les dates des semestres universitaires, raisonnablement sur une année complète: de septembre à septembre. Selon les établissements, la césure ne peut être demandée au cours de la 1ère année de thèse, ni postérieurement à la durée de référence de la thèse fixée par les textes (après la 3ème année en cas de thèse « à temps plein », après la 6éme année en cas de thèse « à temps partiel »).&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;La durée de la césure n’est pas comptabilisée dans la durée de la thèse&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;une-grande-variabilité-de-mise-en-place&quot;&gt;Une grande variabilité de mise en place&lt;&#x2F;h3&gt;
&lt;p&gt;Afin de bénéficier de ce dispositif, les procédures varient selon les écoles doctorales, comme celle de &lt;a href=&quot;https:&#x2F;&#x2F;www.universite-paris-saclay.fr&#x2F;sites&#x2F;default&#x2F;files&#x2F;media&#x2F;2020-01&#x2F;cadrage-cesure-upsaclay.pdf&quot;&gt;Paris-Saclay&lt;&#x2F;a&gt;, celle de &lt;a href=&quot;http:&#x2F;&#x2F;doctorat.univ-lorraine.fr&#x2F;sites&#x2F;default&#x2F;files&#x2F;user&#x2F;etre-doctorant&#x2F;c%C3%A9sure&#x2F;Fiche%20de%20Proc%C3%A9dure%20d%C3%A9taill%C3%A9e%20-%20C%C3%A9sure.pdf&quot;&gt;l’Université de Lorraine&lt;&#x2F;a&gt; ou celle de &lt;a href=&quot;https:&#x2F;&#x2F;www.u-bordeaux.fr&#x2F;content&#x2F;download&#x2F;112067&#x2F;840336&#x2F;version&#x2F;2&#x2F;file&#x2F;CESURE%202021-22_dossier%20candidature%20DOCTORAT.pdfCTORAT.pdf&quot;&gt;l’Université de Bordeaux&lt;&#x2F;a&gt;. Il est aisé de voir les variations dans les dossiers selon l’université. En particulier, il faut absolument se renseigner sur les dates de dépôt de projet de césure ; malgré cet avertissement, il faut aussi savoir que le nombre de projets de doctorants étant assez faible, il est parfois envisageable de contacter directement votre école doctorale pour valider un projet « en dehors des dates limites ».&lt;&#x2F;p&gt;
&lt;h3 id=&quot;que-faire-pendant-une-césure&quot;&gt;Que faire pendant une césure ?&lt;&#x2F;h3&gt;
&lt;p&gt;Une liste non exhaustive se construit en regardant le site du gouvernement ; j’ai sélectionné ceux qui permettent de travailler dans le secteur public ou des associations car ce sont les moins connus.&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Un Service Civique ;&lt;&#x2F;li&gt;
&lt;li&gt;Un volontariat au sein du corps européen de solidarité ;&lt;&#x2F;li&gt;
&lt;li&gt;Un volontariat international en administration (VIA) ;&lt;&#x2F;li&gt;
&lt;li&gt;Un volontariat de solidarité internationale (VSI).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Il faudra noter que votre projet sera à défendre devant votre école doctorale et va mener à des race conditions c’est-à-dire des phénomènes de concurrence entre les procédures administratives de votre école doctorale et celles de votre potentielle activité lors de la césure. La plus connue et la plus simple est dans le cadre d’un contrat (CDD&#x2F;CDI) : votre projet de césure nécessite une forme d’attestation de la part de l’employeur, et votre employeur demande un certificat pour votre césure de thèse. Il faudra échanger les promesses et rester en contact permanent avec les différentes parties pour mener les dossiers à terme.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mon-expérience-personnelle&quot;&gt;Mon expérience personnelle&lt;&#x2F;h2&gt;
&lt;p&gt;J’ai effectué une césure avec l’École Doctorale STIC de l’Université Paris-Saclay pour une durée d’un an ; durant cette césure j’ai été employé 10 mois en CDD par l’Autorité de Sûreté Nucléaire par le truchement du programme Entrepreneur d’Intérêt Général (EIG).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;un-projet-intégré-au-sein-dune-administration&quot;&gt;Un projet intégré au sein d’une administration&lt;&#x2F;h3&gt;
&lt;p&gt;J’ai été recruté en 2020 sur le projet SIANCE porté par l’ASN, en collaboration avec un &lt;em&gt;data scientist&lt;&#x2F;em&gt;. Dans cette équipe restreinte encadrée par deux membres de l’ASN, nous avions pour mission de valoriser la connaissance du terrain produite par les inspecteurs. Il s’agissait d’abord d’agréger, de croiser et de consolider les données produites par les inspections, puis de proposer un accès à ces informations pour tous les inspecteurs. La taille limitée de l’équipe et son statut exceptionnel au sein de l’administration ont facilité un développement rapide. Au contact direct avec les utilisateurs, nous avons mis en place un outil sur mesure, utilisant des techniques de l’état de l’art pour le traitement du langage naturel. L’ASN ne recrute pas ordinairement de développeurs et fait appel à des services de prestation pour ses besoins numériques. Dans ce cas les inspecteurs sont rarement placés au centre du développement de l’outil et ont parfois l’impression que celui-ci va alourdir leur processus d’inspection.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;réception-dun-docteur&quot;&gt;Réception d’un docteur&lt;&#x2F;h3&gt;
&lt;p&gt;Dans notre cas, l’immersion de l’équipe dans l’ASN et le crédit apporté par le statut de doctorant ont créé une confiance dans l’outil, difficile à obtenir par d’autres moyens. À mon avis, l’utilisation par l’administration de contrats courts à des fins de modernisation se couple particulièrement bien avec une césure de thèse.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;réflexions-sur-la-césure-de-thèse&quot;&gt;Réflexions sur la césure de thèse&lt;&#x2F;h2&gt;
&lt;p&gt;La césure de thèse est un dispositif qui est relativement peu étudié&#x2F;mis en avant par les universités et écoles doctorales, alors qu’il fournit un outil alternatif aux contrats CIFRE (lorsque ceux-ci sont seulement possibles) dans laquelle l’intégralité du temps de l’agent est consacré aux besoins d’une administration.&lt;&#x2F;p&gt;
&lt;p&gt;Pour le doctorant, c’est une opportunité d’ouverture en dehors de son sujet de thèse et même de la recherche académique. Néanmoins, ceci n’est pas sans contrepartie, il est strictement &lt;em&gt;impossible&lt;&#x2F;em&gt; d’effectuer un travail de recherche en parallèle d’une activité salariée à temps plein. De la même manière, une telle expérience &lt;em&gt;hors-recherche&lt;&#x2F;em&gt; sera difficilement valorisable dans les carrières de recherche.&lt;&#x2F;p&gt;
&lt;p&gt;On constate alors une tension entre la volonté d’insérer les docteurs sur le marché du travail, ce dont année d’immersion a définitivement le potentiel, et préserver la formation &lt;em&gt;par la recherche, pour la recherche&lt;&#x2F;em&gt; dédiée au système académique.&lt;&#x2F;p&gt;
&lt;p&gt;Le dispositif de césure crée naturellement un pont entre l’administration d’accueil et le laboratoire du doctorant, au moins lorsque celui-ci y retourne et partage son expérience ; mais ce gain est à mettre en comparaison avec le besoin vital d’un personnel doctorant au sein des universités pour assurer les missions d’enseignement. Il est donc extrêmement peu probable que ce processus se généralise dans les années à venir.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>On the word topology, and beyond</title>
        <published>2020-09-23T00:00:00+00:00</published>
        <updated>2020-09-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/word-topology-and-beyond/"/>
        <id>https://aliaume.fr/site/posts/word-topology-and-beyond/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/word-topology-and-beyond/">&lt;p&gt;Ce n’est pas une surprise au vu du titre de ma thèse que je m’intéresse aux &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Well-quasi-ordering&quot;&gt;beaux préordres&lt;&#x2F;a&gt; et leurs applications en informatique, plus particulièrement en théorie des modèles finis. Dans ma recherche, je me suis assez rapidement tourné vers la notion topologique associée, celle &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Espace_noeth%C3%A9rien&quot;&gt;d’espace Noethérien&lt;&#x2F;a&gt; plus adaptée à mes travaux. C’est peut-être aussi parce que &lt;a href=&quot;http:&#x2F;&#x2F;www.lsv.fr&#x2F;~goubault&#x2F;&quot;&gt;Jean Goubault-Larrecq&lt;&#x2F;a&gt;, un de mes directeurs de thèse, a fait son cheval de bataille de transposer les résultats sur les beaux préordres aux espaces Noethériens que ce soit &lt;a href=&quot;http:&#x2F;&#x2F;www.lsv.ens-cachan.fr&#x2F;Publis&#x2F;PAPERS&#x2F;PDF&#x2F;JGL-lics07.pdf&quot;&gt;pour en mimer les constructions&lt;&#x2F;a&gt; ou &lt;a href=&quot;http:&#x2F;&#x2F;www.lsv.fr&#x2F;Publis&#x2F;PAPERS&#x2F;PDF&#x2F;JGL-icalp10.pdf&quot;&gt;identifier les similarités d’applications&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-topologie-sous-mot&quot;&gt;La topologie sous mot&lt;&#x2F;h2&gt;
&lt;p&gt;Une des constructions fondamentales dans la théorie des beaux préordres est la construction du préordre &lt;em&gt;sous-mot&lt;&#x2F;em&gt; qui se trouve être un beau préordre grâce au Lemme de Higman. Dans &lt;a href=&quot;https:&#x2F;&#x2F;projects.lsv.ens-cachan.fr&#x2F;topology&#x2F;?page_id=2735&quot;&gt;ce billet de blog&lt;&#x2F;a&gt; nous explorons avec Jean une manière originale d’aborder la construction d’une topologie sur les mots finis, et généralisons l’approche au cas des mots infinis.&lt;&#x2F;p&gt;
&lt;p&gt;Avant de lire cet article, quelques points à garder en tête&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Lorsqu’on veut généraliser une construction de préordre à une construction topologique, un critère de correction est que le &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Specialization_(pre)order&quot;&gt;préordre de spécalisation&lt;&#x2F;a&gt; coincide. Néanmoins, c’est une condition extrêmement faible, et il existe un grand nombre de topologies possibles.&lt;&#x2F;li&gt;
&lt;li&gt;Il existe un grand nombre de topologies Noethériennes possibles sur un ensemble, et &lt;em&gt;a priori&lt;&#x2F;em&gt;, il n’y en a pas une unique &lt;em&gt;plus fine que toutes les autres&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;La construction en utilisant des pré-ordres &lt;em&gt;ne fonctionne pas&lt;&#x2F;em&gt; sur les mots infinis. C’est donc un résultat surprenant lorsque la généralisation aux espaces topologiques permet de capturer le cas des mots finis.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ce billet de blog sert donc à donner une manière systématique de définir &lt;em&gt;uniquement&lt;&#x2F;em&gt; une topologie sur des mots qui coincide avec toutes les constructions qui nous intéressent, et qui donne systématiquement un espace Noethérien.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-petit-mot-sur-la-méthodologie&quot;&gt;Un petit mot sur la méthodologie&lt;&#x2F;h2&gt;
&lt;p&gt;Le billet de blog reste factuel et propose la solution technique toute prête, mais on peut se demander comment et pourquoi une telle approche a pu émerger. De mon côté, cela commence par la lecture d’un &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2003.02714&quot;&gt;article sur le gap embedding&lt;&#x2F;a&gt;. Sans rentrer dans des détails peu intéressants, l’article étant particulièrement technique, l’idée est de retrouver &lt;em&gt;naturellement&lt;&#x2F;em&gt; les constructions de Higman, Kruskal et Friedman. L’idée simple étant de remarquer que l’ensemble des mots est construit de manière inductive à partir d’un simple produit, et que l’ensemble des arbres est défini de manière inductive à partir des mots… Alors pourquoi ne pas construire dans le même temps leurs topologies ?&lt;&#x2F;p&gt;
&lt;p&gt;Cette idée pose de nombreux problèmes, et une manière d’éviter les problèmes de définitions cycliques est de s’inspirer de ce qui est fait tous les jours dans les langages de programmation: ce n’est pas parce que notre représentation concrète possède une certaine forme que notre interface présentée au monde extérieur doit permettre d’accéder à &lt;em&gt;toute&lt;&#x2F;em&gt; l’information. Ainsi, on peut construire l’espace des mots de manière classique, mais décider des moyens d’interaction avec ces mots.&lt;&#x2F;p&gt;
&lt;p&gt;Plus concrètement, alors que l’article qui a inspiré cette recherche s’efforce d’intégrer &lt;em&gt;dans la construction de l’espace&lt;&#x2F;em&gt; les contraintes sur la manipulation des mots, on peut s’affranchir de cette construction en posant &lt;em&gt;a posteriori&lt;&#x2F;em&gt; une topologie en utilisant certains &lt;em&gt;destructeurs&lt;&#x2F;em&gt;. Cette méthode est particulièrement efficace pour deux raisons&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;La forme même des destructeurs fait que l’on peut construire la topologie la plus grossière qui rend ces destructeurs continus. Cela donne une notion de canonicité.&lt;&#x2F;li&gt;
&lt;li&gt;Ces destructeurs apparaissent &lt;em&gt;naturellement&lt;&#x2F;em&gt; dans les preuves par mauvaise séquence minimale.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Pour moins de blabla et plus de résultats, il ne vous reste plus qu’à &lt;a href=&quot;https:&#x2F;&#x2F;projects.lsv.ens-cachan.fr&#x2F;topology&#x2F;?page_id=2735&quot;&gt;lire l’article&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Présentation du LSV pour la rentrée du département info</title>
        <published>2019-09-12T00:00:00+00:00</published>
        <updated>2019-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/presentationlsv/"/>
        <id>https://aliaume.fr/site/posts/presentationlsv/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/presentationlsv/">&lt;h2 id=&quot;contexte&quot;&gt;Contexte&lt;&#x2F;h2&gt;
&lt;p&gt;Tous les ans, &lt;a href=&quot;http:&#x2F;&#x2F;lsv.fr&quot;&gt;le Laboratoire de Spécification et Vérification&lt;&#x2F;a&gt; organise une journée “portes ouvertes” pour les étudiants de L3 de l’École Normale Supérieure Paris-Saclay. Étant doctorant dans cet établissement depuis peu, j’ai été chargé de produire une petite présentation de 15 à 20 minutes. Cette présentation a pour but de présenter le laboratoire, mais aussi l’informatique théorique en général, car c’est un sujet peu ou pas abordé en CPGE.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;la-présentation&quot;&gt;La présentation&lt;&#x2F;h2&gt;
&lt;p&gt;Une première question est : quel sujet choisir ? Bien entendu, il faut quelque chose d’abordable pour des non-informaticiens, mais aussi un domaine qui possède assez de contenu pour présenter des parties très différentes de l’informatique et du laboratoire.&lt;&#x2F;p&gt;
&lt;p&gt;Le choix d’une de mes collègues a été le λ-calcul, ce qui est très judicieux car il est à la fois très simple à définir, mais donne lieu à d’innombrables questions dont certaines sont des sujets actuels de recherche.&lt;&#x2F;p&gt;
&lt;p&gt;Pour ma part, j’ai décidé de prendre un problème très simple, SAT. En effet, la logique est quelque chose d’omniprésent en informatique, et le problème SAT joue le rôle du λ-calcul : assez facile à décrire, mais se trouve être compliqué à étudier.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-lien&quot;&gt;Le lien&lt;&#x2F;h2&gt;
&lt;p&gt;Sans l’orateur, une présentation est beaucoup moins pertinente, mais vous pouvez tout de même trouver les diapositives &lt;a href=&quot;..&#x2F;ressources&#x2F;these&#x2F;Pres%20LSV&#x2F;presentation.pdf&quot;&gt;par ici&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Rapport sur le Master Parisien de Recherche en Informatique</title>
        <published>2019-09-12T00:00:00+00:00</published>
        <updated>2019-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/rapport/"/>
        <id>https://aliaume.fr/site/posts/rapport/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/rapport/">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;J’ai suivi, tout comme Gaëtan Douéneau, les cours du Master Parisien de Recherche en Inforamtique. Tout comme de nombreux élèves, nous avions perçu de manière instinctive une organisation implicite dans le master, tant du point de vue des cours que du master dans sa globalité. Avec pour objectif de rendre explicites les parcours des étudiants, les contraintes entre les cours et les attentes des élèves vis-à-vis des cours, nous avons donc écrit un rapport.&lt;&#x2F;p&gt;
&lt;p&gt;Dans ce rapport, nous tâchons d’analyser la structure du MPRI. Nous avons le double objectif d’adresser ces observations à la fois aux futurs élèves, pour les éclairer sur leur orientation, ainsi qu’aux responsables du MPRI, afin de contribuer à son évolution.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;avertissement&quot;&gt;Avertissement&lt;&#x2F;h2&gt;
&lt;p&gt;Ce rapport est le fruit d’une initiative personnelle de la part des étudiants, et n’engage en aucun cas les organisateurs et enseignants du MPRI, qu’il s’agisse des observations, des témoignages, ou des recommandations.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-rapport&quot;&gt;Le rapport&lt;&#x2F;h2&gt;
&lt;p&gt;Vous pouvez trouver un lien vers le rapport “officiel” &lt;a href=&quot;&#x2F;ressources&#x2F;rapport.pdf&quot;&gt;à cette adresse&lt;&#x2F;a&gt;. Pour toute requête ou modification, un git est ouvert, pour l’instant &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.crans.org&#x2F;alopez&#x2F;agreg&#x2F;tree&#x2F;master&#x2F;Rapport%20MPRI&quot;&gt;ici&lt;&#x2F;a&gt;, mais un répertoire dédié sera crée sous peu.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Médiation scientifique</title>
        <published>2019-09-03T00:00:00+00:00</published>
        <updated>2019-09-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/astuces-copie/"/>
        <id>https://aliaume.fr/site/posts/astuces-copie/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/astuces-copie/">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;Vous avez fait un stage sur un sujet technique ? Vous avez trouvé un résultat intéressant dans un domaine scientifique ? Ce n’est que la première étape. Voici quelques conseils pour réaliser une bonne médiation de votre travail. Que ce soit pour une présentation (conférence, séminaire) ou pour un rapport (article, rapport de stage, journal) il y a un état d’esprit qui va augmenter significativement la qualité des supports que vous produisez.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;une-règle-dor&quot;&gt;Une règle d’or&lt;&#x2F;h3&gt;
&lt;p&gt;L’idée essentielle est à la fois très simple et pourtant mal comprise par un grand nombre: il faut produire une présentation pour un &lt;em&gt;public&lt;&#x2F;em&gt; et non pas &lt;em&gt;pour soi même&lt;&#x2F;em&gt;. C’est à contrecœur qu’une majorité de personnes vont simplifier leurs résultats, ou passer sous silence une grande partie de leur travail afin de mieux transmettre le résultat principal de leur travail.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;technique-tu-vas-mourir&quot;&gt;Technique tu vas mourir&lt;&#x2F;h3&gt;
&lt;p&gt;Si vous présentez à un groupe de scientifiques expérimentés, les détails techniques n’importent pas puisqu’ils sont a priori capables de les inférer. Si vous présentez à un groupe qui ne travaille pas dans votre domaine d’expertise, les détails techniques n’importent pas, puisqu’ils ne seront pas compris par l’audience.&lt;&#x2F;p&gt;
&lt;p&gt;Il est particulièrement dur de faire cet effort d’humilité consistant à &lt;em&gt;trivialiser&lt;&#x2F;em&gt; son travail. En effet, on peut vouloir partager la difficulté, le côté fantastique du travail théorique qui a mené aux résultats. Néanmoins, à quelques exceptions près, ce n’est jamais une idée brillante.&lt;&#x2F;p&gt;
&lt;p&gt;Voici un exemple qui s’applique aux présentations orales: ne &lt;em&gt;jamais&lt;&#x2F;em&gt; donner de définition formelle. Au contraire, illustrer la définition sur un exemple assez simple pour être compris, et assez complexe pour donner une intuition de la notion. Une diapositive qui s’affiche plus d’une minute est une erreur, et la compréhension d’une définition formelle demande en général plus d’une minute. En effet, l’esprit humain semble particulièrement mauvais à la spécialisation d’une définition à un exemple. En revanche, il est tout à fait adapté à la généralisation: à partir d’un exemple, on fait transparaître une intuition qui donnera non seulement la satisfaction de comprendre à votre auditoire, mais aussi une référence qui restera durant toute la présentation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;connaître-son-auditoire&quot;&gt;Connaître son auditoire&lt;&#x2F;h3&gt;
&lt;p&gt;S’il est nécessaire d’adapter le format et le contenu aux groupes lecteurs (jury, pairs, élèves), il est tout aussi nécessaire de le spécialiser pour les &lt;em&gt;individus&lt;&#x2F;em&gt; composant ces groupes. Ainsi, savoir quels sont les métiers d’un jury ainsi que leurs centres d’intérêt permet plusieurs choses&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Anticiper les questions spécifiques, et avoir du recul sur celles-ci&lt;&#x2F;li&gt;
&lt;li&gt;Préparer des exemples ou des accroches pour captiver spécifiquement cette personne&lt;&#x2F;li&gt;
&lt;li&gt;Montrer que cette présentation est &lt;em&gt;personnalisée&lt;&#x2F;em&gt;, ce qui plaît bien sûr énormément&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;préparer-des-accroches&quot;&gt;Préparer des accroches&lt;&#x2F;h3&gt;
&lt;p&gt;Ce qui vous intéresse, c’est la preuve (sic). Mais ce qui intéresse les autres, ce n’est sûrement pas ça. Et c’est encore moins le fait de vous entendre pendant une vingtaine de minutes expliquer à quel point le domaine est complexe et vaste. Cela transmet en effet l’impression d’un flou &lt;em&gt;volontaire&lt;&#x2F;em&gt;, qui brise le lien de confiance avec l’auditoire.&lt;&#x2F;p&gt;
&lt;p&gt;Cela ne veut pas dire qu’il ne faut pas présenter quelque chose qui vous tient à cœur, au contraire. En revanche, cela veut dire qu’il faut trouver un moyen pour que l’audience aussi, prenne ce sujet à cœur. Cela se fait typiquement par des phrases orales comme « je vais vous expliquer à quoi cela peut &lt;em&gt;vous&lt;&#x2F;em&gt; servir », « à la fin de cette présentation &lt;em&gt;vous&lt;&#x2F;em&gt; serez capable de » etc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bien-contextualiser-son-travail&quot;&gt;Bien contextualiser son travail&lt;&#x2F;h3&gt;
&lt;p&gt;L’idéal, c’est d’avoir un tableau avec « avant &#x2F; après ». La conclusion doit montrer que vous avez produit quelque chose &lt;em&gt;en rapport avec l’état de l’art&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;un-outil-est-un-outil&quot;&gt;Un outil est un outil&lt;&#x2F;h3&gt;
&lt;p&gt;Très souvent on ressent l’envie d’utiliser un outil qui est &lt;em&gt;tendance&lt;&#x2F;em&gt;, néanmoins cela ne justifie pas une ouverture ou pire encore un travail de recherche. Ré-écrire des programmes fonctionnant déjà dans un langage différent sans espoir d’y gagner autre chose qu’une base de code dupliquée est malheureusement quelque chose de courant dans l’informatique pratique, et qui gagne parfois l’informatique théorique.&lt;&#x2F;p&gt;
&lt;p&gt;Toujours justifier &lt;em&gt;pourquoi&lt;&#x2F;em&gt; cela serait intéressant d’utiliser cet outil.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;une-conclusion-digne-de-ce-nom&quot;&gt;Une conclusion digne de ce nom&lt;&#x2F;h3&gt;
&lt;p&gt;Il ne faut jamais terminer sur un simple « j’ai terminé ». Au contraire, il faut être plus engageant, en remerciant explicitement l’auditoire et en ajoutant une phrase comme: « j’espère que cela vous a convaincu de la pertinence de mon approche ». Celle-ci est très générique, mais en la personnalisant et en la liant à une introduction spécifique cela devient beaucoup plus puissant.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;une-image-vaut-mille-mots&quot;&gt;Une image vaut mille mots&lt;&#x2F;h3&gt;
&lt;p&gt;L’esprit humain est particulièrement adapté pour la reconnaissance de visages. Si possible, quand vous parlez de quelqu’un, mettre une petite image à côté.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gardez-une-cohérence-dans-les-notations&quot;&gt;Gardez une cohérence dans les notations&lt;&#x2F;h3&gt;
&lt;p&gt;C’est particulièrement important pour le côté formel, mais aussi sur le point de vue visuel. Ne changez pas d’orientation sur les diagrammes, gardez toujours une même notion associée aux points cardinaux.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;les-diapositives-ne-sont-pas-le-produit&quot;&gt;Les diapositives ne sont pas le produit&lt;&#x2F;h3&gt;
&lt;p&gt;Contrairement à un rapport ou à un article, devant lesquels le lecteur est seul, une présentation est animée par vos soins. C’est &lt;em&gt;vous&lt;&#x2F;em&gt; la présentation. Les diapositives doivent servir de support visuel pour &lt;em&gt;illustrer&lt;&#x2F;em&gt; des concepts qui sont mal décrits par un langage trop linéaire et&#x2F;ou ambigu.&lt;&#x2F;p&gt;
&lt;p&gt;En particulier, ne &lt;em&gt;jamais&lt;&#x2F;em&gt; mettre trop de texte dans des diapositives, cela vous forcera à les lire, et donnera quelque chose de saccadé et ennuyeux.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;raconter-une-histoire-cohérente&quot;&gt;Raconter une histoire cohérente&lt;&#x2F;h3&gt;
&lt;p&gt;C’est la clef pour avoir une diction fluide et ne pas perdre l’auditoire (ni soi même). Durant l’élaboration de la présentation, écrire sur un papier les points principaux de votre histoire. Comme toute histoire elle commence par un contexte: « il était une fois ». Par la suite, on décrit quelques personnages, et très vite on arrive à un élément déclencheur: « mais ceci ne fonctionne pas ». Là c’est une péripétie qui suit: votre travail. Il peut y avoir des histoires plus ou moins complexes. Le tout est que sur un papier, les points principaux, dénués de toute techniques, semblent cohérents.&lt;&#x2F;p&gt;
&lt;p&gt;Après avoir écrit sur ce papier, un exercice intéressant est de le cacher, et raconter l’histoire. Assez vite, on se rend compte que certaines parties ne s’enchaînent pas logiquement: c’est ce qui fait que certains orateurs semblent « redécouvrir » leurs diapositives, elles ne s’enchainent pas logiquement et donc ils sont surpris, et doivent apprendre par cœur leur ordre.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Catégories Cartésiennes Closes</title>
        <published>2019-02-01T00:00:00+00:00</published>
        <updated>2019-02-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/funprog-ccc/"/>
        <id>https://aliaume.fr/site/posts/funprog-ccc/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/funprog-ccc/">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;Dans le cadre du cours de programmation fonctionnelle au MPRI dont on peut trouver la description &lt;a href=&quot;https:&#x2F;&#x2F;wikimpri.dptinfo.ens-cachan.fr&#x2F;doku.php?id=cours:c-2-4-2&quot;&gt;ici&lt;&#x2F;a&gt; j’ai fait une présentation sur les catégories cartésiennes closes. Bien sûr, c’est l’occasion rêvée pour produire des &lt;a href=&quot;&#x2F;ressources&#x2F;scolaire&#x2F;M2&#x2F;funprog-01-02-2019-ccc.pdf&quot;&gt;slides&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;le-thème-graphique&quot;&gt;Le thème graphique&lt;&#x2F;h3&gt;
&lt;p&gt;Les slides ont été préparées avec le magnifique thème &lt;code&gt;Metropolis&lt;&#x2F;code&gt; que l’on peut trouver à &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matze&#x2F;mtheme&quot;&gt;cette adresse&lt;&#x2F;a&gt;. Sous les conseils avisés de Mickaël Laurent et grâce à &lt;a href=&quot;https:&#x2F;&#x2F;coolors.co&quot;&gt;ce générateur de palettes&lt;&#x2F;a&gt; je suis arrivé à quelque chose de ce genre : &lt;span style=&quot;width:1em; height:0.8em; background-color: #5A0001; display: inline-block&quot;&gt;&lt;&#x2F;span&gt; &lt;span style=&quot;width:1em; height:0.8em; background-color: #CA3C25; display: inline-block&quot;&gt;&lt;&#x2F;span&gt; &lt;span style=&quot;width:1em; height:0.8em; background-color: #EEC170; display: inline-block&quot;&gt;&lt;&#x2F;span&gt; &lt;span style=&quot;width:1em; height:0.8em; background-color: #355829; display: inline-block&quot;&gt;&lt;&#x2F;span&gt;. Cela part de l’idée qu’un thème de couleur est très souvent froid pour les présentations, alors qu’une palette de type « Noël » est beaucoup plus engageante.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;résumé-de-la-présentation&quot;&gt;Résumé de la présentation&lt;&#x2F;h3&gt;
&lt;p&gt;Les slides contiennent deux parties, une première sur les catégories cartésiennes closes, et une seconde sur la notion de Foncteur et de Monade, qui n’a pas été présentée, mais qui a pour vocation d’aider à la compréhension des concepts pour les curieux qui voudraient avancer sur le cours.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;les-catégories-comme-une-présentation-extentionnelle&quot;&gt;Les catégories comme une présentation extentionnelle&lt;&#x2F;h4&gt;
&lt;p&gt;Les catégories, c’est surtout un vocabulaire, et le seul intérêt d’introduire un nouveau vocabulaire c’est qu’il puisse exprimer des concepts plus aisément. La présentation sous forme de catégories rejoint ainsi la vague des &lt;em&gt;pointless-things&lt;&#x2F;em&gt; &lt;a href=&quot;https:&#x2F;&#x2F;fr.wikipedia.org&#x2F;wiki&#x2F;Logique_combinatoire&quot;&gt;SKI&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pointless_topology&quot;&gt;pointless topology&lt;&#x2F;a&gt;, et même dans une certaine mesure &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Homotopy_type_theory&quot;&gt;HOTT&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;La vision &lt;em&gt;extentionnelle&lt;&#x2F;em&gt; à opposer à une vision &lt;em&gt;intentionnelle&lt;&#x2F;em&gt; va considérer non pas des constructions explicites d’objets, mais la manière dont on peut &lt;em&gt;interagir&lt;&#x2F;em&gt; avec les dits objets.&lt;&#x2F;p&gt;
&lt;p&gt;Un exemple serait celui des variables aléatoires, qui permettent de modéliser beaucoup de choses sans &lt;em&gt;jamais&lt;&#x2F;em&gt; évoquer l’espace probabilisé sous-jacent (qui joue ici le rôle de “points”). La seule chose nécessaire est bien entendu de démonter l’existence d’au moins un espace probabilisé qui permet de construire les variables aléatoires qui nous intéressent… Mais une fois cela fait, on peut l’oublier complètement. Ce que l’on pourrait traduire : une fois qu’on a montré que nos axiomes ne sont pas incohérents, on peut travailler axiomatiquement sans considérer un modèle particulier.&lt;&#x2F;p&gt;
&lt;p&gt;Une telle approche va avoir des conséquences&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Il va très naturellement être &lt;em&gt;beaucoup plus simple&lt;&#x2F;em&gt; d’utiliser les objets&lt;&#x2F;li&gt;
&lt;li&gt;Il faudra être très attentif aux définitions posées qui ne sont plus des &lt;em&gt;constructions&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Tout théorème qui va utiliser une catégorie particulière devra d’abord vérifier que cette catégorie est bien un modèle des théories qui nous intéressent.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Le point 3 peut sembler rédhibitoire, en effet, si on doit montrer que notre catégorie est bien un modèle, on peut croire qu’il serait plus intéressant de directement travailler dans ce modèle qui nous intéresse. Néanmoins, il y a deux choses à prendre en compte (et qui vont toutes deux apparaître dans la présentation).&lt;&#x2F;p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Le fait d’axiomatiser permet de &lt;em&gt;factoriser&lt;&#x2F;em&gt; des résultats non triviaux, et parfois donner des intuitions plus profonde sur ce qui se passe dans notre modèle particulier&lt;&#x2F;li&gt;
&lt;li&gt;Une majorité des théorèmes sont de la forme « si X est une catégorie qui vérifie A alors … ». Donc si on reste dans le langage des catégories, la vérification des modèles n’est pas nécessaire, ce travail n’est à produire qu’à l’interface avec un autre langage.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;le-produit-cartésien-et-les-constructions-dérivées&quot;&gt;Le produit cartésien et les constructions dérivées&lt;&#x2F;h4&gt;
&lt;p&gt;On commence par définir ce qu’est une propriété universelle sur l’exemple des listes. Les diapos sont normalement assez claires, néanmoins, puisque cela s’adresse à des personnes ayant fait de la programmation fonctionnelle, on peut aller un peu plus loin sur l’exemple des listes.&lt;&#x2F;p&gt;
&lt;p&gt;En effet, dans le cours de Didier Rémy il a été démontré l’équivalence suivante (au sens des programmes) entre ces deux types&lt;&#x2F;p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;&lt;pre class=&quot;sourceCode ocaml&quot;&gt;&lt;code class=&quot;sourceCode ocaml&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;#cb1-1&quot; aria-hidden=&quot;true&quot; tabindex=&quot;-1&quot;&gt;&lt;&#x2F;a&gt;&amp;#39;a &lt;span class=&quot;dt&quot;&gt;list&lt;&#x2F;span&gt; === forall b. (b -&amp;gt; &amp;#39;a -&amp;gt; b) -&amp;gt; b -&amp;gt; b&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;&#x2F;div&gt;
&lt;p&gt;Si on regarde un peu plus attentivement le type de droite, on reconnaît quelque part la fonction &lt;code&gt;fold&lt;&#x2F;code&gt;. L’équivalence se retraduit ainsi : « la donnée d’une liste est identique à la donnée d’une fonction qui calcule un &lt;code&gt;fold&lt;&#x2F;code&gt; sur cette liste ». C’est une présentation très catégorique… Un petit exercice est de retraduire cette égalité en terme de morphismes pour donner une définition &lt;em&gt;extentionnelle&lt;&#x2F;em&gt; des listes, et vérifier que &lt;code&gt;&#x27;a list&lt;&#x2F;code&gt; en est bien un modèle.&lt;&#x2F;p&gt;
&lt;p&gt;Une fois comprise cette manière de penser, la définition du produit cartésien devient assez naturelle. On observe que toutes les propriétés « évidentes » du produit usuel restent vraies avec la définition catégorique, même si celle-ci se généralise automatiquement à d’autres catégories (espaces vectoriels, groupes, etc).&lt;&#x2F;p&gt;
&lt;p&gt;Une petite remarque utile pour ceux qui suivent le projet de programmation du cours 2.4 au MPRI: les morphismes structurels d’oubli et de duplication correspondent aux règles structurelles sur les séquents. Certaines égalités de morphismes (que l’on peut voir comme des relations de ré-écriture) vont s’interpréter comme la duplication de variables ou le &lt;em&gt;weakening&lt;&#x2F;em&gt;, qui correspondent en quelque sorte à des étapes de β-réduction.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;objets-exponentiels&quot;&gt;Objets exponentiels&lt;&#x2F;h4&gt;
&lt;p&gt;Quelque chose manque cruellement à nos catégories cartésiennes, et c’est de pouvoir parler des fonctions. En effet, jusqu’à présent, les catégories sont sur plusieurs niveaux distincts: celui des objets, et celui des morphismes. Une manière de parler de transformation de morphismes serait d’introduire des « flèches de flèches » et d’aller vers les 2-catégories. Une autre manière de faire est d’injecter les morphismes dans des objets. Un objet qui représente un ensemble de morphismes est appelé « objet exponentiel » à cause de la notation ensembliste &lt;span class=&quot;math inline&quot;&gt;\(X^Y\)&lt;&#x2F;span&gt; pour représenter &lt;span class=&quot;math inline&quot;&gt;\(X \to Y\)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Une manière simple et efficace de définir un tel objet est d’utiliser les constructions très classiques en programmation de curryfication et dé-curryfication. En effet, on est capable de parler de morphismes de type &lt;span class=&quot;math inline&quot;&gt;\(A \times B \to C\)&lt;&#x2F;span&gt;, et une manière de définir &lt;span class=&quot;math inline&quot;&gt;\(C^B\)&lt;&#x2F;span&gt; serait de le caractériser par son interaction avec &lt;span class=&quot;math inline&quot;&gt;\(A \times B \to C\)&lt;&#x2F;span&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Une fois introduit ces objets, on peut interpréter le lambda-calcul simplement typé dans nos catégories cartésiennes closes par une méthode très simple. De plus, on montre aisément la propriété de &lt;em&gt;subject reduction&lt;&#x2F;em&gt;, à savoir, que l’interprétation d’un terme reste invariante sous β-réduction. Cette propriété se démontre bien, et met en exergue les équations utilisées sur les morphismes pour &lt;em&gt;simuler&lt;&#x2F;em&gt; la β-réduction dans notre catégorie.&lt;&#x2F;p&gt;
&lt;p&gt;En orientant ces égalités, on peut ainsi obtenir un système de ré-écriture qui va prendre une définition d’un morphisme (par composition, Δ, etc.) et le réduire jusqu’à un morphisme « sous forme normale », qui est en relation étroite avec la mise en forme normale des λ-termes du STLC.&lt;&#x2F;p&gt;
&lt;p&gt;C’est d’ailleurs ce qui est demandé dans le projet, à la tâche 4 de simplification des termes générés par le compilateur.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Premier Workshop ENSPS</title>
        <published>2018-12-22T00:00:00+00:00</published>
        <updated>2018-12-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            Aliaume Lopez
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://aliaume.fr/site/posts/premier-workshop/"/>
        <id>https://aliaume.fr/site/posts/premier-workshop/</id>
        
        <content type="html" xml:base="https://aliaume.fr/site/posts/premier-workshop/">&lt;h2 id=&quot;premiere-partie&quot;&gt;Première partie&lt;&#x2F;h2&gt;
&lt;p&gt;Présentée par Mickaël Laurent, sur les bonnes pratiques en sécurité.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;seconde-partie&quot;&gt;Seconde partie&lt;&#x2F;h2&gt;
&lt;p&gt;Présentée par Aliaume Lopez&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Une courte présentation des typeclasses de Haskell
avec beaucoup d&#x27;exemples de manière (je l&#x27;espère) à
bien comprendre.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;premier-workshop&#x2F;Typeclasses.pdf&quot;&gt;Slides&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;aliaume.fr&#x2F;site&#x2F;posts&#x2F;premier-workshop&#x2F;Typeclasses.hs&quot;&gt;Sources&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;En pratique il y a eu beaucoup de digressions vers des exemples
rigolos comme la construction de la liste infinie des nombres
de Fibonacci &lt;code&gt;fibs = 0 : 1 : 1 : zipWith (+) (tails fibs) fibs&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
