Accéder au contenu principal

GPT-5.6 et la conjecture de Dinitz-Garg-Goemans

Un vétéran des olympiades de maths affirme que quatre prompts courts ont permis à GPT-5.6 Pro de faire tomber la conjecture de Dinitz-Garg-Goemans. L’affirmation est vérifiable, l’arithmétique est modeste, et la réalité est plus intéressante que le titre.
Actualisé 31 août 2026  · 10 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Le 22 juillet 2026, Dmitry Rybin a publié sur X une affirmation qui a fait reposer leur café à certains lecteurs avertis : GPT-5.6 Pro aurait produit un contre-exemple à la conjecture de Dinitz-Garg-Goemans, ouverte en optimisation combinatoire depuis environ 30 ans. La preuve de concept tient dans un petit graphe. Coût du flot fractionnaire : 58, coût du flot indivisible : 60. Deux points d’écart, trois décennies, quatre prompts.

La plupart des articles reprennent les chiffres sans expliquer le mécanisme qui les sous-tend, alors que tout l’enseignement est là. C’est aussi le point où je dois être clair sur ce qui a été vérifié et ce qui ne l’a pas été. En bref : les concepts tiennent la route, la nouvelle reste une affirmation et pas encore un théorème, et si vous essayez de reconstruire exactement le graphe depuis zéro, vous comprendrez dès que votre reconstruction fuit pourquoi ce type de problème est difficile.

La réponse courte

Rybin rapporte que GPT-5.6 Pro, guidé par quatre prompts totalisant moins de 60 mots, a produit un contre-exemple supposé à la conjecture de coût de Goemans, un problème ouvert depuis environ 1999. Son instance est un petit graphe orienté avec une unique source et trois terminaux de livraison. Il indique que le routage sécable (fractionnaire) coûte 58, tandis que tout routage indivisible maintenant la congestion dans le budget autorisé coûte au moins 60. Cet écart de deux points, s’il résiste à l’examen formel, suffit à faire tomber la conjecture.

Cela n’a pas fait l’objet d’une relecture par les pairs. Rybin a publié l’intégralité de la conversation ChatGPT pour que chacun puisse lire la construction, et plusieurs personnes ont vérifié son arithmétique et l’ont jugée cohérente. Une arithmétique reproductible et une preuve acceptée sont toutefois deux choses différentes, et la distance entre les deux est précisément le sujet de cet article.

Qu’est-ce que la conjecture de Dinitz-Garg-Goemans ?

Avant de mesurer ce qui est tombé, ou pourrait l’être, il faut comprendre ce que dit réellement la conjecture.

Imaginez un entrepôt qui expédie des commandes à trois villes via un réseau routier. Si vous êtes autorisé à scinder une expédition, vous pouvez envoyer la moitié d’une commande par une route et l’autre moitié par une autre. C’est le routage fractionnaire, flexible : il trouve généralement des chemins moins coûteux. Mais beaucoup de fret réel ne peut pas être scindé. Une commande, un camion, une route, du départ à l’arrivée. C’est le flot indivisible, et c’est ainsi que doivent voyager un ordre de fret, un paquet réseau ou un conteneur.

La question que l’on se pose depuis 1999 est simple à formuler. Si un routage fractionnaire peu coûteux existe, peut-on toujours trouver un routage indivisible qui soit également peu coûteux, sans surcharger exagérément les routes ?

Yefim Dinitz, Naveen Garg et Michel Goemans ont réglé la moitié du problème. L’autre moitié est celle que GPT-5.6 a visée. Pour comprendre pourquoi cette distinction est cruciale, il faut être précis.

Le théorème vs la conjecture

C’est la distinction que la plupart des articles estompent, donc je vais la préciser une fois pour toutes et m’y référer dans la suite.

Dinitz, Garg et Goemans ont démontré un résultat de congestion : à partir d’un flot fractionnaire valide, on peut toujours le convertir en flot indivisible sans dépasser la capacité d’aucune route de plus que la plus grande demande, notée D. Ce théorème n’est pas remis en cause et ne l’a jamais été.

Ce que Goemans a séparément conjecturé est plus fort et intègre le coût : la même conversion pourrait maintenir le coût total tout en maintenant la congestion. Congestion et coût, tous deux bornés, dans un seul routage. Le théorème « congestion seule » est solide. La conjecture « coût plus congestion » est la partie que Rybin dit avoir fait tomber. S’il ne fallait retenir qu’une phrase, c’est celle-ci. Beaucoup de couvertures enthousiastes confondent discrètement les deux, et la différence entre elles est l’écart mathématique qu’il a fallu 30 ans pour combler.

Ce que GPT-5.6 a réellement construit

L’instance de Rybin est assez petite pour être décrite en un paragraphe. Une source, quelques nœuds intermédiaires formant une « épine dorsale » partagée, et trois terminaux, chacun portant une demande. Chaque terminal dispose de deux chemins : une route directe coûteuse, ou un détour gratuit via l’épine dorsale partagée.

La tension est structurelle. Les détours bon marché se disputent la place sur l’épine : si trop de terminaux tentent de passer par le chemin économique en même temps, une route de l’épine sature. En poussant suffisamment, un seul terminal peut emprunter son chemin bon marché dans tout routage indivisible valide. Les autres sont forcés sur leurs routes directes coûteuses, et le coût grimpe. Le flot fractionnaire, libre de se scinder, répartit chaque demande sur les deux chemins et passe sous toutes les capacités à la fois. C’est ainsi qu’on obtient un coût fractionnaire inférieur au moindre coût indivisible légal. Les chiffres de Rybin pour son instance sont 58 et 60.

Je vais être franc sur une limite. Je n’ai pas pu reproduire exactement le graphe de Rybin, ses capacités spécifiques et ses conflits par paires, à partir d’une source primaire. Sa transcription décrit un point particulier dans une famille de paramètres, et la fameuse description « à sept nœuds » qui circule en est une abstraction, pas une construction que j’ai vérifiée arête par arête. Je ne vais donc pas mettre en scène une dérivation propre de 58 et prétendre que c’est la sienne. Ce que je peux faire, c’est vous proposer une instance autonome qui illustre le même mécanisme, suffisamment petite pour être vérifiée par force brute, afin que vous voyiez concrètement à quoi ressemble « un fractionnaire bat tout indivisible légal ». 

Quatre prompts, plusieurs heures

Le nombre de prompts est l’aspect le moins intéressant de cette histoire, même si c’est celui qui est devenu viral.

Le journal de chat partagé par Rybin montre que le modèle a d’abord échoué, et qu’il a échoué honnêtement. Le prompt initial lui demandait de trouver un contre-exemple structuré. Il a travaillé pendant une bonne heure et est revenu bredouille, indiquant clairement que présenter ce qu’il avait comme un contre-exemple valide serait faux.

Invité à poursuivre, il a relancé, et là encore n’a rien produit, expliquant comment chaque construction prometteuse finissait par révéler une option de routage cachée qui détruisait la séparation coût-congestion une fois tous les chemins énumérés. Un troisième prompt, demandant une stratégie plus propre, a resserré le cadre… et toujours pas de résultat final.

Ce n’est pas « quatre prompts et c’est plié ». Ce sont des heures d’un modèle qui se heurte à des murs et le reconnaît. Le mur rencontré à répétition — une route supplémentaire apparaît et ruine la séparation — est précisément ce que la construction finale a été conçue pour éviter, en fixant chaque terminal à exactement deux chemins afin que tout l’espace de routage se réduise à huit options que l’on peut énumérer à la main. Gardez ce mode d’échec en tête. Vous allez y être confronté vous-même.

Le quatrième prompt, rapporté comme proche de « assez de tes échecs, termine avec un contre-exemple complet et inconditionnel », est celui qui a produit la construction fonctionnelle, avec certificats de preuve, programme d’énumération et LaTeX complet. La patience a compté. Les refus précédents aussi : c’étaient des auto-évaluations honnêtes.

Vérifiez par vous-même

Voici où la couverture DataCamp peut faire ce qu’un article d’actualité ne peut pas : vous laisser lancer la vérification.

Un avertissement rapide avant le code. Ce qui suit n’est pas le graphe de Rybin. C’est une instance schématique que j’ai construite pour être honnête : chaque terminal y a réellement exactement deux chemins, l’arithmétique se ferme et l’écart est réel. Elle vous montre la forme d’un tel contre-exemple et la technique pour le vérifier. Elle ne réfute rien à elle seule, et j’explique pourquoi juste après l’exécution.

Le cadre : trois terminaux, chacun expédiant 10 unités, donc la plus grande demande D vaut 10. Chacun a un chemin direct coûteux (coût 30) et un chemin bon marché gratuit. Les chemins bon marché sont arrangés de sorte que chaque paire entre en conflit sur sa propre route-goulot d’étranglement : la route A est partagée par les terminaux 1 et 2, la route B par 1 et 3, la route C par 2 et 3. Dans le flot fractionnaire, chaque terminal envoie 2/5 de sa demande sur le bon marché et 3/5 sur le coûteux, pour un coût de 30 × 3/5 × 3 = 54. Chaque route porte alors 4 + 4 = 8 unités fractionnaires, et le budget de congestion est cette charge plus D, soit 18.

Regardez maintenant ce que fait le routage indivisible. Deux terminaux qui prennent tous deux le bon marché chargent 10 + 10 = 20 unités sur leur route partagée, au-delà du budget de 18. Donc au plus un terminal peut emprunter son chemin bon marché ; les deux autres paient 30 chacun. Coût minimal indivisible légal : 60. Contre un fractionnaire de 54. Il existe huit routages, on les vérifie donc tous :

from itertools import product
	
# Three terminals, demand 10 each -> largest demand D = 10.
# Each has a cheap path (cost 0) and an expensive direct path (cost 30).
# Cheap paths pairwise share a PRIVATE bottleneck road, so every pair conflicts:
#   road A shared by {t1, t2},  road B by {t1, t3},  road C by {t2, t3}
# NOTE: this is a schematic instance to illustrate the check, not Rybin's graph.

demands = [10, 10, 10]
d_max = max(demands)          # congestion slack allowed on each road
cheap_frac = [2/5, 2/5, 2/5]  # expensive fraction is 3/5 each -> fractional cost 54
direct_cost = 30              # cost of one terminal's expensive path

# Which bottleneck roads each terminal's cheap path uses
uses = [
    {"A": True,  "B": True,  "C": False},  # t1: A, B
    {"A": True,  "B": False, "C": True},   # t2: A, C
    {"A": False, "B": True,  "C": True},   # t3: B, C
]

# The fractional flow saturates each road, so its load is that road's capacity
cap = {"A": 0.0, "B": 0.0, "C": 0.0}
for i in range(3):
    for road in cap:
        if uses[i][road]:
            cap[road] += cheap_frac[i] * demands[i]   # 8 units on each road

# Congestion rule: an unsplittable flow may exceed capacity by at most D
threshold = {road: cap[road] + d_max for road in cap}  # 18 on each road

fractional_cost = sum(direct_cost * (1 - cheap_frac[i]) for i in range(3))  # 54

print(f"Capacities (fractional load): {cap}")
print(f"Congestion budget per road  : {threshold}")
print(f"Fractional flow cost        : {fractional_cost}\n")
print(f"{'Route (0=cheap,1=exp)':22} {'Cost':>4} {'A':>3} {'B':>3} {'C':>3}  Valid")

valid_costs = []
for choices in product([0, 1], repeat=3):    # 0 = cheap, 1 = expensive
    cost = sum(direct_cost * c for c in choices)
    load = {"A": 0, "B": 0, "C": 0}
    for i, expensive in enumerate(choices):
        if expensive == 0:                    # this terminal takes its cheap path
            for road in load:
                if uses[i][road]:
                    load[road] += demands[i]
    ok = all(load[road] <= threshold[road] for road in load)
    tag = "OK" if ok else "overload"
    print(f"{str(choices):22} {cost:>4} {load['A']:>3} {load['B']:>3} {load['C']:>3}  {tag}")
    if ok:
        valid_costs.append(cost)

print(f"\nMin valid unsplittable cost: {min(valid_costs)}")
print(f"Gap: {min(valid_costs) - fractional_cost} (counterexample if > 0)")

À l’exécution, vous obtenez un coût fractionnaire de 54, un coût minimal indivisible légal de 60 et un écart de 6. Les trois lignes en surcharge sont les conflits par paires ; les seuls routages valides gardent au plus un terminal sur le bon marché.

Donc la conjecture est morte ? Pas tout à fait, et c’est la partie promise. Cette énumération en huit lignes ne dit vrai que si chaque terminal a réellement deux chemins et pas plus. Quand on construit ce graphe avec de vraies routes et de vrais nœuds, un quatrième chemin bon marché a tendance à apparaître par simple combinatoire. Un terminal trouve une troisième voie économique qui reste sous budget, et l’écart disparaît. Ce chemin supplémentaire est exactement l’échec que le modèle a rencontré lors de ses trois premiers essais. Un gadget propre et symétrique qui briserait une conjecture trentenaire en huit lignes de Python serait trop beau pour être vrai, et il l’est. Le code ci-dessus prouve que la méthode de vérification est solide et que la propriété visée est réelle. Savoir si un graphe donné possède effectivement cette propriété, sans « fuites », est la vraie difficulté, et c’est pourquoi l’instance réelle de Rybin est un point ajusté dans une famille de paramètres plutôt qu’un simple triangle.

Ce qui reste en suspens

Aucun article formel n’a été publié. Rybin a partagé la conversation et la construction ; ni l’une ni l’autre n’ont traversé le processus de relecture par les pairs qui permettrait à la communauté mathématique de clore officiellement la conjecture.

Le graphe exact publié n’a pas, à ma connaissance, été reconstruit indépendamment depuis une source primaire. Les chiffres qui circulent viennent de son post et de la transcription partagée. Plusieurs chercheurs ont vérifié son arithmétique et l’ont jugée cohérente, et l’un d’eux a montré que son instance s’inscrivait dans une famille infinie à trois paramètres sur les mêmes nœuds, ce qui rendrait le résultat plus riche qu’une simple coïncidence. Encourageant, mais cela reste une vérification communautaire informelle, pas un rapport de rapporteur. Considérez le 58-contre-60 comme une affirmation solide, pas un fait établi.

Le théorème de congestion de 1999 reste intact.

Un élément d’un mouvement de fond

Cette histoire n’est pas un point isolé. C’est la troisième conjecture annoncée comme tombée avec l’aide de l’IA en environ trois mois, et le motif mérite l’attention.

Le 20 juillet, Claude Fable 5 aurait aidé le mathématicien Levent Alpöge à trouver un contre-exemple à la conjecture jacobienne, un problème vieux de 87 ans. Avant cela, en mai, un modèle d’OpenAI aurait réfuté la conjecture d’Erdős sur la distance unité, âgée de 80 ans. La même semaine, un doctorant de Columbia a utilisé GPT-5.6 avec un workflow Codex structuré pour résoudre six problèmes ouverts d’Erdős en cinq jours. Le fil conducteur, comme l’a résumé un chercheur, est que ces systèmes sont meilleurs pour réfuter que pour prouver. Un contre-exemple est un témoin unique que l’on peut vérifier ; une preuve doit couvrir tous les cas. Cette asymétrie semble déterminer les problèmes qui tombent en premier.

La conclusion pratique n’est pas « l’IA résout les maths ». Nous voyons l’IA travailler comme un partenaire patient d’exploration combinatoire exhaustive : capable d’énumérer des familles de paramètres, de conserver en mémoire de travail les modes d’échec d’une tentative à l’autre, et de dire la vérité quand une construction ne ferme pas. C’est une capacité précise et utile. Et si vous voulez comprendre où elle frappera probablement ensuite, la bonne question n’est pas quelles conjectures sont les plus anciennes, mais lesquelles peuvent être brisées par un témoin unique et vérifiable.


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Vinod Chugani a débuté sa carrière à Tokyo comme plus jeune responsable du desk ventes hedge funds de JPMorgan, puis a signé un record de ventes individuel chez Lehman Brothers, avant de développer une activité de distribution d’électronique présente dans 30 pays, dépassant les 100 millions SG$ de chiffre d’affaires, puis de se tourner vers la data. Diplômé en économie de Duke et ancien élève de la NYC Data Science Academy, il a fait partie des trois lauréats de bourse sur plus de 100 candidatures pour le cours Building AI Applications de Hugo Bowne-Anderson sur Maven. Aujourd’hui, il écrit pour DataCamp, KDnuggets, Machine Learning Mastery et Statology, sur des sujets allant des statistiques à l’IA agentique, et accompagne des professionnels de la data à la NYC Data Science Academy, avec plus de 1 000 séances individuelles à son actif.

 

FAQs

Qu’a exactement prétendu réfuter GPT-5.6 Pro&nbsp;?

La conjecture de coût de Goemans, à savoir que tout flot sécable peut être transformé en flot indivisible en maîtrisant simultanément la congestion et le coût. Rybin rapporte une instance où le routage fractionnaire coûte 58 et où tout routage indivisible respectant la congestion coûte au moins 60. Le théorème distinct de 1999 de Dinitz-Garg-Goemans, qui borne la seule congestion, n’est pas affecté.

Des mathématiciens ont-ils vérifié cela&nbsp;?

Plusieurs personnes ont vérifié l’arithmétique et l’ont jugée cohérente, et l’une a replacé l’instance dans une famille de paramètres infinie. Mais aucun article évalué par les pairs n’a été publié, la conjecture n’est donc pas officiellement close. L’affirmation est suffisamment vérifiable pour que vous n’ayez pas à croire quiconque sur parole quant au mécanisme, ce à quoi sert précisément la section de code.

Votre code affiche un écart positif. Cela ne réfute-t-il pas la conjecture&nbsp;?

Non, et ce serait trompeur de laisser entendre le contraire. Le code vérifie une instance schématique où chaque terminal a exactement deux chemins par construction. Les graphes réels de cette forme laissent souvent « fuiter » un chemin bon marché supplémentaire qui efface l’écart, le même problème rencontré par le modèle lors de ses trois premiers essais. Le code prouve que la méthode de vérification est solide et que la propriété visée est réelle ; il ne certifie pas qu’un graphe particulier, y compris le mien, est sans fuite.

Pourquoi le modèle a-t-il échoué les trois premières fois&nbsp;?

D’après la transcription, chaque construction essayée finissait par acquérir une option de routage cachée une fois tous les chemins énumérés, et cette option offrait toujours une échappatoire bon marché qui annulait l’écart de coût. La construction finale évite cela en fixant chaque terminal à exactement deux chemins, de sorte que les huit routages possibles puissent être vérifiés exhaustivement, sans porte de sortie.

Cela change-t-il quelque chose pour le routage réseau réel&nbsp;?

Pas directement. Les ingénieurs utilisent déjà des algorithmes d’approximation avec des compromis connus. Si le résultat tient, il confirme une limite théorique : aucun algorithme ne peut garantir à la fois la préservation du coût et la propriété de congestion bornée en toute généralité, ce qui indique surtout aux théoriciens où se situe la frontière.

Où en savoir plus sur la théorie des graphes et les flots&nbsp;?

Pour la théorie des graphes sous-jacente en Python, notre tutoriel sur la théorie des graphes couvre les fondamentaux. Pour aller plus loin sur l’optimisation et les problèmes de flux, notre cours Introduction to Optimization in Python présente les algorithmes et le code pas à pas.

Sujets
Intelligence artificielle

Apprenez avec DataCamp

Cours

Comprendre l'intelligence artificielle

2 h
419.6K
Découvrez les bases de l’intelligence artificielle : machine learning, deep learning, NLP, IA générative et bien plus encore.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow
Contenus associés

blog

Comprendre les TPU et les GPU dans l'IA : Un guide complet

L'essor du développement de l'intelligence artificielle (IA) a entraîné une augmentation notable de la demande en matière de calcul, d'où la nécessité de disposer de solutions matérielles robustes. Les unités de traitement graphique (GPU) et les unités de traitement tensoriel (TPU) sont devenues des technologies essentielles pour répondre à ces demandes.
Kurtis Pykes 's photo

Kurtis Pykes

9 min

blog

ROI de l'IA en 2026 : pourquoi les compétences des équipes déterminent le retour sur investissement

Seuls 21 % des dirigeants font état d'un retour sur investissement « significatif » de leurs investissements dans l'IA.
Lynn Heidmann's photo

Lynn Heidmann

blog

Plus de 50 questions/réponses d’entretien AWS pour 2026

Un guide complet des questions d’entretien AWS de base, intermédiaires et avancées, avec des mises en situation inspirées de cas réels.
Zoumana Keita 's photo

Zoumana Keita

15 min

cursor ai code editor

Tutoriel

Cursor AI : Un guide avec 10 exemples pratiques

Apprenez à installer Cursor AI sur Windows, macOS et Linux, et découvrez comment l'utiliser à travers 10 cas d'utilisation différents.

Tutoriel

Tableaux Python

Tableaux Python avec exemples de code. Découvrez comment créer et imprimer des tableaux à l'aide de Python NumPy dès aujourd'hui.
DataCamp Team's photo

DataCamp Team

3 min

Tutoriel

Séquence de Fibonacci en Python : Apprenez et explorez les techniques de codage

Veuillez découvrir le fonctionnement de la suite de Fibonacci. Veuillez explorer ses propriétés mathématiques et ses applications concrètes.
Laiba Siddiqui's photo

Laiba Siddiqui

6 min

Voir PlusVoir Plus