Можно ли вычислить всё? О Гёделе, Тьюринге и программировании

Можно ли вычислить всё? О Гёделе, Тьюринге и программировании

Есть темы, которые в университете просто проходишь, потому что надо. Запомнила, сдала, выдохнула — и пошла дальше. А потом они возвращаются, и ты смотришь на них уже иначе.

Возвращение к Гёделю

С теоремой о неполноте Курта Гёделя у меня получилось именно так. Формально это история из математической логики — про аксиомы, доказуемость, формальные системы. Но программирование тоже тесно связано с математикой. Поэтому однажды мне стало интересно: а что, если взглянуть на теорему Гёделя не только как на абстрактный математический результат, но и как на нечто, что напрямую касается программирования?

Эта мысль пришла после разговора математика Эдварда Френкеля и Лекса Фридмана. После него я вновь вернулась к материалу, который нам давали на третьем курсе.

Оговорюсь сразу: я не специалист по математической логике. Это не строгая лекция, а попытка переосмыслить тему с новой точки зрения. Так что прошу математиков не судить строго.

Кратко: что говорит теорема Гёделя

У Гёделя две теоремы о неполноте.

Первая утверждает: в любой достаточно сложной непротиворечивой формальной системе, в которой можно выразить арифметику, существуют истинные утверждения, которые невозможно доказать внутри этой системы.

Вторая добавляет: такая система не может доказать собственную непротиворечивость.

Важно: система должна быть непротиворечивой. Если в ней можно доказать и утверждение, и его отрицание, то из неё можно вывести всё что угодно. Тогда она теряет смысл.

Почему вспоминают Евклида

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

Это не значит, что Евклид был «неправ». Это значит, что от исходных допущений зависит вся картина мира, которую мы строим.

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

Формальные миры программирования

Программирование тоже строит формальные миры. У нас есть язык, синтаксис, типы, правила, платформенные ограничения. Мы надеемся, что всё будет работать предсказуемо.

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

Но тут в игру вступают Гёдель и Тьюринг — и всё становится сложнее.

Тьюринг и проблема остановки

Можно ли написать программу, которая для любого другого кода определит, завершится он или будет работать вечно?

Это — проблема остановки. Алан Тьюринг доказал: такой универсальной программы не существует. Нельзя создать алгоритм, который безошибочно решит этот вопрос для любого алгоритма.

Здесь абстрактные ограничения формальных систем становятся реальностью программирования — не философией, а фактом.

У нас есть статический анализ, тесты, линтеры, системы типов. Они мощные и полезные. Но мечта о универсальном инструменте, который проанализирует любой код и скажет всё без ошибок, — нереалистична.

И это заставляет по-другому смотреть на лозунг: «всё в жизни вычислимо».

Восприятие и интерпретация

Важно не только то, что мы можем вычислить, но и то, как мы видим мир.

Вспомните платье: сине-чёрное или бело-золотое? Одни и те же данные — разные интерпретации. То же с вазой Рубина: кто-то видит вазу, кто-то — два профиля.

Восприятие — это не просто считывание сигнала. Это всегда интерпретация.

Как сказал Нильс Бор: одну и ту же реальность иногда приходится описывать разными, несводимыми друг к другу способами. Это не ошибка. Это особенность.

Нейросети и человеческий след

Перенесём это на нейросети. Мы часто говорим о них так, будто они работают с «нейтральной» реальностью. Но данные собирают люди. Их размечают люди. Архитектуры проектируют люди. Метрики выбирают люди.

У каждого — свой опыт, предубеждения, слепые зоны. И всё это вплетается в модели.

Нейросети, уравнения, языки, системы — всё создано людьми. И след человека в них остаётся всегда. Это не плохо. Это просто честно.

Что остаётся после Гёделя

Для меня теорема о неполноте — это не приговор математике. Не отрицание программирования. Не повод отказаться от точности.

Это — напоминание о границах. О том, что любая система, пытающаяся описать мир изнутри себя, имеет пределы.

Она учит аккуратности. Учит не путать мощь системы с её всемогуществом.

Именно поэтому Гёдель — важный, хоть и неприятный, собеседник для программиста. Особенно в эпоху, когда так легко поверить: ещё чуть-чуть — и мы вычислим всё до конца.

Читать оригинал