\documentclass{article}

\usepackage{amsfonts}

\usepackage[
   colorlinks=true,
   urlcolor=blue,
   linkcolor=blue,
   citecolor=violet
 ]{hyperref}
\usepackage[french=guillemets]{csquotes}
\usepackage{polyglossia}
\setmainlanguage{french}
\setotherlanguage[variant = uk]{english}

\usepackage{url}
\usepackage{mathpartir}
\usepackage{adjustbox}
\usepackage{multirow}

\usepackage{minted}
\setminted{
    encoding=utf8,
    fontsize=\small,
    breaklines,
    linenos,
    numbersep=.6em,
    autogobble,
    xleftmargin=1em
  }

\usepackage{tikz}
\definecolor{Aluminium1}{rgb}{0.93,0.93,0.92}
\definecolor{Aluminium2}{rgb}{0.82,0.84,0.81}
\definecolor{Aluminium3}{rgb}{0.73,0.74,0.71}
\definecolor{Aluminium4}{rgb}{0.53,0.54,0.52}
\definecolor{Aluminium5}{rgb}{0.33,0.34,0.32}
\definecolor{Aluminium6}{rgb}{0.18,0.20,0.21}

\tikzset{
	code node/.style = {
		rectangle,
		text centered,
		rounded corners = 3pt,
		minimum height = 1cm,
		minimum width = 2cm,
		top color = Aluminium1,
		bottom color = Aluminium2,
		draw = Aluminium3
	}
}

\usepackage[
   backend=biber,
   bibencoding=utf8,
   style=alphabetic,
   hyperref=true,
   % citestyle=authoryear-comp,
   backref=false,
   sortlocale=fr,
   url=true,
   doi=true,
   eprint=false,
   sorting=ynt,
   maxbibnames=8
 ]{biblatex}
\addbibresource{biblio.bib}

\usepackage{titling}

\newlength{\annee}
\settowidth{\annee}{9999--9999}

\newlength{\texte}
\setlength{\texte}{\textwidth} \addtolength{\texte}{-\annee} 
	\addtolength{\texte}{-2\tabcolsep}

\newenvironment{datecvsection}[1]%
               {\subsection*{#1}%
                 \noindent \begin{tabular}{@{}p{\annee}p{\texte}@{}}}
               {\end{tabular}}

\newenvironment{cvsection}[1]%
               {\subsection*{#1}}
               {}

\newenvironment{itemcvsection}[1]%
               {\subsection*{#1}\begin{itemize}}
               {\end{itemize}}

\usepackage[inline]{enumitem}
\makeatletter
% From http://tex.stackexchange.com/questions/51086/add-second-enumeration-item-on-the-same-line
\newcommand{\inlineitem}[1][]{%
\ifnum\enit@type=\tw@
    {\descriptionlabel{#1}}
  \hspace{\labelsep}%
\else
  \ifnum\enit@type=\z@
       \refstepcounter{\@listctr}\fi
    \qquad\@itemlabel\hspace{\labelsep}%
\fi}
\makeatother

\title{Dossier de candidature au poste de Maître de conférences}
\author{Martin Bodin}
\date{}

\begin{document}

\begin{titlepage}
   \vspace*{\stretch{1.0}}
   \begin{center}
      \Large\textbf{Dossier de candidature \\ au poste de Maître de conférences}\\
      \large\textit{Martin Bodin}
   \end{center}
   \vspace*{\stretch{2.0}}

Vous trouverez dans ce dossier les éléments suivants~:
\begin{itemize}
  \item Une description de mon parcours \dotfill \pageref{sec:cv}
  \item Une description de ma recherche \dotfill \pageref{sec:recherche}

    En particulier~:
    \begin{itemize}
      \item Une description du contexte de recherche \dotfill \pageref{sec:contexte}
      \item Une description des publications jointes \dotfill \pageref{sec:publications}
      \item Une liste de mes publications \dotfill \pageref{sec:publications}
      \item Une description de mon projet de recherche \dotfill \pageref{sec:projet}
    \end{itemize}
  \item Une description de mes enseignements \dotfill \pageref{sec:enseignements}
\end{itemize}

De plus, vous trouverez les éléments suivants en pièces jointes à ce dossier de candidature~:
\begin{itemize}
  \item Mon diplôme de doctorat en informatique,
  \item Le rapport de soutenance,
  \item Trois articles issues de ma recherche, et leurs résumés en français
    (voir la partie~\ref{sec:publications} page~\pageref{sec:publications} pour plus de détails
    sur ces publications),
  \item Les deux rapports de pré-soutenance du doctorat
    par les rapporteurs Roberto Giacobazzi et Anders Møllers,
  \item Les lettres de recommandations d’Alan Schmitt, Éric Tanter, et Philippa Gardner.
\end{itemize}
\end{titlepage}

% \tableofcontents

\newpage
\section{Parcours}
\label{sec:cv}

Cette première section présente mon curriculum vitae sous un format classique.
Vous y trouverez notamment une description de mon parcours académique et la liste de mes publications.

Mon parcours se distingue par mon expérience internationale,
avec notamment deux post-docs, un au Chili et l’autre au Royaume-Uni.
Mes post-docs ont été tous les deux liés à une expérience de recherche originale,
mais aussi à des activités d’enseignements.
Ces post-docs m’ont permis de développer des collaborations scientifiques internationales
au travers divers projets de recherche.
J’ai aussi eu l’opportunité d’encadrer des étudiants lors de mes post-docs
(Tomás~Diaz et Benjamin~Gunton).
Le projet avec Tomás~Diaz a d’ailleurs abouti à une publication internationale.

Ma recherche est reconnue internationalement~:
j’ai été par exemple invité à exposer mes travaux sur la formalisation de R~\cite{bodin2018R}
au colloque FMfSS (Formal Methods for Statistical Software), aux États-Unis.
J’ai aussi participé au comité d’évaluation de POPL
(“Principes of Programming Languages”~:
le symposium international sur les principes des langages de programmation),
une conférence internationale~\(A^\star\), référence dans ce domaine.


\begin{datecvsection}{Positions}

  2018–2019 & Postdoc à l’Imperial College, à Londres (Royaume-Uni) sur les fondations théoriques de l’analyse de langages de programmation complexes. \\

    2017–2018 & Postdoc au Center of Mathematical Modeling (attaché à l’Universidad de Chile), à Santiago (Chili), sur la formalisation du langage de programmation R dans l’assistant de preuve Coq. \\

\end{datecvsection}

\begin{datecvsection}{Études}

    2012–2016 & Doctorat en Informatique à l’IRISA, à Rennes, sous la direction d’Alan~Schmitt et Thomas~Jensen sur les analyses certifiées de JavaScript. \\

	2010–2012 & Master d’Informatique, mention bien à l’École Normale Supérieure de Lyon. \\

	2009–2010 & Licence d’Informatique, mention très bien à l’École Normale Supérieure de Lyon. \\

    2007–2009 & Classes préparatoires aux Grandes Écoles au lycée Henri~\textsc{iv} à Paris. \\

	2007 & Baccalauréat spécialité Mathématiques, mention très bien. \\

\end{datecvsection}

\begin{datecvsection}{Expérience personnelle}

	2013–2016 & Membre du projet \textsc{SecCloud}~:  \url{http://www.seccloud.cominlabs.ueb.eu/} \\

	2012–2016 & Membre du projet \textsc{JSCert}~:  \url{http://jscert.org/} \\

    2012 & Stage à Inria (Rennes) avec Alan~Schmitt et Thomas~Jensen~:
	\textit{A Certified JavaScript Interpreter} \\

    2011 & Stage à Vrĳe Universiteit (Amsterdam) avec Dimitri~Hendriks et Jörg~Endrullis~:
	\textit{Proving Stream Equalities in Coq} \\

    2011 & Stage à PPS (Paris) avec Stéphane~Gimenez et Christine~Tasson~:
	\textit{Sequentialization of Proof Nets to Structures} \\

    2010 & Stage à Vérimag (Grenoble) avec David~Monniaux~:
	\textit{Détection de modes de fonctionnements d’un programme Lustre} \\

\end{datecvsection}

\begin{datecvsection}{Encadrement}

    2019 & Benjamin~Gunton, co-encadré avec Philippa~Gardner \\
    2017–2018 & Tomás~Diaz, co-encadré avec Éric~Tanter \\

\end{datecvsection}

\begin{datecvsection}{Enseignement}

    2019 & Separation Logic. Travaux dirigés de M1 à l’Imperial College. \\

    2018 & Models of Computation. Travaux dirigés de L2 à l’Imperial College. \\

    2017 & Introducción a Coq: Lógica, Tipos y Verificación. Travaux pratiques de M2 à l’Universidad de Chile. \\

    2014 & Conception et vérification formelle de programmes. Travaux dirigés de M1 à l’École Normale Supérieure. \\

    2013–2014 & Langages formels. Travaux dirigés de L3 à l’École Normale Supérieure. \\

    2013–2014 & Introduction à la programmation fonctionnelle. Travaux pratiques de L1 à l’université Rennes~1. \\

    2012 & Introduction à Scheme. Travaux pratiques et dirigés de L1 à l’Insa de Rennes. \\

\end{datecvsection}

\begin{datecvsection}{Prises de responsabilité}

    2019 & Membre du comité d’évaluation des artéfacts pour POPL. \\

    2012, 2014 & Surveillance de l’épreuve pratique d’algorithmique et de programmation du concours d’entrée à l’École Normale Supérieure.

\end{datecvsection}

\begin{datecvsection}{Conférences}

  2019 & Martin~Bodin, Philippa~Gardner, Thomas~Jensen, et Alan~Schmitt. \textit{Skeletal Semantics et Their Interpretations}. À POPL. \\

  2018 & Martin~Bodin, Tomás~Diaz, et Éric~Tanter. \textit{A Trustworthy Mechanized Formalization of R}. À DLS. \\

  2015 & Martin~Bodin, Thomas~Jensen, et Alan~Schmitt. \textit{Certified Abstract Interpretation with Pretty-Big-Step Semantics}. À CPP. \\

  2014 & Martin~Bodin, Arthur~Charguéraud, Daniele~Filaretti, Philippa~Gardner, Sergio~Maffeis, Daiva~Naudžiūnienė, Alan~Schmitt, et Gareth~Smith. \textit{A Trusted Mechanised JavaScript Specification}. À POPL. \\

  2013 & Jörg~Endrullis, Dimitri~Hendriks, et Martin~Bodin. \textit{Circular Coinduction in Coq Using Bisimulation-up-to Techniques}. À ITP. \\

  2011 & David~Monniaux et Martin~Bodin. \textit{Modular Abstractions of Reactive Nodes using Disjunctive Invariants}. À APLAS. \\

\end{datecvsection}

\begin{datecvsection}{Colloques}

  2019 & Martin~Bodin, Tomás~Diaz, et Éric~Tanter. \textit{A Trustworthy Mechanized Formalization of R}. À FMfSS. \\

  2018 & Martin~Bodin. \textit{A Coq Formalisation of a Core of R}. À CoqPL. \\

  2016 & Martin~Bodin, Thomas~Jensen, et Alan~Schmitt. \textit{An Abstract Separation Logic for Interlinked Extensible Records}. À JFLA. \\

  2014 & Martin~Bodin, Thomas~Jensen, et Alan~Schmitt. \textit{Certified Abstract Interpretation with Pretty-Big-Step Semantics}. À JFLA. \\

  2013 & Martin~Bodin, Thomas~Jensen, et Alan~Schmitt. \textit{Pretty-big-step-semantics-based Certified Abstract Interpretation (Preliminary version)}. À \textit{Semantics, Abstract Interpretation, et Reasoning about Programs: Essays Dedicated to David A. \textsc{Schmidt}} \\ % on the Occasion of his Sixtieth Birthday}, volume 129 of EPTCS, pages 360–383. \\

  2013 & Martin~Bodin et Alan~Schmitt. \textit{A Certified JavaScript Interpreter}. À JFLA. \\

\end{datecvsection}

\begin{cvsection}{Langues}
\parbox{.45\textwidth}{
\begin{itemize}
   \item Français langue maternelle,
   \item Bon niveau d’anglais,
   \item Très bon niveau d’espéranto,
\end{itemize}}
\parbox{.45\textwidth}{
\begin{itemize}
   \item Niveau moyen de portugais,
   \item Bas niveau d’espagnol,
   \item Notions d’allemand.
\end{itemize}}
\end{cvsection}


\newpage
\section{Recherche}
\label{sec:recherche}

\subsection{Contexte}
\label{sec:contexte}

% Contexte
Ces dernières années ont vu l’usage de langages de script ---
tels Java\-Script, Python, voire R --- grandement augmenter.
On recense ainsi plus de deux millions d’utilisateurs de R,
notamment dans tous les domaines % basés sur la
statistiques (biologie, finance, etc.).
De son côté, JavaScript est le premier langage sur GitHub,
comptabilisant plus de 320~000 projets actifs~\cite{githut}.

Les langages de script se caractérisent par une sémantique
complexe composée de très nombreux comportements spéciaux.
Ces comportements spéciaux tendent à artificiellement produire un résultat
même dans les cas où le programme comporte des erreurs,
là où des compilateurs pour d’autres langages
refuseraient la compilation.
JavaScript et R vont ainsi convertir implicitement
des valeurs numériques en des chaînes de caractères
dans les cas où une fonction attendrait l’un plutôt que l’autre.
%
Ces comportements spéciaux % Ce faisant, les langages de script
donnent un faux sentiment de correction,
les erreurs de programmations étant moins visibles~:
les programmes retournent parfois des valeurs fausses,
mais qui ont l’air superficiellement correctes.
%
Ces comportements spéciaux complexifient énormément l’analyse de programmes.
Ils sont donc souvent ignorés ou simplifiés par la recherche.
Malheureusement, ces hypothèses de recherche
sur l’utilisation pratique de ces fonctionnalités
correspondent rarement aux usages pratiques~\cite{RichardsHBV11}.
%
Ces comportements spéciaux sont aussi
peu connus des développeurs~\cite{RInferno},
ce qui donne lieu à de nombreuses erreurs
dans leurs programmes.

Ma recherche consiste à résorber ce décalage entre les analyseurs
et les pratiques d’industrie en prenant en compte
les comportements spéciaux des langages de script.
Cela conduit à des modèles des langages de très grande taille~:
la sémantique de JSCert~\cite{popl14jscert} (qui formalise
tous les comportements spéciaux de JavaScript selon sa spécification~\cite{es5})
compte plus de 900~règles de dérivation.
La formalisation CoqR~\cite{bodin2018R} (formalisant les comportements du langage
de programmation~R) en compte plus de 2~000.
À titre de comparaison, le langage Clight spécifié dans le projet CompCert~\cite{CompCert}
contient environ 200~règles.\footnote{
  Le langage Clight tel qu’il est spécifié % par CompCert
  ne contient en fait que 60~règles de dérivation,
  mais il est défini dans un style différent de JSCert.
  %
  Les estimations données ici sont des approximations
  du nombre de règles obtenues si on spécifiait tous ces langages
  de façon similaire.
  %
% Cette estimation de 200~règles est en fait une estimation haute du nombre
% de règles que l’on obtiendrait si l’on spécifiait Clight dans le style
% de JSCert.
% %
% De même, CoqR n’est pas spécifié exactement comme JSCert et la valeur
% de 2~000~règles est en fait une estimation basse du nombre de règles
% que l’on obtiendrait si l’on spécifiait R dans le style de JSCert.
% %
% Le fait que l’estimation pour Clight est une estimation haute
% et que l’estimation pour CoqR est une estimation basse
% permet de s’assurer que l’écart de taille entre la sémantique
% des deux langages n’est pas surestimé.
}
Cette grande quantité de règles supplémentaires est due aux comportements spéciaux.

La taille de ces modèles limite très fortement les analyses possibles.
Cependant, les analyses de ces modèles sont applicables telles quelles
sur des systèmes réels~:
ces modèles complexes correspondent précisément à des contextes industriels,
et non à une simplification de ces derniers.
%
Les contraintes de ma recherche sont ainsi différentes
de beaucoup de systèmes de recherche~:
la taille de ces modèles de langages
impose à ce que les analyses soient définies de manière générale
afin de passer à l’échelle vis-à-vis de la complexité des langages. % de programmation.

Devant de tels modèles, une question naturelle est de savoir
la complexité des modèles peut entrainer des erreurs humaines
dans les analyses formelles sous-jacentes.
Une grande partie de ma recherche consiste donc à formaliser
tous ses modèles et analyses dans l’assistant de preuve Coq~\cite{Coq}.
Ce dernier fourni un cadre idéal pour spécifier formellement
des systèmes complexes,
et pour prouver mathématiquement des propriétés de ces modèles
--- en particulier la correction des analyses spécifiées.
Coq garantit un très haut niveau de confiance sur ces preuves,
malgré la complexité des modèles.
Cette confiance en Coq est de plus en plus reconnue
par l’industrie~\cite{leroy2014much}.


\subsection{Publications}
\label{sec:publications}

En pièces jointes, trois publications (ainsi que leurs résumés en français) sont présentées~:
\begin{itemize}
  \item Skeletal Semantics and Their Interpretations~\parencite{bodin2019skeletal},
  \item A Trustworthy Mechanized Formalization of R~\parencite{bodin2018R},
  \item A Trusted Mechanised JavaScript Specification~\parencite{popl14jscert}.
\end{itemize}

Les articles présentés en annexe ont été choisis car ils représentent bien
les axes de recherche principaux que j’ai explorés jusqu’à maintenant~:
la formalisation de langages de programmation effectivement utilisés,
sans simplifications qui pourraient nuire à leur exactitude ;
et la conception de techniques de preuves pour ces formalisations souvent complexes.

Ainsi les deux articles~\cite{jscert,bodin2018R}
formalisent respectivement JavaScript et R,
deux langages de programmation réputés pour leur complexité.
Ces deux articles formalisent ces langages de programmation tels qu’ils sont,
sans simplification qui pourrait nuire à la correction des analyses basés sur ces derniers.
Ces deux formalisations se distinguent par leur taille~:
plus de 900~règles de dérivation pour JavaScript et plus de 2~000 pour R.
De telles tailles de formalisations n’avaient jamais été étudiés
sous cette forme jusqu’à maintenant.

Quant à lui, l’article~\cite{bodin2019skeletal} 
présente un langage de description de sémantiques
(dans lequel les deux travaux précédant peuvent être convertis)
qui permet de construire certains types d’analyses correctes par construction.
Cette correction par construction permet de passer à l’échelle
vis-à-vis de la complexité des formalisations de langage.

Une grande partie de ma recherche actuelle consiste à appliquer les méthodes
proposés par ce dernier article~\cite{bodin2019skeletal}
à des langages de programmation effectivement utilisés,
à commencer par ceux formalisés par les deux premiers travaux~\cite{jscert,bodin2018R}.
Ceci permettrait d’aboutir à des analyseurs utilisables en industrie,
et donc permettre de détecter des problèmes (de correction ou de sécurité) en amont.

Ces trois articles ont été publiés dans des conférences internationales
reconnues dans le domaine.
En particulier \parencite{jscert} et \parencite{bodin2019skeletal} ont été publiés
à POPL, une conférence internationale~\(A^\star\) référence dans ce domaine.
Ces trois articles sont tous accompagnés d’artefacts~:
\begin{itemize}
  \item Pour~\parencite{popl14jscert},
    la formalisation Coq de JavaScript, ainsi que ne nombreuses informations
    supplémentaires sur le développement avant et après JSCert~:
    \url{http://jscert.org}.
  \item Pour~\parencite{bodin2018R},
    la formalisation en Coq de R~:
    \url{https://github.com/Mbodin/CoqR/releases/tag/DLS2018}.
  \item Pour~\parencite{popl14jscert},
    la formalisation en Coq du langage de description décrit dans l’article,
    ainsi qu’une preuve des principaux résultats de l’article~:
    \url{https://gitlab.inria.fr/skeletons/Coq/tree/POPL2019}.
\end{itemize}
Ce dernier artéfact a été évalué par un comité spécifique comme étant réutilisable,
ce qui est la meilleure note possible pour un artefact dans cette conférence.

Ci-dessous se trouve une liste de toutes mes publications,
regroupées selon leurs catégories.
Tous ces articles ont été acceptés et présentés dans des conférences internationales.

% \nocite{jscert}
\nocite{bodin2013certified}
\nocite{bodin2014pretty}
\nocite{bodin2016abstract}
\nocite{popl14jscert}
\nocite{cpp2015pbs}
\nocite{bodin2019skeletal}
\nocite{bodin2018R}
\nocite{posterVerifiedSoftware2019}
\nocite{FMfSS2019}
\nocite{CoqRCoqPL}
\nocite{FestschriftDaveSchmidt}
\nocite{endrullis2013circular}
\nocite{monniaux2011modular}
\nocite{BodinThesis}

\printbibliography[
  keyword = bodin,
  subtype = article,
  heading = subbibliography,
  title = {Liste d’articles dans des conférences}
]

\printbibliography[
  keyword = bodin,
  subtype = workshop,
  heading = subbibliography,
  title = {Liste d’articles dans des colloques}
]

\printbibliography[
  keyword = bodin,
  subtype = other,
  heading = subbibliography,
  title = {Autres publications}
]

\subsection{Projet de recherche}
\label{sec:projet}

Ma recherche vise à concevoir
des outils d’analyses certifiés pour des langages de programmation
très utilisés.
Ces langages ont beaucoup de comportements spéciaux souvent peu connus % des programmeurs
et donc susceptibles de mener à des erreurs.
Ce projet s’attaque aux problèmes de sécurité associés
en proposant des analyses spécifiques pour ces langages.
Il s’oriente autour de trois axes:
\begin{itemize}
    \item
La formalisation de langages de programmations
utilisés par l’industrie, notamment WebAssembly, JavaScript, et R.
Le but est de formaliser complètement ces langages,
sans simplifications qui pourraient masquer des comportements
spéciaux parfois importants.

    \item
La conception d’analyses
passant à l’échelle vis-à-vis de la taille de ces formalisations
de langages.
% Ces modèles sont complexes, rendant la conception d’analyse difficile.
% La mise en œuvre de ces méthodes dans des systèmes réels
% est fondamental afin de les tester.

    \item
Relier ces travaux à d’autres
systèmes d’analyses déjà existant.
% notamment par la compilation de ces modèles complexes
% vers les langages analysés par d’autres analyseurs.
\end{itemize}

% I
%     - Formalisations de langages real-world.
%     - Wasm, JavaScript, R.
%     - Le format est important~: dans un format utilisable pour faire des preuves/analyseurs (Coq (inductif, interpréteur), squelettes).
\paragraph{Formalisation de langages de programmation.}
J’ai déjà participé à la formalisation en Coq de JavaScript~\cite{popl14jscert} et R~\cite{bodin2018R}.
Ces formalisations étaient très novatrices lors de leur publication~:
c’était les premières formalisations en Coq de ces langages de programmation,
mais c’était aussi les premières formalisations de ces langages de programmation
dont la correction était assurée par deux méthodes complémentaires
(correspondance ligne-à-ligne et test).
% En effet, ces formalisations sont à la fois très proches de leurs spécifications
% respectives et exécutables, et donc vérifiables par le test.
% Il a de plus été montré que ces formalisations permettaient
% (au moins théoriquement) de servir de base pour des preuves de programme.
%
Cependant, ces formalisations peuvent être améliorées.
D’une part parce que JavaScript et R évoluent rapidement
et leurs spécifications ont donc changé entre-temps.
% depuis la formalisation de la spécification ECMAScript~5~\cite{es5},
% la spécification de JavaScript est arrivée à sa dixième édition~\cite{es2019}.
% Heureusement, les changements depuis les dernières éditions d’ECMAScript sont locaux
% et standardisés.
Il est donc important de concevoir une sémantique formelle qui puisse évoluer
au même rythme que ces spécifications.

D’autre part, il s’est avéré que ces formalisations demandent un grand travail
pour pouvoir être utilisés dans une analyse certifiée.
Ces formalisations sont en effet très grandes et poussent les capacités des assistants de preuve
à leurs limites.
% Ainsi, à l’heure actuelle, effectuer une simple induction
% (le concept fondamental pour raisonner sur les structures Coq)
% sur une dérivation de JSCert demande plusieurs giga-octets de mémoire et très difficile en pratique.
%
Les squelettes~\cite{bodin2019skeletal} sont une représentation formelle de sémantiques
conçue pour pallier à ce problème~:
un squelette permet la définition et la preuve de divers analyses dans un cadre général.
Ce formalisme est ainsi adapté à la formalisation
de langages de programmation complexes.
Il est cependant très récent,
et les travaux de ce projet pourront amener à des évolutions de ce dernier.

Ce premier axe consiste en la formalisation de nouveaux langages de programmation,
en particulier WebAssembly~\cite{watt2018mechanising}, dont la formalisation Coq est en cours,
mais aussi en la mise à jour des formalisations de JavaScript et de R.
Ces formalisations seront conçues pour être réutilisables
et permettre la conception et la certification d’analyseurs.
% tels que les autres axes de recherche nécessiteront.
De plus, ces formalisations seront construites pour être % particulièrement
exhaustives vis-à-vis des comportements spéciaux de ces sémantiques~:
comme beaucoup d’erreurs viennent de ces comportements spéciaux,
ils ne peuvent être simplifiés dans les formalisations.
L’approche de JSCert et de CoqR --- consistant à pouvoir contrôler ces formalisations,
tant par leur ressemblance à la spécification de référence, tant par le test --- sera conservée.

% II
% A théorie
%     - Logique de programme.
%     - hyperproperties
%     - Extensions de l’interprétation abstraite présentée dans le papier initial (domaines relationnels).
%     - petit-pas~?
% B pratique
%     - Représentation Coq de la théorie instanciée à des langages et des analyses particulières.
%         Un analyseur qui tourne effectivement.
%         Une boîte à outils pour l’analiste (analysis toolkit)
%     - Espoir de trouver des nouveaux bogues qui seraient provoqués spécifiquement par ces points particuliers de la sémantique des langages.
\paragraph{Conception d’analyses passant à l’échelle.}
Les squelettes n’ont pour l’instant été associé qu’à un unique type d’analyses,
(une sous-classe de l’interprétation abstraite),
et ce de manière assez théorique~\cite{bodin2019skeletal}.
Cet axe vise à développer l’ensemble des analyses possibles,
mais aussi à les mettre en pratique sur les langages précédemment formalisés.
%
En particulier, l’exploration de domaines relationnels~\cite{cousot1978automatic, mine2006octagon}
et d’autres domaines déjà utilisés et formalisés dans des analyseurs
tels que Verasco~\cite{jourdan2016verasco}.
Ces domaines rentrent dans le cadre plus général de l’interprétation abstraite
%, mais pas dans son sous-ensemble étudié dans l’article original
et représentent un premier objectif pour le développement de nouvelles analyses sur les squelettes.

De manière orthogonale, la logique de séparation~\cite{ishtiaq2001bi, berdine2005smallfoot}
a montré pouvoir raisonner efficacement sur des structures complexes
et représente ainsi un objectif important pour la formalisation d’analyses.
En particulier, Iris~\cite{jung2017iris} a récemment proposé
une généralisation importante de cette logique.
Iris est formalisée en Coq,
mais sa partie sémantique n’a pas été conçue pour des langages complexes~:
le langage le plus complexe formalisé dans le contexte d’Iris
est à ma connaissance RustBelt~\cite{jung2017rustbelt}
et ne contient que 30~règles de dérivations (à comparer aux 900 règles de JSCert).
Les squelettes pourraient fournir un cadre formel intéressant pour la partie sémantique d’Iris,
permettant de passer à l’échelle sur des langages de programmation complexes.

D’autres types d’analyses sont aussi possibles.
Des travaux préliminaires ont par exemple été faits sur le déterminisme des squelettes,
et plus généralement des hyperpropriétés de programme~\cite{clarkson2010hyperproperties}.
%
Cet axe de recherche vise à formaliser ces différents types d’analyses dans le cadre des squelettes,
mais aussi à les implémenter en pratique~:
d’une part dans des cas d’applications simples de langages jouets,
mais surtout d’autre part sur les langages formalisés dans le premier axe de ce projet de recherche.
De tels analyseurs se concentreraient sur tous les problèmes liés aux comportements spéciaux
des sémantiques et offriront des applications concrètes immédiates~:
dans le cas de R, il n’existe pas encore d’analyseurs du langage~\cite{RInferno}
et ces analyseurs seront donc les premiers.

% III Gillian
%     - Compilation des squelettes.
%         À partir d’un squelette, obtenir un programme GIL analysable par de vrais analyseurs (Gillian).
%         Compilation certifiées.
%     - Compilation certifiée des annotations, pour pouvoir faire remonter les problèmes trouvées par l’analyseur vers le programme initial.
%     - Plus généralement~: Compilation des squelettes vers les langages analysés par d’autres analyseurs.
\paragraph{Symbiose avec d’autres travaux.}
De nombreux projets d’analyses~\cite{besson2010certified, fragoso2017javert}
se concentrent sur des langages intermédiaires.
% plutôt que sur le langage cible.
De tels langages sont généralement associés à une sémantique beaucoup plus
simple que le langage d’origine, ce qui simplifie les analyses.
%
En particulier, il existe des langages intermédiaires
génériques~\cite{gillian, rosu-serbanuta-2010-jlap},
déjà associés à divers analyses.
Ceci est une opportunité pour les squelettes~:
il est possible de concevoir des interprétations squelettiques
produisant des programmes dans ces différents langages intermédiaires,
conduisant ainsi à des compilateurs génériques.
Ces compilateurs peuvent être vérifiés de manière générique
grâce aux outils fournis par les squelettes.

Cette approche de compilation des squelettes ouvre une voie intéressante.
D’une part, elle permet de lier toute la recherche sur les squelettes
avec ces différents analyseurs.
D’autre part, il est possible de formellement spécifier l’analyse de ces analyseurs
dans le cadre des squelettes,
et de montrer que la compilation conserve ces propriétés.
Ceci permet ainsi de reformuler l’action de ces analyseurs dans un contexte formel et général,
conduisant à une formalisation de ces derniers
(ils ne sont que très rarement formalisés dans un assistant de preuve).

Cet axe pose enfin la question de la compilation certifiée.
Il existe déjà un compilateur de squelette vers OCaml~\cite{CourantCranceSchmitt2019},
mais ce dernier n’est pas formalisé en Coq.
Cet axe de recherche permettra de donner des bases solides pour une telle formalisation.
% Une telle formalisation pourra ensuite être étendue à d’autres langages,
% à la manière du projet JSExplain~\cite{jsexplain},
% qui propose des versions équivalentes d’un même programme dans divers langages de programmation.

% Problème des annotations ?


% JSCert~:
%     - déjà fait.
%     - spécification Coq inductive.
%     - correspondance ligne à ligne, testé.
%     - difficile à utiliser pour faire des preuves à cause de son grand nombre de règles.
% Squelette pour JavaScript basé sur ECMAScript~:
%     - statut des preuves inductives~: faisables, mais complexes.
% Wasm~:
%     - Spécification Coq selon la méthodologie JSCert.
%     - Il existe déjà une formalisation Isabelle~: pourquoi Coq~?
%         + Pour pouvoir le lier à Iris et à l’infrastructure des squelettes.


\newpage
\section{Enseignements}
\label{sec:enseignements}

Mes activités d’enseignement ont été jusqu’à maintenant assez proches de mon domaine de recherche~: programmation fonctionnelle, analyse de programe, etc.
J’ai cependant essayé de diversifier les approches~:
en plus de mon domaine principal, l’interprétation abstraite, j’ai aussi enseigné des domaines proches mais différents comme la logique de séparation ou le model checking.

J’ai enseigné principalement en français et en anglais et je suis bien entendu prêt à continuer à enseigner dans ces deux langues.
Je suis aussi prêt à m’adapter aux circonstances~:
par exemple les TP de Coq que j’ai encadré au Chili étaient majoritairement en espagnol,
le cours associé étant dans cette langue et les élèves étant naturellement plus à l’aise dans cette dernière.

Le tableau ci-dessous récapitule les informations principales des cours auxquels j’ai participé,
en particulier le niveau et les heures équivalent TD (heqTD).
Une description plus précise de chacun de mes enseignements est décrite après ce tableau.
Dans tous ces cours, j’ai bien entendu participé à la correction des examens avec les autres responsables du cours.

\vspace{1ex}
\newcommand\lengthcourse{39mm}
\newcommand\lengthuni{25mm}
\newcommand\lengthseances{16mm}
\begin{adjustbox}{center}
  \begin{tabular}{|l|c|c|c|c|c|}
  \hline
  Nom du cours
  & année
  & université
  & niv.
  & séances
  & heqTD
  \\
  \hline
  \hline

\parbox{\lengthcourse}{Introduction à Scheme}
& 2012 & INSA Rennes & L1 & \parbox{\lengthseances}{\vspace{1pt}\centering{}28h CTD, \\ 13h TP\vspace{1pt}} & 36,7
\\\hline

\multirow{2}{*}{\parbox{\lengthcourse}{Introduction à la programmation fonctionnelle}} % APF
& 2013 & \multirow{2}{*}{Rennes~1} & \multirow{2}{*}{L1} & 26h TP & 17,3
\\
& 2014 & & & 26h TP & 17,3
\\\hline

\multirow{2}{*}{\parbox{\lengthcourse}{Langages formels}}
& 2013 & \multirow{2}{*}{ENS Rennes} & \multirow{2}{*}{L3} & 30h TD & 30
\\
& 2014 & & & 30h TD & 30
\\\hline

\parbox{\lengthcourse}{\vspace{1pt}Conception et vérification formelle de programmes\vspace{1pt}}
& 2014 & ENS Rennes & M1 & 26h TD & 26
\\\hline

\parbox{\lengthcourse}{Introducción a Coq}
& 2017 & \parbox{\lengthuni}{\vspace{1pt}\centering{}Universidad de Chile\vspace{1pt}} & M2 & \parbox{\lengthseances}{\vspace{1pt}\centering{}22h TD, \\ 3h CM\vspace{1pt}} & 26,5
\\\hline

\parbox{\lengthcourse}{Models of Computation}
& 2018 & \parbox{\lengthuni}{\vspace{1pt}\centering{}Imperial College London\vspace{1pt}} & L2 & 27h CTD & 27
\\\hline

\parbox{\lengthcourse}{Separation Logic}
& 2019 & \parbox{\lengthuni}{\vspace{1pt}\centering{}Imperial College London\vspace{1pt}} & M1 & 28h CTD & 28
\\\hline

  \hline
\end{tabular}
\end{adjustbox}

\paragraph{Introduction à la programmation fonctionnelle}
Ce cours consistait en une introduction à la programmation fonctionnelle en Lisp.
J’étais chargé des~TP.

\paragraph{Introduction à Scheme}
Ce cours à l’INSA consistait en des cours/TD et des TP de programmation fonctionnelle, en Scheme.
J’étais chargé d’à la fois les cours/TD et des TP d’un groupe.

Il y avait des projets, et j’ai naturellement participé à leur notation.
J’ai pris grand soin de donner des commentaires les plus personnalisés possibles, de façon à ce que chaque élève sache comment il peut progresser.
Mes élèves avaient beaucoup appréciés ces retours.

\paragraph{Langages formels}
Ce cours présente des bases d’informatique théorique (langages réguliers, automates, grammaires, etc.) à l’ENS.
Je me suis chargé des TD.
Afin de former les élèves à plus de rigueur mathématique dans leurs preuves, il était demandé chaque semaine à un groupe d’élève de rédiger une correction des TD au format TeX.
Arnaud Jobin et moi étions responsables de la correction de ces corrigés.
Une attention tout particulière a été portée à donner des retours constructifs aux élèves, qui a été appréciée.

\paragraph{Conception et vérification formelle de programmes}
Ce cours conçu avec François Schwarzentruber propose d’aborder divers formalismes utilisés pour décrire formellement un langage, des diagrammes UML utilisés en industrie à la logique modale utilisée en analyse de programme concurrents.
Je me suis chargé des TD.
%
J’ai de plus conçu deux TP pour ce cours.
L’un deux consistait en une introduction à Spin, un model checker très utilisé.
Les élèves devaient formaliser le problème du dîner des philosophes dans ce contexte.
%
L’autre consistait en une introduction à l’assistant de preuve Coq.
%
J’ai aussi conçu du matériel pour TD
dont le but consistait à approcher de manière ludique les différents formalismes vus en cours durant le semestre.
%
Ces différents matériels de TP et de TD sont accessibles depuis ma page web à l’adresse \url{http://www.doc.ic.ac.uk/~mbodin/instruado/2013/CVFP/}.
%
Le cours se terminait pour les étudiants sur un travail de documentation, où ils devaient étudier et présenter un article du domaine de leur choix (soit parmi une liste de publication que nous leur avions proposé, soit un article externe de leur choix).
J’ai naturellement activement participé à la notation de leurs présentations.

\paragraph{Introducción a Coq}
Éric Tanter a profité de mon expertise Coq pour ouvrir ce cours basé sur le matériel de cours de Software Foundations~\cite{pierce2010software},
que nous avons orienté vers la vérification de programme.
Ce cours introduit Coq sur des exercices simples, puis définit une sémantique d’un langage While pour finir sur de la preuve de propriétés sur un tel programme.
%
Je me suis chargé des TP.
%
Le cours s’est terminé sur des présentations techniques de Coq dans des contextes de recherche.
Nous avons ainsi invité Federico Olmedo à présenter ses recherches.
Mon travail sur JSCert~\cite{popl14jscert} s’inscrivant exactement dans la continuité de ce cours,
j’ai ainsi effectué trois heures de cours
et un TP présentant JSCert et proposant aux élèves des exercices sur ce projet.

\paragraph{Models of Computation}
Ce cours donne des bases en informatique théorique (sémantiques grands et petits pas, triplets de Hoare, \(\lambda\)-calcul, etc.) à l’Imperial College London.
Le cours était sous la forme de cours/TD pour un grand nombre d’étudiants~: il y avait 166 étudiants et nous étions responsables pour les aider.

\paragraph{Separation Logic}
Ce cours de niveau M1 donne les bases de la logique de séparation, majoritairement vue depuis l’approche de Peter O'Hearn~\cite{reynolds2008introduction, ishtiaq2001bi}.
Ce cours se conclut par la participation de chercheurs présentant leurs travaux, notamment l’outil Infer~\cite{calcagno2011infer} de Facebook et Gillian~\cite{FragosoSantos2019JaVerT} de l’Imperial College London.
Comme Models of Computation, ce cours était sous la forme de cours/TD.

L’avantage de la logique de séparation est qu’elle permet de formaliser relativement simplement de nombreuses structures de données.
J’ai donc pu participer à l’élaboration du sujet d’examen en proposant des structures de données que les élèves n’avaient pas vu en cours (listes XOR, union-find, etc.).
J’ai ainsi rédigé une des parties de l’examen.
%
J’ai aussi participé à la production de matériel pédagogique pour le cours,
notamment tous les polycopiés liés à la preuve de correction de la logique de séparation
présentée pour la première année dans ce cours.

\newpage
\printbibliography{}

\end{document}

