\begin{refsection}[ bib/hdr_noverlan.bib, bib/hdr_verlan.bib, bib/insdel.bib, bib/pn.bib, bib/psystems.bib, bib/mcrs.bib, bib/arrays.bib, bib/programming.bib, bib/algebra.bib, bib/complex-sys.bib, bib/sivanov.bib ] \section{Activités de recherche} J'ai commencé mes travaux de recherche en 2009 au sein de l'Institut de Mathématiques et d'Informatique de Moldavie sous la direction de Yurii \textsc{Rogozhin}, et j'ai continué en 2012 par entreprendre une thèse sous la direction de Serghei \textsc{Verlan} au Laboratoire d'Algorithmique, Complexité et Logique de l'Université Paris Est Créteil. J'ai également eu de nombreuses collaborations internationales, notamment avec Rudolf \textsc{Freund} et Ion \textsc{Petre}. J'ai aussi travaillé activement avec Elisabeth \textsc{Pelz}, Artiom \textsc{Alhazov}, Vladimir \textsc{Rogojin}. Afin de collaborer avec Ion \textsc{Petre}, j'ai effectué de multiples visites au laboratoire Combio à l'université Åbo Akademi à Turku, Finlande. Les sujets de recherche que j'ai abordés jusqu'à maintenant se situent dans les domaines du calcul inspiré par la biologie et des langages formels. Lors de mon doctorat, j'ai travaillé également sur des problèmes non reliés directement au sujet de ma thèse. Dans la suite de cette section, je résume ma thèse, puis les résultats obtenus en dehors de son cadre. \subsection{Travaux de thèse} Ma thèse porte sur la puissance d'expression et l'universalité de modèles de calcul inspirés par la biologie. Les travaux présentés se structurent en quatre parties. Dans la première il s'agit de la puissance d'expression des systèmes d'insertion/effacement ({\em insertion-deletion systems}), un modèle de réécriture de chaînes de symboles formels par les opérations d'insertion et d'effacement. La deuxième partie du manuscrit se focalise sur l'universalité des réseaux de processeurs évolutionnaires ({\em networks of evolutionary processors}), qui est une formalisation d'un ensemble des unités de traitement de chaînes de caractères reliés en réseau. La troisième partie considère les machines à registres universelles à deux et à trois registres, ainsi qu'une généralisation de ce modèle. La dernière partie porte sur l'universalité des réseaux de Petri avec des arcs inhibiteurs. Nous rappelons que l'universalité est la propriété d'une classe de modèles de calcul d'avoir un objet, dit universel, qui peut répliquer les résultats de n'importe quel autre objet de cette classe, la simulation pouvant éventuellement se faire à un codage près. D'autre part, la complétude computationnelle est la propriété d'une classe de contenir, pour tout langage récursivement énumérable, un objet qui l'engendre. \subsubsection{Systèmes d'insertion/effacement} Les opérations d'insertion et d'effacement sont connues depuis longtemps dans la théorie des langages formels, surtout la variante sans contexte qui généralise les opérations de concaténation et quotient, deux opérations fondamentales~\cite{Haussler82,KariPhD}. L'inspiration qui a motivé l'introduction de l'insertion et l'effacement vient de la linguistique, car elles semblent modéliser assez précisément les procédés de construction des phrases dans une langue vivante~\cite{Marcus69,PaunKluwer97}. Il a été montré récemment que l'étude de l'insertion de l'effacement est intéressante du point de vue biologique, car ses opérations formalisent l'hybridation erronée des brins d'ADN ({\em mismatched DNA annealing})~\cite{PRSbook}. De plus, il a été découvert que même l'édition de l'ARN ({\em RNA editing}) réalisée par certains protozoaires consiste généralement en des ajouts et des suppressions dans des brins d'ARN. De manière intuitive, une règle d'insertion rajoute une sous-chaîne à une chaîne de caractères dans un contexte donné. Une règle d'effacement agit de la façon duale : elle supprime une sous-chaîne d'une chaîne de caractères, dans un contexte donné. Un système d'insertion/effacement ({\em insertion-deletion system}) possède un ensemble fini de règles d'insertion et d'effacement ; il engendre un langage en appliquant ces règles séquentiellement à un ensemble fini de mots dits axiomes. La complexité d'un système d'insertion/effacement est décrite par le 6-uplet $(n,m,m'; p,q,q')$ dit taille, où les premiers trois composants représentent la longueur maximale de la sous-chaîne insérée et la taille maximale des contextes à gauche et à droite, alors que les trois derniers composants décrivent les mêmes paramètres pour les règles d'effacement. Dans le cadre de ma thèse nous nous sommes intéressés tout d'abord à des systèmes d'insertion/ef\-face\-ment de taille $(1,m,0; 1,q,0)$, c'est-à-dire aux systèmes dans lesquels toutes les règles n'ont pas de contexte à droite et insèrent ou suppriment un caractère. Nous avons montré que ces systèmes engendrent tous les langages rationnels, et même certains langages algébriques. D'un autre côté, nous avons prouvé que pour tout système de taille $(1,m,0;1,q,0)$ avec $m\geq 2$ ou $q\geq 2$ il existe un système de taille $(1,2,0; 1,1,0)$ et un autre de taille $(1,1,0; 1,2,0)$ qui le simule. Nous nous sommes intéressés aussi aux systèmes de taille $(1,1,0;1,1,0)$ qui, malgré leur simplicité apparente, peuvent engendrer des langages non algébriques. Afin de mieux analyser le comportement dynamique de ces systèmes, nous avons introduit un outil de représentation graphique de leurs dérivations. Nous avons ensuite considéré les systèmes d'insertion/effacement avec trois mécanismes de contrôle : contrôle par graphe ({\em graph control}), contrôle semi-conditionnel ({\em semi-conditional control}) et contextes aléatoires ({\em random context control}). Nous avons prouvé que les systèmes équipés de ces mécanismes sont Turing complets avec de très petites règles. Notamment, nous avons prouvé que le contrôle semi-conditionnel augmente la puissance d'expression des systèmes d'insertion/effacement de taille $(1,0,0;1,0,0)$, c'est-à-dire des systèmes avec des règles sans contexte, est les rend Turing complets. \subsubsection{Réseaux de processeurs évolutionnaires} Les réseaux de processeurs évolutionnaires ({\em networks of evolutionary processors}) sont un modèle de calcul inspiré par l'activité des organites d'une cellule biologique ou par la collaboration des cellules d'un tissu~\cite{CMVMS2001,CVS97}. Un processeur évolutionnaire peut effectuer en parallèle des opérations élémentaires (insertion, effacement, substitution d'un symbole) sur toutes les chaînes de caractères qu'il contient. Les processeurs sont connectés en réseau et échangent les chaînes de caractères qu'ils produisent. Ils disposent de filtres à l'entrée et à la sortie, ce qui leur permet de ne pas prendre en compte certaines chaînes. La complétude computationnelle des réseaux de processeurs évolutionnaires a été montrée dès leur introduction~\cite{CMVMS2001,CVS97}. Des variations au modèle ont été proposées plus tard et prouvées Turing complètes elles aussi~\cite{AMVR2006,CMVMS2003}. Nous nous sommes intéressés plutôt à l'universalité et à la minimisation du nombre de règles dans les réseaux universels. Nous avons ainsi construit des réseaux universels à 4, 5 et 7 règles seulement, avec des fonctions de codage différentes. \subsubsection{Machines à registres} Les machines à registres sont un modèle de calcul classique, dérivé directement de la machine de Turing~\cite{Minsky1961,Wang:1957}. Une telle machine possède un nombre fini de registres, qui peuvent contenir des entiers non négatifs. Le programme d'une machine à registres est une liste étiquetée d'instructions élémentaires : l'incrément d'un registre, le décrément d'un registre et le teste si un registre est vide. Les machines à registres sont ainsi très proches de l'organisation des ordinateurs digitaux habituels. Il a été montré que les machines à registres sont Turing complets, et qu'en plus n'importe quelle fonction calculable sur les entiers non négatifs peut être calculée par une machine à deux registres si les entrées de la fonction sont déjà encodées, ou à trois registres si la machine doit faire l'encodage par elle-même~\cite{minsky67}. Cela implique l'existence de machines à deux registres et à trois registres universelles. Néanmoins, aucun programme d'une telle machine n'a été présenté dans la littérature, or une telle construction concrète permet d'estimer la taille de structures universelles dérivées et de les optimiser ensuite. Dans ma thèse nous avons donc appliqué la procédure décrite dans~\cite{minsky67} pour construire des machines à deux et à trois registres universelles en simulant les machines universelles présentées en~\cite{Korec}. Nous nous sommes aussi intéressés à la façon dont les machines à registres sont simulées par d'autres modèles de calcul tels que systèmes de réécriture de multiensembles, réseaux de Petri, ou réseaux de processeurs évolutionnaires. Nous avons remarqué que tous ces modèles peuvent simuler plusieurs instructions d'une machine à registres en un seul pas. Autrement dit, ces instructions sont souvent trop élémentaires. Dans le but de définir un modèle proche aux machines à registres, mais qui utiliserait des instructions plus expressives, nous avons proposé les machines à registres généralisées ({\em generalised register machines}). Une telle machine peut effectuer plusieurs incréments, décréments, ou tests si un registre est à zéro en une seule transition. Les machines à registres habituelles peuvent être vues comme des machines à registres généralisées qui n'exécutent qu'une seule opération par transition. Dans une telle machine il est possible de réduire le nombre d'états en utilisant des transitions plus complexes. Dans ma thèse nous avons appliqué cette réduction pour construire des machines à registres universelles à 7 états seulement, cela en simulant les constructions présentées dans~\cite{Korec}. \subsubsection{Systèmes de réécriture de multiensembles et réseaux de Petri} La dernière partie de ma thèse porte sur l'universalité des systèmes de réécriture de multiensembles avec des inhibiteurs et aussi des réseaux de Petri avec des arcs inhibiteurs --- deux modèles qui sont fondamentalement similaires. En effet, un état (marquage) d'un réseau de Petri est décrit par une fonction qui associe à chaque place le nombre de jetons qu'elle contient ; or le marquage est un multiensemble sur l'alphabet des symboles qui désignent les places. Les transitions de réseaux de Petri correspondent ainsi aux règles de réécriture de multiensembles. Il a été montré que savoir si un marquage peut être atteint par un réseau de Petri donné est décidable~\cite{Mayr:1981}. La même affirmation est donc valable dans le cas des systèmes de réécriture de multiensembles simples. Plusieurs variations ont été proposées afin d'étendre le pouvoir d'expression de ces modèles, dont l'idée des inhibiteurs. Dans les réseaux de Petri, un arc inhibiteur entre une place et une transition empêche celle-ci de se déclencher si la place n'est pas vide. De la même manière, on peut munir une règle de réécriture de multiensembles avec une collection de symboles qui ne doivent pas être présents pour que la règle soit applicable. Il a été prouvé que les réseaux de Petri avec des arcs inhibiteurs et les systèmes de réécriture de multiensembles avec des inhibiteurs sont Turing complets~\cite{BMVPR2002,Reinhardt08}, car ils peuvent simuler assez directement les machines à registres. Dans ma thèse nous avons construit plusieurs réseaux de Petri avec des arcs inhibiteurs universels. Nous avons défini la taille d'un réseau comme étant le 4-uplet $(p,t,i,d)$ où $p$ est le nombre de places, $t$ est le nombre de transitions, $i$ est le nombre d'arcs inhibiteur et $d$ et le nombre maximal d'arcs incidents à une transitions (le degré maximal). Nous nous sommes proposé de construire des réseaux de Petri universels tout en minimisant chacun de ces paramètres. Nous avons notamment décrit des réseaux universels avec quatre et cinq places uniquement et d'autres avec deux et trois arcs inhibiteurs (les chiffres varient selon l'encodage des entrées et des sorties). Il est remarquable que deux est le nombre minimal d'arcs inhibiteurs nécessaires pour atteindre la complétude computationnelle : les réseaux de Petri avec un seul arc inhibiteur ne sont pas Turing complets~\cite{Reinhardt08}. Même si les résultats portant sur l'universalité présentés dans la dernière partie de ma thèse apparaissent sous la forme de réseaux de Petri, la correspondance directe avec les systèmes de réécriture de multiensembles permet de formuler immédiatement les mêmes résultats pour ceux-ci. \subsection{Travaux hors thèse} Avant le début de ma thèse et pendant mon doctorat j'ai travaillé sur des problèmes qui n'étaient pas directement reliés à ceux qui sont exposés dans le manuscrit. Ces travaux se situent également dans le cadre du calcul naturel et de la théorie des langages formels. Je me suis premièrement concentré sur les systèmes à membranes ({\em membrane systems}) qui sont un modèle inspiré par la structure et fonctionnement de la cellule biologique. J'ai aussi travaillé sur les systèmes à réactions ({\em reaction systems}) qui représentent une abstraction formelle d'un réacteur biochimique. Finalement, j'ai participé à des travaux dans le domaine des grammaires de tableaux ({\em array grammars}), un modèle qui étend les grammaires classiques à la réécriture des parties des tableaux. \subsubsection{Systèmes à membranes} Le modèle des systèmes à membranes a été introduit par Gheorghe Păun qui s'est inspiré de la nature et du fonctionnement de la cellule vivante~\cite{Paun98computingwith,paun2002membrane,Paun:2010:OHM:1738939}. Un système à membranes est un ensemble de compartiments imbriqués les uns dans les autres et délimités par des membranes ; une membrane contient un multiensemble d'objets, chacun desquels représente une molécule biochimique. Les interactions entre les molécules sont modélisées par l'action des règles de réécriture de multiensembles. Même si les systèmes à membranes sont essentiellement des systèmes de réécriture parallèle de multiensembles~\cite{FLGPVZ2014}, ils représentent la cellule vivante de façon naturelle ce qui donne un outil clair et puissant pour la modélisation des processus biologiques et plus généralement des systèmes dynamiques complexes. Les thématiques que j'ai abordées dans ma recherche sur des systèmes à membranes se divisent principalement en trois groupes : \begin{itemize} \item la création des outils performants et flexibles de simulation des systèmes à membranes, \item développement des algorithmes distribués qui peuvent être ensuite implémentés dans des systèmes biologiques, \item étude de la puissance de calcul des différentes variantes étendues du modèle de base. \end{itemize} La création d'un simulateur de systèmes à membranes a toujours été une question très pertinente qui a attiré beaucoup d'efforts de la part des chercheurs dans le domaine. Un tel simulateur est un outil essentiel qui permet de tester si une construction concrète réalise le comportement désiré. J'ai participé à ce travail en développant un simulateur avec des moteurs des simulations échangeables pouvant être réalisés en des langages différents. J'ai notamment fourni un moteur de simulation utilisant la technologie OpenCL de programmation pour des architectures parallèles et un autre, plus flexible mais moins performant, implémenté en Haskell. En ce qui concerne le développement des algorithmes distribués, je me suis tout d'abord focalisé sur les modèles de systèmes à membranes sans horloge ({\em clock-free membrane systems}), dans lesquels chaque application d'une règle peut durer un temps réel arbitraire. L'absence de l'horloge globale rapproche le modèle des systèmes parallèles composés d'un certain nombre de processus qui interagissent. Dans mon travail, j'ai exprimé les mécanismes de synchronisation en termes de règles de réécriture de multiensembles et j'ai montré comment ces mécanismes pouvaient être utilisés pour la résolution de problèmes de concurrence classiques. Nous avons continué l'exploration des algorithmes distribués en implémentant les chaînages avant et arrière ({\em forward and backward chaining}) dans les systèmes à membranes actives, c'est-à-dire les systèmes dans lesquels les membranes peuvent se diviser. Le chaînage avant est une méthode de déduction qui applique des implications logiques en partant des prémisses pour en déduire de nouvelles conclusions. Le chaînage avant consiste donc à construire toutes les conclusions déductibles à partir des axiomes jusqu'à ce que la proposition cible soit obtenue. Par opposition, le chaînage arrière part des conclusions pour essayer de remonter aux axiomes. Le chaînage arrière a souvent tendance à explorer moins de possibilités et est préféré dans les cas d'utilisation pratiques. Il est remarquable que les implications logiques se prêtent à une représentation naturelle en termes de règles de réécriture de multiensembles ; or c'est de cette similarité que nos constructions profitent. De plus nos implémentations bénéficient du parallélisme intrinsèque aux systèmes à membranes. Concernant les variations du modèle de base, nous avons proposé une extension assez naturelle qui permet aux systèmes à membranes de se modifier eux-mêmes. Dans le cadre de ce genre de système, les règles de réécriture sont données par le contenu de certaines pairs de membranes. Il est ainsi possible de modifier les règles au cours de l'évolution du système en rajoutant ou en supprimant des objets des membranes qui définissent ces règles. Nous avons donné à ces systèmes l'appellation de systèmes polymorphes ({\em polymorphic membrane systems}) et nous avons montré que le polymorphisme permettait de calculer des fonctions exponentielles avec des règles relativement simples. Je me suis ensuite intéressé à la puissance de calcul de systèmes polymorphes dans leur version la plus élémentaire et j'ai démontré quelques résultats concernant les bornes inférieures et supérieures de la famille des langages qu'ils peuvent engendrer. J'ai prouvé également l'existence d'une hiérarchie infinie dans cette famille des langages. \subsubsection{Systèmes à réactions} Les systèmes à réactions ({\em reaction systems}) sont un autre modèle formel inspiré par la cellule biologique, et surtout par les réactions chimiques qui y ont lieu~\cite{brij-atofrs,ehrenfeucht2007reaction}. Les systèmes à réactions se fondent sur deux principes. Le premier est le principe de non permanence : une ressource qui ne participe pas à une interaction disparaît du système. Le deuxième principe est que si une ressource est présente dans le système, alors elle y est en quantité illimitée. Cela fait des systèmes à réactions un modèle intrinsèquement qualitatif qui manipule des ensembles des symboles. Les interactions entre les symboles dans les systèmes à réactions sont régies par les réactions. Une réaction contient trois ensembles: les réactifs, les inhibiteurs et les produits. Pour qu'une réaction soit applicable à un ensemble, celui-ci doit contenir tous les réactifs de la réaction et ne contenir aucun de ses inhibiteurs. Le résultat de cette application est l'ensemble des produits ; les symboles qui n'ont pas été consommés par la réaction disparaissent. Le résultat d'application concomitante de plusieurs réactions est l'union de leurs produits. Les systèmes à réactions étant un modèle de calcul assez particulier, beaucoup de chercheurs se sont intéressés à ses propriétés formelles. Dans notre travail nous sommes revenus à la motivation d'origine et nous nous sommes proposé d'utiliser les systèmes à réactions pour modéliser les voies métaboliques d'une cellule. Une partie essentielle d'une telle modélisation serait la vérification formelle qu'un système concret correspond suffisamment bien au phénomène qu'il modélise. Dans ce but, nous avons adapté plusieurs concepts utilisés dans la modélisation biologique habituelle, dont la conservation de la masse, et nous avons prouvé que décider la plupart des propriétés qu'un système à réactions peut avoir vis-à-vis de ces concepts est un problème $\NP$-, $\coNP$-, ou même $\PSPACE$-complet. Nous nous sommes ensuite focalisés sur la conservation de la masse et nous avons montré que cette notion donne naissance à une structure formelle qui facilite la réponse à certaines questions concernant les propriétés de conservation d'un système à réactions. \subsubsection{Grammaires de tableaux} Les grammaires de tableaux représentent un système de réécriture des tableaux --- des structures régulières dont les nœuds sont étiquettes avec des symboles~\cite{FreundO14}. Tout comme les règles de réécriture de chaînes de caractères, une règle de réécriture de tableaux remplace un motif par un autre. Les grammaires de tableaux sont ainsi un modèle similaire aux automates cellulaires qui eux aussi sont plongés dans une structure régulière. Une différence importante intervient au niveau de la sémantique : les règles de grammaires de tableaux s'appliquent séquentiellement, ce qui ne fait évoluer qu'un seul motif du tableau à la fois. De plus, un tableau peut ne pas couvrir complètement la structure sous-jacente ; par exemple, un tableau dans l'espace cartésien à deux dimensions peut contenir un nombre fini de cellules non vides disposées dans une configuration particulière, les autres cellules étant vides. Une règle de réécriture de tableaux qui rajoute une nouvelle cellule peut s'appliquer à un motif seulement si cette nouvelle cellule correspond à un endroit vide dans le tableau d'origine. Ma contribution à l'étude des grammaires de tableaux a consisté à fournir une construction qui a permis de prouver la complétude computationnelle d'une variante restreinte de ce modèle. Nous nous sommes également intéressés à la combinaison de réécriture de tableaux avec les structures à membranes ; nous avons montré que ce genre de systèmes atteignent la complétude computationnelle avec des règles restreintes et avec deux membranes seulement. \subsection{Projets de programmation} Lors de mon parcours universitaire et doctoral j'ai réalisé plusieurs projets de programmation aussi bien accessoires à mon activité de recherche qu'indépendants. J'ai notamment contribué au système d'exploitation libre à micro-noyau GNU/Hurd~\cite{Hurd}, qui est fondé sur le principe des translateurs ({\em translator}) --- des applications spéciales qui peuvent être installés par dessus certains fichiers pour offrir une vue modifiée du contenu. J'ai développe un translateur capable de monter plusieurs systèmes de fichiers sous un seul dossier (montage union)~\cite{unionmount} et j'ai aussi travaillé sur une extension du gestionnaire du système de fichiers qui permettrait d'installer des translateurs en utilisant une syntaxe étendue de chemins d'accès~\cite{nsmux}. Ce travail a été effectué lors de l'édition 2009 de «~Google Summer of Code~». Je me suis aussi intéressé aux modèles d'interaction asynchrone en réseaux et je me suis proposé d'implémenter le modèle acteur ({\em actor model}). Les entités centrales de ce modèle sont les acteurs --- les processus qui s'exécutent en parallèle et qui possèdent des boîtes à messages. Les acteurs peuvent s'envoyer des messages de façon asynchrone, c'est-à-dire l'expéditeur n'attend pas que le message soit reçu. Afin de rendre mon implémentation plus succincte et flexible, je l'ai réalisée en le langage fonctionnel strictement typé Haskell. Un autre projet de programmation non relié directement à mes pistes de recherche principales était ma contribution au système de calcul formel SymPy~\cite{sympy} qui à consisté à initier un module de théorie des catégories~\cite{categories}. Je me suis concentré sur la présentation informatique des diagrammes commutatifs --- un outil de base en algèbre abstraite --- et j'ai programmé la mise en page automatique d'un tel diagramme. J'ai travaillé ensuite sur un algorithme de déduction automatique de la commutativité d'un diagramme à partir d'un ensemble de diagrammes dits axiomes. Cette contribution a été faite lors de l'édition 2012 de «~Google Summer of Code~». Un de mes premiers projets afférents aux domaines de recherche dans lesquels j'ai travaillé était le développement d'un simulateur de systèmes à membranes capable de représenter la plupart des variation du modèle en utilisant plusieurs moteurs de simulation. J'ai implémenté un moteur OpenCL qui s'exécutait sur la carte graphique et un autre, en Haskell, qui était moins performant mais offrait la possibilité de faire tourner le système simulé pas à pas. Un autre projet était d'automatiser la construction des réseaux de Petri universels, ce qui m'a amené à la réalisation d'un ensemble d'outils pour la gestion informatique de ces objets, ainsi que de quelques autres objets connus de la théorie de la calculabité, notamment les machines à registres. Une partie de ces outils est déjà disponible en ligne~\cite{compdev} ; d'autres sont en état d'ébauche et seront disponibles au public dès leur finalisation. Finalement, afin de faciliter la conception et la vérification de systèmes à réactions, j'ai implémenté un simulateur de ce modèle. Le code source du simulateur, ainsi que la documentation, est disponible en ligne~\cite{brsim}. J'ai aussi réalisé une interface Web~\cite{brsimweb} qui permet d'utiliser mon simulateur sans à avoir à télécharger et compiler le code. \subsection{Projet de recherche} Mon projet de recherche vise à appliquer l'expérience que j'ai acquise en explorant les pistes énumérées dans les sections précédentes à l'étude des systèmes complexes et notamment à la compréhension et à la gestion de la complexité de ces systèmes. Ma stratégie consiste donc à employer le savoir formel sur les structures mathématiques et informatiques abstraites afin de construire des modèles qui, en plus d'être rapprochés aux systèmes modélisés en ce qui concerne le comportement, soient modulaires ou au moins explicables par découpage en sous-parties. Le but général que je me propose étant audacieux, il est important de préciser que les travaux que je compte mener (et que j'ai déjà menés) ont des applications concrètes dans les domaines respectifs. Autrement dit, ma recherche vise d'abord à contribuer à la résolution d'un problème concret et à en tirer des conclusions généralisatrices qui peuvent être appliquées à d'autres situations et qui ont donc une valeur en soi. Mon projet de recherche se compose de trois parties. La première se focalise sur les sujets que j'ai abordés pendant mes études doctorales, y compris ceux qui n'ont pas été présentés dans le manuscrit de thèse. La deuxième partie consiste en l'étude des structures algébriques et topologiques fondamentales afin de les utiliser pour la conception de composants pour la construction modulaire de modèles de systèmes complexes. La troisième partie se focalise sur les implémentations logiciel des structures abstraites dans le but d'utiliser la puissance de calcul des ordinateurs modernes pour la simulation de systèmes et la vérification de modèles. Les sous-sections suivantes donnent une vue plus détaillée sur les trois parties de mon projet de recherche. \subsubsection{Langages formels et calcul formel} La plupart de contributions que j'ai faites pendant mon doctorat s'inscrivent dans le domaine des langages formels et de l'étude formelle du calcul. L'approche souvent adoptée dans ce domaine est de traiter l'évolution dynamique de systèmes comme une suite de configurations discrète, décrite par un langage formel. Dans cette optique, le comportement d'un système peut être décrit pas des règles de réécriture de chaînes de caractère formelles. Les deux types de modèles de réécriture dont je compte approfondir ma compréhension sont les systèmes d'insertion/effacement et les systèmes de réécriture de multiensembles. \paragraph{Insertion/effacement} L'une des premières pistes que j'aborderai dans ce contexte sera la continuation de l'étude des systèmes d'insertion/effacement avec des contextes de petite taille, et particulièrement les systèmes dont toutes les règles ne possèdent que le contexte à gauche. La complétude (ou l'incomplétude) computationnelle de ces systèmes n'a toujours pas été démontrée. Au delà de la complétude computationnelle qui n'est qu'une caractérisation très approximative du comportement possible de ces systèmes, il serait très intéressant d'étudier la dynamique engendrée par les règles d'insertion et d'effacement de plus près. Je voudrais notamment utiliser dans ce but les graphes de dérivation, qui définissent un protocole de représentation graphique des dérivations, qui code code chaque insertion par un trait, et chaque effacement par un trait pointillé. La figure~\ref{fig:insdel:lft-2n} montre un exemple de comportement dynamique que peut avoir un système d'in\-ser\-tion/ef\-face\-ment avec des règles qui n'insèrent et n'effacent qu'un symbole à la fois et qui vérifient uniquement les contextes à gauche (un système de taille $(1,1,0; 1,1,0)$). Il s'agit du système décrit dans~\cite[Section~8]{JL2005} qui possède un taux de croissance exponentiel et qui engendre donc un langage non-algébrique. Dans la figure~\ref{fig:insdel:lft-2n} nous avions mis en gras les symboles terminaux ainsi que tous les symboles qui insèrent des symboles gras. Avec ce code couleur on voit immédiatement que le graphe correspondant à une dérivation de ce système consiste en des chemins gras qui interagissent par le biais de structures gris clair. En outre, on remarque la croissance exponentielle de chemins gras, de droite à gauche : effectivement, le chemin gras de droite contient un symbole $D$, celui d'avant en contient 2, le troisième chemin de droite contient 4 symboles $D$, alors que le chemin gras de tout à gauche contient déjà 8 symboles $F$. \begin{figure}[h!] \centering \vspace{2mm} \begin{tikzpicture}[node distance=5pt and -20pt] \node[nsymb] (x) {$\nbold x$}; % The symbols of the first red branch consisting of F-symbols. \node[nsymb,below right=of x] (n1) {$\nbold F_1$}; \node[nsymb,below right=of n1] (n2) {$\nbold F_0$}; \node[nsymb,below right=of n2] (n3) {$\nbold F_1$}; \node[nsymb,below right=of n3] (n4) {$\nbold F_0$}; \node[nsymb,below right=of n4] (n5) {$\nbold F_1$}; \node[nsymb,below right=of n5] (n6) {$\nbold F_0$}; \node[nsymb,below right=of n6] (n7) {$\nbold F_1$}; \node[nsymb,below right=of n7] (n8) {$\nbold F_0$}; \node[nsymb,below right=of n8] (a01) {$\nbold a_0$}; % The first red branch itself. \draw[insertion] (x) -- (n1) -- (n2) -- (n3) -- (n4) -- (n5) -- (n6) -- (n7) -- (n8) -- (a01); % The nodes of the leftmost green branch. \node[nsymb,right=0 and 10pt of a01] (n9) {$\nlight X_{0,0}$}; \node[nsymb,above right=of n9] (n10) {$\nlight Y_{0,0}$}; \node[nsymb,above right=of n10] (n11) {$\nlight X_{0,1}$}; \node[nsymb,above right=of n11] (n12) {$\nlight Y_{0,1}$}; \node[nsymb,above right=of n12] (n13) {$\nlight X_{0,0}$}; \node[nsymb,above right=of n13] (n14) {$\nlight Y_{0,0}$}; \node[nsymb,above right=of n14] (n15) {$\nlight X_{0,1}$}; \node[nsymb,above right=of n15] (n16) {$\nlight Y_{0,1}$}; \node[nsymb] at ($(n16)+(16pt,20pt)$) (d1) {$\nbold D_{0,1}$}; % The deletions connecting together the leftmost green branch. \draw[deletion] ($(a01)+(9pt,0)$) -- (n9); \foreach \i / \j in {9/10, 10/11, 11/12, 12/13, 13/14, 14/15, 15/16} { \draw[deletion] ($(n\i)+(-1pt,7pt)$) -- ($(n\j)+(-4.5pt,-7pt)$); } \draw[deletion] ($(n16)+(1pt,7pt)$) -- ($(d1)+(-10pt,-6pt)$); % The insertions of the nodes on the leftmost green branch by the % nodes on the leftmost red branch. \foreach \i / \j in {8/9, 7/10, 6/11, 5/12, 4/13, 3/14, 2/15, 1/16} { \draw[insertion,shorten >=-3pt, shorten <=-5pt] (n\i) -- (n\j); } \draw[insertion,shorten >=-3pt, shorten <=-7pt] (x) -- (d1); % The nodes of the red branch starting at D_{0,1}. \node[nsymb,below right=of d1] (n17) {$\nbold D_{0,0}$}; \node[nsymb,below right=of n17] (n18) {$\nbold D_{0,1}$}; \node[nsymb,below right=of n18] (n19) {$\nbold D_{0,0}$}; \node[nsymb] at ($(n19)+(3pt,-20pt)$) (b1) {$\nbold B_0$}; \node[nsymb,below right=of b1] (a11) {$\nbold a_1$}; % The red branch starting at D_{0,1} itself. \foreach \i / \j in {d1/n17, n17/n18, n18/n19} { \draw[insertion] ($(\i)+(-1.5pt,-6pt)$) -- ($(\j)+(-5pt,8pt)$); } \draw[insertion,shorten >=-1pt] ($(n19)+(0pt,-6pt)$) -- (b1) -- (a11); % The deletions coming from the leftmost green branch over to the % second red branch from the left. \draw[deletion] ($(n10)+(4pt,5pt)$) to[out=28,in=-105] ($(n19)+(-5pt,-6pt)$); \draw[deletion] ($(n12)+(5pt,6pt)$) to[out=28,in=-105] ($(n18)+(-6pt,-6pt)$); \draw[deletion] ($(n14)+(4pt,5pt)$) to[out=28,in=-105] ($(n17)+(-6pt,-6pt)$); \draw[deletion] ($(a01)+(3pt,-5pt)$) to[out=-35,in=-105] ($(b1)+(-4pt,-8pt)$); % The nodes of the second leftmost green branch. \node[nsymb] at ($(a11)+(19pt,19pt)$) (n20) {$\nlight X_{1,0}$}; \node[nsymb,above right=of n20] (n21) {$\nlight Y_{1,0}$}; \node[nsymb,above right=of n21] (n22) {$\nlight X_{1,1}$}; \node[nsymb,above right=of n22] (n23) {$\nlight Y_{1,1}$}; \node[nsymb] at ($(n23)+(16pt,19pt)$) (d2) {$\nbold D_{1,1}$}; % The deletions connecting together the second green branch. \draw[deletion] ($(a11)+(6pt,4pt)$) -- ($(n20)+(-8pt,-6pt)$); \foreach \i / \j in {20/21, 21/22, 22/23} { \draw[deletion] ($(n\i)+(-2pt,7pt)$) -- ($(n\j)+(-5pt,-7pt)$); } \draw[deletion] ($(n23)+(1pt,7pt)$) -- ($(d2)+(-10pt,-6pt)$); % The insertions of the nodes on the second leftmost green branch. \foreach \i / \j in {19/20, 18/21, 17/22} { \draw[insertion,shorten >=-2pt, shorten <=-2pt] (n\i) -- (n\j); } \draw[insertion,shorten >=-2pt, shorten <=-2pt] (d1) -- (n23); \draw[insertion,shorten >=-3pt, shorten <=-7pt] (x) to[out=-5,in=172] (d2); % The nodes of the third leftmost red branch. \node[nsymb] at ($(d2)+(5pt,-19pt)$) (n24) {$\nbold D_{1,0}$}; \node[nsymb] at ($(n24)+(3pt,-19pt)$) (b2) {$\nbold B_1$}; \node[nsymb,below right=of b2] (a02) {$\nbold a_0$}; % The red branch itself. \draw[insertion] ($(d2)+(-1.5pt,-6pt)$) -- ($(n24)+(-5pt,8pt)$); \draw[insertion,shorten >=-1pt] ($(n24)+(0pt,-6pt)$) -- (b2) -- (a02); % The deletions of symbols on the third leftmost red branch. \draw[deletion] ($(n21)+(4pt,5pt)$) to[out=28,in=-105] ($(n24)+(-5pt,-6pt)$); \draw[deletion] ($(a11)+(8pt,1pt)$) to[out=15,in=-105] ($(b2)+(-3pt,-6pt)$); % The symbols of the rightmost green branch. \node[nsymb] at ($(a02)+(19pt,19pt)$) (n25) {$\nlight X_{0,0}$}; \node[nsymb,above right=of n25] (n26) {$\nlight Y_{0,0}$}; \node[nsymb] at ($(n26)+(16pt,19pt)$) (d3) {$\nbold D_{0,0}$}; % The deletions connecting the rightmost green branch together. \draw[deletion] ($(a02)+(6pt,4pt)$) -- ($(n25)+(-8pt,-6pt)$); \draw[deletion] ($(n25)+(-2pt,7pt)$) -- ($(n26)+(-4.5pt,-7pt)$); \draw[deletion] ($(n26)+(1pt,7pt)$) -- ($(d3)+(-10pt,-6pt)$); % The insertions of the symbols on the rightmost green branch. \draw[insertion,shorten >=-2pt, shorten <=-2pt] (n24) -- (n25); \draw[insertion,shorten >=-2pt, shorten <=-2pt] (d2) -- (n26); \draw[insertion,shorten >=-3pt, shorten <=-7pt] (x) to[out=-3,in=170] (d3); % The rightmost red branch. \node[nsymb] at ($(d3)+(4pt,-18pt)$) (b3) {$\nbold B_0$}; \node[nsymb,below right=of b3] (a12) {$\nbold a_1$}; % The rightmost red branch itself. \draw[insertion,shorten >=-1pt] ($(d3)+(0pt,-6pt)$) -- (b3) -- (a12); % The deletions of symbols on the rightmost red branch. \draw[deletion] ($(a02)+(8pt,1pt)$) to[out=15,in=-105] ($(b3)+(-3pt,-6pt)$); \end{tikzpicture} \vspace{-7mm} \caption{Un graphe de dérivation pour un système d'insertion/effacement de taille $(1,1,0; 1,1,0)$ qui engendre un langage non-algébrique~\cite[Section~8]{JL2005}} \label{fig:insdel:lft-2n} \end{figure} Nous tirons deux conclusions de cette analyse superficielle de la figure~\ref{fig:insdel:lft-2n}. D'un côté, on observe que les règles d'insertion et d'effacement de petite taille peuvent avoir un comportement assez complexe, qui dépasse même la puissance de modélisation des automates à pile. D'un autre côté, on note l'efficacité visuelle des graphes de dérivation, qui offrent une vue d'ensemble sur une dérivation sans perdre des détailles dynamiques essentiels, c'est-à-dire les éléments de comportement qui on une influence sur le langage engendré. Cette propriété des graphes de dérivation les rend très intéressant pour tout étude de la dynamique de systèmes d'insertion/effacement. \paragraph{Réécriture de multiensembles} La réécriture de multiensembles, et notamment les systèmes à membranes, est le domaine dans lequel j'ai fait mes plus anciennes contributions scientifiques et dont plusieurs questions continuent à m'intéresser à présent. Dans la continuité des travaux menés pendant mon doctorat, je voudrais poursuivre l'étude du problème de l'universalité pour ce modèle et en particulier l'étude des techniques d'optimisations de la taille des systèmes universels. D'un autre côté, je voudrais me concentrer plus sur l'étude de systèmes à membranes avec des règles dynamiques, dites polymorphes, que nous avions introduits dans~\cite{AI2011} et dont une variante restreinte j'ai étudiée dans~\cite{DBLP:conf/membrane/Ivanov14}. Le comportement de ces systèmes ressemble au celui de cellules vivantes dans le fait que les règles qui dirigent l'évolution peuvent être modifiées, ce qui donne un dimension de dynamisme en plus. De plus, le polymorphisme complexifie le rapport entre les étapes consécutives d'évolution, car une configuration du système détermine non seulement la configuration suivante, mais aussi la forme de règles qui seront utilisées plus tard dans l'évolution. La figure~\ref{fig:superexponential-growth} montre un exemple d'un système polymorphe qui possède un taux de croissance super-exponentiel. Ce système a deux règles : la première qui a initialement la forme $a\to a$, et la deuxième qui ne varie pas et qui double le nombre de $a$ dans la partie droite de la première règle. Ainsi, après $k$ pas d'évolution, la première règle aura la forme $a\to a^{2^{k}}$. Par conséquence, après le même nombre de pas, la membrane extérieure du système contiendra $2^{\frac{k(k-1)}{2}}$ copies de $a$. \begin{figure}[h] \centering \vspace{2mm} \begin{tikzpicture} \node (r2) {$2:a\to aa$}; \node[below=.1 of r2] (w1L) {$a$}; \membrane{$1R$}{1R}{}{fit={(r2) (w1L)}} \membrane{$1L$}{1L}{$a$}{below left=-15.5pt and 13pt of 1R} \node[below left=5pt and -25pt of 1R] (ws) {$a$}; \membrane{$s$}{s}{}{fit={(1L) (1L label) (1R) (1R label) (ws)}} \end{tikzpicture} \caption{Un P système polymorphe avec un taux de croissance super-exponentiel} \label{fig:superexponential-growth} \end{figure} On remarque deux pistes d'exploration possibles pour les systèmes à membranes polymorphe. La première reste dans le cadre de l'étude formelle et se focalise sur le rapport entre les restrictions que l'on peut imposer statiquement et le comportement dynamique des systèmes avec ces restrictions, particulièrement leur puissance de calcul. La deuxième piste mène vers une collaboration interdisciplinaire et consiste à trouver des parallèles entre la complexité induite par le polymorphisme et la complexité intrinsèque des systèmes complexes tels que l'on trouve en biologie, en physique, etc. Trouver de telles parallèles permettrait d'approfondir la compréhension de ce type de système et de les modifier de sorte qu'ils aient le comportement désiré. Une autre direction majeure de recherche qui m'attire fortement est la conception de cadres généraux pour réunir plusieurs variantes de systèmes à membranes. Étant donnée la variété importante de variantes de ces systèmes, avoir des cadres généraux permet tout d'abord d'unifier la terminologie qui est souvent dérivée de diverses domaines de la biologie et donc hétérogène. Deuxièmement, cette unification offre souvent des perspectives très éclairantes sur les combinaisons possibles d'ingrédients qui n'ont pas encore été étudiées. \paragraph{Autres modèles de calcul} En plus des deux modèles de calculs déjà mentionnés dans cette sous-section, je voudrais en continuer l'exploration d'autres ayant des liens de parenté forts avec les systèmes d'insertion/effacement et de la réécriture de multiensembles. Ainsi, je suis intéressé par les machines à registres universelles de petite taille et je voudrais réduire la taille des constructions existantes. Cela permettrait d'améliorer les systèmes à membranes universels en réduisant le nombre de règles, de symboles, ou d'autres ingrédients utilisés. Je voudrais également continuer l'étude de réseaux de processeurs évolutionnaires, mais au lieu de me pencher sur la caractérisation de leur puissance d'expression je m'intéresse plutôt à la dimension parallèle inhérente à ce modèle de calcul. Je voudrais notamment explorer le lien entre les réseaux de processeurs évolutionnaires et les systèmes à membranes ; en effet, dans les cas des deux modèles on retrouve des processeurs qui échangent des données en réseau. Un autre trait commun est la possibilité de distinguer deux types de parallélisme : d'une part, le traitement des données dans un processeur se fait de façon parallèle ; d'autre part, l'activité des processeurs eux-mêmes se déroule parallèlement, avec une barrière de synchronisation globale s'imposant à chaque étape d'évolution. Il me paraît intéressant de concevoir un cadre général pour ces deux modèles afin d'explorer à un haut niveau d'abstraction les manières différentes dont le calcul parallèle pourrait être organisé. En plus, ce cadre généralisant pourrait indiquer d'autres membres de la famille des modèles de calcul dont les réseaux de processeurs évolutionnaires et les systèmes à membranes font partie. Encore un modèle de calcul intrinsèquement parallèle qui m'attire fortement sont les automates cellulaires, qui représentent essentiellement des grilles d'automates finis qui communiquent. Les automates dans les nœuds de la grille n'ont pas de bande, donc la seule information dont ils peuvent disposer est leur état et les états des voisins dans un voisinage défini statiquement. Les unités atomiques de calcul des automates cellulaires sont ainsi moins puissantes que les processeurs dans les réseaux de processeurs évolutionnaires ou les membranes dans les systèmes à membranes ; néanmoins, en terme de pouvoir d'expression les automates cellulaires sont équivalents aux machines de Turing. On observe donc un considérable écart entre l'expressivité globale d'un automate cellulaire et l'expressivité locale de chaque unité. Par conséquent, ce modèle de calcul semble être un contexte bien adapté à l'étude de rapports entre les comportements locaux et globaux de systèmes complexes. En effet, des travaux ont déjà été menés dans cette direction (\cite{DBLP:conf/pads/PotierSM13}, par exemple) ; je voudrais appliquer l'expérience que j'ai acquise pour contribuer à ces études. \subsection{Old} Mon projet de recherche vise tout d'abord à approfondir les travaux effectués lors de ma thèse. Je souhaite continuer l'étude des systèmes d'insertion/effacement avec des contextes de petite taille afin de mieux caractériser leur puissance d'expression. Je souhaite également continuer à m'investir dans le domaine de systèmes à membranes et notamment dans l'étude de systèmes à membranes polymorphes, car ceux-ci semblent être en rapport assez direct avec le fonctionnement des systèmes à boucles de rétroaction. Je suis intéressé par les machines à registres universelles de petite taille et je voudrais améliorer les constructions existantes en optimisant la manière dont la simulation d'une instruction se fait. En ce qui concerne le calcul distribué inspiré de la nature, je souhaite étudier les automates cellulaires, car ce modèle correspond bien aux systèmes biologiques dont les éléments sont relativement simples mais, une fois intégrés, peuvent avoir un comportement global complexe. Je souhaite étudier les possibilités de programmer le fonctionnement local des cellules afin d'atteindre un comportement global donné. Ce type de procédés de déduction des propriétés locales à partir d'une spécification globale me semble essentiel à la compréhension et synthèse des systèmes complexes. Un sujet de recherche qui m'intéresse fortement est d'étudier les manières desquelles les systèmes complexes peuvent être décomposés en unités de base, cela afin de comprendre les principes fondateurs de la complexité. Je m'intéresse plutôt aux systèmes biologiques, car c'est en biologie que l'on retrouve de la complexité à tous les niveaux d'organisation structurelle. Je suis persuadé que le langage qui permettra de décrire les unités de base est celui des structures mathématiques élémentaires, comme celles de l'algèbre abstraite, de la topologie, ou de la théorie des catégories. Ma conviction se fonde sur le fait que ces objets sont d'une grande généralité, ce qui les rend utilisable dans une variété vaste des contextes. Je me propose ainsi d'approfondir ma connaissance de ces structures et montrer leur applicabilité à la compréhension de la complexité. En plus de relier l'étude des systèmes complexes aux mathématiques fondamentales, la décomposition d'un système en structures abstraites élémentaires permet d'utiliser les facilités d'intégration définies dans des domaines comme la théorie des catégories. Par exemple, les produits et les sommes permettent de composer des objets afin d'en construire d'autres plus complexes~\cite{Adamek04}. Ce sont d'ailleurs ces mêmes procédés qui sont le plus souvent employés en informatique pour définir les structures de données. Je me propose donc d'étudier d'autres procédés définis dans la théorie des catégories et dans des domaines se situant à un niveau d'abstraction pareil afin de concevoir des systèmes complexes ayant un comportement désiré. Je désire finalement étendre et approfondir mon expérience de programmation. Dans ce but je compte continuer à définir des représentations informatiques des objets abstraits sur lesquels je travaille. D'un autre côté, je souhaite contribuer à des projets libres portant sur le calcul symbolique, théorie des graphes, structures de données concurrentes, etc., car cela correspond bien à mon intérêt pour les systèmes complexes discrets et concurrents. \printbibliography \end{refsection} %%% Local Variables: %%% mode: LaTeX %%% mode: auto-fill %%% ispell-local-dictionary: "fr" %%% End: