Catala - un DSL pour dériver des algorithmes fidèles à partir de textes juridiques
(github.com/CatalaLang)- Catala est un langage spécifique à un domaine destiné à dériver des algorithmes faithful-by-construction à partir de textes législatifs, et un langage de programmation adapté à la programmation lettrée des législations sociales et fiscales
- L’implémentation consiste à rassembler les textes relatifs aux mécanismes sociaux et fiscaux à implémenter, comme les lois, décrets d’application et jurisprudences, puis à annoter en code le sens de chaque ligne, article par article
- Le compilateur Catala peut générer une version PDF de l’implémentation lisible par des juristes à partir d’un code finalisé et testé ; le langage a été conçu en collaboration avec des experts du droit afin qu’ils puissent le relire et en certifier l’exactitude
- Les concepts clés sont le definition-under-conditions et la logique par défaut, fondés sur A Logic for Statutes de la professeure Sarah Lawsky ; la structure logique du langage imite la structure logique du droit
- Comme outils de développement, il propose la coloration syntaxique pour plusieurs éditeurs de texte, une extension VSCode, un serveur LSP dédié, la navigation dans le code, l’autocomplétion, une UX pour la suite de tests, et le formateur
catala-format - Pour l’apprentissage et la référence, on peut consulter le Catala book, le Catala tutorial, les cheat sheets de grammaire en français et en anglais, ainsi que la documentation du compilateur pour la version
masterla plus récente - Le compilateur et le code du dépôt sont distribués sous Apache license version 2, sauf indication d’une licence différente dans certains sous-répertoires
- Catala est un projet de recherche de l’Inria, et le compilateur est encore instable avec certaines fonctionnalités manquantes
1 commentaires
Commentaires Hacker News
Ce projet semble supposer implicitement que spécifier formellement les textes de loi et disposer d’un système capable d’interpréter les lois de façon largement mécanique est une bonne chose.
Plus loin encore, il revient à considérer que le système actuel d’interprètes humains, avec sa part de discrétion et de marge d’erreur, est un problème à dépasser ; je ne suis pas totalement opposé à cette hypothèse, mais il n’est pas évident qu’elle soit juste, et les auteurs ne semblent pas non plus avoir avancé d’arguments pour l’étayer.
Pour quelqu’un qui connaît le processus de transformation d’un texte législatif en code, on comprend ce que ce projet cherche à faire, même si sa valeur se limite à apporter de la clarté aux développeurs logiciels.
Je pense que c’est aussi étroitement lié à l’État de droit. D’après https://www.britannica.com/topic/rule-of-law, la loi doit être publique et claire, avoir une forme générale et une applicabilité universelle, contenir des exigences déterminées que les personnes peuvent consulter avant d’agir, et les obligations juridiques ne doivent pas être créées rétroactivement. Je me demande quel est l’avantage d’une loi ambiguë.
Quand j’étudiais le droit, en tant que programmeur, ce domaine m’intéressait beaucoup, et j’ai découvert une grande communauté francophone qui travaillait dans cette veine légaliste. Un professeur de mon université qui s’y intéressait semblait lui aussi pencher vers cette influence.
Pendant des années, j’ai essayé de convaincre un ami avocat qu’il serait formidable d’avoir exactement quelque chose comme ça ; il s’avère que cela existait probablement depuis toujours.
Je trouve ça vraiment génial. Toutes les lois devraient être écrites dans ce langage et publiées avec coloration syntaxique et règles de formatage cohérentes. Ensuite, l’apprentissage de ce langage juridique devrait être intégré aux programmes scolaires. La capacité des gens à lire la loi et à avoir confiance dans leur compréhension s’en trouverait grandement améliorée, avec un bénéfice social considérable.
Dans la réalité, les lois sont déjà rédigées dans une langue relativement ordinaire, et les mots ont presque toujours le même sens qu’en anglais courant. Le problème est que les concepts juridiques décrits par ces mots sont eux-mêmes complexes, et qu’ils s’entremêlent souvent avec des renvois à d’autres lois, règlements, jurisprudences, etc.
En même temps, il existe aussi des cas où la loi a été codifiée, comme l’Uniform Commercial Code. Autrement dit, des cas où la jurisprudence a été réécrite de manière cohérente, et où les correctifs ont été fusionnés et nettoyés.
Il serait intéressant d’y « tisser » aussi des cas de test. La surface de contact entre les énoncés logiques est précisément l’endroit où les bugs s’introduisent.
C’est particulièrement vrai autour des événements temporels, ce qui mène à des modèles formels et à encore plus de bugs. En général, s’il existe une règle portant sur une clé, il faut au minimum trois tests¹ : un cas plus grand, un cas égal, un cas plus petit. S’il n’y a pas de types, etc., il faut aussi des entrées négatives, null, et aux bornes max/min.
Par exemple, on pourrait avoir des tests fondés sur une chronologie du type : « quand le règlement est adopté trois mois plus tard, que les parties ne peuvent plus exercer B, mais que malgré tout “17 tonnes” de déchets ont été déversées… ». L’intégration d’un model checker serait d’une grande aide. On pourrait même imaginer une législation formellement vérifiée, ou au moins un pipeline de type DevOps pour le processus d’encodage du langage en code.
¹ https://en.m.wikipedia.org/wiki/Equivalence_partitioning
Beaucoup de lois contiennent de nombreuses formulations ambiguës. La récente réglementation de l’UE sur l’autorisation ou non des véhicules russes en est un bon exemple. Cela dit, lorsqu’on essaie de « numériser » la loi dans un langage de programmation, cela pourrait être une bonne idée pour repérer toutes les ambiguïtés possibles ou les définitions floues.
C’est similaire au fait de prouver par des tests unitaires, d’intégration ou end-to-end qu’un code fonctionne afin d’en convaincre les relecteurs. On aurait ainsi des tests end-to-end pour le système juridique.
On pourrait aller plus loin et écrire un ensemble de tests, puis générer automatiquement l’éventail des lois possibles qui satisfont ces tests.
J’aimerais voir davantage un format standard de suite de tests explicitant l’intention de la loi
Dans l’État où je vivais auparavant, une loi très simple interdisant la pédopornographie avait été proposée avec de bonnes intentions, mais elle était trop simple. En gros, elle disait quelque chose comme « quiconque envoie avec un téléphone portable des photos explicites d’un mineur est coupable de transmission de pédopornographie » ; c’était rédigé en termes juridiques, mais guère plus détaillé que cela. J’ai appelé l’auteur du projet de loi pour lui demander si, dans l’hypothèse où ma fille fictive envoyait une photo d’elle nue à son petit ami, elle deviendrait une criminelle au titre de la nouvelle loi ; sa réaction a été « oh, mince, ce n’était pas ce que je voulais dire ! », et il a finalement retiré le texte pour le réécrire
On peut imaginer traiter cela comme du code informatique et y associer des tests du type « cette loi ne s’applique pas lorsqu’un mineur envoie une photo de lui-même ». Cela obligerait le législateur à clarifier son intention, et s’il dit « nous n’utiliserons pas la loi sur la sécurité des enfants en ligne pour interdire les contenus pro-trans », on pourrait répondre : « très bien, mettons cela dans un cas de test ». Le principal obstacle, c’est que les responsables politiques n’aiment pas être ainsi cloués au pilori
Cela rendrait aussi plus facile la rédaction de lois reflétant l’intention, et pourrait aider les tribunaux futurs à l’évaluer. Même si, littéralement, le texte s’applique au cas d’une personne de 15 ans envoyant un selfie, si le test indique que ce n’était pas l’intention, elle pourrait être acquittée. Ce serait impossible pour des centaines de raisons, mais on peut toujours rêver
Autrement dit, il ne faudrait pas qu’ils rédigent volontairement des lois ambiguës pour qu’elles ratissent large, puis laissent les gens se battre devant les tribunaux
La loi n’a pas besoin d’être exécutable par un ordinateur. Elle porte sur l’intention et son interprétation ; la suite de tests elle-même fait donc, en pratique, partie de la loi, et il suffit de l’inclure dans la loi
Personnellement, je serais déjà satisfait si n’importe quel pays joignait à ses lois un objectif législatif. Et, si possible, aussi quelques indicateurs clés de performance permettant de voir si elles fonctionnent. Cela permettrait ensuite de réévaluer si la loi fonctionne réellement, si elle produit des effets pervers, ou si ses principaux cas d’application sont différents des raisons qui ont motivé son adoption
[1] https://www.aclu.org/news/juvenile-justice/minnesota-prosecu...
Un passage assez similaire apparaît brièvement sous le nom de Legal Logic dans le livre Moving Mars (1993) de Greg Bear. Des Martiens humains l’utilisent, avec l’aide d’une IA, lorsqu’ils élaborent les lois de leur société nouvellement indépendante
Greg Bear était un célèbre auteur de science-fiction, décédé il y a moins d’un an, et sa nécrologie avait alors été discutée ici. Il fait partie des auteurs qui ont eu une grande influence sur mon adolescence ; je me souviens en particulier que cet élément de Moving Mars avait stimulé mon imagination, et j’ai envie de lire ce que Catala propose
[1] https://en.wikipedia.org/wiki/Greg_Bear
[2] https://en.wikipedia.org/wiki/Moving_Mars
[3] https://news.ycombinator.com/item?id=33679668
[4] https://news.ycombinator.com/item?id=33675708
Il existe un article décrivant ce langage : https://hal.inria.fr/hal-03159939. Il y a aussi un court résumé vidéo : https://youtu.be/OiaFTFSAa1I
Les programmeurs aiment proposer d’utiliser quelque chose comme un « langage de programmation » pour le droit
Mais cela passe à côté du fait que l’ambiguïté est, à certains égards, une partie fondamentalement importante du droit. Parce que le monde lui-même est, à certains égards, fondamentalement ambigu, et à d’autres clairement découpé. Bien sûr, toutes les formes d’ambiguïté ne sont pas souhaitables
Mais si « le code fait loi », je pense que l’exploitation des failles empirera. En outre, beaucoup de lois devraient se concentrer davantage sur les valeurs à respecter que sur les détails d’implémentation, ce qui est par nature moins précis et plus ambigu
Je ne vais pas débattre pour savoir si c’est un problème de droit ou d’application, mais quoi qu’il en soit, notre société repose sur l’ambiguïté et une application inégale
value.fair_marketdans la section concepts [0]. Les avocats peuvent se disputer sur sa signification, mais des définitions concurrentes peuvent elles aussi être définies sous forme de programmeJe suis d’accord sur le fait que l’attention portée au droit devrait se concentrer sur les résultats plutôt que sur les détails d’implémentation. Pour cela, il faut une façon de créer des fonctions d’évaluation mesurant les effets des nouvelles lois, et des systèmes comme Catala peuvent aider à modéliser les résultats attendus et à choisir entre des projets de loi concurrents. Par exemple, si le résultat recherché est « nous voulons réduire la pollution », la politique peut être « interdire les industries polluantes » ou « taxer les externalités de pollution » ; les deux produisent des effets complexes, donc une analyse automatisée et des mesures empiriques seraient préférables
[0] https://github.com/CatalaLang/catala#concepts
Je ne suis pas sûr qu’il y ait vraiment un problème majeur à résoudre pour permettre aux ordinateurs de raisonner effectivement sur le libellé des lois. La partie compliquée, c’est la mise en balance de l’équité, et cela nécessite toujours des humains et des avocats.
Je me demande si des législateurs, des avocats ou des juges l’attendent, ou si seuls les programmeurs l’attendent.
Je n’ai pas beaucoup confiance dans notre système juridique. Je ne sais pas pourquoi tu poses la question.
En tant que locuteur du catalan, je trouve très regrettable le conflit de nom avec la langue mentionnée dans l’article.
Le choix du nom est vraiment malheureux. C’est un peu comme appeler un langage de programmation « français », « Deutsch » ou « English ».
En bas du readme, il est écrit que « ce langage porte le nom de Pierre Catala ». Je suggérerais plutôt de le renommer PierreLang.
En tant que locuteur natif du catalan, le nom m’a assez surpris, mais si c’est un nom de famille courant, cela se tient.