Théorie des Jeux - Game Theory
← Notebooks | ↑ .. | → RL
La théorie des jeux est le langage mathématique de la stratégie. Elle modélise les situations où des agents rationnels prennent des décisions dont le résultat dépend des choix des autres : enchères, négociations, élections, poker, allocation de ressources. Cette tension entre coopération et compétition traverse l’économie, les sciences politiques et l’informatique (mécanismes de vote, contrats, réseaux), et le prix Nobel d’économie a récompensé des théoriciens des jeux à sept reprises entre 1994 et 2020.
La série se lit sur deux axes complémentaires. Le premier est pratique : simuler des jeux avec Nashpy et OpenSpiel, calculer des équilibres, organiser des tournois itérés, explorer les algorithmes modernes (CFR). Le second est formel : prouver des résultats en Lean 4, de l’existence d’équilibres au théorème d’Arrow et à la valeur de Shapley. Le parcours principal couvre les jeux non coopératifs (Nash, minimax, équilibre parfait en sous-jeux) comme les jeux coopératifs (Shapley, Core).
À qui s’adresse cette série : étudiants en économie, informatique et mathématiques appliquées. Aucun prérequis en théorie des jeux : les concepts sont introduits depuis les matrices de gains. Une familiarité avec l’algèbre linéaire et les probabilités de base est utile. Le parcours principal s’exécute en Python natif, à l’exception des notebooks 13 et 17 qui demandent l’environnement OpenSpiel sous WSL.
Pourquoi cette série
La théorie des jeux est le point de rencontre entre l’optimisation (maximiser son gain), la logique (raisonner sur les croyances d’autrui) et l’informatique (algorithmes de résolution, formalisation en assistant de preuve).
La série est construite sur une dualité délibérée simulation/preuve :
- Simulation (Python) : calculer des équilibres, simuler des tournois itérés, entraîner des agents CFR. On voit la théorie en action : les équilibres émergent des interactions répétées, la coopération émerge de l’égoïsme même.
- Preuve formelle (Lean 4) : prouver l’existence d’équilibres, l’impossibilité d’Arrow, les axiomes de Shapley. On certifie les résultats : la machine vérifie ce que l’intuition avait suggéré.
Le notebook Python montre pourquoi l’équilibre de Nash est plausible ; le notebook Lean montre pourquoi il existe forcément. Le notebook Arrow de la sous-série SocialChoice montre que le théorème est contre-intuitif ; Arrow.lean prouve qu’il est inévitable.
Parité .NET : chaque notebook du parcours principal, à partir de 02, a un jumeau C# (.NET Interactive) qui réimplémente ses algorithmes sans librairie dédiée, en BCL .NET seule : élimination de Gauss pour Nash mixte, simplexe de Dantzig pour le minimax, CFR sur le poker de Kuhn, Shapley et Banzhaf, Vickrey, VCG et Gale-Shapley. La théorie se code sans boîte noire (marathon de parité #4956).
Où la théorie des jeux sert
- Enchères (notebooks 11 et 16) : les mécanismes VCG et leurs dérivés fondent les enchères publicitaires en ligne et les ventes de fréquences télécom orchestrées par les États.
- Marchés d’appariement (notebooks 15 et 16) : l’algorithme de Gale-Shapley affecte des élèves aux écoles, des internes aux hôpitaux, et organise les dons d’organes par échanges croisés (prix Nobel d’économie 2012).
- Poker et bluff optimal (notebook 13) : Counterfactual Regret Minimization a permis à des programmes de battre les meilleurs joueurs humains au Texas Hold’em, première résolution d’un jeu majeur à information imparfaite.
- Vote et gouvernance (sous-série SocialChoice) : le théorème d’Arrow et les méthodes de Condorcet ou de Borda éclairent le choix d’un mode de scrutin, du vote citoyen à la gouvernance on-chain.
- Coopération et évolution (notebook 06) : le tournoi d’Axelrod et les dynamiques de réplication modélisent l’émergence de la coopération en biologie, en relations internationales et dans les protocoles pair-à-pair.
- Crédibilité et dissuasion (notebooks 10 à 12) : induction arrière, réputation et signaling formalisent la crédibilité des menaces, de la politique monétaire à la stratégie concurrentielle.
- Assurance et information asymétrique (approfondissement 17b) : Akerlof, Spence et Rothschild-Stiglitz formalisent la tarification quand l’assuré connaît son risque mieux que l’assureur, et pourquoi un marché peut s’effondrer en « marché des citrons ».
Objectifs d’apprentissage
À l’issue du parcours principal, vous serez capable de :
- Modéliser une interaction stratégique sous forme normale ou extensive, et y lire dominance, meilleure réponse, ensembles d’information et menaces crédibles.
- Calculer des équilibres : Nash pur et mixte (Lemke-Howson), minimax et dualité LP en jeux à somme nulle, équilibre parfait en sous-jeux par induction arrière et avant.
- Simuler des dynamiques d’apprentissage et d’évolution : tournois itérés à la Axelrod, dynamique du réplicateur, processus de Moran en population finie, apprentissage multi-agent (CFR, NFSP, PSRO).
- Analyser la coopération : valeur de Shapley, Core, condition de Bondareva-Shapley ; concevoir un mécanisme incitatif (principe de révélation, VCG).
Les approfondissements et la sous-série SocialChoice ajoutent deux compétences :
- Raisonner sur l’agrégation collective : impossibilité d’Arrow, théorème de Sen, méthodes de Condorcet, Borda et Copeland, et leur encodage SAT résolu par Z3.
- Formaliser ces résultats en Lean 4 et saisir ce que « prouver » veut dire dans un assistant de preuve.
Chaque notebook suit la même trame : introduction motivée, plan ancré, exemples exécutés, exercices corrigés, pensée pour un travail en autonomie.
Parcours principal
Les notebooks à numéro nu forment le parcours principal. Chacun porte un concept et ne suppose que ce qui le précède. La colonne Pour approfondir renvoie aux lettres du palier, décrites dans Approfondissements ; on peut toutes les ignorer au premier passage.
Les figures qui ponctuent le parcours sont extraites des sorties réelles des notebooks ; leur provenance exacte (notebook et cellule) est documentée dans assets/readme/MANIFEST.md.
Phase 1 : jeux statiques et équilibres (01 à 06)
On apprend à représenter un jeu sous forme normale, puis à le résoudre : dominance, meilleure réponse, équilibre de Nash pur et mixte, théorème minimax. La phase se termine sur l’évolution : comment la coopération émerge d’un tournoi itéré. À l’issue, les trois piliers sont en place : Nash, minimax et évolution.
| # | Notebook | Ce qu’on y apprend | Durée | Public | Pour approfondir |
|---|---|---|---|---|---|
| 01 | Mise en route — Python | Installation de Nashpy et OpenSpiel, premier dilemme du prisonnier | 20 min | Découverte | — |
| 02 | Forme normale — Python (suite) · C# (suite) | Matrices de gains, dominance, meilleure réponse ; la suite énumère les supports mixtes d’un jeu N×N | 45 min | Découverte | 02b · 02c |
| 03 | Topologie des jeux 2×2 — Python · C# | La table périodique de Robinson-Goforth : classer tous les jeux 2×2 ordinaux et dériver leur quotient | 80 min | Licence | 03a · 03b · 03c · 03d · 03e · 03h |
| 04 | Équilibre de Nash — Python · C# | Nash pur et mixte, Lemke-Howson, analyse paramétrique | 60 min | Découverte | 04b · 04c · 04d · 04e · 04f |
| 05 | Jeux à somme nulle — Python · C# | Théorème minimax de von Neumann, programmation linéaire primal/dual | 40 min | Découverte | 05b |
| 06 | Évolution de la confiance — Python · C# | Tournoi d’Axelrod, tit-for-tat, dynamique du réplicateur, processus de Moran en population finie | 65 min | Découverte | 06b · 06c · 06d · 06e · 06f · 06f bis · 06g · 06g bis · 06h |
Les deux figures suivantes, bâties sur le Dilemme du Prisonnier, illustrent les deux gestes fondateurs de cette phase : représenter un jeu, puis le résoudre.

GameTheory-01-Setup-Python — représenter un jeu sous forme normale : la matrice des gains du Dilemme du Prisonnier. Chaque case porte le couple (gain Ligne, gain Colonne) ; la case (Défaire, Défaire) = (1, 1), encadrée en bleu, est l’unique équilibre de Nash, bien que (Coopérer, Coopérer) = (3, 3) soit collectivement supérieur.

GameTheory-02-NormalForm-Python — résoudre un jeu : on souligne la meilleure réponse de chaque joueur (bleu = joueur Ligne, rouge = joueur Colonne). La seule case où les deux soulignements coïncident (en vert) est l’équilibre de Nash.
Phase 2 : jeux dynamiques et information incomplète (07 à 12)
Le modèle s’enrichit du temps et de l’incertitude : arbres de jeu et ensembles d’information, jeux combinatoires, induction arrière puis avant, jeux bayésiens et jeux de réputation. Cette phase présuppose la phase 1.
| # | Notebook | Ce qu’on y apprend | Durée | Public | Pour approfondir |
|---|---|---|---|---|---|
| 07 | Forme extensive — Python · C# | Arbres de jeu, ensembles d’information, stratégies comportementales | 50 min | Licence | — |
| 08 | Jeux combinatoires — Python · C# | Positions P/N, Nim, valeurs de Grundy, théorème de Sprague-Grundy | 55 min | Licence | 08b · 08c · 08d |
| 09 | Induction arrière — Python · C# | Induction arrière, mille-pattes, escalade, engagement | 55 min | Licence | 09b · 09c |
| 10 | Induction avant et SPE — Python · C# | Équilibre parfait en sous-jeux, menaces crédibles, induction avant | 60 min | Licence | — |
| 11 | Jeux bayésiens — Python · C# | Types privés, croyances, équilibre bayésien | 55 min | Licence | 11b |
| 12 | Jeux de réputation — Python · C# | Signaling, cheap talk, réputation (Kreps-Wilson) | 50 min | Licence | — |

GameTheory-10-ForwardInduction-SPE-Python — l’induction avant sur la forme extensive. L’ensemble d’information de J2 (ellipse pointillée) l’empêche de distinguer les deux nœuds ; mais en jouant « In » plutôt que l’option extérieure « Out » (garantie de 2), J1 révèle son intention de jouer Stag. Ce raisonnement « brûle » l’équilibre (Hare, Hare) et sélectionne le sous-jeu parfait (In, Stag, Stag) de valeur (4, 4).
Phase 3 : algorithmes, coopération, mécanismes, apprentissage (13 à 17)
La dernière phase ouvre les frontières de la discipline : CFR pour les jeux à information imparfaite, jeux différentiels, théorie coopérative, conception de mécanismes, apprentissage multi-agent. Le palier 16 sert aussi d’escalier vers la sous-série SocialChoice, consacrée à l’agrégation des préférences.
| # | Notebook | Ce qu’on y apprend | Durée | Public | Pour approfondir |
|---|---|---|---|---|---|
| 13 | Information imparfaite et CFR — Python (WSL) · C# | Counterfactual Regret Minimization, MCCFR, Deep CFR sur le poker | 70 min | Licence | 13b · 13c · 13d |
| 14 | Jeux différentiels — Python · C# | Jeux en temps continu, boucle ouverte et fermée, Stackelberg, poursuite-évasion | 60 min | Licence | — |
| 15 | Jeux coopératifs — Python · C# | Valeur de Shapley, Core, condition de Bondareva-Shapley | 65 min | Licence | 15b · 15c · 15d · 15e · 15f |
| 16 | Conception de mécanismes — Python · C# | Principe de révélation, VCG et la non-monotonie de son revenu, appariement stable de Gale-Shapley | 65 min | Licence | 16b · 16c · 16d · 16e · sous-série SocialChoice |
| 17 | Apprentissage multi-agent — Python (WSL) · C# | Self-play, fictitious play, NFSP, PSRO, introduction à AlphaZero | 55 min | Licence | 17b · 17c · 17c bis · 17d |
Les trois figures suivantes échantillonnent cette phase : l’apprentissage d’un équilibre en information imparfaite, la stabilité coopérative, la convergence d’agents en auto-apprentissage.

GameTheory-13-ImperfectInfo-CFR-Python — le Counterfactual Regret Minimization sur le poker de Kuhn. À gauche, la moyenne mobile (rouge) de l’utilité de J1 converge vers la valeur de Nash du jeu (−0,0556, pointillé vert) malgré le bruit par itération. À droite, les probabilités de mise apprises pour chaque carte (J/Q/K) rejoignent les étoiles du Nash théorique : l’algorithme reconstruit le bluff optimal sans jamais connaître la stratégie adverse.

GameTheory-15-CooperativeGames-Python — la répartition d’une valeur commune v(N) = 9 entre trois firmes A, B, C. Chaque point du triangle est un partage ; les points verts forment le Core (les partages qu’aucune coalition ne peut contester), et l’étoile rouge est la valeur de Shapley, ici à l’intérieur du Core, donc stable.

GameTheory-17-MultiAgent-RL-Python — deux dynamiques d’apprentissage sur Pierre-Feuille-Ciseaux. À gauche (échelle log), le self-play naïf reste exploitable en oscillant, tandis que le fictitious play voit son exploitabilité décroître régulièrement. À droite, les fréquences du fictitious play convergent vers le Nash uniforme (1/3, 1/3, 1/3) : la convergence de Robinson (1951) en action.
Concepts clés du parcours
| Concept | Description | Palier |
|---|---|---|
| Équilibre de Nash | Profil de stratégies où aucun joueur ne gagne à dévier unilatéralement | 04 |
| Minimax | Stratégie qui minimise la perte maximale, en jeu à somme nulle | 05 |
| Processus de Moran | Dynamique stochastique en population finie : la dérive peut fixer une stratégie sous-optimale, ce que la dynamique du réplicateur, déterministe, ne fait pas | 06 |
| Positions P/N | Positions perdantes (Previous) et gagnantes (Next) d’un jeu combinatoire | 08 |
| Sprague-Grundy | Théorème qui ramène tout jeu combinatoire impartial à un tas de Nim | 08 |
| SPE | Équilibre parfait en sous-jeux : un Nash crédible dans chaque sous-jeu | 09-10 |
| CFR | Counterfactual Regret Minimization : convergence vers Nash en information imparfaite | 13 |
| Valeur de Shapley | Répartition équitable des gains d’un jeu coopératif | 15 |
| Core | Ensemble des allocations qu’aucune coalition ne peut contester | 15 |
| VCG | Mécanisme où dire la vérité est une stratégie dominante | 16 |
| Théorème d’Arrow | Impossibilité d’une agrégation parfaite des préférences | SocialChoice |
| Information asymétrique | Un agent connaît son type mieux que l’autre : contre-sélection, signal coûteux, screening | 17b |
| Méta-action tarifée | Réécrire ses propres préférences déclarées au prix d’échelons de rang : changer les règles a un coût, un seuil de migration et ses propres équilibres | 03e |
Approfondissements
Une lettre creuse le palier dont elle porte le numéro. On l’ouvre pour aller plus loin sur ce palier, pas pour avancer dans la série : chaque table ci-dessous suppose le notebook du palier déjà lu, et signale les prérequis en plus quand il y en a. Les paliers 01, 07, 10, 12 et 14 n’en portent pas.
Autour de 02 — forme normale
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 02b | Définitions en Lean | Formaliser un jeu 2×2, les stratégies mixtes et la définition de Nash en Lean 4 | Lean | Licence |
| 02c | Dilemme du voyageur — Python · C# | Basu (1994) : l’élimination itérée des stratégies dominées mène à (2, 2), que contredit le comportement humain ; le bonus r* = 1 où le paradoxe se dissout | Python · C# | Licence |
Autour de 03 — géométrie ordinale des jeux
Ces lettres prolongent la table périodique du 03 en une géométrie de l’espace des jeux : murs, distances, déformations, méta-actions. Lire 03b avant 03a et 03h, qui s’appuient sur ses murs ; 03e fait la synthèse.
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 03b | Chambres et murs | Les jeux stricts comme chambres d’un arrangement, les égalités comme murs : incidence mur/chambre, graphe des chambres, swaps en longueurs de Coxeter | Python | Recherche |
| 03a | Chemins de swaps | À quelle distance sont deux jeux : parcours en largeur, théorème de décomposition, certificat Lean indépendant du plus court chemin | Python | Licence |
| 03h | Deux espèces de flèches | Le théorème fini du chemin minimal : quand un swap traverse un mur ; la conjecture naïve réfutée, la condition exacte vérifiée | Python | Recherche |
| 03c | Le joueur LLM | Un modèle de langage placé dans la table périodique et confronté à ses transformations ordinales | Python | Licence |
| 03d | Plan de déformation | Biens publics non linéaires et déformation continue de l’espace stratégique | Python | Licence |
| 03e | Méta-actions tarifées | Changer les règles comme action payante : coût en échelons de rang, seuil de migration, méta-jeu ; puis le parcours complet, du jeu nommé au coût de la méta-action | Python | Recherche |
Autour de 04 — existence et nature de l’équilibre
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 04b | Existence de Nash en Lean | Le cadre de la preuve d’existence formalisé en Lean 4 : simplexe, convexité, point fixe de Brouwer ; quelques étapes d’arithmétique flottante y restent admises | Lean | Licence |
| 04c | Point fixe discriminant — Python · C# | Brouwer rendu testable : la carte perturbed_br déplace un profil non équilibré et laisse fixe l’équilibre (voir Pour aller plus loin) |
Python · C# | Licence |
| 04d | Marchandage asymétrique | Point de désaccord, faisceau de dépendance, contre-exemple au principe du moindre intérêt | Python | Licence |
| 04e | Oracles réflexifs | Fallenstein, Taylor et Christiano (2015) : un agent qui raisonne sur un modèle de lui-même, l’écart CDT/EDT, un Nash réflexivement cohérent | Python | Recherche |
| 04f | Théories de la décision face à un prédicteur | EDT, CDT et UDT sur Newcomb, la lésion de Fisher et d’autres problèmes dans un seul cadre générique ; 2TDT-1CDT ; inattention rationnelle | Python | Recherche |
Autour de 05 — minimax
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 05b | Minimax en Lean | Le théorème de von Neumann prouvé sans sorry dans le lake minimax_lean (via Sion), vérifié dans le noyau Lean |
Lean | Licence |
Autour de 06 — jeux répétés, agents transparents et bornés
06c est le prolongement naturel du 06. Les lettres 06e à 06h forment un chantier sur les agents dont le programme est lisible ou le calcul borné, à lire dans l’ordre. Les lettres 06f et 06g sont chacune portées par deux notebooks ; la passe de renommage leur donnera des lettres distinctes.
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 06c | Folk Theorem — Python · C# | Horizon fini et effondrement par induction arrière, horizon infini et grim trigger, condition δ ≥ (T−R)/(T−P), Folk Theorem | Python · C# | Licence |
| 06b | Jeux répétés en Lean | Compagnon formel du 06c : les modules du lake game_theory_lean/RepeatedGames lus et exécutés, dont grim_trigger_sustains_iff prouvé sans sorry |
Python, lit Lean | Licence |
| 06d | Sympathie contre engagement | Séparer empiriquement sympathie et engagement par statique comparative sur les gains d’autrui (prérequis en plus : 06c) | Python | Recherche |
| 06e | Open-source game theory | Des programmes lisibles l’un par l’autre : l’engagement vérifiable change l’équilibre du dilemme | Python | Recherche |
| 06f | Agents bornés | Agents-programmes à budget de calcul explicite : ce que le plafond fait aux équilibres atteignables | Python | Recherche |
| 06f bis | Preuves bornées | À borne de calcul donnée, quelles propriétés restent prouvables : le coût du raisonnement comme paramètre du jeu | Python | Recherche |
| 06g | Agents bornés en Lean | La borne de raisonnement formalisée et exécutée en Lean | Lean | Recherche |
| 06g bis | Équilibres par simulation | Équilibres de programmes qui se simulent mutuellement | Python | Recherche |
| 06h | Institutions transparentes | La transparence du code comme mécanisme d’engagement institutionnel | Python | Recherche |
Autour de 08 — jeux combinatoires
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 08b | Jeux combinatoires en Lean | Jeux combinatoires formels, Nim et Sprague-Grundy en Lean | Lean | Licence |
| 08c | Variantes — Python · C# | Périodicité des valeurs de Grundy, Wythoff, jeux composites, Chomp | Python · C# | Licence |
| 08d | Bibliothèque canonique en Lean | La même théorie exécutée depuis vihdzp/combinatorial-games (lake conway_cgt_lean) : jeux, surréels, nimbers |
Lean | Recherche |
Autour de 09 — engagement et Stackelberg
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 09b | Engagement et Stackelberg | L’engagement contraignant qui transforme la meilleure réponse d’autrui, l’annonce révocable dissoute par induction arrière, le seuil de crédibilité | Python | Licence |
| 09c | Security game | Le défenseur s’engage, l’attaquant observe avec bruit : robustesse du patrouilleur à un capteur imparfait | Python | Licence |
Autour de 11 — jeux bayésiens
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 11b | Vickrey en Lean | Le théorème de Vickrey (enchère au second prix : dire la vérité est dominant) prouvé sans sorry dans le lake lean_game_defs_ext |
Lean | Licence |
Autour de 13 — résolution de sous-jeux
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 13b | Résolution sûre de sous-jeux | Recoller un sous-jeu résolu à part : un mauvais recollement produit un témoin adversarial explicite | Python | Recherche |
| 13c | Résolution sûre, jumeau C# | Jumeau C# du 13b : reproduction, audit des poids de chemin, meilleure réponse énumérée ; la loi survit, les valeurs absolues non | C# | Recherche |
| 13d | CFR optimiste | OFTRL stable-prédictif : la variante qui stabilise la convergence par prédiction | Python | Recherche |
Autour de 15 — coalitions et pouvoir
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 15b | Jeux coopératifs en Lean | Axiomes de Shapley, Core et Bondareva-Shapley formels (lake game_theory_lean/CooperativeGames) |
Lean | Licence |
| 15c | Exemples avancés — Python · C# | Jeu des gants, Core vide en majorité simple, indices de pouvoir | Python · C# | Licence |
| 15d | Möbius sur les coalitions | Décomposition de Möbius sur le treillis des coalitions, dividendes d’interaction | Python | Recherche |
| 15e | Pouvoir coalitionnel et SMT | Calcul exhaustif, encodage SMT borné et preuve | Python | Recherche |
| 15f | Shapley de groupe | Évaluer une équipe comme une unité : le meilleur binôme n’est pas celui des deux meilleurs individus | Python | Recherche |
Autour de 16 — mécanismes
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 16c | Extraction de revenu | Le revenu sous contraintes d’incitation (DSIC) et de participation (IR) : ce que VCG laisse sur la table | Python | Licence |
| 16d | Échange de reins | Graphe de compatibilité, cycles et chaînes de donneurs, arbitrage entre cardinalité et équité | Python | Licence |
| 16b | Conception automatique de mécanismes | Synthétiser un mécanisme sous contraintes, puis vérifier ses propriétés | Python | Recherche |
| 16e | Joueurs LLM | Pilote : des agents de langage hétérogènes joueurs d’un mécanisme d’Othman-Sandholm | Python | Recherche |
L’agrégation des préférences (Arrow, vote, manipulation) se poursuit dans la sous-série SocialChoice.
Autour de 17 — information asymétrique
17b ne demande, en plus du 17, que le palier 11 (types privés).
| Lettre | Notebook | Ce qu’il ajoute | Noyau | Public |
|---|---|---|---|---|
| 17b | Information asymétrique | Les modèles fondateurs : Akerlof (marché des citrons), Spence (signal coûteux), Rothschild-Stiglitz (screening), Wilson-Miyazaki | Python | Licence |
| 17c | Certificat d’Akerlof en Lean | Le certificat du lake asymmetric_information_lean exécuté : seuil de pooling exact, monotonie, spirale de prix |
Lean | Recherche |
| 17d | Screening et signaling en Lean | Les autres modules du même lake : non-existence de Rothschild-Stiglitz, intervalle séparateur de Spence et minimalité de Riley, Wilson-Miyazaki, pont bayésien | Lean | Recherche |
| 17c bis | Du marché au bilan | L’équilibre de marché lu comme un bilan d’espérances : le pont vers la théorie de la décision | Python | Licence |
La lettre 17c est portée par deux notebooks ; la passe de renommage leur donnera des lettres distinctes.
Parcours transverses
Quatre itinéraires qui traversent paliers et lettres pour un public précis.
Formalisation Lean (~4h) — pour qui vient de la série SymbolicAI/Lean. Familiarité avec Lean 4 supposée (tactiques de base, types inductifs) ; les notebooks Python correspondants donnent l’intuition sans être des prérequis.
- 02b : jeu 2×2, stratégies mixtes, Nash
- 04b : Brouwer et le cadre de l’existence de Nash
- 05b : von Neumann par Sion, sans
sorry - 08b, puis 08d : jeux combinatoires, puis la bibliothèque canonique
- 15b : axiomes de Shapley, Core
- SocialChoice 01b : Arrow, Sen, électeur médian
Applications (~6h) — pour qui préfère les cas d’usage aux fondements.
- 05 : programmation linéaire, dualité
- 06 : émergence de la coopération
- 13 : poker, minimisation du regret
- 16 : enchères VCG, allocation, et le piège de la non-monotonie du revenu
- SocialChoice 03 : Condorcet, Borda, modèles électoraux
Information asymétrique et assurance (~4h30) — pour l’assurance, la banque ou la régulation : un agent en sait plus que l’autre (le client sur son risque, l’emprunteur sur sa solvabilité, le vendeur sur sa qualité).
- 11 : types privés, croyances, équilibre bayésien
- 12 : signaling, cheap talk
- 16 : principe de révélation, contrat sous contrainte d’incitation
- 17b : Akerlof, Spence, Rothschild-Stiglitz, Wilson-Miyazaki
- 17c puis 17d : les mêmes modèles certifiés dans le lake
asymmetric_information_lean
Informatique théorique (~5h) — pour l’algorithmique et la complexité.
- 02 : matrices de gains, dominance
- 04 : Lemke-Howson, PPAD-complétude
- 08 : Sprague-Grundy, nimbers
- 13 : regret contrefactuel, convergence
- SocialChoice 04 : théorèmes encodés en SAT, preuves d’insatisfiabilité
Extensions au-delà du parcours
Les notebooks numérotés de 18 à 25 ne prolongent pas le parcours principal. Ce sont des extensions autonomes : chacune isole un geste qui modifie l’espace des jeux (composition, abstraction, témoin d’impossibilité) plutôt qu’une solution dans un jeu donné. Leur numéro nu est un héritage de leur livraison, pas une étape du parcours ; leur rattachement aux paliers est à l’étude avec la gradation de la série (#15615).
| # | Notebook | Ce qu’on y apprend | Noyau | Public |
|---|---|---|---|---|
| 18 | Open games et lentilles | Une représentation locale qui modifie le contexte global dont elle est issue | Python | Recherche |
| 18b | Casser la composition | Contre-exemples à la compositionnalité des équilibres d’open games | Python | Recherche |
| 19 | Abstraction à dette | Mesurer ce que perd une représentation simplifiée | Python | Recherche |
| 20 | Chemin minimal | Un témoin de chemin minimal construit par un générateur, vérifié par un composant indépendant | Python | Recherche |
| 20b | Témoins d’impossibilité | Le chemin minimal qui ne peut pas exister, exhibé par le code | Python | Recherche |
| 20c | Jeux ordinaux 3×2 | Le même théorème testé sur un second substrat | Python | Recherche |
| 21 | Translateur Life | Synthèse d’un translateur du jeu de la vie, et certificat d’impossibilité quand la traduction échoue | Python | Recherche |
| 22 | Ensembles limites | Poincaré-Bendixson en dimension 2 : point fixe, orbite périodique ou cycle hétérocline, classés mécaniquement, et l’échec du théorème au-delà du plan | Python | Recherche |
| 23 | Affectation de Kuhn-Munkres | L’affectation optimale en arithmétique entière exacte, certifiée par dualité LP, et le pont vers le cœur de Shapley-Shubik | Python | Licence |
| 23b | Affectation en Lean | Dualité et optimalité de Kuhn-Munkres exécutées depuis le lake assignment_lean |
Lean | Recherche |
| 24 | Banc humour | Banc de calibration (forme partagée contre stimulus, matrice de confusion) puis passage à l’échelle consolidé : corpus Argumentum 120 instances, comparaison LLM, circularité, paires minimales (#14032) | Python | Recherche |
| 25 | Persuasion bayésienne | La concavification évaluée par deux méthodes indépendantes (programme linéaire et enveloppe concave) dont l’accord est vérifié, avec un contrôle négatif | Python | Recherche |
Installation
Le noyau de chaque notebook figure dans la colonne Noyau des tables et dans ses métadonnées.
Python natif (la plupart des notebooks)
pip install -r MyIA.AI.Notebooks/GameTheory/requirements.txt
# open_spiel échoue sous Windows : c'est attendu, seuls les notebooks marqués WSL en ont besoinPython sous WSL (OpenSpiel : notebooks 13 et 17)
OpenSpiel ne compile pas nativement sous Windows. Les notebooks marqués WSL utilisent le kernel Python (GameTheory WSL + OpenSpiel) :
# 1. Dans WSL Ubuntu
cd /mnt/d/CoursIA/MyIA.AI.Notebooks/GameTheory/scripts
bash setup_wsl_openspiel.sh# 2. Côté Windows (PowerShell)
cd D:\CoursIA\MyIA.AI.Notebooks\GameTheory\scripts
.\setup_wsl_kernel.ps1Lean 4 (notebooks marqués Lean)
Les notebooks marqués Lean utilisent le kernel Lean 4 (WSL) :
# 1. Dans WSL Ubuntu
cd /mnt/d/CoursIA/MyIA.AI.Notebooks/GameTheory/scripts
bash setup_wsl_lean4.sh # installe elan, Lean 4, le REPL et lean4_jupyter# 2. Côté Windows (PowerShell)
cd D:\CoursIA\MyIA.AI.Notebooks\GameTheory\scripts
.\setup_lean4_kernel.ps1 # enregistre le kernel lean4-wslC# (jumeaux .NET)
Les jumeaux C# s’exécutent avec .NET Interactive (.NET 9) :
dotnet tool install --global Microsoft.dotnet-interactive
dotnet interactive jupyter installVérification et configuration
jupyter kernelspec list
# doit montrer python3, et selon vos besoins gametheory-wsl, lean4-wsl, .net-csharpDétails et dépannage : install_wsl_kernel.md. Les clés d’API sont optionnelles (cp .env.example .env, puis compléter).
Premier lancement
pip install -r MyIA.AI.Notebooks/GameTheory/requirements.txt
jupyter notebook MyIA.AI.Notebooks/GameTheory/GameTheory-01-Setup-Python.ipynb
# puis GameTheory-02-NormalForm-Python, et la suite du parcours principalFAQ et dépannage
J’ai un Windows, puis-je suivre toute la série ?
Oui. Tout le Python tourne nativement sous Windows (Nashpy, NumPy, SciPy, Matplotlib, Z3), sauf les notebooks marqués WSL, qui demandent OpenSpiel. Les notebooks Lean demandent aussi WSL, pour le kernel lean4-wsl. Les scripts d’installation sont dans scripts/ (voir Installation).
Quel est le prérequis mathématique minimum ?
Algèbre linéaire de base (produit matrice-vecteur) et probabilités (espérance, loi uniforme). Les concepts de théorie des jeux sont introduits depuis zéro.
Faut-il faire les notebooks Lean ?
Non. Ce sont des approfondissements, jamais des prérequis du parcours principal. Ils s’adressent à qui veut comprendre ce que « prouver » veut dire dans un assistant de preuve. Si vous n’avez jamais touché à Lean, commencez par la série SymbolicAI/Lean.
Quelle différence entre Nash pur et Nash mixte ?
Un équilibre pur est un choix déterministe : chaque joueur choisit une seule stratégie. Un équilibre mixte autorise les probabilités : chaque joueur randomise entre plusieurs stratégies. Le notebook 04 couvre les deux et montre que tout jeu fini a au moins un équilibre mixte (Nash, 1951).
Je suis bloqué sur un exercice Lean
Vérifiez d’abord votre environnement avec Lean-01-Setup-Lean-Python. La référence est Theorem Proving in Lean 4. Les exercices de cette série n’exigent que les tactiques introduites dans les notebooks, pas une connaissance détaillée de Mathlib.
open_spiel échoue à l’installation sous Windows
C’est attendu : seuls les notebooks 13 et 17 en ont besoin. Pour tous les autres, installez les dépendances de requirements.txt ; le sous-ensemble minimal courant est :
pip install nashpy z3-solver matplotlib numpyLe kernel lean4-wsl ne démarre pas
Le premier démarrage via WSL peut prendre de 30 à 60 secondes. Si le kernel échoue :
- Vérifiez que WSL répond :
wsl -d Ubuntu -- echo OK - Vérifiez le wrapper :
wsl -d Ubuntu -- test -f ~/.lean4-kernel-wrapper.py && echo OK - Relancez le kernel. Si l’échec persiste, voir wsl-kernels.md.
Nashpy retourne plusieurs équilibres
C’est normal : un jeu peut avoir plusieurs équilibres, purs ou mixtes, et Nashpy les retourne tous. Le notebook 04 explique comment les interpréter et les départager.
Les calculs d’équilibres sont lents
La complexité croît vite avec le nombre de stratégies. Pour les petits jeux, nashpy avec method="support-enumeration" suffit ; pour les grands, le notebook 13 approche l’équilibre par itération (CFR). Vérifiez aussi que les lignes et les colonnes de la matrice de gains ne sont pas inversées.
Z3 retourne UNSAT trop vite
Si l’encodage SAT d’Arrow (SocialChoice 04) semble trivial, vérifiez le nombre de votants et d’alternatives : l’impossibilité apparaît à partir de 3 alternatives et 2 votants. En dessous, le solveur trouve une règle satisfaisante.
Un lake Lean ne se construit pas
Chaque lake du dossier est un projet Lake indépendant, avec sa propre toolchain (lean-toolchain). Pour construire le module SocialChoice :
cd MyIA.AI.Notebooks/GameTheory/game_theory_lean
lake build SocialChoiceVérifiez que lean --version correspond à la toolchain du lake ; si les dépendances échouent, lancez lake exe cache get puis lake build. Les lakes actifs sont listés dans Formalisations Lean.
Après la série
- Approfondir la formalisation : la série SymbolicAI/Lean prolonge les approfondissements Lean. Elle développe les compétences de preuve (tactiques, types inductifs, Mathlib) qui sous-tendent
Arrow.lean,Shapley.leanet les preuves d’existence d’équilibres. - Apprendre plutôt que calculer : la série RL reprend la théorie des jeux sous l’angle de l’apprentissage, où les stratégies d’équilibre ne sont plus calculées mais apprises par interaction. La série Search partage les arbres de jeu, le minimax et l’induction arrière.
- Concevoir des règles : la sous-série SocialChoice et le palier 16 ouvrent sur la conception de mécanismes, c’est-à-dire concevoir des règles qui poussent des agents égoïstes vers un résultat collectivement souhaitable. La série SmartContracts prolonge ces mécanismes en gouvernance on-chain.
- Une tension à méditer : reprenez le notebook 06 et le tournoi d’Axelrod, où la coopération émerge de l’égoïsme ; puis confrontez-le au théorème d’Arrow, qui montre que certaines agrégations parfaites sont impossibles. L’émergence optimiste face à l’impossibilité démontrée : c’est la tension vivante de la série.
La théorie des jeux déplace la question de la décision : non plus « quelle est la meilleure action ? », mais « quelle est la meilleure action, sachant que les autres, aussi rationnels que moi, raisonnent de même ? ». La série donne le formalisme (formes normale et extensive, Nash, SPE, minimax, Shapley), la double validation (simulation numérique et preuve formelle) et le sens des applications (enchères, appariement, poker, vote).
Pour aller plus loin
Cette partie réunit la matière de niveau Recherche : notes techniques sur des résultats précis du parcours, formalisations Lean, liens avec les autres séries, organisation du dossier.
Activités associées
Les activités Bataille des Sexes, Évolution de la confiance et Scrutin de Condorcet exercent en jeu d’équipe les équilibres, jeux répétés et choix social enseignés ici.
Processus de Moran : la population finie (palier 06)
Le round-robin déterministe du notebook 06 donne une hiérarchie stable où Grudger et TitForTat dominent. La dynamique de Moran (librairie axelrod, Knight et al., JORS 2016) modélise un autre régime : une population finie où chaque étape copie un joueur proportionnellement à son fitness puis en élimine un uniformément au hasard. Le §7bis du notebook exécute cette dynamique sur 25 graines :
| Stratégie | Fixations sur 25 graines |
|---|---|
| Defector | 7/25 (28 %) |
| Grudger | 6/25 (24 %) |
| Win-Stay Lose-Shift | 4/25 (16 %) |
| Random (p = 0,5) | 3/25 (12 %) |
| Tit For Tat | 3/25 (12 %) |
| Cooperator | 2/25 (8 %) |
TitForTat, dominant au tableau du round-robin, ne se fixe que dans 12 % des trajectoires. Le processus de Moran est stochastique : la dérive peut fixer une stratégie sous-optimale par simple fluctuation d’échantillonnage, indépendamment de son fitness. C’est la distinction canonique entre dynamique du réplicateur en champ moyen, déterministe (§5) et processus de Moran fini, stochastique (§7bis).
- Population finie n’est pas champ moyen. Quand \(N \to \infty\), le processus de Moran converge vers la dynamique du réplicateur ; à \(N\) fini, le bruit d’échantillonnage domine dès que \(|f_A - f_B| \lesssim 1/N\).
- Lire la sortie, pas l’intuition. Ce que le tableau du round-robin annonce, la trajectoire stochastique le dément.
- Lecture écologique. Le processus de Moran est l’outil de référence de la théorie évolutionnaire des jeux (Nowak, Evolutionary Dynamics, 2006).
Point fixe discriminant : pourquoi regret = 0 définit l’équilibre (approfondissement 04c)
La carte perturbed_br du notebook 04c illustre le point fixe de Brouwer sur Matching Pennies : un point fixe de perturbed_br est un profil où le vecteur de regret est nul. Tester cette propriété seulement à l’équilibre (0.5, 0.5) serait tautologique : le regret y est nul par définition, la perturbation ne fait rien, et « (0.5, 0.5) est point fixe » est vrai par construction.
Le notebook lève la tautologie par un contraste à deux points de départ :
| Départ | Vecteur de regret | perturbed_br renvoie |
Point fixe ? |
|---|---|---|---|
(0.8, 0.2) (non équilibre) |
[0.24, 0] |
[0.8047, 0.1953] ≠ départ |
Non : la carte déplace le point |
(0.5, 0.5) (équilibre de Nash) |
[0, 0] |
(0.5, 0.5) = départ |
Oui |
- Regret nul équivaut à point fixe (apprentissage sans regret, Hart et Mas-Colell 2000) : appliqué à
perturbed_br, Brouwer n’a rien de magique, c’est le critère qui définit la convergence vers Nash. - Anti-tautologie. Tout test de point fixe, d’optimalité ou de convergence exige au moins un point de départ non équilibré, qui doit être déplacé.
- Lien avec le 04b. Le notebook Lean 04b pose le cadre formel de l’existence (simplexe, convexité, point fixe) ; le 04c l’illustre numériquement. Preuve et simulation se complètent sans se substituer.
Formalisations Lean
La série aligne simulation numérique et preuve formelle : les notebooks motivent (Lemke-Howson, Axelrod, Gale-Shapley), les lakes prouvent. L’inventaire complet (toolchains, statut de build, sorry résiduels) est tenu dans LEAN_INVENTORY.md ; la table ci-dessous ne sert qu’à retrouver, pour chaque lake, les notebooks qui l’enseignent ou le consomment.
| Lake | Ce qu’il prouve | Notebooks |
|---|---|---|
game_theory_lean (module SocialChoice) |
Impossibilité d’Arrow, caractérisation de Sen | SocialChoice 01b |
game_theory_lean (module CooperativeGames) |
Bondareva-Shapley sans sorry (#3954), Core non vide sous équilibrage |
15, 15b |
game_theory_lean (module StableMarriage) |
Gale-Shapley : existence et optimalité côté proposant | 15b, 16 |
game_theory_lean (module RepeatedGames) |
Grim trigger certifié sans sorry (#4880) ; le Folk Theorem complet reste ouvert (Folk.lean) |
06b, 06c |
game_theory_lean (module Swaps) |
Certificat du plus court chemin de swaps | 03a |
minimax_lean |
Théorème minimax de von Neumann, via Sion | 05b |
lean_game_defs, lean_game_defs_ext |
Types de jeux partagés ; Vickrey sans sorry |
02b, 08b, 11b, 17d |
conway_cgt_lean |
Visite de la théorie des jeux combinatoires de Conway (vihdzp/combinatorial-games) |
08d |
assignment_lean |
Dualité faible et optimalité à gap nul de Kuhn-Munkres (#12598) | 23, 23b |
asymmetric_information_lean |
Akerlof (seuil de pooling exact), Spence, Rothschild-Stiglitz, Wilson-Miyazaki | 17b, 17c, 17d |
SocialChoice/social_choice_lean_peters |
Lake de référence externe (D. Peters, MIT) : Gibbard-Satterthwaite, Split Cycle et d’autres règles | SocialChoice 01b, 07 |
Les anciens lakes autonomes du choix social, des jeux coopératifs, du mariage stable et des jeux répétés ont été absorbés dans game_theory_lean (#4365). repeated_games_lean/ a été retirée du disque (coquille sans module, #4362) ; social_choice_lean/ ne reste que comme coquille documentaire. Au niveau du dépôt, voir le hub SymbolicAI/Lean et la feuille de route Lean (#4038).
Liens avec les autres séries
| Cette série | Série liée | Pont |
|---|---|---|
| Lakes Lean (Arrow, Sen, Shapley, Vickrey) | SymbolicAI/Lean | Même toolchain WSL, Mathlib partagée |
| Apprentissage multi-agent (NFSP, PSRO) | RL | Stratégies d’équilibre apprises par interaction plutôt que calculées |
| Arbres de jeu, induction arrière, minimax | Search | Même structure d’arbre, du minimax à MCTS |
| Mécanismes VCG, appariement de Gale-Shapley | SymbolicAI/SmartContracts | La conception de mécanismes se prolonge en gouvernance on-chain |
| Encodage SAT/Z3 d’Arrow | SymbolicAI/SMT | Même solveur Z3 |
Organisation du dossier
GameTheory/
├── GameTheory-*.ipynb # parcours principal, approfondissements, extensions
├── SocialChoice/ # sous-série Choix social (son propre README, lake social_choice_lean_peters/)
├── assets/readme/ # figures du README et leur MANIFEST
├── game_theory_utils.py # utilitaires partagés
├── limit_sets.py # détecteur d'ensembles limites (extension 22)
├── cooperative_games/ # Shapley, Core, valeur de groupe, exemples
├── trust_simulation/ # stratégies, tournoi d'Axelrod, visualisation
├── examples/ # scripts autonomes (dilemme, CFR sur Kuhn, VCG, Stackelberg...)
├── tests/ # tests unitaires des modules Python
├── scripts/ # installation des kernels WSL (OpenSpiel, Lean)
├── game_theory_lean/ # lake multi-module (voir Formalisations Lean)
├── minimax_lean/ assignment_lean/ asymmetric_information_lean/ conway_cgt_lean/
├── lean_game_defs/ lean_game_defs_ext/
├── social_choice_lean/ # coquille documentaire (absorbée ; peters vit sous SocialChoice/)
├── LEAN_INVENTORY.md # inventaire des lakes
├── install_wsl_kernel.md # installation des kernels WSL
└── requirements.txt
Les tests unitaires des modules Python :
cd MyIA.AI.Notebooks/GameTheory
python -m pytest tests/ -v
python examples/prisoners_dilemma.pyPour valider ou exécuter un notebook : python scripts/notebook_tools/notebook_tools.py validate <chemin> et ... execute <chemin>, depuis la racine du dépôt.
Comptes et maturité
Le bloc CATALOG-STATUS en tête de ce fichier fait foi pour le nombre de notebooks et leur maturité. Il est régénéré automatiquement sur main ; le catalogue donne le détail notebook par notebook.
Ressources
Références académiques
| Référence | Couverture |
|---|---|
| Osborne & Rubinstein, A Course in Game Theory (1994) | Manuel de référence, paliers 01 à 12 |
| Osborne, An Introduction to Game Theory (2004) | Manuel alternatif |
| Russell & Norvig, AIMA, 4e éd., ch. 17-18 | Cadre général des jeux et des mécanismes |
| Nash, « Non-Cooperative Games » (1951) | Palier 04 |
| von Neumann, « Zur Theorie der Gesellschaftsspiele » (1928) | Palier 05 |
| Axelrod, The Evolution of Cooperation (1984) | Palier 06 |
| Conway, Berlekamp & Guy, Winning Ways (1982) | Palier 08 |
| Shapley, « A Value for n-Person Games » (1953) | Palier 15, Shapley.lean |
| Roth (dir.), The Shapley Value (1988) | Jeux coopératifs |
| Geanakoplos, « Three Brief Proofs of Arrow’s Impossibility Theorem » (2005) | SocialChoice 01, Arrow.lean |
| Sen, Collective Choice and Social Welfare (1970) | SocialChoice 01b, Sen.lean |
En ligne
Bibliothèques
Formalisations Lean externes
- math-xmum/Brouwer : existence de Nash
- MixedMatched/formalizing-game-theory
- mathlib4, jeux combinatoires
- asouther4/lean-social-choice : Arrow (Lean 3, source originale)
- DominikPeters/SocialChoiceLean : Gibbard-Satterthwaite, Split Cycle (Lean 4, MIT)
Licence
Voir la licence du dépôt principal.
Version 1.5.0 — Septembre 2026 (2026-09-25) — réorganisation en parcours à plusieurs vitesses (#3973) : parcours principal à numéros nus, approfondissements présentés palier par palier, sous-série SocialChoice et extensions 18-25 séparées du parcours, grammaire des noms de fichiers expliquée au lecteur, formalisations Lean réunies en une section. Les sections de statut et de statistiques renvoient désormais au catalogue.
Version 1.4.3 — Septembre 2026 (2026-09-22) — déchronologisation du parcours (tranche D2 #14442 : les résultats restent, les récits de livraison partent) et re-synchronisation des tables sur le disque.
Version 1.4.2 — Août 2026 (2026-08-26) — réconciliation de l’inventaire Lean #13138 : toolchains effectives, statuts des coquilles repeated_games_lean (#6146) et social_choice_lean (#6058), ajout des lakes assignment_lean (#12598) et asymmetric_information_lean (Epic #12844).
Version 1.4.1 — Juillet 2026 (2026-07-16) — réconciliation EPIC #4365 : retrait des lakes supprimés cooperative_games_lean et stable_marriage_lean, absorbés dans game_theory_lean.
Version 1.4.0 — Juillet 2026 (2026-07-07) — passe ascendante feuilles vers hub : intégration du marathon de parité C# #4956, comptes délégués au marqueur CATALOG-STATUS.
Comment lire ce README
Ce README suit le principe des parcours à plusieurs vitesses du dépôt (choisir sa vitesse de lecture).
04b,04c…) creuse le palier dont elle porte le numéro : formalisation Lean, variante, résultat plus récent. Elle ne fait pas avancer dans la série.Chaque ligne des tables annonce son public : Découverte, Licence ou Recherche. Pour exécuter les notebooks, voir Installation.
Lire un nom de fichier
Un nom de notebook porte toute l’information utile, toujours dans le même ordre :
<NN>04<lettre>04b-Part<N>-Part2<Noyau>-Python,-CSharp,-Lean,-Lean-Python-Lean-Pythondésigne un notebook Python qui pilote réellement Lean (lecture d’un lake, appel àlake)Les jumeaux Python, C# et Lean d’un même notebook partagent son numéro : on choisit l’implémentation, pas le contenu. La série n’applique pas encore partout le suffixe de noyau. La passe de renommage de la série mettra chaque nom en conformité ; d’ici là, la colonne Noyau des tables fait foi.