Entretien avec Denis Merigoux et Liane Huttner sur le projet CATALA

Portraits de Liane Huttner et Denis Merigoux
Texte

Le projet CATALA ou "Comment traduire certaines lois informatiques en code informatique ?"

Nous avons rencontré Liane Huttner, doctorante en droit à l’université Paris 1 Panthéon-Sorbonne et Denis Merigoux, chercheur à l’Institut national de recherche en sciences et technologies du numérique (INRIA), les porteurs du projet CATALA. Il s’agit d’un nouveau langage qui permet l’encodage de spécifications législatives dans un code source exécutable et analysable.

Pour lire un article sur le projet : Liane Huttner, Denis Merigoux, « Traduire la loi en code grâce au langage de programmation CATALA. Intelligence artificielle et finances publiques », Oct 2020, Nice, France. ffhal-03128248f, https://hal.inria.fr/hal-03128248/document

Le contexte de création du langage CATALA

Denis Merigoux : Le point de départ de notre projet est qu’il existe des logiciels qui font ce que la loi leur dit de faire, c’est-à-dire que les décisions sont des interprétations de la loi. Ces logiciels fonctionnent dans beaucoup d’entreprises et d’administration, et concernent par exemple l’application de règles de paie, de ressources humaines, de régulation financière, ou de calcul des impôts. Ainsi, depuis les années 1980, l’administration fiscale a mis en place des algorithmes permettant de centraliser et de faciliter tous ces calculs ; les caisses d’allocation familiale ont fait de même, ainsi que les caisses de retraite et l’assurance chômage. Contrairement aux logiciels de statistiques, ces logiciels fonctionnent sur la base de règles écrites par les humains que ces derniers encodent à travers des langages de programmation. Ces règles sont censées capturer une interprétation de la loi. Par exemple, pour le calcul des impôts, c’est la législation qui impose des tranches de revenus et des taux différents qui s’appliquent et qui sont calculés par des logiciels pour chaque administré. Les logiciels qui interprètent les lois sont dits critiques. Cela signifie qu’ils prennent des décisions qui ont des conséquences importantes sur les utilisateurs. Le problème est qu’il y a des bugs dans ces logiciels (c’est-à-dire des dysfonctionnements du programme). Ces derniers ne sont malheureusement pas rares et ont par exemple été relevés en matière de chômage ou de salaire. Évidemment, ces bugs peuvent avoir de graves conséquences sur les gens soumis à ces logiciels. On songe à cet égard notamment à la privation de prestations sociales. Ces conséquences sont abondamment documentées par la littérature. Cependant, Liane et moi avons remarqué le peu d’attention à la manière dont ces logiciels étaient conçus ; aussi bien le peu d’attention académique et industriel que le peu de moyens pour s’assurer que les logiciels fonctionnent correctement en implémentant la loi. 

Liane Huttner : Il faut bien comprendre qu’on ne peut pas appréhender un algorithme sans son contexte puisqu’il est toujours le résultat de plusieurs types de contraintes : production, technique, organisationnelle… Cela a été théorisé ces cinq dernières années par la doctrine américaine qui parle souvent de l’algorithme comme un « objet socio-technique ». C’est vraiment ce que nous avions en tête quand nous avons conçu CATALA. Nous avons voulu créer un système pour que ces logiciels critiques soient fidèles à la loi et pour que l’on puisse s’assurer qu’ils fassent vraiment ce qu’ils sont censés faire. Cela correspond au concept de loyauté. En résumé, nous sommes partis du dysfonctionnement des logiciels critiques en particulier pour adapter le calcul des impôts ou des prestations sociales pour les administrés et de l’absence de systèmes de vérification de ces derniers. Notre objectif vise à trouver une solution à ces problèmes en créant un langage informatique pensé comme un objet technique vérifiable. Dans le cadre de ce projet, il y a un langage et une méthodologie sur la manière de produire le logiciel. J’insiste sur le fait que le projet CATALA est un projet pluridisciplinaire qui a impliqué une collaboration étroite entre juristes et informaticiens. Nous avons créé un site internet pour expliquer notre projet : https://catala-lang.org/fr/.

Denis Merigoux : Les lois impliquant des calculs sont écrites dans un langage de programmation. Or le choix de programmation n’est pas neutre dans la manière d’encoder la loi. C’est très difficile par exemple de maintenir une bonne correspondance entre le texte de la loi et le code informatique. Cela a des raisons techniques, mais surtout assez profondes avec des structures logiques de la loi ce qui est un phénomène connu depuis les années 80. Cela a été mis à jour par Sarah Lawsky qui a montré que la structure logique suivait un paradigme inverse à celui de la programmation. Quand vous lisez la loi, c’est un cas de base avec des exceptions, surtout avec les lois qui visent à faire un calcul. Or la logique de la programmation est inversée puisqu’elle débute d’abord par des cas particuliers, puis à la fin, vers des cas généraux. Lors de l’écriture du programme informatique, il y a une perte de correspondance du fait de cette différence de logique.

Liane Huttner : Il y a également une seconde raison pour laquelle un langage de programmation s’avère nécessaire. En effet, il s’agit de rendre le logiciel le plus compréhensible possible par ceux qui écrivent les lois. C’est compliqué d’enseigner Python à un juriste et donc on a essayé de rapprocher la connaissance du juriste avec celle de l’informaticien et de créer un langage lisible sans avoir fait une formation informatique.

Denis Merigoux : Ma spécialité est l’étude et l’écriture du langage de programmation et Liane est une juriste spécialiste du droit du numérique. Nous nous sommes répartis le travail de la manière suivante : je me suis chargé de la fonction logique du langage et Liane de la fonction dite de surface, autrement dit de la création d’un vocabulaire utilisé et lisible par les juristes. Le logiciel est interopérable. Il est ainsi traduisible dans d’autres langages informatiques, mais aussi compréhensible par des juristes. Le compilateur, qui joue le rôle de traducteur, nous permet de traduire le langage vers d’autres langages.

Un projet d’intelligence humaine qui correspond à la définition légale des systèmes d’IA

Denis Merigoux : À la question de savoir quelle est la place de l’intelligence artificielle (IA) dans notre projet, j’aime à répondre que cela dépend du sens que l’on donne à l’IA. À mon sens, notre projet répond plutôt à la définition de l’intelligence humaine. En effet, on écrit le programme et il est tel que l’on a écrit nous-mêmes. On est maître du programme. On pense à l’avance aux situations. On imagine toutes les situations qui peuvent arriver et c’est en prévoyant en avance que l’on aboutit à un programme robuste conforme à la loi.

Liane Huttner : Il est vrai que si on reprend la définition de l’intelligence artificielle selon la proposition de règlement sur la législation sur l’intelligence artificielle, on ne fait pas de machine learning. Nous n’avons pas de jeux de données sur lequel on entraîne le modèle. À chaque fois que la loi change, on change le programme. Cela étant, juridiquement parlant, si on reprend la définition de la Commission européenne dans sa proposition de législation sur l’intelligence artificielle, on peut dire qu’on est dans un type de système qui fait de l’intelligence artificielle. Mais j’abonde dans le sens de Denis : le langage CATALA s’assimile à de l’intelligence humaine avec de bons outils. Ce qui compte dans notre projet c’est surtout la méthodologie et nous nous rapprochons en cela de la pensée du philosophe Ivan Illich.

Les étapes de la conception d’un design de langage dédié orienté vers la preuve pour le logiciel critique

Denis Merigoux : Il y a bien sûr plusieurs écoles pour concevoir un design de langage dédié, orienté vers la preuve pour les logiciels critiques. Pour notre projet, nous avons respecté quatre étapes.

  • La première étape consiste à rencontrer et échanger avec les futurs utilisateurs du langage de programmation et on leur demande ce qu’ils veulent. On établit les besoins, les fonctionnalités du langage et cela nous donne un cahier des charges.
  • Vient ensuite une étape de réconciliation des besoins parfois ambigus des utilisateurs avec un fondement logique qui sera la base du langage de programmation. Celui-ci peut notamment être un langage de programmation orienté objet, ou encore un langage de programmation fonctionnel. On peut ensuite faire de la coloration syntaxique ou des outils d'analyse statique pour aider les programmeurs.
  • La troisième étape correspond à la formalisation du langage : il s’agit d’une description formelle – comme un objet de mathématique – de ce qu’est un programme dans le langage et comment il s’exécute. On prouve ensuite un théorème qui explique que le langage se comporte bien : c’est la sûreté du typage. Le cœur de langage va être cohérent et calculer les choses telles que l’on veut, et cela sans bug.
  • On passe enfin à l’étape du compilateur qui va permettre de faire la traduction vers des langages que l’on connaît déjà. Il est censé respecter l’étape d’avant.

Il faut surtout retenir que concevoir un langage de programmation est une activité planificatrice. Cela prend du temps. C’est une activité très sociale, il faut revenir vers les utilisateurs durant toute la conception, car il y a toujours des choix à faire et des décisions à trancher.

La fidélité à la loi des algorithmes écrits en CATALA

Liane Huttner : Le langage CATALA est un outil et on peut l’utiliser de différentes manières. Si on utilise la méthode que nous avons développée, il y a une garantie de fidélité à la loi. Cette méthode se décline en trois points.

  • Premièrement, on fait du pair programming (programmation par binôme). On travaille en binôme avec un informaticien qui programme et un juriste qui lit et explique les dispositions du texte de loi et cela le plus en interaction possible. Rien n’est écrit sans que le juriste le dise et on essaie de garantir une loyauté entre le texte de loi et le programme informatique.
  • Deuxièmement, on fait de la literate programming (programmation littéraire). Concrètement, nous écrivons toujours le langage en dessous ou à côté de la règle originelle. Par exemple, si un article législatif prévoit que les allocations familiales sont ouvertes à partir du deuxième enfant, nous allons écrire juste en dessous la traduction en code informatique. Ainsi, tout le monde peut vérifier la correspondance entre le langage informatique et le texte de loi.
  • Troisièmement, le langage CATALA est open source : cela signifie qu’il est transparent et que tout le monde peut y accéder et proposer des corrections et des alternatives. L’infrastructure d’exécution du logiciel CATALA est également en open source, ce qui signifie qu’elle est réplicable en dehors de l’administration. Cette mise à disposition du code entraîne une transparence a priori de l’algorithme.

Denis Merigoux : J’ajoute que si on suit cette méthode, il y a une garantie de fidélité à la loi qui n’est pas pour autant infaillible. Cela ne suffit pas de coder en CATALA, il faut suivre la méthode. Néanmoins, on a un niveau d’assurance très élevé, de l’ordre de 99 %. On utilise des méthodes formelles qui sont une branche de la science informatique qui considère les algorithmes comme des objets mathématiques sur lesquels il est possible de raisonner et de prouver des théorèmes. Grâce à ces méthodes, on peut prouver que le programme est fidèle à la loi. Ces types de systèmes sont notamment utilisés industriellement dans les systèmes informatiques critiques tels que pour les centrales nucléaires ou dans le secteur de l’aéronautique. On a mis en place des éléments garantissant la fiabilité. Nous approfondissons notre recherche en nous réunissant en ligne chaque semaine avec des groupes de recherche composés de juristes et d’informaticiens principalement français et américains. Notre programme est en effet utilisé pour le Code des impôts étasunien dans un cadre académique. Le code du langage CATALA est également hébergé sur Github.

Le langage CATALA pensé comme une bouche de la loi

Liane Huttner : Quand l’interprétation d’une législation n’est pas claire, on le signale avec un encart. On explique ainsi la difficulté d’interprétation avec des renvois et des références à une diversité de sources. C’est ensuite à l’utilisateur de choisir l’interprétation qu’il estime la meilleure. On ne s’arroge aucune compétence : nous ne sommes que des bouches de la loi. On donne seulement le choix quand il y a une possibilité de faire soit l’un soit l’autre. À titre illustratif, dans la responsabilité du droit civil, les juges peuvent appliquer l’équivalence des conditions ou la causalité adéquate. Dans ce type de cas, les deux méthodes s’avèrent exactes. Ce qu’il convient également de retenir avec le langage CATALA, c’est que la décision ne sera pas définitive et pourra faire l’objet d’un contentieux administratif. On ne va pas prendre un choix arbitraire qui ne se justifie pas. L’utilisateur peut par ailleurs vérifier et simuler à l’avance. L’administration peut également décider que cette interprétation n’est pas valable. Dans ce cas, cela doit ouvrir la possibilité d’exercer un recours pour excès de pouvoir. Nous avons été confrontés à un cas dans lequel une déduction relative au calcul des impôts était liée à une déduction plafonnée. Nous avons donc créé deux variables liées l’une à l’autre. Ce qui est intéressant avec notre projet, c’est que nous pouvons ajouter un nombre infini de variables. Par exemple, nous pouvons appliquer différentes variables pour un seul mot tel que l’enfant tel que défini dans titre I ou dans titre III d’un texte de loi. Logiquement, nous avons aussi détecté des incohérences ou des inexactitudes dans le texte de la loi. Nous les avons signalés aux autorités compétentes.

Coder la loi : un projet qui a ses limites

Liane Huttner : L’acte de coder la loi dans un langage informatique n’est pas neutre. Par principe, on pourrait même dire que j’y suis opposée. Je pense en effet que la loi est une affaire d’Hommes et de prétoires et non une affaire d’informaticiens. Cependant, notre projet ne concerne que l’application individuelle de législation impliquant des calculs. On n’opère rien de nouveau, on propose juste un meilleur système, par rapport à ce qui est fait depuis ces quarante dernières années et qui est opaque. Des algorithmes sont en effet créés dans la mesure où il est impossible de calculer à la main les impôts de plus de 65 millions de français. Dans ce contexte, il me semble que coder la loi est justifié et qu’il est proportionné d’utiliser des algorithmes. Cela s’avère d’autant plus intéressant que ce sont des outils qui sont à la fois utiles et vérifiables à la fois par les citoyens et par les administrations. Il faut signaler qu’il existe des lignes de pensée qui rejettent complètement toute automatisation de la loi et qui se fondent sur des explications valables. Toutefois, dans ce cas, qui se chargerait de calculer les impôts ? Faudrait-il recruter des fonctionnaires pour effectuer ces calculs fastidieux ? Cela impliquerait-il de simplifier le Code des impôts ? Il faut une vraie réflexion sur les alternatives. Pour autant, à mon sens, il faut se garder d’étendre notre projet à des domaines législatifs qui ne supposent aucun calcul, sauf si cela se justifie par le principe de proportionnalité. Si on suit cette logique, le projet ne devrait pas s’appliquer pour le Code pénal ou encore le Code civil. Si on souhaite coder la loi, il faut tout d’abord engager une réflexion en amont et déterminer si les conditions de faisabilité éthique et technique sont réunies. Il faut de plus penser à des méthodes de production loyales, éthiques et avec des systèmes de contre-pouvoirs.