Есть темы, которые в университете просто проходишь, потому что надо. Запомнила, сдала, выдохнула — и пошла дальше. А потом они возвращаются, и ты смотришь на них уже иначе.
Возвращение к Гёделю
С теоремой о неполноте Курта Гёделя у меня получилось именно так. Формально это история из математической логики — про аксиомы, доказуемость, формальные системы. Но программирование тоже тесно связано с математикой. Поэтому однажды мне стало интересно: а что, если взглянуть на теорему Гёделя не только как на абстрактный математический результат, но и как на нечто, что напрямую касается программирования?
Эта мысль пришла после разговора математика Эдварда Френкеля и Лекса Фридмана. После него я вновь вернулась к материалу, который нам давали на третьем курсе.
Оговорюсь сразу: я не специалист по математической логике. Это не строгая лекция, а попытка переосмыслить тему с новой точки зрения. Так что прошу математиков не судить строго.
Кратко: что говорит теорема Гёделя
У Гёделя две теоремы о неполноте.
Первая утверждает: в любой достаточно сложной непротиворечивой формальной системе, в которой можно выразить арифметику, существуют истинные утверждения, которые невозможно доказать внутри этой системы.
Вторая добавляет: такая система не может доказать собственную непротиворечивость.
Важно: система должна быть непротиворечивой. Если в ней можно доказать и утверждение, и его отрицание, то из неё можно вывести всё что угодно. Тогда она теряет смысл.
Почему вспоминают Евклида
Разговор о Гёделе быстро уходит к аксиомам. Мы с детства привыкли к евклидовой геометрии, как будто она — единственно возможная. Но стоит изменить одну аксиому — например, постулат о параллельных — и появляются другие геометрии: сферическая, гиперболическая.
Это не значит, что Евклид был «неправ». Это значит, что от исходных допущений зависит вся картина мира, которую мы строим.
И это касается не только математики. Мы часто думаем, что наши системы описывают реальность «как она есть». Но на самом деле они описывают реальность в рамках тех аксиом и ограничений, которые мы сами выбрали.
Формальные миры программирования
Программирование тоже строит формальные миры. У нас есть язык, синтаксис, типы, правила, платформенные ограничения. Мы надеемся, что всё будет работать предсказуемо.
Отсюда рождается соблазнительная идея: если мир можно формализовать, значит, всё можно вычислить. Нужны только больше данных, мощности, времени, лучшие модели и код. В этой логике жизнь постепенно сводится к вычислению.
Но тут в игру вступают Гёдель и Тьюринг — и всё становится сложнее.
Тьюринг и проблема остановки
Можно ли написать программу, которая для любого другого кода определит, завершится он или будет работать вечно?
Это — проблема остановки. Алан Тьюринг доказал: такой универсальной программы не существует. Нельзя создать алгоритм, который безошибочно решит этот вопрос для любого алгоритма.
Здесь абстрактные ограничения формальных систем становятся реальностью программирования — не философией, а фактом.
У нас есть статический анализ, тесты, линтеры, системы типов. Они мощные и полезные. Но мечта о универсальном инструменте, который проанализирует любой код и скажет всё без ошибок, — нереалистична.
И это заставляет по-другому смотреть на лозунг: «всё в жизни вычислимо».
Восприятие и интерпретация
Важно не только то, что мы можем вычислить, но и то, как мы видим мир.
Вспомните платье: сине-чёрное или бело-золотое? Одни и те же данные — разные интерпретации. То же с вазой Рубина: кто-то видит вазу, кто-то — два профиля.
Восприятие — это не просто считывание сигнала. Это всегда интерпретация.
Как сказал Нильс Бор: одну и ту же реальность иногда приходится описывать разными, несводимыми друг к другу способами. Это не ошибка. Это особенность.
Нейросети и человеческий след
Перенесём это на нейросети. Мы часто говорим о них так, будто они работают с «нейтральной» реальностью. Но данные собирают люди. Их размечают люди. Архитектуры проектируют люди. Метрики выбирают люди.
У каждого — свой опыт, предубеждения, слепые зоны. И всё это вплетается в модели.
Нейросети, уравнения, языки, системы — всё создано людьми. И след человека в них остаётся всегда. Это не плохо. Это просто честно.
Что остаётся после Гёделя
Для меня теорема о неполноте — это не приговор математике. Не отрицание программирования. Не повод отказаться от точности.
Это — напоминание о границах. О том, что любая система, пытающаяся описать мир изнутри себя, имеет пределы.
Она учит аккуратности. Учит не путать мощь системы с её всемогуществом.
Именно поэтому Гёдель — важный, хоть и неприятный, собеседник для программиста. Особенно в эпоху, когда так легко поверить: ещё чуть-чуть — и мы вычислим всё до конца.