%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Dossier de candidature Inria , version LaTeX. (English notes included below.)
%%
%% Pour le remplir:
%%
%%     - chercher les occurrences d'appels à la macro ``\GIVE{...}'', et les
%%       *REMPLACER* par les renseignements demandés;
%%
%%     - éliminer les occurrences de ``\GIVE{...}'' qui vous
%%       seraient inutiles;
%%
%%       Note: la commande ``\GIVE'' vous indique les endroits où vous devez
%%       remplir, et le paramètre de \GIVE n'a qu'un rôle de
%%       commentaire. La définition LaTeX de \GIVE ne fait que
%%       produire une ligne de points (`...........')
%%
%%     - vérifier l'apparence du document PDF ou PostScript que vous
%%       produisez (lignes trop longues, tableaux qui débordent, etc.).
%%
%% Pour produire un document PDF, on peut utiliser :
%%
%%      - ou bien pdflatex (recommandé)
%%      - ou bien dvipdfm (http://gaspra.kettering.edu/dvipdfm/) qui produit
%%        un PDF à  partir de DVI ;
%%      - ou alors un ``distiller'' (ps2pdf, Acrobat) qui fera le
%%        travail depuis le PostScript.
%%
%% Pour produire un document PostScript, suivre la méthode habituelle.
%%
%% PROBLEMES EVENTUELS: ce document LaTeX cherche à être portable et
%% devrait fonctionner sur toute installation raisonnable de
%% latex2e. En cas de problème avec le logo Inria (inclusion de
%% PS ou PDF), voyez le commentaire proche de son inclusion, et
%% n'hésitez pas à le remplacer par un logo texte, comme indiqué. 
%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Application to an Inria position.
%%
%% To fill in this application form: 
%%
%%     - look for occurrences of the macro calls ``\GIVE{...}'', and
%%       *REPLACE* them with the required informations;
%%
%%     - eliminate the occurrences of ``\GIVE{...}'' that are useless
%%       (places where to have no information to provide);
%%
%%       Note: the macro ``\GIVE'' indicates places where you should
%%       supply information, and its argument simply acts as a
%%       comment. The LaTeX definition of \GIVE simply produces a
%%       dotted line (`...........').
%%
%%     - verify the appearance of the PDF or PostScript document that
%%     you produce (lines too long, arrays that overflow, etc.);
%%
%% In order to produce a PDF document, you can use:
%%
%%      - either pdflatex (recommanded)
%%      - or dvipdfm (http://gaspra.kettering.edu/dvipdfm/), which produces
%%        an excellent PDF from a DVI file;
%%      - or a ``distiller'' (ps2pdf, Acrobat) working with the
%%        PostScript document.
%%
%% To produce a PostScript document, follow the usual method.
%%
%% TROUBLESHOOTING: this LaTeX document is meant to be portable, and
%% should compile smoothly on any reasonable latex2e installation. If
%% you have problems with the inclusion of the Inria logo,
%% see the comment close to the inclusion, and don't hesitate to
%% replace the EPS or PDF logo with a text logo, as indicated.  
%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{INRIA_dossier}
\usepackage[french,english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} %% For UTF8 chars (accented letters).
\usepackage{txfonts} % Use Times, Helvetica fonts
\renewcommand{\familydefault}{\sfdefault} % We write in sans-serif by default

%% url for the three documents referenced in this application file
\newcommand\urlpariteFR{https://www.inria.fr/sites/default/files/2019-12/13878.pdf}
\newcommand\urlpariteEN{https://www.inria.fr/sites/default/files/2020-01/charter\%20GEO.pdf}
\newcommand\urlsoftwareFR{https://www.inria.fr/sites/default/files/2019-10/Criteria_software_self_assessment.pdf}
\newcommand\urlsoftwareEN{\urlsoftwareFR}
\newcommand\urltransfertFR{https://www.inria.fr/sites/default/files/2020-01/2018-06-GuideMethodologique_EvaluationTransfert\%281\%29.pdf}
\newcommand\urltransfertEN{https://www.inria.fr/sites/default/files/2020-01/2018-06-GuideMethodologique-EvaluationTransfert_EN\%281\%29.pdf}

\usepackage{graphicx} % For the Inria logo and other figures
\parindent 0pt
\usepackage[cm]{fullpage} % Use the entire page (1.5 cm margins everywhere)
\usepackage{xcolor} % for colors in document (red for title, gray for English)
\usepackage[stable]{footmisc} % for footnotes in section titles
% Hyperref: links in document. Most links are hidden (black color) except URLs (blue)
\usepackage[colorlinks=true,urlcolor=blue,linkcolor=black,citecolor=black]{hyperref}
% Avoid having footnotes in PDF document structure
\pdfstringdefDisableCommands{%
  \def\footnote#1{}%
  \def\footnotemark#1{}%
}
% Required for the "circle position you apply to"
\usepackage{fancybox}
% We write in French 
\selectlanguage{french}
\def\year{2020}

\usepackage{pdfpages}
\newcounter{dummy}

\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}

\usepackage{adjustbox}
\usepackage{multirow}

\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=false,
   eprint=false,
   maxbibnames=9,
   urldate=long,
   defernumbers=true
 ]{biblatex}
\addbibresource{biblio.bib}

% From: https://tex.stackexchange.com/questions/353490/biblatex-print-specific-bibliography-entries-in-bold/353495#353495
\newtoggle{bbx:boldentries}
\DeclareBibliographyCategory{boldentry}
\AtEveryBibitem{\ifboolexpr{togl {bbx:boldentries} and test {\ifcategory{boldentry}}}{\bfseries}{}}

\newcommand\etc{etc.\@}

\babelhyphenation{Web-As-sem-bly}
\babelhyphenation{Ja-va-script}
\babelhyphenation{Comp-Cert}
\babelhyphenation{Comp-CertS}

\newcommand\ignore[1]{}

\begin{document}

\ignore
{} % Comment to remove.
{
\includepdf{documents/ISFP.pdf}
}

\thispagestyle{empty}

\def\LASTNAME{{\sf BODIN}}
        %% Votre nom / Your last name
\def\FIRSTNAME{{\sf Martin}}
        %% Votre prénom / Your first name

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                      Cover page / page de couverture 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vspace*{-1.5cm}
\includegraphics[width=6cm]{Logo-INRIA}\\
\vspace*{1.3cm}
\color{red}
\fbox{\parbox[b][3.5cm][c]{\textwidth}{\center\bfseries\LARGE  2020 \\[0.2cm]
DOSSIER DE CANDIDATURE \\[0.2cm]
   \em APPLICATION}
   }
\vfill
\color{black}
\begin{center}
\BiLingual{\bf Cochez le concours sur lequel vous candidatez}{\\}{\bf Check the competition exam for which you are applying}
\end{center}
\vspace{0.5cm} 
{\large \bf 
 \CHOSEN~ CRCN - (Chargés de recherche de classe normale / Young graduate scientist position) \\[0.5cm]
 \NOTCHOSEN~ DR2 - (Directeurs de recherche de deuxième classe / Senior researcher position)
}


\bigskip




\vfill
  \large\bfseries
  \BiLingual{Nom\footnote{Il s'agit du nom usuel figurant sur vos pièces d'identité\\\hspace*{6mm}It is the name appearing on your identity cards} : \LASTNAME}{\\}{Last name}\\[7mm]
  \BiLingual{Prénom : \FIRSTNAME}{\\}{First name}\\[7mm]
  \BiLingual{Sexe : \hspace*{1cm}\NOTCHOSEN~ F \hspace*{1cm} \CHOSEN~ M  }{\\}{Sex}  \\[7mm]
  \normalsize\bfseries
  \BiLingual{Nom utilisé pour vos publications (facultatif) :}{\\}{Name used for your publications (optional):}\\[7mm]
 \normalsize\mdseries
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% \fbox{\parbox{\textwidth}{
% {\bf RECONNAISSANCE ADMINISTRATIVE DE HANDICAP} \\
% (cf. 1, 2, 3, 4, 9, 10 et 11 de l’article L. 5212-13 du Code du Travail)\\[0.2cm]

% \NOTCHOSEN~ Titulaire d’une reconnaissance de la qualité de travailleur handicapé (RQTH) délivrée par la commission des droits et de l’autonomie des personnes handicapées (CDAPH) \\[0.2cm]
% \NOTCHOSEN~  Victime d'accident du travail ou de maladie professionnelle ayant entraîné une incapacité permanente au moins égale à 10 \% et titulaire d'une rente attribuée au titre du régime général de sécurité sociale ou de tout autre régime de protection sociale obligatoire \\[0.2cm]
% \NOTCHOSEN~  Titulaire d'une pension d’invalidité attribuée au titre du régime général de sécurité sociale, de tout autre régime de protection sociale obligatoire ou au titre des dispositions régissant les agents publics à condition que l'invalidité des intéressés réduise au moins des 2/3 leur capacité de travail ou de gain \\[0.2cm]
% \NOTCHOSEN~ Bénéficiaire mentionné aux articles L241-2 ; L241-3 et L241-4 du code des pensions militaires d’invalidité et des victimes de guerre \\[0.2cm]
% \NOTCHOSEN~ Titulaire d'une allocation ou d'une rente d'invalidité attribuée dans les conditions définies par la loi n 91- 1389 du 31 décembre 1991 relative à la protection sociale des sapeurs- pompiers volontaires en cas d'accident survenu ou de maladie contractée en service\\[0.2cm]
% \NOTCHOSEN~  Titulaire de la carte ``mobilité inclusion'' portant la mention ``invalidité'' \\[0.2cm]
% \NOTCHOSEN~  Titulaire de l’allocation aux adultes handicapés (AAH)\\[0.2cm]

% Date de validité du titre administratif : du ......... au ......... \\[0.2cm]

% {\bf AMENAGEMENT EVENTUEL DES EPREUVES}\\[0.2cm]

% Souhaitez-vous être contacté pour bénéficier d’un aménagement d’épreuves ? (oui/non) : non\\[0.2cm]

%     }}

% \bigskip


% \fbox{\parbox{\textwidth}{
% {\em
% {\bf FRENCH ADMINISTRATIVE DOCUMENT ABOUT DISABILITY }\\
% (cf. 1, 2, 3, 4, 9, 10 et 11 of the article L. 5212-13 of the French Labour Code)\\[0.2cm]

% \NOTCHOSEN~  I have been recognized as a ``disabled worker'' under national law by the French civil service.\\[0.2cm]

% This official document is valid from .........  to  .........   \\[0.2cm]

% {\bf  POSSIBLE ARRANGEMENT OF THE TESTS:}\\[0.2cm]
% Do you wish to be contacted to benefit from an arrangement of the tests? (yes/no) : no\\[0.2cm]
% }
%    }}


\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fbox{\parbox[b][2cm][c]{\textwidth}{\center\bfseries\large  \color{red}
DEPOT DE VOTRE CANDIDATURE \\
SUBMITTING YOUR APPLICATION}}
\color{black}
\vspace{1cm}

{\bf Le dossier de candidature doit comprendre :}
\begin{itemize}
  \item  Formulaire 1 : Parcours professionnel (page~\pageref{formulaire:parcours})
  \item Formulaire 2 : Description synthétique de l'activité antérieure (page~\pageref{formulaire:activite})
  \item  Formulaire 3 : Contributions majeures (page~\pageref{formulaire:contributions})
  \item  Formulaire 4 : Programme de recherche (page~\pageref{formulaire:programme})
  \item Formulaire 5 : Liste complète des contributions (page~\pageref{formulaire:liste})
\end{itemize}
CRCN :
\begin{itemize}
\item Les rapports de thèse ou de doctorat (page~\pageref{rapport:these} pour les rapports de thèse et page~\pageref{rapport:soutenance} pour le rapport de soutenance)
\item Une copie des derniers titres et diplômes (page~\pageref{diplome:these})
\item Une photographie récente de la candidate / du candidat (facultative, page~\pageref{photo})
\end{itemize}
DR2 :
\begin{itemize}
\item Les rapports d'habilitation à diriger des recherches (si applicable)
\item Une copie des derniers titres et diplômes
\item Une photographie récente de la candidate / du candidat (facultative)
\end{itemize}

\vspace{1cm}
{\em
{\bf The application file must include:}

\begin{itemize}
\item Form 1: Professional history (page~\pageref{formulaire:parcours})
\item Form 2: Summary of your past activity (page~\pageref{formulaire:activite})
\item Form 3: Major contributions (page~\pageref{formulaire:contributions})
\item Form 4: Research program (page~\pageref{formulaire:programme})
\item Form 5: Complete list of contributions (page~\pageref{formulaire:liste})
\end{itemize}
CRCN:
\begin{itemize}
  \item PhD dissertation reports (page~\pageref{rapport:these} for the dissertation reports and page~\pageref{rapport:soutenance} for the defense report)
\item A copy of most recent titles and diplomas (page~\pageref{diplome:these})
\item A recent photography of the applicant (optional, page~\pageref{photo})
\end{itemize}
DR2:
\begin{itemize}
\item Habilitation dissertation reports (if applicable)
\item A copy of most recent titles and diplomas
\item A recent photography of the applicant (optional)
\end{itemize}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tableofcontents
\vfill
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% A partir de la, vous recommencez a editer
%% This is where you begin editing again
%% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Note: chapter takes 2 arguments (one for each language). It writes out "Formulaire x -- french title \\ Form x -- english title} 
\chapter[Parcours professionnel]{Professional history}
\label{formulaire:parcours}
%%%%
%%% Vous pouvez supprimer les commentaires de chacune des sections
%%% suivantes (mais gardez intacts les`\section{...}')
%%% You may suppress the comments of each of the following sections,
%%% but keep the `\section{...}' items.
%%%%

% \BiLingual{Ce document suivra obligatoirement le plan indiqué ci-dessous
%   (conservez la numé\-ra\-tion des sections même si certaines d'entre
%   elles restent vides).}{ \\[0.1cm] }{This document should follow the guidelines 
%   given below (adhere to the order of the sections below, even
%   if some of them are non-applicable).}

\section{\BiLingual{Parcours Professionnel}{ / }{Professional history}}

\subsection*{\BiLingual{Situation professionnelle actuelle}{ / }{Current professional status}}
\BiLingual{Statut et fonction\footnotemark[2]}{ / }{Position and Status\footnotemark[2]}:
  Research associate\\
\BiLingual{Etablissement (ville - pays)}{ / }{Institution (city - country)}:
  Imperial College London (Londres - Royaume-Uni)\\
\BiLingual{Date d'entrée en fonction}{ / }{Start}:
  11/06/2018\\
% \BiLingual{[ ] Sans emploi}{ / }{Without employment}

\subsection*{\BiLingual{Expériences professionnelles antérieures}{ /}{Previous professional experiences}}
\medskip

\BiLingual{Déroulez votre parcours professionnel antérieur à Inria, chez Inria, en détachement ou en mise à disposition.}{\\[0.1cm]}{Detail your professional history, before Inria, at Inria, on secondment or leave.}\\

\hbox to\textwidth{\sf\hfil
\begin{tabular}{|c|c|C{7cm}|C{6cm}|}
  \hline
  Date début & Date fin &
  Etablissement & 
  Fonction et statut%\footnotemark[2]
  \\
  %
  \English{Start} & \English{End} &
    \English{Institution} & 
  \English{Position and status}%\footnotemark[2]}
  \\
  \hline
  01/09/2009    & 01/07/2013 &
  ENS Lyon & Élève fonctionnaire-stagiaire \\
  % \hline
  01/09/2013    & 30/09/2016 &
  Université de Rennes~1 / IRISA &
  Doctorant contractuel \\
  % \hline
  01/04/2017    & 01/04/2018   &
  Universidad de Chile / CMM
  % Center for Mathematical Modelling
  % \newline
  % (Facultad de Ciencias, Físicas, y matemáticas, Universidad de Chile)
  &
  Post-doctorant % (agent non-titulaire de l’université, CDD recherche)
  \\
  % \hline
  11/06/2018    & - & % 31/07/2020   &
  Imperial College London &
  Research associate % (agent non-titulaire de l’université, CDD recherche)
  \\
  % \GIVE{start}      & \GIVE{end}   & \GIVE{institution} & \GIVE{position+status} \\
  \hline
\end{tabular}\hfil}
% \footnotetext[2]{Indiquez avec précision chaque situation statutaire. Par exemple : pour une situation d'agent titulaire de la fonction publique, précisez le corps et le grade de rattachement, pour une situation de salarié(e) du secteur privé ou d'agent non titulaire d'un établissement public, précisez la nature du contrat salarial, etc.}
% \footnotetext[2]{\English For each position, indicate grade or rank. For example, for a tenured civil servant position, indicate the branch and rank, for a private sector position or non-tenured position in a public institution, indicate the nature of the work contract, etc.}

\medskip

\BiLingual{Nombre d'années d'exercice des métiers de la recherche après la thèse~: 3}{\\[0.1cm]}{Number of years of professional research experience after the PhD: 3}\\

  \section{\BiLingual{Interruptions de carrière}{ / }{Career breaks}}

  \medskip
  
  \hbox to\textwidth{\sf\hfil
  \begin{tabular}{|c|c|c|}
    \hline
    Date début & Date fin &
    \BiLingual{Motif de l'interruption}{ / }{Reason for interruption} \\ 
    %
    \English{Start} & \English{End} &
    \\
   \hline
    % \multicolumn{3}{|c|}{Aucune} \\
    %\GIVE{start}      & \GIVE{end}   & \GIVE{reason}  \\
    %\GIVE{start}      & \GIVE{end}   & \GIVE{reason}  \\
    %\GIVE{start}      & \GIVE{end}   & \GIVE{reason}  \\
    %\hline
  \end{tabular}\hfil}

\medskip

% \BiLingual{Conformément à l'article 3 de la « Charte Inria Égalité des chances », vous pouvez, si vous le souhaitez, préciser vos éventuelles périodes d'interruption de carrière.}{\\}{In accordance with Article 3 of the ``Inria Charter Equal Opportunities'', you may, if desired, specify your possible career break periods.}

% \bigskip

% \BiLingual{\url{\urlpariteFR}}{\\}{\url{\urlpariteEN}}\\ \ \\


\section{\BiLingual{Prix et distinctions}{ / }{Prizes and awards}}

% \BiLingual{Mentionnez l'intitulé et la date des prix et les organismes les ayant attribués. Fournissez une url vers la page web de chaque prix et distinction.}{\\[0.1cm]}{Mention the title and date of the awards as well as the granting organizations. Provide a url to the web page of each prize and award.}

% \GIVE{Prizes and awards}

\section{\BiLingual{Encadrement d'activités de recherche}{ / }{Supervision of research activities}}
 % \BiLingual{Encadrement de thèses, postdocs, ingénieurs et stages (master ou autres). Indiquez le nom des personnes encadrées, le sujet de leurs travaux, la part prise dans leur encadrement, et présentez brièvement le contenu et la portée de ces travaux.}{\\[0.1cm]}{Supervision of PhDs, postdocs, engineers, and interns (master’s or others). Mention the names of students, their research subjects, the amount of supervision involved, and give a brief presentation of the contents and significance of the work.}

% \GIVE{Supervision of research activities}

\begin{itemize}
  \item Encadrement de Tomás~Diaz, ingénieur en M2 à l’Universidad de Chile en 2017–2018,
    co-encadré par Éric~Tanter.
    Ce stage long avait pour but de concevoir une architecture de test
    pour l’interpréteur CoqR.
    Le programme final est disponible à l’adresse \url{https://github.com/TDiazT/CoqR-Tester}
    et les visualisations associées à l’adresse \url{https://coqr.dcc.uchile.cl}.
    Ce stage a débouché sur une publication~\cite{bodin2018R}.
  \item Encadrement de Benjamin~Gunton, étudiant en L3 à l’Imperial College en 2019,
    co-encadré par Philippa~Gardner.
    Ce stage visait à explorer comment les sémantiques squelettiques~\cite{bodin2019skeletal}
    peuvent servir à décider du déterminisme d’un langage de programmation.
    Ce travail était une première étape pour travailler sur des hyperpropriétés de programmes
    à l’aide des squelettes.
    Le déterminisme avait été spécifiquement choisi car simple,
    tout en étant très différent du cadre
    de l’interprétation abstraite choisi dans l’article original.
  \item Encadrement de Rao~Xiaojia, étudiant en M1 à l’Imperial College en 2020,
    co-encadré par Philippa~Gardner.
    Ce stage consiste à prouver en Coq des propriétés d’un interpréteur WebAssembly.
\end{itemize}

\section{\BiLingual{Responsabilités collectives}{ / }{Responsibilities}}

% \BiLingual{Participation à des comités de lecture (revues, conférences), participation à des conseils ou commissions, organisation de conférences, tâches d'intérêt collectif.}{\\[0.1cm]}{Mention any membership in editorial boards or other committees, participation in conference/workshop program or organization committees, tasks of collective interest.}

\begin{itemize}
  \item Membre du comité d’évaluation des artéfacts de POPL 2019.
\end{itemize}

% \GIVE{Responsibilities}

\section{\BiLingual{Management (le cas échéant)}{ / }{Management (if applicable)}}

% \BiLingual{Indiquez les équipes de recherche et les projets de recherche que vous avez encadrés. Séparez les deux catégories et donnez des éléments permettant d’apprécier l’importance de l’encadrement : taille des équipes, volumes des projets,...}{\\[0.1cm]}{Indicate the research teams and research projects that you have managed. Separate the two categories, and provide elements of appreciation on the importance of the management: size of teams or projects,  volume of the projects...}

% \GIVE{Management}

\section{\BiLingual{Collaborations, mobilité}{ / }{Collaborations, mobility}}

% \BiLingual{Décrivez les expériences de mobilité thématique ou géographique que vous avez accomplies ; mentionnez notamment les séjours de plus de trois mois dans des laboratoires différents de ceux dans lequels vous avez mené vos recherches. Listez les personnes avec qui vous avez eu une collaboration forte et régulière (co-publications, co-développement de logiciels,...) et préciser le sujet et le résultat de la collaboration.}{\\[0.1cm]}{Mention your mobility work in different fields or in alternate laboratories. In particular, mention all visits longer than three months to laboratories or departments distinct from those where you conducted your research. List the colleagues with whom you developed a strong and regular collaboration (joint publications, joint software development...) and explain the topic and the outcome of the collaboration.}
% \GIVE{Collaborations, visits}

\begin{itemize}
  \item Stage de trois mois en 2015, pendant ma thèse, à l’Imperial College avec Philippa Gardner.
    J’y ai travaillé sur la conception d’un domaine abstrait pour JavaScript compatible
    avec la règle de contexte (frame rule) de la logique de séparation.
    Ces travaux ont abouti à terme à une publication~\cite{bodin2016abstract}.
  \item J’ai fait deux postdocs~: un au Chili avec Éric Tanter,
    et un au Royaume-Uni avec Philippa Gardner.
    Ces deux postdocs ont respectivement abouti au projet CoqR et aux sémantiques squelettiques
    (voir fiches~\hyperref[fiche:coqr]{2} et \hyperref[fiche:skel]{3}).
\end{itemize}

\section{\BiLingual{Enseignement}{ / }{Teaching}}

%\BiLingual{Précisez les établissements dans lesquels vous avez enseigné, la nature et la durée des cours. Vous pouvez ne présenter que la partie la plus significative}{\\[0.1cm]}{For each course taught, specify the teaching institution and duration of the course. You can present only the most significant.}

%\GIVE{Teaching}

\newcommand\lengthcourse{50mm}
\newcommand\lengthuni{45mm}
\newcommand\lengthseances{16mm}
\begin{adjustbox}{center}
  \begin{tabular}{|l|c|c|c|c|c|}
  \hline
  Nom du cours
  & année
  & université
  & niveau
  & 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}


\section{\BiLingual{Diffusion de l'information scientifique}{ / }{Dissemination of scientific knowledge}}

% \BiLingual{Participation à des activités de diffusion de l'information scientifique vers des publics non spécialistes de votre domaine de recherche (participation à des ouvrages de vulgarisation, articles dans des revues généralistes ou à lectorats non académiques, interventions dans les lycées...).}{\\[0.1cm]}{Participation in science popularization activities towards the general public (textbooks, articles in popular science magazines, outreach to high schools...)}

% \GIVE{Dissemination}


\section{\BiLingual{Éléments divers}{ / }{Other relevant information}}

% \BiLingual{Indiquer ici les autres informations {\bf importantes}
%   susceptibles d'intéresser le jury.}{\\[0.1cm]}{Mention here other {\bf
%     important} information which you feel may be relevant to the
%   committee.}

% \GIVE{Other}

\begin{itemize}
  \item Exposé invité à la conférence Formal Methods for Statistical Software (FMfSS) en 2019.
\end{itemize}

\bigskip

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\chapter[Description synthétique de l'activité antérieure]{Summary of your past activity}
\label{formulaire:activite}

% \BiLingual{Donnez une description globale de votre activité antérieure, en montrant ses lignes directrices.}{\\[0.1cm]}
% {Give a global description of your past activity, showing the main driving ideas.}

% \begin{itemize}
% \item \textbf{CRCN} \\

%   \BiLingual{\bfseries Taille maximum de cette partie : 1
%     page}{\\[0.1cm]}{\bfseries Maximum size for this part: 1 page}\\[2mm]

% \item \textbf{DR2} \\

%   \BiLingual{\bfseries Taille maximum de cette partie : 2
%     pages}{\\[0.1cm]}{\bfseries Maximum size for this part: 2 pages}\\[2mm]
% \end{itemize}

Ma recherche s’est concentrée sur l’étude des langages de script,
% programmation à la sémantique complexe,
% en particulier les langages de script que sont JavaScript et R.
notamment JavaScript et R.
Ces langages sont en effet très utilisés en pratique~\cite{githut}
et ont des domaines d’application très variés.
%
De plus, ces langages se caractérisent par de nombreux comportements spéciaux,
et donc une sémantique complexe.
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
si une fonction attend l’un plutôt que l’autre.
%
Ceci donne un faux sentiment de correction,
les erreurs de programmation étant moins visibles~:
les programmes retournent parfois des valeurs fausses
qui ont l’air superficiellement correctes.
%
Par exemple, en JavaScript, si une expression de la forme \texttt{x + y}
apparait dans un contexte où \texttt{x} et \texttt{y} sont des tableaux,
de nombreuses heuristiques se chargeront de retrouver une valeur scalaire
(un nombre ou un chaîne de caractère).
Il s’agit probablement d’une erreur de programmation,
mais elle pourra passer inaperçue si le type de retour choisi
par ses heuristiques correspond au type attendu.
De telles erreurs sont très difficiles à détecter,
en particulier dans des domaines statistiques
% et elles sont une source d’erreurs importantes dans les sciences statistiques
(\parencite{herndon2014does} expose un tel exemple).
% dans un tableur qui a eu des conséquences politiques importantes).
%
% Ceci est une source potentiellement importante d’erreurs logicielles.

Ces comportements spéciaux complexifient énormément l’analyse de programmes.
Ils sont donc souvent ignorés ou simplifiés en recherche.
Malheureusement, ces hypothèses de recherche
sur ces fonctionnalités
ne correspondent que rarement aux usages pratiques~\cite{RichardsHBV11}.
%
Ces comportements spéciaux sont parfois
peu connus des développeurs~\cite{RInferno},
ce qui peut donner lieu à de nombreuses erreurs logicielles.

Ma recherche consiste à résorber ce décalage entre les analyses de programme
et les pratiques industrielles en prenant en compte
les comportements spéciaux des langages de script.
J’ai majoritairement travaillé dans le cadre de l’assistant de preuve Coq~\cite{Coq},
qui permet un haut niveau de confiance.
J’ai suivi deux directions de recherche principales~:
\begin{itemize}
  \item La création de modèles précis de langages de script.
  \item La conception d’analyses génériques pour ces modèles.
\end{itemize}

\section{Création de modèles précis de langages de script}

Cette direction correspond aux fiches~\hyperref[fiche:jscert]{1} et \hyperref[fiche:coqr]{2}.
Ses publications principales sont JSCert~\cite{popl14jscert} et CoqR~\cite{bodin2018R}.
Dans les deux cas, il s’agit d’une formalisation la plus complète possible
du langage considéré, sans aucune simplification.
Cette formalisation a pour but de servir de base de confiance
à des développements ultérieurs, tels des analyses de programme.

La contrainte clef est l’absence de simplification~:
il est tentant de simplifier la sémantique du langage,
ou de l’exprimer d’une manière plus idiomatique en Coq.
Cependant, de telles simplifications occulteraient certains comportements spéciaux,
% du langage considéré,
ce qui irait à l’encontre du but final du projet.
% servir de source de confiance.
De plus, de telles simplifications éloigneraient le modèle de sa spécification,
le rendant plus difficile à évaluer.
Enfin, elles freineraient l’adaptation du modèle
aux évolutions du langage formalisé.

Du fait de cette absence de simplifications ---
mais aussi de la complexité de la sémantique des langages de script ---
de tels modèles sont souvent très complexes.
Ils mettent ainsi à l’épreuve la capacité de Coq à manipuler de telles tailles de sémantiques.
%
Du fait de leur taille, ces modèles sont aussi difficiles à évaluer.
JSCert et CoqR ont donc mis en place des méthodes d’évaluation complémentaires,
% de ses modèles sémantiques,
notamment en construisant des modèles lisibles (et donc vérifiables),
mais aussi en mettant en place des architectures de tests.

\section{Conception d’analyses génériques}

Les modèles sémantiques JSCert et CoqR ont été conçus dans le but de servir à certifier
des analyses sur les langages considérés.
De telles analyses ont par exemple déjà été mises en place dans des projets ambitieux
comme Verasco~\cite{Verasco}~:
ce dernier se base sur la formalisation de Clight du projet CompCert~\cite{CompCert}
et consiste en un analyseur de Clight certifié en Coq.
%
Cependant, JSCert et CoqR sont des modèles particulièrement grands~:
JSCert compte plus de 900~règles de dérivation
et CoqR plus de 2~000.
À titre de comparaison, le langage Clight tel que 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 qu’une soixantaine de règles de dérivation,
  mais il est défini dans un style différent de celui de JSCert.
  %
  Les estimations données ici sont des estimations
  du nombre de règles obtenues si on spécifiait tous ces langages
  dans le style de JSCert.
}.
De tels tailles de sémantique ont nécessité l’introduction d’un formalisme facilitant
la définition et la preuve d’analyses~:
les sémantiques squelettiques
(voir \hyperref[fiche:skel]{fiche~3} ou la publication \parencite{bodin2019skeletal}).

Les sémantiques squelettiques
permettent de définir une analyse dans son cas le plus général,
pour ensuite l’appliquer à des formalisations effectives du langage de programmation considéré.
Ma recherche est cependant restée très théorique jusque là,
et aucun analyseur n’a en pratique été défini pour JavaScript ou R.
L’application du formalisme des sémantiques squelettiques à des analyses pratiques
est une direction importante de ma recherche future.
C’est par exemple dans ce but que j’ai conçu un domaine abstrait
pour JavaScript~\cite{bodin2016abstract}.
Ce domaine abstrait inclut une règle de contexte (frame rule)
issue de la logique de séparation,
ce qui dans le cas de JavaScript est un problème difficile~\cite{popl12-Towards}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\chapter[Contributions majeures]{Major contributions}
\label{formulaire:contributions}

%%%%
%%% Vous pouvez supprimer les commentaires de chacune des sections
%%% suivantes (mais gardez intacts les `\section{...}')
%%% You may suppress the comments of each of the following sections,
%%% but keep the `\section{...}' items.
%%%%

% {\bf 
% Taille maximum de cette partie / Maximum size for this part :
% \begin{itemize}
% \item {CRCN -- 3 fiches} \\
% \BiLingual{Taille maximum de cette partie : 3 pages}{\\[0.1cm]}
% {Maximum size for this part: 3 pages}

% \item {DR2 --  5 fiches}\\
% \BiLingual{Taille maximum de cette partie : 5 pages}{\\[0.1cm]}
% {Maximum size for this part: 5 pages}
% \end{itemize}
% }

% \medskip

% \BiLingual{Remplir une fiche par contribution majeure (5 au plus pour les candidatures DR2 --- 3 au plus pour les candidatures CRCN).\\

% Il peut s'agir d'une contribution scientifique donnant lieu à un
% ensemble de publications (voire une publication majeure), ou à un
% développement technologique (logiciel, matériel, robotique ou autre), d'une action de
% transfert industriel ou sociétal, d'une responsabilité collective, d'une activité
% d'animation d'une communauté de recherche, ou tout autre élément
% relevant des missions d'un chercheur ou d'une chercheuse. Les critères
% importants sont la créativité, l'originalité et l'impact. Chaque fiche
% suivra le plan indiqué ci-dessous. Dans l'ensemble du texte, pensez à
% donner, le cas échéant, les références permettant de consulter sur le
% Web les documents mentionnés (articles, thèses, logiciels, etc.).
% \\[0.2cm]
% Pour les logiciels, fournissez une autoappréciation selon le canevas disponible dans le document «~Criteria for Software Self-Assessment~» disponible à l'url\\ 
% \url{\urlsoftwareFR}.
% \\[0.2cm]
% Pour les actions de transfert (transfert technologique ou sociétal), fournissez une description selon le canevas disponible dans le document «~Evaluation des contributions scientifiques en matière de transfert / Guide méthodologique~» 
% disponible à l'url\\
% \url{\urltransfertFR}.
% % N'oubliez pas que vous pouvez utiliser des liens hypertexte dans le PDF. 
% \vspace{1cm}}


% {\par\vspace{1em}}{Fill in one form for each major contribution (at most 5 for the DR2
% candidates --- 3 for the CRCN candidates).\\

% It may be a scientific contribution expressed through a set of
% publications (or a single major publication) or through a technological
% development (software, hardware, robotic, or other); it may also be an
% industrial or a societal transfer, a participation to the management of research or
% to the animation of a scientific community, or any other element. The
% main criteria are creativity, originality and impact. Each form should
% follow the guidelines given below. In the body of the text, give the
% Web references for quoted documents (articles, dissertations,
% software,...), if available.}
% \\[0.2cm]
% For software, please use the «~Self-assessment software criteria~» guideline, available at the url \\
% \url{\urlsoftwareEN}.
% \\[0.2cm]
% For transfer actions (technology or society transfer) please describe your achievements following the guidelines «~Evaluating scientific contributions in relation to transfer / Methodological guide~» available at the url\\ \url{\urltransfertEN}.
% % Remember you can embed hypertext links in your PDF.}}

% \pagebreak
%% From now on, "\section" produces "Fiche #~: " 
\makeatletter
\renewcommand \thesection {Fiche \@arabic\c@section~:}
\makeatother

\vspace{-2ex}
\section{{JSCert}}
\label{fiche:jscert}
\vspace{1em}
\subsection{{Description de la contribution}}
% \subsection{\BiLingual{Description de la contribution}{ / }{Description of the contribution}}
%\BiLingual{Présentation courte de la contribution.}{\\[0.1cm]}{Short presentation of the contribution.}
Ma première contribution majeure consiste en le projet JSCert.
Ce projet vise à formaliser JavaScript en Coq,
dans le but de servir comme base à des développements formels sur ce langage de programmation.
En particulier, le but consistait à formaliser complètement le langage,
sans simplifications.
En effet, la complexité de JavaScript
réside dans tous ses cas particuliers, parfois inconnus des développeurs~:
conversion implicite de type,
effets de bords de certaines opérations,
les différents modes de l’opérateur \texttt{eval}, etc.
Le fait que ces cas particuliers soient nombreux a poussé
beaucoup de travaux~\cite{DBLP:conf/ecoop/AndersonGD05, thiemann-esop05}
à les ignorer ou les simplifier,
mais en ce faisant, une différence se créé
entre ce qu’analysent ces différents travaux et ce que fait JavaScript.
Cette différence est connue pour poser
des problèmes de sécurité~\cite{maffeis2009language, mmt-esorics09, mmt-oakland10}.
JSCert vise à précisément combler cette différence.

JSCert est une formalisation particulièrement grande~:
plus de 900~règles de dérivations.
Il est naturel de douter de la correction de cette formalisation elle-même.
Il a donc été nécessaire de mettre en place des liens avec le langage formalisé,
au travers de sa spécification par ECMA et de ses suites de tests.
JSCert a ainsi été conçu pour être aussi proche que possible
de la spécification par ECMA, chaque ligne de spécification correspondant
à une règle de dérivation pour JSCert et réciproquement.
D’autre part, JSCert est accompagné d’un interpréteur (nommé JSRef)
qui a été testé sur les suites de tests.

    \begin{center}
\begin{tikzpicture}
    \node[code node] (ecma) {Spécification par ECMA} ;
    \node[code node, above of = ecma, node distance = 18mm] (jscert) {JSCert} ;
    \node[code node, right of = jscert, node distance = 6cm] (jsref) {JSRef} ;
    \node[code node, below of = jsref, node distance = 18mm] (suites) {Suites de tests} ;

    \draw[<->, thick] (ecma) -- node [left] {Proximité de lecture} (jscert) ;
    \draw[<-, thick] (jscert) -- node [above] {Preuve de correction} (jsref) ;
    \draw[<->, thick] (jsref) -- node [right] {Test} (suites) ;
\end{tikzpicture}
    \end{center}

\subsection{{Contribution personnelle du candidat}}
%\subsection{\BiLingual{Contribution personnelle de la candidate ou du candidate}{ / }{Personal contribution of the applicant}}
% \BiLingual{Indiquez les différents coauteurs, et donnez des éléments permettant d'apprécier votre contribution personnelle sur l'ensemble du travail.}{\\[0.1cm]}{Mention the different participants and give elements of appreciation concerning your own contribution.}
J’étais présent dès le début du projet et ai donc pu contribuer à de nombreuses parties de ce dernier.
Les deux parties où j’ai le plus contribué sont l’écriture de l’interpréteur JSRef en Coq,
ainsi que sa preuve de correction avec l’aide d’Arthur Charguéraud~:
j’étais le contributeur principal sur ces deux parties.
J’ai aussi participé à la formalisation de nombreuses fonctionnalités de JavaScript
dans la spécification JSCert,
même si je ne suis pas le contributeur principal sur cette partie.

Plusieurs versions de JSCert ont été produites, pour plusieurs versions différentes
de la spécification par ECMA, en particulier la version~3 et la version~5.
Ces versions étaient malheureusement suffisamment différentes pour qu’une grande partie
du travail doive être dupliquée~:
j’ai donc conçu deux interpréteurs dans ce processus,
et j’ai participé à l’identification des points améliorables
pour construire la seconde version de l’interpréteur.
% dans la conception du premier interpréteur.

Ce travail est une collaboration entre plusieurs équipes à Inria et à l’Imperial College,
avec
Arthur Charguéraud, Daniele Filaretti, Philippa Gardner, Sergio Maffeis, Daiva Naudžiūnienė,
Alan Schmitt, et Gareth Smith.


\subsection{{Originalité et difficulté}}
% \subsection{\BiLingual{Originalité et difficulté}{ / }{Originality and difficulty}}

% \BiLingual{Quelles sont les approches concurrentes ? En quoi
%   l'approche proposée est-elle nouvelle, originale ? Quels ont été
%   les connaissances nécessaires, les choix techniques, éventuellement
%   l'encadrement d'étudiants ? Quels sont les principaux résultats obtenus ou à
%   obtenir ?}{\\[0.1cm]}{What are the competing approaches? To what extent
%   is this approach new and original? Which knowledge, technical
%   choices and possible student advising were necessary? What main results did
%   you obtain or do you expect to obtain?}

JSCert n’est pas la première sémantique formelle de JavaScript,
ni même du langage complet
(de nombreux travaux ont été faits sur des sous-langages).
C’est cependant la première formalisation reliée \emph{à la fois}
à la spécification par ECMA et aux suites de tests,
ce qui la rend particulièrement digne de confiance.
C’est de plus la première sémantique de JavaScript exécutable dans un assistant de preuve.
En conséquence, JSCert a été le premier projet qui a permis de lier formellement
les suites de tests à la spécification,
et donc d’évaluer la couverture de la spécification par les suites de tests.
%
JSCert est un projet Coq conséquent et compte
parmi les plus grandes formalisations de langages de programmation en Coq.

\subsection{{Validation et impact}}
% \subsection{\BiLingual{Validation et impact }{ / }{Validation and impact}}

% \BiLingual{Qui utilise ou a utilisé votre travail et dans quel but (membres de votre équipe, participants d'un projet financé, transfert industriel,~...)~? \\
% Quel est ou a été l'impact sur vos travaux de recherche, sur ceux de vos collègues, sur la communauté scientifique ?}{\\[0.1cm]}
% {Who has used or is using your work and for what objectives (members of the staff, participants to a research grant, industrial transfer...)?\\
% What is the impact of this work on your own research, on that of your colleagues, on the scientific community?}

Le projet JSCert a permis de lier la spécification par ECMA avec les suites de test de JavaScript.
Ceci a permis de repérer certaines incohérences~:
parfois le problème se trouvait dans les suites de tests,
mais aussi parfois dans la spécification.
De nombreuses discussions avec le comité de spécification ECMA TC39 ont ainsi permis d’informer
le comité de ces problèmes, et de guider la spécification des versions futures de JavaScript\footnote{
  En particulier,
  le travail de communication d’Alan Schmitt avec le comité de spécification est
  remarquable.
  Il a influencé plusieurs choix de spécification du comité,
  notamment sur la valeur de retour du \texttt{while}
  et sur l’usage de notations monadiques dans la spécification.
}.

Ce lien entre la spécification par ECMA et les suites de tests ont aussi permis d’évaluer
la couverture de la suite de test vis-à-vis de la spécification,
et ainsi de repérer des parties sous-testées.
Des expérimentations dans ces parties spécifiques ont mis en avant des bogues dans
SpiderMonkey (le moteur JavaScript de Firefox)
et V8 (celui de Chrome).
Ces bogues ont été reportés et validés par les différents navigateurs.

JSCert est maintenant reconnu dans la communauté comme la formalisation de référence
de JavaScript en Coq, et est utilisé dans des projets de recherches
tant proches des équipes participantes (par exemple~\cite{fragoso2017javert})
que des équipes indépendantes
(par exemple \url{https://querycert.github.io/} utilise JSCert dans sa partie JavaScript).

\subsection{{Diffusion}}
% \subsection{\BiLingual{Diffusion}{ / }{Dissemination}}

% \BiLingual{Mentionnez les publications liées, les brevets éventuels,
%   et autres éléments de diffusion dans le cas de réalisations (dépôt
%   APP, page web, documentation, licence, tutoriaux)}{\\[0.1cm]}{Mention the
%   publications related to the realization, the possible patents, and
%   other distribution elements in the case of a development (Program
%   protection agency registration, web page, documentation, licence,
%   tutorials...)}

Le code source du projet et les ressources associées sont disponibles en ligne~:
\url{http://jscert.org/}.
Le projet JSCert a abouti à de nombreuses publications.
Les principales publications auxquelles j’ai participé sont
\parencite{bodin2013certified} relative à l’interpréteur
pour la version~3 de la spécification par ECMA,
et \parencite{popl14jscert}, la publication principale du projet JSCert.

Ce projet m’a aussi conduit a concevoir un domaine abstrait
pour JavaScript~\cite{bodin2016abstract},
dans le but de pouvoir l’appliquer à JSCert.


%\newpage
\vfill
\section{CoqR}
%\section{\BiLingual{Nom de la contribution}{ / }{Title of the contribution}}
\label{fiche:coqr}
\vspace{1em}

%\BiLingual{Si nécessaire, complétez cette fiche en suivant le même
%plan que la première.}{\\[0.1cm]}{If needed, fill this section using the same
%subsections as in the first one.}

\subsection{{Description de la contribution}}
%\subsection{\BiLingual{Description de la contribution}{ / }{Description of the contribution}}

Mon premier post-doctorat portait sur R,
un langage de programmation très utilisé en statistiques
(avec des domaines d’application allant de la biologie à la finance,
en passant par le Big Data).
L’objectif était de formaliser le langage de programmation en Coq
en suivant l’approche de JSCert,
dans le but de certifier des programmes~R ou de concevoir des analyseurs certifiés.
%
Le projet CoqR est basé sur les mêmes principes que JSCert~:
il consiste en un interpréteur Coq (d’un cœur) de R associé à deux liens complémentaires à R.
D’une part, chaque ligne de l’interpréteur peut être relié à une ligne du code source de l’interpréteur de référence GNU~R.
D’autre part, l’interpréteur a été testé sur les suites de tests associées.
%
Ce projet m’a donc permis de valider la méthodologie introduite par JSCert sur un autre langage.

\subsection{{Contribution personnelle du candidat}}
%\subsection{\BiLingual{Contribution personnelle de la candidate / du candidat}{ / }{Personal contribution of the candidate}}

Je suis le contributeur principal de ce projet~:
j’ai conçu le projet et j’ai produit la presque totalité de la formalisation Coq.
Ces travaux sont en collaboration avec Tomás Diaz et Éric Tanter.
Tomás Diaz était sous ma supervision dans ce projet,
et s’occupait de concevoir une architecture de test en Python.

\subsection{{Originalité et difficulté}}
%\subsection{\BiLingual{Originalité et difficulté}{ / }{Originality and difficulty}}

R est un langage de programmation connu pour être très complexe~\cite{RInferno},
et très peu d’analyseurs existent pour ce langage.
À ma connaissance, CoqR est la première formalisation du langage qui ne cherche
pas à le simplifier.
En terme de formalisation Coq, CoqR est une formalisation imposante~:
environ 18~000~lignes de définitions Coq.
À titre de comparaison, l’interpréteur de JSCert
(qui est déjà considéré comme ayant une taille importante)
en contient environ 12~500.
Cette taille a posé des problèmes de passage à l’échelle pour certaines définitions~:
ce projet a poussé Coq à ses limites, ce qui a causé des difficultés supplémentaires.

\subsection{{Validation et impact}}
% \subsection{\BiLingual{Validation et impact }{ / }{Validation and impact}}

Le projet étant encore récent, il est difficile d’estimer l’impact réel qu’il a eu.
Cependant, un soin particulier a été apporté afin que ce projet soit réutilisable
par des personnes hors du projet.
J’ai ainsi été contacté à plusieurs reprises par des chercheurs indépendants intéressés
par des aspects particuliers du projet,
ce qui a parfois abouti à des mises à jour mineures de la formalisation
pour s’adapter à leurs besoins.
%
Par exemple \parencite{goel2019design} s’intéressait à l’aspect paresseux des calculs dans R.
Il manquait malheureusement certaines fonctions dans CoqR pour pouvoir comparer leur approche~:
nous avons ajouté les fonctions en question suite à leur publication.
Nous sommes encore en contact avec ces auteurs.

\subsection{{Diffusion}}
% \subsection{\BiLingual{Diffusion}{ / }{Dissemination}}

Le code source du projet et les ressources associées sont disponibles en ligne~:
\url{https://github.com/Mbodin/CoqR}.
Le projet a abouti à deux publications~:
\parencite{CoqRCoqPL} qui présente le début du projet,
et \parencite{bodin2018R} qui présente la version actuelle du projet,
avec une application sur des preuves relativement simples.

\newpage
\section{\BiLingual{Sémantiques squelettiques}{ / }{Skeletal Semantics}}
\label{fiche:skel}
\vspace{1em}

%\BiLingual{Si nécessaire, complétez cette fiche en suivant le même
%plan que la première.}{\\[0.1cm]}{If needed, fill this section using the same
%subsections as in the first one.}

\subsection{{Description de la contribution}}

Devant les tailles des formalisations JSCert et CoqR,
produire un projet d’analyse similaire
à Verasco~\cite{Verasco} (un analyseur de C certifié en Coq) pour ces langages
semblait être une tâche herculéenne.
Cependant, une grande différence avec le C est que les modèles mémoire de JavaScript et de R
sont relativement simples~:
pas d’arithmétique pointeur et
pas de modèle mémoire faible ou relâché. % {\English weak memory model}
La seule difficulté concerne donc la taille de ces sémantiques.
La difficulté de JavaScript et~R est donc différente de celle du~C~:
ils ont un modèle mémoire assez simple,
mais une sémantique pleine de comportements spéciaux.

Les sémantiques squelettiques sont un formalisme pour attaquer spécifiquement ce problème~:
c’est un langage de description de sémantique simple
à partir duquel il est possible de définir plusieurs interprétations et de les montrer correctes.
Le point fondamental est que ces interprétations peuvent être définies et montrées correctes
une fois pour toute, quelque soit la sémantique squelettique.
Il est ainsi possible de définir des interpretations concrète et abstraite,
de montrer qu’elles sont cohérentes pour toute sémantique squelettique,
puis de les appliquer à une sémantique squelettique de JavaScript ou de R.
Ces preuves s’appuient sur des propriétés à prouver sur le modèle mémoire,
qui dans le cas de JavaScript et R sont assez simples à montrer.

\subsection{{Contribution personnelle du candidat}}
% \subsection{\BiLingual{Contribution personnelle de la candidate / du candidat}{ / }{Personal contribution of the candidate}}

Les sémantiques squelettiques sont issues d’un projet sur le très long terme~:
le projet initial consistait seulement à formaliser le style de sémantique
utilisé dans JSCert (afin d’en construire des analyses).
J’étais alors très impliqué tant dans la formalisation papier
(qui est devenue le quatrième chapitre de ma thèse~\cite{BodinThesis})
que la formalisation en Coq (dont j’étais l’unique contributeur).

Le projet s’est ensuite généralisé à un style beaucoup plus général,
mené par Alan Schmitt, en collaboration avec Philippa Gardner et Thomas Jensen.
Je me suis alors surtout focalisé sur la formalisation Coq du projet
(et j’étais l’unique contributeur sur cette partie).
J’ai cependant continué à contribuer dans les fondements théoriques,
sans être le contributeur principal.

\subsection{{Originalité et difficulté}}
% \subsection{\BiLingual{Originalité et difficulté}{ / }{Originality and difficulty}}

De nombreux autres projets de recherches partent du constat qu’il est difficile
de construire des analyses pour JavaScript,
et ont donc construit des langages de spécification pour ce dernier~\cite{Politz:S5, jus}.
Beaucoup de ces langages sont cependant très spécifiques à JavaScript
(ou plus généralement, à leur langage cible).
Des langages de spécification génériques existent
cependant~\cite{ott, mosses2005action, churchill2015reusable}.
Le plus connu est \(\mathbb{K}\)~\cite{rosu-serbanuta-2010-jlap}.
Ce dernier est cependant un langage à la sémantique complexe
et parfois peu spécifiée~\cite{li2018isak}.

Les sémantiques squelettiques prennent l’approche opposée en définissant
un langage de spécification le plus simple possible.
Cette simplicité est un choix conscient,
et choisir la forme exacte de sémantique à la fois expressive,
adaptée pour des langages complexes, et simple
a demandé beaucoup de travail.
Cette simplicité permet de définir formellement toutes les interprétations
des sémantiques squelettiques et leurs preuves de correction en général,
indépendamment du langage de programmation sur lequel il sera appliqué.
Un tel résultat est crucial pour espérer pouvoir construire une analyse certifiée
de langages de programmation complexes comme JavaScript ou R.

\subsection{{Validation et impact}}
% \subsection{\BiLingual{Validation et impact}{ / }{Validation and impact}}

Cette ligne de recherche a de nombreux potentiels
dans la création d’analyses certifiées pour des langages de programmation complexes.
Son application à des langages effectivement utilisés demande cependant
de traduire des formalisations telles JSCert ou CoqR en squelette,
ce qui risque de prendre du temps, mais qui est prévu.

Un autre intérêt de cette ligne de recherche est qu’elle donne un cadre formel général
non seulement pour définir des analyses, mais pour les composer.
Il est ainsi possible de considérer comment des types d’analyses très différentes
(par exemple l’interprétation abstraite et la logique de séparation)
peuvent être combinées en général~:
il est connu comment combiner ces analyses dans certains cas particuliers,
mais il n’existe à ma connaissance aucun cadre général connu pour le faire.

\subsection{{Diffusion}}
% \subsection{\BiLingual{Diffusion}{ / }{Dissemination}}

Le code source du projet et les ressources associées sont disponibles en ligne~:
\url{http://skeletons.inria.fr/}.
La publication principale est \parencite{bodin2019skeletal}.
Les versions précédentes des sémantiques squelettiques
(lorsque le but était de formaliser le format de JSCert)
ont aussi abouti à des publications
dans des conférences nationales~\cite{FestschriftDaveSchmidt, bodin2014pretty},
et internationales~\parencite{cpp2015pbs}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter[Programme de recherche]{Research program}
\label{formulaire:programme}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Réglages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

\input{spades.tex}

\vspace{-5mm}

\BiLingual{
%   Étant donné l'organisation d'Inria, tout chercheur, ou toute chercheuse, a vocation à être affecté(e) dans une équipe-projet. Un candidat, ou une candidate, indique donc généralement dans son dossier de candidature l'équipe-projet dans laquelle elle ou il souhaite être affecté(e). Il est dans ce cas fortement recommandé de prendre préalablement contact avec la ou le responsable de l'équipe-projet souhaitée. 
% \smallskip

% Il est néanmoins aussi possible de déposer une candidature sans préciser {\em a priori} une équipe-projet d'accueil. Dans ce cas, si la candidate ou le candidat est déclaré(e) admissible, une ou plusieurs équipes d'accueil
% pourront lui être proposées entre la phase d'admissibilité et la phase d'admission. Cette proposition d'affectation
% se fera en prenant en compte les aspirations de la candidate ou du candidat, celles des équipes, et la politique
% scientifique d'Inria.
% \smallskip

% Dans le cas où la candidature a lieu dans une équipe-projet, le candidat ou la candidate est invité(e) à expliquer
% dans son programme de recherche son intégration dans l'équipe-projet souhaitée.
% \smallskip 

% Dans le cas où l'équipe-projet n'est pas choisie au moment de la candidature, le candidat ou la candidate n'est pas tenu(e) de détailler son intégration. Elle ou il peut néanmoins, sans que cela soit une obligation, indiquer des noms de chercheurs ou de chercheuses avec qui elle ou il pourrait collaborer en cas de recrutement.
% \medskip

\CHOSEN~ Je souhaite candidater dans l'équipe-projet, ou les équipes-projets suivante(s) : \teamName \\
% \medskip


\NOTCHOSEN~ Je ne souhaite pas choisir d'équipe-projet pour l'instant. En cas d'admissibilité, je serai contacté(e) par la présidente ou le président du jury pour discuter de possibles équipes d'accueil.
}
{\\[0.4cm]}
{

\vspace{-5mm}

% Given Inria's organization, any researcher should be assigned to a project-team. A candidate therefore generally indicates in his or her application file the project-team to which he or she wishes to be assigned. In this case, it is strongly recommended to contact the leader of the desired project-team beforehand.
% \smallskip

% However, it is also possible to submit an application without specifying a priori a host project-team. In this case, if the candidate is declared eligible, one or more host teams will be proposed between the eligibility phase and the admission phase. This assignment proposal will be made taking into account the aspirations of the candidate, those of the teams, and Inria's scientific policy.
% \smallskip

% In the case of an application in a project-team, the candidate is invited to explain in his or her research program the integration in the desired project-team.
% \smallskip

% In the case when the project-team is not selected at the time of the application, the candidate is not required to detail his or her integration. However, he or she may, without this being an obligation, indicate the names of researchers with whom he or she could collaborate in the case of recruitment.

% \medskip

\CHOSEN~ I would like to apply for the following project-team(s) : \teamName
\medskip

\NOTCHOSEN~ I prefer not to choose a project-team for the moment. If I am considered eligible, I will be contacted by the chair of the jury to discuss possible host teams.
}
\medskip


\BiLingual{Intitulé du programme de recherche :
    Sémantiques squelettiques: Analyses certifiées de programmes réels
    }{\\}{Title of research program:
    Skeletal Semantics: Certified Analyses of Real-world Programs
    }


% \BiLingual{\bfseries Taille maximum de cette partie : 3 pages (CRCN et DR2)}{\\[0.1cm]}{\bfseries Maximum size for this part: 3 pages (CRCN and DR2)}\\[2mm]

% \GIVE{Your detailed research program}

\newcommand\FixTooMuchSpaceBeforeParagraph{\vspace{-2mm}}

\subsection{Introduction et Contexte}

\CTintroduction{}

\CTprojet{}

\subsection{Intégration dans \teamName}

\CTintegration{}


\pagebreak
\section*{Bibliographie}
\printbibliography[heading=none]{}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\vfill\pagebreak
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter[Liste complète des contributions]{Complete list of contributions}
%\chapter[Liste complète des contributions\protect\footnotemark\ ]{Complete list of contributions\protect\efootnotemark\ }
\label{formulaire:liste}

% \footnotetext{\BiLingual{Les publications et réalisations les plus significatives devront, dans la mesure du possible, être consultables sur la page web de la candidate ou du candidat.}{\\}{\hspace*{6mm}Most relevant contributions (publications, software) should be, as much as possible, available for consultation via the web page of the applicant.}}

% Mes publications sont consultables depuis ma page web~: \url{https://www.doc.ic.ac.uk/~mbodin/esplorado.html}.

% Remember: you can embed hypertext links in the PDF file, using \url or \href 

\subsection{\BiLingual{Publications caractéristiques}{ / }{Representative publications}}

% \BiLingual{Indiquez ici des publications (au plus 3) qui caractérisent le mieux votre recherche et votre savoir-faire, et dont vous êtes particulièrement fier/fière.  Il est impératif qu'elles soient accessibles sur votre page web.}{\\[0.1cm]}
%           {Give here (at most 3) publications, representative of your research and know-how, of which you are especially proud. They must be available on your web page.
%
% \GIVE{Your three most representative publications}}

\begin{refsection}
  \nocite{popl14jscert}
  \nocite{bodin2018R}
  \nocite{bodin2019skeletal}
  \printbibliography[resetnumbers=true, heading=none]{}
\end{refsection}

\subsection{Publications}

% \BiLingual{Liste complète des publications triées par catégories (revues internationales, conférences internationales avec comités de lecture, livres et chapitres de livre, autres publications internationales, revues nationales, conférences nationales avec comités de lecture, rapports de recherche et articles soumis).\\ En particulier, il est recommandé à la candidate ou au candidat d'indiquer en caractères gras les publications dans des journaux internationaux ou conférences internationales de grande qualité. 
% Il peut être utile d'expliquer {\bf en quelques mots} en tête de cette partie les pratiques de votre communauté concernant l'ordre des auteurs.}{\\[0.2cm]}
% {Full list of publications sorted by categories (international journals, international conferences with selection committee, books and book chapters, other international publications, national journals, national conferences with selection committee, research reports and papers under review). \\
%   We recommend specifying ({\em e.g.} in bold characters) publications in high-quality journals or conferences. You might
%   consider explaining {\bf in a few words} the common practice in your
%   scientific community regarding the order of the authors of publications.}

Dans mon domaine, l’ordre des auteurs est la plupart du temps l’ordre alphabétique.


 \subsubsection{\BiLingual{Revues internationales}{ / }{International journals}}
 \subsubsection{\BiLingual{Conférence internationales avec comité de lecture}{ / }{Reviewed international conferences}}

\begin{refsection}
  \newrefcontext[sorting=ynt]
  \addtocategory{boldentry}{bodin2019skeletal}
  \addtocategory{boldentry}{popl14jscert}
  \toggletrue{bbx:boldentries}

\nocite{popl14jscert}
\nocite{cpp2015pbs}
\nocite{bodin2019skeletal}
\nocite{bodin2018R}
\nocite{CoqRCoqPL}
\nocite{FestschriftDaveSchmidt}
\nocite{endrullis2013circular}
\nocite{monniaux2011modular}
  \printbibliography[resetnumbers=true, heading=none]{}
\end{refsection}

 \subsubsection{\BiLingual{Livres et chapitres de livre}{ / }{Books and book chapters}}
 \subsubsection{\BiLingual{Autres publications internationales (posters, articles courts)}{ / }{Other international publications (posters, short papers)}}

\begin{refsection}
  \newrefcontext[sorting=ynt]
% \nocite{BodinThesis}
\nocite{FMfSS2019}
\nocite{posterVerifiedSoftware2019}
  \printbibliography[resetnumbers=true, heading=none]{}
\end{refsection}

 \subsubsection{\BiLingual{Revues nationales}{ / }{National journals}}
 \subsubsection{\BiLingual{Conférences nationales avec comité de lecture}{ / }{Reviewed national conferences}}
\begin{refsection}
  \newrefcontext[sorting=ynt]
\nocite{bodin2013certified}
\nocite{bodin2014pretty}
\nocite{bodin2016abstract}
  \printbibliography[resetnumbers=true, heading=none]{}
\end{refsection}

 \subsubsection{\BiLingual{Rapports de recherche et articles soumis}{ / }{Research reports and publications under review}}

\subsection{\BiLingual{Développements technologiques : logiciel ou autre réalisation}{ / }{Technology development : software or other realization}}

% \BiLingual{Liste complète des développements technologiques: fournissez une auto-appréciation selon le canevas disponible dans le document «~Criteria for Software Self-Assessment~» disponible à l'url\\ \url{\urlsoftwareFR}.}{\\[0.3cm]}{Full list of technology developments: please use the «~Self-assessment software criteria~» guideline, available at the url\\ \url{\urlsoftwareEN}.}\\

Toutes les réalisations listées ici sont des formalisations Coq en partie extraite vers OCaml.
J’ai attaché une grande importance à ce que l’on puisse tester chacune de ces formalisations,
et elles sont donc toutes associées à un parseur en OCaml,
ainsi que tout ce qui est nécessaire pour les exécuter en pratique.
J’attache une grande importance à la documentation en Coq,
ce qui a d’ailleurs été remarqué dans mes reviews de l’artéfact
de la formalisation des sémantiques squelettiques.

\paragraph{JSCert}
\begin{itemize}
  \item Formalisation associée à \parencite{popl14jscert}, \url{http://jscert.org/}.
  \item Software: A-3, SO-3, SM-2, EM-1, SDL-4.
  \item Own contribution: DA-2, CD-3, MS-1, TPM-1.
\end{itemize}

\paragraph{Formalisation Coq des sémantiques pretty-big-step}
\begin{itemize}
  \item Formalisation associée à \parencite{cpp2015pbs}, \url{http://ajacs.inria.fr/coq/cpp2015/}.
  \item Software: A-2, SO-4, SM-1, EM-1, SDL-4.
  \item Own contribution: DA-4, CD-4, MS-1, TPM-1.
\end{itemize}

\paragraph{CoqR}
\begin{itemize}
  \item Formalisation associée à \parencite{bodin2018R}, \url{https://github.com/Mbodin/CoqR}.
  \item Software: A-3, SO-3, SM-2, EM-2, SDL-4.
  \item Own contribution: DA-4, CD-4, MS-2, TPM-4.
\end{itemize}

\paragraph{Formalisation Coq des sémantiques squelettiques}
\begin{itemize}
  \item Formalisation associée à \parencite{bodin2019skeletal}, \url{https://gitlab.inria.fr/skeletons/Coq}.
  \item Software: A-3, SO-4, SM-2, EM-1, SDL-4.
  \item Own contribution: DA-3, CD-4, MS-1, TPM-3.
\end{itemize}

\subsection{\BiLingual{Impact socio-économique et transfert}{ / }{Socio-economic impact and transfer}}

% \BiLingual{Cette partie vous permet de décrire vos activités ayant eu un impact socio-économique (une fiche par activité). Elle ne se limite pas au transfert industriel proprement dit.}{\\[0.1cm]}
%           {Please describe your activities that have had a socio-economic impact. Note that this is not limited to industrial transfer, although it is clearly included.}

%           \medskip

% \BiLingual{Pour chaque action de transfert (technologique ou sociétal), fournissez une description selon le canevas disponible dans le document «~Evaluation des contributions scientifiques en matière de transfert / Guide méthodologique~» disponible à l'url\\ \url{\urltransfertFR}.}{\\[0.3cm]}{For each transfer action (technology or society transfer) please describe your achievements following the guidelines «~Evaluating scientific contributions in relation to transfer / Methodological guide~»  available at the url\\ \url{\urltransfertEN}.} 

% \medskip         

% \BiLingual{Enfin, les candidats ayant eu une expérience industrielle (ou plus généralement hors du cadre de la recherche académique) peuvent la présenter dans cette section de manière concise.}{\\[0.1cm]}
% {Finally, applicants with an experience in industry (or more generally outside of academic research) may also highlight this experience in this section in a concise way.}

\ignore
{} % Comment to remove.
{
\newpage
\refstepcounter{dummy}

Les pages suivantes contiennent les documents suivants~:
\begin{itemize}
  \item Les rapports de thèse, de Roberto Giacobazzi et Anders Møller (page~\pageref{rapport:these}),
  \item Le rapport de soutenance de thèse (page~\pageref{rapport:soutenance}),
  \item Une copie du diplôme de thèse (page~\pageref{diplome:these}).
\end{itemize}

Il était aussi demandé de joindre une photographie du candidat de manière facultative~:

\vfill
\label{photo}
\begin{center}
\includegraphics{documents/photo.jpg}

Martin Bodin
\end{center}
\vfill

\newpage
\refstepcounter{dummy}
\label{rapport:these}
\includepdf[pages={1-3,5-7}]{documents/Rapports.pdf}

\newpage
\refstepcounter{dummy}
\label{rapport:soutenance}
\includepdf[pages=-]{documents/Soutenance.pdf}

\newpage
\refstepcounter{dummy}
\label{diplome:these}
\includepdf[pages=-]{documents/These.pdf}
}

\end{document}

