Ричард Манкевич - История математики. От счетных палочек до бессчетных вселенных
Как и предвидел Бэббидж, развитие компьютеров в значительной степени зависело от потребности ускорить выполнение расчетов с помощью механических калькуляторов. Первая автоматическая вычислительная машина была построена в Гарварде на средства IBM приблизительно в 1940 году. Первый электронный программируемый компьютер назывался «Колосс». Он был построен в 1943 году в результате сотрудничества Алана Тьюринга и Джона фон Неймана и представлял собой часть работы по взлому шифров в Блетчли-Парке. Однако был проект, который оказал особое влияние на будущую компьютерную архитектуру, — ENIAC (электронный цифровой интегратор и калькулятор), построенный приблизительно в то же время в университете штата Пенсильвания. Фон Нейманн надеялся, что ENIAC, первоначально разработанный для расчета баллистических таблиц, сможет выполнить некоторые вычисления, необходимые для Манхэттенского проекта. Однако затем он предложил новый, свой собственный проект компьютера, сохраняющего программу, называющийся EDVAC (Электронный Автоматический Компьютер Дискретных Переменных). Новая структура состояла из пяти основных компонентов: входные данные, выходные данные, блок управления, память и арифметический блок. Компьютер с сохранением программы называется так потому, что программа вводится в память посредством числовых данных, в то время как блок управления выполняет последовательность инструкций. Первый практический компьютер этого типа был построен в 1949 году в Великобритании и назывался EDSAC (Электронный Автоматический Калькулятор с задержкой Хранения). Следующие машины были построены в США и Великобритании, и к 1960-м годам хранение программ стало обычным делом. Использование полупроводниковых компонентов для замены электронно-лучевых ламп привело к значительному увеличению скорости и надежности работы. Несмотря на то что эти компьютеры сильно напоминали проекты Бэббиджа, их авторы ничего не знали о его работах.
Совершенно ясно, что изобретение компьютеров было мотивировано вполне практическими проблемами в бизнесе, управлении, криптографии или в решении уравнений математической физики. Компьютеры с хранением программ отделили аппаратные средства от программного обеспечения. Но первичная работа над программами — алгоритмами для выполнения соответствующих вычислений — шла не от практических проблем, а от логического рассмотрения формальных систем.
Самый привычный пример формальной системы — обычная арифметика. В ней есть четкий набор символов, есть процедуры для того, чтобы работать с этими символами, разобраться с проблемой и найти решение. Сами символы не имеют никакого значения кроме как в отношении правил формальной системы. Например, если я хочу понять, что означает ABmBAeBEB, я могу использовать различные методы или алгоритмы, чтобы выполнить вычисление. Вероятно, будет легче понять это выражение в виде 12 х 21 = 252, но этот пример хорошо иллюстрирует, что фактические символы не важны, имеет значение лишь истинность утверждения, в данном случае вычисления, которая может быть доказана посредством выведения из установленных аксиом. Если убрать общепринятое использование букв в обозначении функций, числа могут не только обозначать количества, но могут также действовать как операторы. Это — критический фактор перехода от вычислительных устройств, разработанных для решения определенных типов задач, к общим, универсальным компьютерам. В современном компьютере любая команда, например указание показать красный пиксель в определенном месте на мониторе, — это, по существу, цепочка чисел. Фактически вся программа, преобразованная в бинарный код, есть одно (очень большое) число. Базисная простота компьютеров часто не замечается из-за все возрастающей скорости и мощности этих машин.
Курт Гедель (1906–1978) в своей статье 1931 года «О формально неразрешимых суждениях Principia mathematica и связанных систем» описал специфический метод присвоения уникального числа каждому суждению, выраженному внутри формальной системы. Даже доказательство истинности суждения может быть выражено как уникальная цепочка натуральных чисел, причем на основании этих базовых символов можно решить, какие из них значащие, а какие — нет. Первый из двух классических результатов, описанных в этой статье, — это «теорема неполноты», заключающаяся в том, что аксиоматическая система, даже такая базовая, как арифметика целых чисел, содержит суждения, истинность или ложность которых не могут быть доказаны. Это до некоторой степени походит на лингвистическую дилемму «данное предложение — ложь». Существование таких неразрешимых суждений показало, что программа аксиоматизации математики, предпринятая Бертраном Расселом и Альфредом Нортом, невыполнима. Гедель также разочаровал Дэвида Гилберта, который стремился создать полную и последовательную арифметику, то есть арифметику без внутренних противоречий. Гедель также показал, что имеет место и прямо противоположное — если система последовательна, она не может доказать свою собственную последовательность изнутри самой себя. Короче говоря, мы говорим, что арифметика неполна. После того как в крышку гроба арифметики был забит огромный гвоздь, математики оставили поиски великой единой математики и вместо этого сосредоточились на исследовании того, как различные формы аксиоматизации приводят к различным математическим системам. Сам факт наличия математического языка должен позволить нам отвечать на вопросы, так что главным образом следует обсуждать процесс, которым определяется истинность математических суждений. Теперь математики в основном говорят об исчисляемости, а не о разрешимости проблемы.
Параллельно с фокусировкой внимания на алгоритмах появилось обобщение понятия функции. В самом общем смысле функция ƒ — произвольное соотношение между математическими объектами. Считается, что функция вычислима, если существует алгоритм, который создает на выходе ƒ(х) для любого значения х, для которого ƒ(х) определено, то есть для так называемой области определения ƒ(х). Лишь в конце девятнадцатого столетия, когда были построены патологические функции, до математиков дошло, что функция может и не быть вычислимой. В результате внимание переместилось на вычислительные алгоритмы. Стало совершенно ясно, вычисляет ли данный алгоритм именно ту функцию, которая необходима. Но если невозможно было подобрать ни одного алгоритма, необходимо было доказать, что такового алгоритма вообще не существует. Появилась необходимость в точном определении понятия алгоритма. В статье Геделя содержались идеи относительно рекурсивных функций, где необходимая функция получалась путем последовательности промежуточных функций. Эти концепции оказались очень плодотворными для определения вычислительных алгоритмов. В 1936 году Алонзо Чёрч в Принстоне и Алан Тьюринг в Кембридже независимо друг от друга опубликовали свои концепции исчисляемости. Затем Тьюринг показал, что эти два понятия полностью эквивалентны. Определение алгоритма Тьюринга было основано на модели вычислительной машины, названной Чёрчем «машина Тьюринга». На вопрос о том, существует ли алгоритм, который мог бы определить, верна формула или нет, был дан отрицательный ответ. Эти результаты, совместно с данными Геделя, окончательно похоронили надежду на то, что компьютер однажды сможет определить истинность и ложность всех математических суждений. Однако сосредоточенность на алгоритмах положила начало развитию программного обеспечения, которое объявило о начале новой эры в математической физике. Вычислительная математика вернулась к обсуждению старых проблем динамики, вроде стабильности Солнечной системы, а также обратила взор на биологические системы и саму сложную динамику жизни.
В естественных науках автоматы играли роль, значение которой непрерывно возрастало и которая к настоящему времени стала весьма значительной. Этот процесс развивался в течение нескольких десятилетий. В конце этого периода автоматы стали захватывать и некоторые области математики, в частности (но не только) математическую физику и прикладную математику. Их роль в математике представляет интересный аналог некоторых сторон жизнедеятельности организмов в природе. Как правило, живые организмы гораздо более сложны и тоньше устроены и, следовательно, значительно менее понятны в деталях, чем искусственные автоматы. Тем не менее рассмотрение некоторых закономерностей устройства живых организмов может быть весьма полезно при изучении и проектировании автоматов. И наоборот, многое из опыта нашей работы с искусственными автоматами может быть до некоторой степени перенесено на наше понимание естественных организмов.
При сравнении живых организмов и, в частности, наиболее сложно организованной системы — нервной системы человека — с искусственными автоматами следует иметь в виду следующее ограничение. Естественные системы чрезвычайно сложны, и ясно, что проблему их изучения необходимо подразделить на несколько частей. Один метод такого расчленения, особенно важный в нашем случае, заключается в следующем. Организмы можно рассматривать как составленные из частей, из элементарных единиц, которые в определенных пределах автономны. Поэтому можно считать первой частью проблемы исследование структуры и функционирования таких элементарных единиц в отдельности. Вторая часть проблемы состоит в том, чтобы понять, как эти элементы организованы в единое целое и каким образом функционирование целого выражается в терминах этих элементов.