Перейти к основному контенту

GPT-5.6 и гипотеза Диница—Гарга—Гоэманса

Ветеран матолимпиад утверждает, что четыре короткие подсказки заставили GPT-5.6 Pro сломать гипотезу Диница—Гарга—Гоэманса. Проверка доступна, арифметика проста, а честная картина интереснее заголовка.
Обновлено 28 июл. 2026 г.  · 10 мин читать

Изучить с помощью AI

Открыть в ChatGPTОткрыть в ClaudeОткрыть в Perplexity

22 июля 2026 года Дмитрий Рыбин опубликовал в X заявление, из-за которого кое-кто отложил кофе: GPT-5.6 Pro выдала контрпример к гипотезе Диница—Гарга—Гоэманса, открытой в комбинаторной оптимизации около 30 лет. Доказательство концепции — один маленький граф. Стоимость дробимого потока 58, недробимого — 60. Две единицы разницы, три десятилетия, четыре подсказки.

Большинство материалов повторяют цифры, не показывая механизм за ними, а именно в механизме и кроется главный урок. Там же я должен быть с вами предельно честен о том, что проверено, а что нет. Коротко: понятия корректны, новость — это утверждение, а не теорема, и если вы сядете воспроизвести точный граф с нуля, то поймёте, почему такие задачи сложны, в тот момент, когда в вашей реконструкции появится «утечка».

Короткий ответ

Рыбин сообщает, что GPT-5.6 Pro, управляемая четырьмя подсказками суммарно менее чем в 60 слов, выдала предполагаемый контрпример к гипотезе Гоэманса о стоимости, открытой примерно с 1999 года. Его случай — небольшой ориентированный граф с одним источником и тремя пунктами доставки. Он утверждает, что дробимая (фракционная) маршрутизация стоит 58, тогда как любая недробимая маршрутизация, сохраняющая перегрузку в допустимых пределах, стоит не менее 60. Этот двухпунктный разрыв, если выдержит формальную проверку, достаточен, чтобы опровергнуть гипотезу.

Рецензирования не было. Рыбин опубликовал полный разговор в ChatGPT, чтобы любой мог прочитать построение, и несколько человек проверили его арифметику и нашли её согласованной. Однако воспроизводимая арифметика и принятый к публикации доказательство — разные вещи, и дистанция между ними — вся суть этой статьи.

Что такое гипотеза Диница—Гарга—Гоэманса?

Прежде чем оценивать, что рухнуло — или могло рухнуть, — нужно понять, что именно утверждает гипотеза.

Представьте склад, отправляющий заказы в три города по дорожной сети. Если разрешено делить отправление, можно послать половину по одной дороге и половину по другой. Это дробимая маршрутизация, она гибкая и обычно находит более дешёвый набор путей. Но многие реальные грузы делить нельзя. Один заказ, один грузовик, одна дорога, от начала до конца. Это недробимый поток — так работают грузовые отправления, сетевые пакеты и контейнеры.

Вопрос, над которым ломают голову с 1999 года, формулируется просто. Если существует дешёвая дробимая маршрутизация, можно ли всегда найти недробимую, которая тоже будет дешёвой, не перегружая дороги слишком сильно?

Ефим Диниц, Навин Гарг и Мишель Гоэманс решили половину вопроса. Другая половина — та, за которую взялась GPT-5.6. Чтобы понять, почему это различие крайне важно, нужно обозначить его точно.

Теорема против гипотезы

Именно это различие большинство публикаций размывают, поэтому я обозначу его точно один раз, а дальше буду на него опираться.

Диниц, Гарг и Гоэманс доказали результат о перегрузке: имея валидный фракционный поток, его всегда можно преобразовать в недробимый, не превысив пропускную способность ни одной дороги более чем на величину крупнейшего спроса, назовём её D. Эта теорема не ставится под сомнение и никогда не ставилась.

Отдельно Гоэманс сформулировал гипотезу посильнее — с учётом стоимости: что то же преобразование сможет одновременно удержать и суммарную стоимость, и перегрузку. И перегрузка, и стоимость — обе ограничены — в одной маршрутизации. Теорема только о перегрузке в безопасности. Гипотеза о стоимости плюс перегрузка — та часть, о падении которой заявляет Рыбин. Если вынести из статьи одно предложение, пусть будет это. Много где в восторженных материалах их тихо подменяют, а разница между ними — это вся та самая математическая щель, на закрытие которой ушло 30 лет.

Что именно построила GPT-5.6

Случай Рыбина достаточно мал, чтобы описать его в одном абзаце. Источник, несколько промежуточных узлов, образующих общий «хребет», и три терминала, каждый с требованием. У каждого терминала два пути домой: дорогой прямой путь или бесплатный обход через общий хребет.

Напряжение заложено в структуре. Дешёвые обходы конкурируют за место на хребте, поэтому если слишком много терминалов попытаются пойти по дешёвому пути одновременно, дорога на хребте переполнится. Если зайти достаточно далеко, в любой валидной недробимой маршрутизации только один терминал сможет выбрать дешёвый путь. Остальные вынуждены идти по дорогим прямым путям, и стоимость растёт. Фракционный поток, свободный делиться, распределяет каждое требование по обоим путям и проходит под всеми пропускными способностями сразу. Так и получается фракционная стоимость ниже, чем у самой дешёвой валидной недробимой. Цифры Рыбина для его случая — 58 и 60.

Здесь буду честен о лимите. Мне не удалось воспроизвести точный граф Рыбина — конкретные пропускные способности и попарные конфликты — из первоисточника. Его расшифровка описывает конкретную точку в семействе параметров, а широко разошедшееся «семиузловое» описание — это абстракция, а не построение, которое я проверил по каждому ребру. Поэтому я не стану разыгрывать аккуратный вывод 58 и выдавать его за его. Что я могу — это дать вам самодостаточный пример с тем же механизмом, достаточно маленький, чтобы проверить в лоб, — чтобы вы своими глазами увидели, как выглядит «фракционный поток бьёт любую валидную недробимую маршрутизацию». 

Четыре подсказки, несколько часов

Количество подсказок — наименее интересная часть этой истории, хотя именно она и стала вирусной.

Опубликованный Рыбиным чат-лог показывает, что модель сперва проваливалась — и проваливалась честно. В первом запросе её попросили найти структурированный контрпример. Она работала большую часть часа и вернулась ни с чем, прямо заявив, что выдавать имеющееся как валидный контрпример было бы неверно.

Получив указание продолжать, она снова запустилась и снова ничего не выдала, описав, как каждое многообещающее построение всякий раз обрастало скрытым дополнительным вариантом маршрутизации, который разрушал разделение стоимости и перегрузки, как только перечислялись все пути. Третья подсказка с просьбой о более чистой стратегии дала более узкие рамки — и всё равно без конечного результата.

Это не «четыре подсказки — и готово». Это часы, в течение которых модель билась о стены и говорила о них правду. Конкретная стена, в которую она упиралась — появляется лишний маршрут и рушит разделение — как раз и предотвращена в финальном построении: каждый терминал жёстко привязан ровно к двум путям, так что всё пространство маршрутизаций — это восемь вариантов, которые можно перечислить вручную. Держите этот режим отказа в голове. Вы сейчас столкнётесь с ним сами.

Четвёртая подсказка — по сообщениям, что-то близкое к «хватит провалов, завершите полным безусловным контрпримером» — и дала работающее построение, вместе с сертификацией, программой для перечисления и полной LaTeX-вёрсткой. Важным было терпение. И не менее важны ранние отказы — это были честные самооценки.

Проверьте сами

Здесь освещение на DataCamp может сделать то, чего не может новостной пост: дать вам запустить проверку.

Короткая оговорка перед кодом. Дальше — это не граф Рыбина. Это схематичный пример, который я построил добросовестно: у каждого терминала действительно ровно два маршрута, арифметика сходится и разрыв реален. Он показывает форму такого контрпримера и технику проверки. Сам по себе он ничего не опровергает, и почему — объясню сразу после запуска.

Настройка: три терминала, каждый отправляет по 10 единиц, так что крупнейший спрос D равен 10. У каждого есть дорогой прямой путь (стоимость 30) и бесплатный дешёвый. Дешёвые пути устроены так, что каждая пара из них борется за свою собственную узкую дорогу: дорога A общая для терминалов 1 и 2, дорога B — для 1 и 3, дорога C — для 2 и 3. В фракционном потоке каждый терминал отправляет 2/5 спроса по дешёвому и 3/5 по дорогому пути, что стоит 30 × 3/5 × 3 = 54. Каждая дорога несёт затем 4 + 4 = 8 единиц фракционно, а бюджет перегрузки — это эта нагрузка плюс D, то есть 18.

Теперь посмотрим, что делает с этим недробимая маршрутизация. Два терминала, идущие дешёвым путём, сбрасывают 10 + 10 = 20 единиц на их общую дорогу — сверх бюджета 18. Значит, максимум один терминал может идти дешёво; остальные два платят по 30 каждый. Минимальная валидная стоимость недробимого: 60. Против фракционных 54. Всего существует восемь маршрутизаций, так что просто проверим их все:

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)")

Запустите — и получите фракционную стоимость 54, минимальную валидную недробимую 60 и разрыв 6. Три перегруженные строки — это три попарных конфликта; выживают только маршрутизации, где дешёвым путём идёт не более одного терминала.

Значит, гипотеза мертва? Не совсем, и это та часть, которую я обещал объяснить. Эта восьмистрочная переборка говорит правду лишь в том случае, если у каждого терминала действительно ровно два маршрута и ни одного больше. Постройте этот граф из реальных дорог и узлов — и четвёртый дешёвый маршрут, как правило, появляется из комбинаторики. Терминал находит третий путь домой, который дешёв и остаётся в бюджете, и разрыв исчезает. Этот дополнительный маршрут — ровно тот сбой, о котором модель сообщала в первых трёх попытках. Аккуратный симметричный гаджет, ломающий 30‑летнюю гипотезу восемью строками Python, был бы слишком хорош, чтобы быть правдой — и так оно и есть. Код выше доказывает, что проверка корректна и целевое свойство реально. Тот ли конкретный граф обладает этим свойством без «утечек», — вот что трудно; поэтому реальный пример Рыбина — это настроенная точка в семействе параметров, а не аккуратный треугольник.

Что остаётся нерешённым

Формальной статьи не вышло. Рыбин поделился беседой и построением; ни то ни другое не прошло через процесс рецензирования, который позволил бы математическому сообществу официально закрыть гипотезу.

Точный опубликованный граф, насколько мне известно, независимо не воссоздан из первоисточника. Цифры в обороте — из его поста и расшифровки беседы. Несколько исследователей проверили его арифметику и назвали её согласованной, а один показал, что его случай лежит внутри бесконечного трёхпараметрического семейства на тех же узлах, что делает результат богаче, чем единичное удачное совпадение. Обнадёживающе, но это не рецензия, а неформальная проверка сообществом. Относитесь к 58 против 60 как к хорошо обоснованному утверждению, а не установленному факту.

Теорема о перегрузке 1999 года остаётся вне затронутого.

Часть тенденции

Эта история — не единичный случай. Это третья гипотеза, о падении которой при помощи ИИ сообщили примерно за три месяца, и на тенденции стоит задержаться.

20 июля, как сообщается, Claude Fable 5 помог математику Левенту Альпёге найти контрпример к якобианской гипотезе, проблеме 87‑летней давности. До этого, в мае, говорилось, что модель OpenAI опровергла 80‑летнюю гипотезу Эрдёша о единичных расстояниях. В ту же неделю аспирант Колумбии использовал GPT-5.6 со структурированным рабочим процессом Codex, чтобы решить шесть открытых задач Эрдёша за пять дней. Сквозная линия, как заметил один исследователь, в том, что эти системы лучше умеют опровергать, чем доказывать. Контрпример — это один свидетель, которого можно проверить; доказательство должно охватить все случаи. Эта асимметрия, похоже, и решает, какие проблемы падают первыми.

Практический вывод — не «ИИ решает математику». Мы видим, как ИИ работает терпеливым партнёром по комбинаторно исчерпывающему поиску: он может перечислять семейства параметров, держать режимы отказов в рабочей памяти между попытками и говорить правду, когда построение не замыкается. Это конкретная, полезная способность. И если хотите понять, где она сработает следующей, спрашивайте не о том, какие гипотезы самые старые, а о том, какие можно сломать одним проверяемым свидетелем.


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Винод Чугани начал карьеру в Токио как самый молодой руководитель отдела продаж хедж‑фондов в JPMorgan, позже установил индивидуальный рекорд по продажам в Lehman Brothers, затем построил дистрибуционный бизнес электроники в 30 странах с выручкой свыше 100 млн сингапурских долларов, прежде чем переключиться на сферу данных. Выпускник по экономике из Duke и выпускник NYC Data Science Academy, он стал одним из трёх стипендиатов из более чем 100 заявителей на курс Hugo Bowne-Anderson "Building AI Applications" на платформе Maven. Сегодня он пишет для DataCamp, KDnuggets, Machine Learning Mastery и Statology на темы от статистики до агентного ИИ и наставляет специалистов по данным в NYC Data Science Academy, проведя более 1000 индивидуальных сессий.

 

FAQs

Что именно GPT-5.6 Pro заявила, что опровергла?

Гипотезу Гоэманса о стоимости — утверждение, что любой дробимый поток можно превратить в недробимый, одновременно удержав и перегрузку, и стоимость. Рыбин сообщает о случае, где фракционная маршрутизация стоит 58, а любая валидная по перегрузке недробимая — не менее 60. Отдельная теорема Диница—Гарга—Гоэманса 1999 года, ограничивающая только перегрузку, не затронута.

Это проверили математики?

Несколько человек проверили арифметику и назвали её согласованной, а один поместил пример в бесконечное параметрическое семейство. Но рецензируемой статьи нет, поэтому гипотеза официально не закрыта. Утверждение достаточно проверяемо, чтобы вам не пришлось верить на слово в механизм — именно для этого и приведён раздел с кодом.

Ваш код печатает положительный разрыв. Разве это не опровергает гипотезу?

Нет, и было бы вводящим в заблуждение, если бы я дал понять обратное. Код проверяет схематичный пример, где у каждого терминала по конструкции ровно два маршрута. Реальные графы такой формы склонны «протекать» дополнительным дешёвым маршрутом, который стирает разрыв — ту же проблему модель встретила в первых трёх попытках. Код доказывает, что метод проверки корректен, а целевое свойство реально; он не подтверждает, что какой-либо конкретный граф, включая мой, свободен от «утечек».

Почему модель провалилась в первые три раза?

Согласно расшифровке, каждое построение, которое она пробовала, при полном перечислении путей обзаводилось скрытым дополнительным вариантом маршрутизации, и этот вариант всегда давал дешёвый обход, убивавший разрыв по стоимости. Финальное построение избегает этого, жёстко фиксируя за каждым терминалом ровно два пути, так что восемь общих маршрутизаций можно исчерпывающе проверить — скрываться негде.

Меняет ли это что-то для реальной маршрутизации в сетях?

Напрямую — нет. Инженеры уже используют аппроксимационные алгоритмы с известными компромиссами. Если результат подтвердится, он зафиксирует теоретическую границу: никакой алгоритм не может гарантировать сохранение стоимости и свойства ограниченной перегрузки в полной общности, что главным образом показывает теоретикам, где проходит рубеж.

Где можно почитать больше о теории графов и сетевых потоках?

Для баз теории графов в Python наш учебник по теории графов покрывает основы. Чтобы глубже погрузиться в оптимизацию и задачи потоков, наш курс Введение в оптимизацию на Python проводит через алгоритмы и код.

Темы

Учитесь с DataCamp

Track

Основы ИИ

10 ч
Откройте для себя основы ИИ, научитесь эффективно использовать ИИ в работе и погрузитесь в модели вроде ChatGPT, чтобы ориентироваться в динамичном ландшафте ИИ.
ПодробнееRight Arrow
Начать Курс
Смотрите большеRight Arrow