Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Constitution.France1958.Official.Dsl + Constitution.Usa2026.Official.Dsl — lecture comparée typée

La Partie 9-bis a posé Constitution.Dsl comme une racine abstraite — un vocabulaire de concepts (pouvoirs, bloc, organes, révision, contrôle, droits, bicaméralisme) sans engagement sur un pays particulier. La force d'une racine abstraite se mesure à ce qu'elle permet d'instancier. Tant qu'elle n'a pas été confrontée à deux traditions juridiques différentes, on peut toujours soupçonner qu'elle n'est que la France 1958 déguisée en vocabulaire universel. Cette partie fait passer le test : elle instancie la même racine en Constitution.France1958.Official.Dsl et Constitution.Usa2026.Official.Dsl, deux traditions distinctes — codified law vs common law, contrôle concentré vs diffus, séparation stricte vs collaboration des pouvoirs — et vérifie que les mêmes concepts se plient aux deux sans briser la mécanique.

Cette lecture comparée n'est pas un exercice académique. Elle a trois enjeux techniques précis. Premier enjeu : la convention de nommage ${DslName}.${Space}${Time}.${Author}.Dsl (Partie 2) est soumise ici à un double stress-test — deux pays, deux périodes, deux « auteurs » (Official au sens de la publication consolidée Légifrance FR / Cornell LII US). Deuxième enjeu : le framework META(Ex × Ty) (Partie 4) doit exhiber deux extensions paramétrées (FR 1958 + US 2026) sans tripoter la racine — open/closed via composition. Troisième enjeu : les six analyzers CST001-006 doivent fonctionner identiquement sur les deux instances, et la démo finale cst002-executive-order-tariff matérialise cette symétrie : le même analyzer Roslyn qui refuserait une ordonnance française non habilitée refuse un Executive Order américain non habilité. C'est le cœur du type system — l'abstraction ne craque pas quand on change de tradition.

Le choix des cas particuliers mobilisés compte. Nous ne modélisons pas toute la Constitution française ni toute la Constitution américaine — ce serait un projet à part entière, et la décision éditoriale de la série (règle feedback_blog_series_is_writing_not_implementation) est claire : les assets type-checkent, ils ne sont pas des packages de production. Ce qui est modélisé, c'est ce qui est mobilisé par les analyzers et par la démo : bloc de supra-légalité, articles-clefs, organes-clefs, révisions historiques correctement typées (et une révision typée comme contre-exemple dans demos/cst003-referendum-degaulle-1962/). Le reste est extensible au même prix que n'importe quelle marker class C# — ajouter Article42Constitution1958 { } ne demande aucune maintenance architecturale.

L'argument comparatiste : sans deuxième cas, l'abstraction reste une illusion

Il y a une erreur méthodologique classique dans la modélisation de domaine : croire qu'on a capturé un concept parce qu'on l'a exprimé une fois. On modélise « le client » pour l'application d'une entreprise, on pose une classe Client avec ses dix-sept champs, et on s'imagine avoir une notion générale de client. Mais cette notion n'est rien d'autre que le client particulier qu'on avait sous les yeux. Le test d'abstraction véritable, c'est l'existence d'un deuxième cas qui se plie à la même classe sans déformation. Deux cas, c'est le minimum. Un seul, c'est une illusion.

La même règle vaut pour la modélisation d'un domaine constitutionnel. Si Constitution.Dsl n'est instanciable qu'en France, alors ses concepts ne sont que des concepts français avec des noms génériques. L'abstraction est fausse — elle porte le nom IPower mais veut dire PouvoirFrançais. La seule façon de vérifier que ce n'est pas le cas, c'est d'instancier un deuxième pays qui a réellement une tradition juridique différente. Les États-Unis sont le candidat le plus dur du monde démocratique occidental à cet égard : common law (jurisprudence créatrice, stare decisis), fédéralisme (deux niveaux constitutionnels — fédéral et état), séparation stricte des pouvoirs (Madison Federalist n° 47-51 contre la collaboration à la française), contrôle diffus (toute cour peut se prononcer sur une question constitutionnelle), pas de « bloc » au sens français mais des amendements cumulés. Si Constitution.Dsl passe le test américain, elle passe probablement le test allemand, italien, espagnol. Si elle craque, elle ne vaut rien.

Ce n'est pas neuf comme méthode. C'est exactement ce que fait Bertrand Meyer dans Object-Oriented Software Construction (Partie 9-bis) quand il insiste sur l'importance de tester une classe abstraite avec deux sous-classes substantiellement différentes avant de la figer. C'est ce que font Édouard Catala, Denis Merigoux et leurs coauteurs dans leur papier POPL 2022 sur Catala quand ils instancient le même moteur de preuve sur des fragments du Code général des impôts et du tax code américain. La répétabilité à travers les traditions est le seul test de qualité d'une abstraction juridique. Constitution.Dsl doit y passer, sinon elle ment.

L'argument politique : le type system rend le comparatisme lisible

Le comparatisme juridique existe depuis Montesquieu lui-même (L'Esprit des lois, 1748, construit explicitement par comparaison entre Rome, Venise, Angleterre, France). Il a aujourd'hui une littérature académique abondante — Cappelletti, Mauro, Le Pouvoir des juges, 1984 ; Ackerman, We the People, 1991 ; Tushnet, Weak Courts, Strong Rights, 2008 ; Jackson et Tushnet, Comparative Constitutional Law, 3e éd. 2014. Mais cette littérature reste largement verbale : elle décrit, elle classifie, elle nuance. Elle produit rarement des outils exécutables qui obligent à trancher une catégorisation.

Le type system fait ce saut. Quand on déclare ConseilConstitutionnel : IPractices<PriorReview>, IPractices<PosteriorReview>, on prend une position comparatiste tranchée : le contrôle a priori (saisine avant promulgation) et le contrôle a posteriori (QPC depuis 2008) sont deux modalités distinctes du contrôle, le CC pratique les deux. Quand on déclare SupremeCourtOfTheUnitedStates : IPractices<JudicialReview> sans IPractices<PriorReview>, on prend une autre position tranchée : la SCOTUS ne pratique pas le contrôle a priori — elle n'intervient qu'incident d'un case or controversy (Article III Section 2). Cette affirmation est contestable (certains juristes diraient que le writ of mandamus originel utilisé dans Marbury v. Madison 1803 est une forme de contrôle a priori limité), mais elle est explicite — un juriste qui veut la contester doit proposer une autre modélisation, pas simplement faire une remarque en note de bas de page. Le compilateur devient un site de débat doctrinal structuré.

C'est la promesse la plus ambitieuse de la série : remplacer les débats en prose par des désaccords typés. Quand deux juristes disagreement sur une catégorie, le bon niveau de désaccord n'est pas « vous dites ceci, je dis cela ». C'est « vous proposez cette hiérarchie d'interfaces, je vous propose celle-ci, voici ce que change l'une par rapport à l'autre dans la vérification automatique ». Le type system force la clarté du désaccord. Il ne tranche pas les débats — il les rend inspectables.

Le bloc de constitutionnalité — quatre couches historiques

Le bloc de constitutionnalité français, tel que construit par la décision du Conseil constitutionnel DC 71-44 du 16 juillet 1971 (« liberté d'association »), est une pile historique de quatre textes : la Déclaration des droits de l'homme et du citoyen de 1789 (DDHC), le Préambule de la Constitution du 27 octobre 1946 (qui inclut les Principes fondamentaux reconnus par les lois de la République — PFRLR — mobilisables au cas par cas), la Charte de l'environnement de 2004 (intégrée par révision constitutionnelle du 1er mars 2005), et la Constitution du 4 octobre 1958 elle-même. Ces quatre textes ont tous rang constitutionnel — aucun ne prime sur les autres, ils se complètent.

[NormFr(NormRankFr.ConstitutionalBloc)]
public sealed class Ddhc1789 : IConstitutionalBlock { /* ... */ }

[NormFr(NormRankFr.ConstitutionalBloc)]
public sealed class Preambule1946 : IConstitutionalBlock { /* ... */ }

[NormFr(NormRankFr.ConstitutionalBloc)]
public sealed class CharteEnvironnement2004 : IConstitutionalBlock { /* ... */ }

[NormFr(NormRankFr.ConstitutionalBloc)]
public sealed class Constitution1958 : IConstitutionalBlock { /* ... */ }

Chaque couche reçoit son attribut [NormFr(ConstitutionalBloc)] — rang 0 dans l'enum, au sommet de la pyramide. Un droit fondamental tiré de la DDHC (art. 11 — liberté d'expression) aura le même poids qu'un droit tiré du Préambule 1946 (liberté syndicale, alinéa 6) ou de la Charte environnement (droit à un environnement sain, art. 1). L'analyzer CST001 qui vérifie la hiérarchie des normes traite ces quatre sources comme équivalentes.

Les articles-clefs et les organes

L'instance FR modélise les articles-clefs mobilisés par les analyzers et la démo : art. 6 (élection du Président), art. 8 (nomination du PM), art. 20 (le Gouvernement détermine la politique), art. 24 (Parlement = Assemblée + Sénat), art. 34 (domaine de la loi), art. 37 (matières réglementaires), art. 38 (ordonnances), art. 45 (navette bicamérale + CMP + dernier mot AN), art. 49-3 (engagement de responsabilité), art. 56 (composition du CC), art. 61 (contrôle a priori), art. 61-1 (QPC), art. 89 (révision constitutionnelle), art. 11 (référendum législatif — explicitement non une procédure de révision). Chaque article est une sealed class nue, référencée par les attributs [Supersedes] ou [Habilitation].

Les organes sont typés avec leur scope de pouvoir — le Président et le Premier ministre portent [OrganScope(typeof(Executive))], l'Assemblée nationale et le Sénat portent [OrganScope(typeof(Legislative))], le Conseil constitutionnel porte [OrganScope(typeof(Constitutional))] et implémente IPractices<PriorReview> + IPractices<PosteriorReview>. Le Parlement est modélisé comme organe collectif distinct — l'art. 24 parle du « Parlement » comme entité unique pour l'adoption des lois, mais la procédure passe par les deux chambres séparément.

Trois révisions correctement typées

Les révisions constitutionnelles correctement typées dans l'instance FR sont : la révision du 29 octobre 1974 (saisine du CC par 60 parlementaires, voie art. 89 Congrès) ; la révision du 2 octobre 2000 (passage au quinquennat, voie art. 89 référendum — 73% des suffrages exprimés) ; la révision du 23 juillet 2008 (création de la QPC + 35 autres modifications, voie art. 89 Congrès — 539 voix pour / 357 contre à Versailles, à deux voix près de la majorité des 3/5). Ces trois révisions exhibent les deux procédures valides typées dans Constitution.Dsl (IArticle89Congress et IArticle89Referendum).

Notablement absente du fichier Revisions.cs : la révision du 28 octobre 1962 (élection du Président au suffrage universel direct, voie art. 11 référendaire). Cette révision, juridiquement vice de procédure selon la doctrine majoritaire (Avril, Carcassonne, Duhamel), est déplacée dans demos/cst003-referendum-degaulle-1962/ pour servir de contre-exemple — la déclarer comme IConstitutionalRevision ici ferait échouer la compilation, ce qui est exactement le résultat voulu et le sujet de la démo.

Pas de « bloc » au sens français — des strates d'amendements

La Constitution américaine ne connaît pas de « bloc de constitutionnalité » au sens français. Elle est un texte originel (Constitution of the United States, ratifié en 1787-1788, entré en vigueur le 4 mars 1789) auquel s'ajoutent des amendements successifs : Bill of Rights (Amendements I-X, ratifiés 1791) ; Reconstruction Amendments (XIII-XV, 1865-1870, abolition de l'esclavage, Due Process, droit de vote sans discrimination raciale) ; amendements de l'ère progressiste (XVI-XIX, 1913-1920, impôt fédéral sur le revenu, élection directe des sénateurs, prohibition, droit de vote des femmes) ; amendements civiques (XXIII-XXVI, 1961-1971, District of Columbia, abolition du poll tax, majorité électorale à 18 ans).

Pour la cohérence avec l'instance FR, l'instance US modélise trois classes de bloc : UsConstitution1787, BillOfRights1791, ReconstructionAmendments. Toutes trois portent [NormUs(NormRankUs.ConstitutionalBloc)]. C'est un choix de modélisation explicite — on traite les amendements cumulés comme équivalents à un « bloc » au sens fonctionnel, pas au sens formel. Un juriste américain puriste dirait qu'il n'y a qu'une seule Constitution, avec des amendements incorporés. Le type system accepte les deux lectures — la convention ici est lissée pour permettre la lecture comparée avec la FR.

Articles et amendements mobilisés

L'instance US modélise les articles et amendements mobilisés par les analyzers et la démo : Article I Section 7 (présentation des bills + véto présidentiel) ; Article I Section 8 Clause 1 (Taxing and Spending Clause — pouvoir du Congrès de lever des impôts) ; Article I Section 8 Clause 3 (Commerce Clause) ; Article I Section 8 Clause 18 (Necessary and Proper Clause) ; Article II Sections 1, 2, 3 (Executive Power, Commander in Chief, Take Care Clause) ; Article III Sections 1, 2 (Judicial Power, Case or Controversy) ; Article V (procédure d'amendement) ; Article VI (Supremacy Clause + Treaty Clause) ; Amendements I (speech/religion/press), V (Due Process fédéral), X (Reserved powers), XIV (Due Process étendu aux états + Equal Protection). La nomenclature suit une convention aplatie — ArticleISection8Clause1UsConstitution — pour éviter l'imbrication C# profonde qui n'apporte rien de plus qu'une complexité syntaxique.

Organes avec séparation stricte

L'instance US modélise cinq organes : President (scope Executive), HouseOfRepresentatives et Senate et leur union Congress (scope Legislative — notez que Congress est une abstraction fonctionnelle, comme Parlement en FR), SupremeCourtOfTheUnitedStates (scope Judicial, pratique exclusivement JudicialReview via IPractices<JudicialReview>). Les cours fédérales inférieures (District Courts, Circuit Courts of Appeals) ne sont pas modélisées ici — elles pratiquent également le judicial review incident, mais leur absence n'affecte pas la démo. Extensions triviales pour le lecteur qui voudrait pousser le modèle.

Aucun organe US ne pratique PriorReview. C'est une prise de position typée : la doctrine case or controversy (Article III Section 2) interdit à toute cour fédérale de se prononcer sur une question constitutionnelle en dehors d'un litige concret. La SCOTUS ne pratique pas le contrôle abstrait à la française — elle intervient dans un litige particulier, à la demande d'une partie qui a standing (intérêt à agir). C'est là une différence structurelle massive avec le Conseil constitutionnel français, qui reçoit une saisine avant promulgation par 60 parlementaires et se prononce dans l'abstrait sur la conformité de la loi au bloc. Le type system reflète cette différence sans ambiguïté.

Statutes d'habilitation — mobilisés par la démo CST002

Trois lois fédérales servent de marker types pour les habilitations statutaires utilisées par la démo : Section232TradeExpansionAct1962 (ajustement des importations pour raisons de sécurité nationale), IeepaAct1977 (mesures économiques en cas d'urgence déclarée), ReciprocalTradeAgreementsAct1934 (négociation d'accords commerciaux). Toutes trois portent [NormUs(NormRankUs.FederalStatute)] — rang 1 dans l'enum, juste sous le bloc constitutionnel. Leur rôle dans la démo : être référencées par [CongressionalAuthorization(typeof(...))] pour justifier qu'un Executive Order empiète sur le domaine législatif sans violer la séparation des pouvoirs.

Paire 1 : contrôle de constitutionnalité FR / US

Le contrôle de constitutionnalité est le point de divergence structurelle le plus visible entre les deux traditions. Il est habituellement présenté par deux schémas parallèles textuels — un pour la France, un pour les États-Unis — sans rien en commun. Cette présentation a un défaut pédagogique majeur : elle empêche la comparaison véritable. Elle dit « voici comment font les Français, voici comment font les Américains », mais elle ne nomme pas les concepts partagés qui permettraient de caractériser les différences. Le type system fait ce travail d'abstraction : il nomme un concept commun (IConstitutionalReview), trois modalités distinctes (PriorReview, PosteriorReview, JudicialReview), et chaque cour pratique un sous-ensemble explicite de ces modalités.

Ce gain conceptuel est disproportionné par rapport au coût syntaxique. Trois classes phantom + une interface générique IPractices<TReview> suffisent pour rendre le contraste lisible. La charge cognitive pour le juriste non-développeur reste minimale — il reconnaît ses catégories habituelles (contrôle a priori, QPC, judicial review) et voit immédiatement qui pratique quoi. Pour le développeur, l'analyzer CST005 peut ensuite vérifier qu'un acte soumis à un type de contrôle n'est pas simultanément soumis à un autre incompatible. La comparaison devient structurelle, pas seulement descriptive.

Diagram
Diagram

Paire 2 : procédure d'amendement FR art. 89 vs US Article V

La procédure d'amendement est le second point de divergence structurelle majeur. En France, l'art. 89 propose deux voies après adoption par les deux chambres en termes identiques : la voie du Congrès (réunion des deux chambres à Versailles, majorité des 3/5 des suffrages exprimés), ou la voie référendaire (référendum direct, majorité simple). Aux États-Unis, l'Article V propose également deux voies à chaque étape : au niveau fédéral, l'amendement peut être proposé soit par les 2/3 de chaque chambre du Congrès, soit par une convention convoquée à la demande des 2/3 des législatures d'État (jamais utilisée depuis 1787) ; au niveau état, l'amendement doit être ratifié par les 3/4 des législatures d'État ou par des conventions d'État.

Cette symétrie apparente masque une divergence profonde : en FR, les deux voies sont mutuellement exclusives pour une révision donnée (on choisit Congrès ou Référendum), et la décision du choix appartient au Président. Aux US, les deux voies sont à des étapes différentes (proposition + ratification), et la ratification est obligatoirement étatique — le peuple fédéral ne vote jamais directement un amendement. Le type system rend cette divergence lisible en typant chaque étape séparément. Deux stateDiagrams parallèles suffisent à montrer les deux cheminements — pas besoin de prose longue pour comparer.

Diagram
Diagram

La démo CST002 — Executive Order imposant un tarif douanier

La démo demos/cst002-executive-order-tariff/ matérialise l'engagement comparatiste : le même analyzer Roslyn qui refuse une ordonnance française non habilitée refuse un Executive Order américain non habilité. Le scénario est hypothétique (nous évitons les cas réels politiquement polémiques de l'administration Trump 2017-2020) : un président impose par EO un tarif douanier de 25% sur les importations chinoises, sans citer d'habilitation statutaire. L'acte est déclaré IConstitutionalAct<President, Legislative> — ambition législative (création d'une norme tarifaire) par un organe exécutif.

La compilation échoue avec error CST002: 'ExecutiveOrder99999' émet IConstitutionalAct<President, Legislative> alors que l'organe opère dans le scope 'Executive'. Aucune habilitation [Habilitation] ni [CongressionalAuthorization] n'est attachée. Deux voies de remédiation compilent dans Passing/Fix.cs :

  • Voie A — habilitation statutaire explicite. L'EO cite Section232TradeExpansionAct1962 via [CongressionalAuthorization(typeof(Section232TradeExpansionAct1962))]. Le compilateur accepte — l'acte est légal parce que le Congrès a préalablement autorisé le président à ajuster les importations pour raisons de sécurité nationale. Le type documente l'habilitation en dur ; un audit automatisé peut compter combien d'EO reposent sur Section 232 vs IEEPA vs RTAA.

  • Voie B — reclassification en acte exécutif. L'EO n'est pas un acte législatif (création de tarif) mais un acte exécutif (enforcement d'un tarif déjà prévu par une loi). IConstitutionalAct<President, Executive> est cohérent avec le scope de l'organe. Le compilateur accepte — l'acte est une exécution, pas une création.

Ces deux voies sont politiquement signifiantes. La distinction entre « création » et « enforcement » est le cœur du débat sur la non-delegation doctrine depuis Schechter Poultry Corp. v. United States, 295 U.S. 495 (1935), réactivé par la Major Questions Doctrine de West Virginia v. EPA, 597 U.S. 697 (2022). Le type system ne tranche pas ce débat — il force sa lisibilité. Un juriste qui prétend qu'un EO est un acte exécutif quand il crée clairement une norme nouvelle se trouve en contradiction typée avec son propre code.

Marbury v. Madison, 5 U.S. (1 Cranch) 137 (1803) — la fondation du judicial review

John Marshall, Chief Justice de la Cour suprême, écrit en 1803 la décision qui institue le judicial review aux États-Unis. Le contexte est politique — la nomination de William Marbury comme juge de paix par l'administration Adams sortante, refus du secrétaire d'État Madison (administration Jefferson entrante) de lui délivrer sa commission. La question juridique : la Cour peut-elle émettre un writ of mandamus pour forcer la délivrance ? La réponse de Marshall est d'une élégance paradoxale : oui, Marbury a droit à sa commission ; non, la Cour ne peut pas émettre le writ parce que la section 13 du Judiciary Act de 1789 qui lui donne ce pouvoir est inconstitutionnelle (elle étend la juridiction originaire de la Cour au-delà de ce que l'Article III Section 2 permet).

Cette décision fonde une proposition structurelle : c'est le pouvoir judiciaire qui a le dernier mot sur la constitutionnalité des lois fédérales. It is emphatically the province and duty of the judicial department to say what the law is. Marshall ne cite aucun texte constitutionnel explicite pour cette proposition — l'Article III parle seulement de « judicial power » sans préciser que ce pouvoir inclut le contrôle de constitutionnalité. Le judicial review est une construction jurisprudentielle qui s'est imposée par son acceptation politique ultérieure. Le type system refuse de gommer cette origine contingente : JudicialReview est une modalité distincte de PriorReview / PosteriorReview, et seule la SCOTUS (et ses cours inférieures fédérales) la pratique. C'est la prise de position minimaliste cohérente avec la doctrine américaine mainstream (Tribe, American Constitutional Law, 3e éd. 2000 ; Ackerman, We the People, 1991).

Conseil constitutionnel DC 62-20 du 6 novembre 1962 — l'auto-limitation du juge constitutionnel

La décision du Conseil constitutionnel du 6 novembre 1962, saisi par Gaston Monnerville (président du Sénat) pour contrôler la loi référendaire du 28 octobre 1962 modifiant l'art. 6 de la Constitution, est le pendant français involontaire de Marbury v. Madison. Le Conseil se déclare incompétent : il ne peut contrôler une loi adoptée par référendum, au motif qu'elle est « l'expression directe de la souveraineté nationale ». Cette auto-limitation — qui permet au référendum De Gaulle de produire ses effets juridiques sans sanction — contraste avec l'audace Marshallienne qui, au contraire, étend le pouvoir du juge.

La doctrine française majoritaire (Avril, La Constitution, 1989 ; Carcassonne, La Constitution, 15e éd. 2022 ; Duhamel, Le pouvoir politique en France, 1999) considère cette décision comme problématique : elle crée une « zone de non-droit » dans laquelle le peuple souverain peut modifier la Constitution en violation de la procédure formelle de l'art. 89, sans recours possible. C'est exactement ce que modélise la démo CST003 de la Partie 9-bis : le type system refuse la catégorisation ambiguë « révision constitutionnelle par art. 11 », forçant le développeur/juriste à se positionner explicitement (position orthodoxe ou gaulliste). Là où le Conseil constitutionnel s'est déclaré incompétent, le compilateur ne peut pas se déclarer incompétent — il doit prendre position.

Éric Fassin et Geoffroy de Lagasnerie — contrepoint critique

Le projet général de la série s'est construit (cf. mémoire utilisateur reference_lagasnerie_ame_noire) par contrepoint aux thèses épistocratiques défendues par certains penseurs contemporains — Geoffroy de Lagasnerie dans L'âme noire de la démocratie (Flammarion, février 2026) y consacre plusieurs chapitres. La thèse épistocratique défend une concentration du pouvoir aux mains de ceux qui « savent » — experts, juristes, économistes. Le type system proposé ici fait l'exact inverse : il distribue l'épistémocratie, en rendant le savoir constitutionnel lisible et disputable par quiconque sait lire un type C#. Le compilateur devient un outil de la démocratie, pas un auxiliaire de l'expertocratie.

Cette position est structurelle dans toute la série. Elle n'est pas naïve — nous ne prétendons pas que tout citoyen va lire un fichier .cs pour comprendre la Constitution. Nous prétendons que les traces de décisions politiques peuvent être rendues inspectables par les outils que produisent les traces, et que cette inspectabilité est préférable à l'opacité des décisions dans des rapports techniques illisibles. Le choix de publier les assets en blog avec code visible (pas en packages NuGet séparés) suit la même logique — rendre le code lu, pas exécuté.

Denis Merigoux, Nicolas Chataing, Jonathan Protzenko (POPL 2022) — Catala comme précédent vivant

Le papier Catala: A Programming Language for the Law (POPL 2022) de Merigoux, Huttner, Protzenko et collaborateurs est le précédent technique le plus directement pertinent pour Constitution.Dsl. Catala est un DSL pour la transcription du droit fiscal — il a été utilisé pour reconstruire la section 121 du US Internal Revenue Code (exonération de la plus-value sur la résidence principale) et une fraction du Code général des impôts français. La mécanique Catala exhibe un invariant : une règle juridique a un sens calculable qui peut être validé par types et par preuves. Les erreurs d'interprétation deviennent compile-time, exactement comme dans Constitution.Dsl.

La différence de périmètre est que Catala se concentre sur le droit calculable (fiscalité, allocations, pensions — des règles numériques), tandis que Constitution.Dsl s'attaque au droit structurel (hiérarchie, procédure, organes, contrôle — des règles relationnelles). Les deux sont complémentaires : un type system pour le droit complet devrait combiner les deux approches. Un pont potentiel existe : Law.Economy.Bridge (Partie 9) pourrait exposer des règles de calcul Catala-style pour vérifier que les dépenses LOLF modélisées dans State.Economy.France2026.Insee.Dsl respectent les plafonds constitutionnels (règle d'or organique de 2012, art. 34 al. 21). Extension pour les Parties 11-12.

Critique et limites

Cinq limites structurelles de l'instance comparée FR/US doivent être énoncées explicitement, dans l'esprit de l'engagement substantiel de la série. Premièrement, la modélisation US aplatit volontairement la distinction fédéral / état — le fédéralisme américain est une dimension constitutionnelle à part entière (Amendement X, doctrine Erie, Commerce Clause dormante), et Constitution.Dsl n'a pas de concept IFederalLevel<TLevel> qui capturerait cette dimension. Une instance Constitution.Texas2026.Official.Dsl ou Constitution.California2026.Official.Dsl serait un stress-test bien plus sévère. Deuxièmement, la modélisation FR omet les « traités ratifiés » comme rang intermédiaire effectif — l'art. 55 leur donne une autorité supérieure aux lois (mais inférieure à la Constitution), et la jurisprudence Nicolo (CE 1989) + Fraisse (Cass. Ass. plén. 2000) a construit un régime complexe que le type system ne capture qu'en rang enum, sans les subtilités jurisprudentielles.

Troisièmement, les analyzers CST001-006 n'exploitent pas encore les bridges — ils vérifient chacune des racines isolément, sans croiser Constitution × Law × Economy. Par exemple, un analyzer idéal devrait refuser qu'une loi de finances (rang OrdinaryLaw + IBudgetaryAct) modifie un droit garanti par la Charte environnement (rang ConstitutionalBloc) sans révision préalable. Cet analyzer croisé est la promesse implicite du bridge — mais il n'existe pas encore. Quatrièmement, la common law américaine repose sur le stare decisis (jurisprudence obligatoire), qui n'a pas d'équivalent typé dans Constitution.Dsl. Une décision de la SCOTUS lie les cours inférieures fédérales ; cette contrainte devrait être un rang de norme à part entière (case law precedent), distinct des statutes et des regulations. L'enum NormRankUs actuel n'inclut pas ce rang.

Cinquièmement, l'instance US ne modélise pas les États confédérés pré-1865 ni les amendements abrogés (XVIII — prohibition, abrogé par XXI). Ces strates archéologiques du droit constitutionnel américain (et leur équivalent FR — Constitutions de 1791, 1793, 1795, 1799, 1814, 1830, 1848, 1852, 1875, 1940, 1946) sont structurellement importantes pour un historien du droit, accessoires pour un compilateur qui s'intéresse au droit en vigueur. Le choix de modélisation est de rester sur le droit vivant. Une extension archéologique est triviale (ajouter des marker types avec un attribut [Abrogated(date)]), mais elle n'est pas incluse ici — à nouveau, blog series = écriture, pas implémentation complète.

Vers la Partie 10 — la trace Dumas

La Partie 10 (10-trace-dumas.md) reprend le cas Dumas 1995 — le rognage électoral qui a écarté Alain Juppé du second tour des législatives par redécoupage de la circonscription la veille du premier tour. Ce cas mobilise Law.Dsl (norme électorale ordinaire), pas Constitution.Dsl. Mais rétrospectivement, après les Parties 9-bis et 9-ter, la lecture s'enrichit : le rognage Dumas viole simultanément LOI003 (procédure de modification électorale, rang loi ordinaire) et un principe de bloc constitutionnel (égalité du suffrage, DDHC art. 6 + Préambule 1946 al. 1 + Constitution 1958 art. 3). La partie 10 est inchangée dans son contenu, mais sa portée s'élargit — on peut désormais imaginer un analyzer CST007 qui vérifierait qu'une loi électorale ne modifie pas la carte des circonscriptions dans les X mois précédant une élection sans saisine préalable du CC. Ce type d'analyzer est ce que rend possible la racine Constitution.Dsl séparée.

Une Partie 11 symétrique côté State.Economy.Dsl reste à écrire — une loi de finances qui viole la règle d'or organique LOLF 2001 (art. 34 al. 21 après révision 2008), ou qui dépasse le seuil Maastricht de 3% sans [Article126TfeuJustification]. Le triptyque FR/US/World des instances constitutionnelles restera ouvert — chaque pays peut publier son paquet NuGet Constitution.<Pays><Année>.Official.Dsl sans toucher à la racine. C'est la prolifération démocratique des cadres, posée en Parties 2-4, rendue effective.

⬇ Download