3.26. Разрыв вычислительных петель
К оглавлению1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1617 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60 61 62
Попробую осветить полученный вывод под несколько иным углом зрения. Предположим, что, пытаясь обойти налагаемые теоремой Гёделя ограничения, некто решил построить такого робота, который будет способен каким-либо образом «выскакивать из системы» всякий раз, когда управляющий им алгоритм попадет в вычислительную петлю. В конце концов именно постоянное приложение теоремы Гёделя не позволяет нам спокойно принять предположение о том, что математическое понимание можно объяснить посредством вычислительных процедур, поэтому, как мне кажется, стоит рассмотреть с этой точки зрения трудности, с которыми сталкивается любая вычислительная модель математического понимания при встрече с теоремой Гёделя.
Мне кто-то говорил, что где-то живут ящерицы, тупость которых настолько велика, что они, подобно «обычным компьютерам и некоторым насекомым», способны «зацикливаться». Если несколько таких ящериц поместить на край круглого блюда, то они в вечной «гонке за лидером» будут бегать по кругу до тех пор, пока не умрут от истощения. Смысл этой истории в том, что подлинно интеллектуальная система должна располагать какими-то средствами для разрыва таких петель, тогда как ни один из существующих компьютеров подобными качествами, вообще говоря, не обладает. (Проблему «разрыва петель» рассматривал Хофштадтерв[200].)
Вычислительная петля простейшего типа возникает, когда система на некотором этапе своей работы возвращается назад, в точности в то же состояние, в каком она пребывала на некотором предыдущем этапе. В отсутствие ввода каких-то дополнительных данных она будет просто повторять одно и то же вычисление бесконечно. Не составляет большой трудности построить систему, которая, в принципе, будет гарантированно (пусть и не слишком эффективно) выбираться из петель подобного рода по мере их возникновения (скажем, посредством ведения списка всех состояний, в которых оказывается система, и проверки на каждом этапе на предмет выяснения, не встречалось ли такое состояние когда-либо раньше). Существует, однако, множество других возможных типов петель, причем гораздо более сложных. Собственно говоря, проблеме образования петель посвящена большая часть рассуждений главы 2 (в особенности, §§2.1 — 2.6), так как вычисление, застрявшее в петле, есть не что иное, как вычисление, которое не завершается. Собственно говоря, под -высказыванием мы как раз и понимаем утверждение о том, что некоторое вычисление образует петлю (см. §2.10, комментарий к возражению). А еще в § 2.5 мы имели возможность убедиться в том, что факт незавершаемости вычисления (т. е. образования петли) однозначно установить с помощью одних лишь алгоритмических методов невозможно. Более того, как можно заключить из вышеприведенных рассуждений, процедуры, посредством которых математики-люди устанавливают, что данное конкретное вычисление действительно образует петлю (т. е. устанавливают истинность соответствующего-высказывания), вообще не являются алгоритмическими.
Таким образом, получается, что, если мы хотим встроить в систему все доступные человеку методы, позволяющие однозначно установить, что те или иные вычисления действительно образуют петли, необходимо снабдить ее неким «невычислительным интеллектом». Можно, конечно, предположить, что петель можно избежать с помощью некоего механизма, который будет оценивать, как долго уже выполняется текущее вычисление, и «выскакивать из системы», если ему покажется, что оно выполняется слишком долго. Однако такой способ не сработает, если механизм, принимающий подобные решения, является по своей природе вычислительным, поскольку в этом случае неизбежны ситуации, когда упомянутый механизм со своей задачей не справляется, либо приходя к ошибочному заключению, что вычисление зациклилось, либо вообще не приходя ни к какому заключению (по той причине, что теперь зациклился уже сам механизм). Целиком и полностью вычислительной системе нечего противопоставить проблеме образования петель, и нет никаких гарантий, что вся система в целом, пусть даже избежав ошибочных выводов, в конце концов не зациклится.
А что если ввести в процесс принятия решения о необходимости «выскакивать из системы» (в случае предположительно зациклившегося вычисления) и о том, когда именно это нужно делать, некоторые случайные элементы? Как мы отмечали выше (в частности, в §3.18), от чисто случайных элементов — в противоположность вычислительным псевдослучайным — нам в этой связи никакой реальной пользы не будет. Кроме того, если мы действительно хотим знать точно, образует ли петлю то или иное вычисление (т. е. истинно ли соответствующее-высказывание), то следует учесть еще один момент. Сами по себе случайные процедуры не годятся для решения таких задач, поскольку, исходя из самой природы феномена, называемого нами случайностью, о выводах, действительно обусловленных случайными элементами, определенно можно сказать лишь одно — какая бы то ни было определенность в них напрочь отсутствует. Известны, однако, вычислительные процедуры со случайными (или псевдослучайными) элементами, позволяющие получить математический результат с очень высокой степенью достоверности. Существуют, например, весьма эффективные методы со случайным входящим потоком, позволяющие определить, является ли данное большое число простым, причем практически в любом конкретном случае результат оказывается правильным. Математически строгие методы проверки гораздо менее эффективны — поневоле задумаешься, что же предпочтительнее: сложное, но математически точное построение, которое, не исключено, содержит не одну ошибку, или относительно простое, но вероятностное рассуждение, вероятность ошибки в котором на практике может оказаться значительно меньше, нежели в первом случае. Подобные размышления порождают множество неловких вопросов, ломать копья из-за которых я не испытываю ни малейшего желания. Достаточно будет сказать, что для «принципиальных» рассуждений, которым посвящена большая часть этой главы, вероятностное доказательство, с помощью которого можно устанавливать истинность-высказываний, неизбежно оказывается, скажем так, не совсем адекватным.
Если мы намерены научиться однозначно устанавливать истинность любого-высказывания в принципе, то, вместо того, чтобы бездумно полагаться на случайные или непознаваемые процедуры, нам необходимо достичь подлинного понимания смысла феноменов, с этими высказываниями действительно связанных. Возможно, процедуры, полученные методом проб и ошибок, и дадут нам некоторые указания относительно того, где искать необходимые сведения, однако сами по себе такие процедуры окончательными критериями истинности являться не могут.
В качестве примера вернемся к вычислению, приведенному в комментарии к возражению(§2.6): «распечатать последовательность изединиц, после чего остановиться». Если просто выполнять это вычисление в точном соответствии с данными инструкциями, то его никоим образом невозможно будет завершить, даже если каждый отдельный его шаг будет занимать наименьший возможный с точки зрения теоретической физики промежуток времени (околос) — на его выполнение потребуется срок, невообразимо больший нынешнего возраста Вселенной (или достижимого ею в любом обозримом будущем). И все же это вычисление весьма просто описать (особенно если припомнить, что), причем абсолютно очевидно, что в конечном итоге оно все равно завершится. Если же мы вознамеримся счесть, что вычисление зациклилось на том только основании, что оно якобы «выполняется слишком долго», каким безнадежно далеким от истины окажется такое предположение!
Несколько более интересным примером может послужить вычисление, которое, как нам недавно стало известно, все-таки завершается, хотя долгое время казалось, что конца ему не предвидится. Это вычисление происходит из допущения, сделанного великим швейцарским математиком Леонардом Эйлером, и состоит в отыскании решения в положительных целых числах (т. е. натуральных числах, кроме нуля) следующего уравнения:
В 1769 году Эйлер предположил, что это вычисление является незавершаемым. В середине 1960-х Л.Лэндером и Т. Паркином была предпринята попытка отыскать решение с помощью специально разработанной компьютерной программы (см. [233]), однако проект через некоторое время оставили ввиду отсутствия перспективы получить искомое решение в сколько-нибудь обозримом будущем — получаемые в процессе числа оказались слишком велики для имеющегося в распоряжении математиков компьютера, и они просто-напросто сдались. По всему выходило, что это вычисление и впрямь не завершается. Однако в 1987 году математику (человеку, кстати) Ноаму Элькису не только удалось показать, что решение таки существует, но и представить его в численном виде: ,,иОн также показал, что существует бесконечно много других решений, существенно отличных от полученного им. Воодушевленный этим результатом Роджер Фрай решил возобновить компьютерный поиск, внеся в программу несколько предложенных Элькисом упрощающих поправок и, в конечном счете, затратив приблизительно 100 часов компьютерного времени, получил несколько, правда, меньшее (вообще говоря, наименьшее возможное), но вполне подходящее решение:, ,и
Лавры за решение этой задачи следует разделить поровну между математическими интуитивными прозрениями и прямыми вычислительными подходами. Решая задачу математически, Элькис прибегал и к помощи компьютерных вычислений, пусть и относительно несущественных, хотя по большей своей части его аргументация таких подпорок не требует. И наоборот, как мы видели выше, для того чтобы сделать вычисление вообще возможным, Фраю потребовалось весьма существенная помощь со стороны человеческой интуиции.
Думаю, следует поместить нашу задачу в несколько более подробный контекст — первоначальное предположение Эйлера, сделанное в 1769 году, представляло собой нечто вроде обобщения знаменитой «последней теоремы Ферма», согласно которой, как читатель, возможно, припоминает, верно следующее:
уравнение
не имеет решения в положительных целых числахесли n больше 2 (см., напр., [88]9). Мы можем перефразировать предположение Эйлера и записать его в следующем виде: не имеет решения в положительных целых числах уравнение
гдесуть положительные целые числа общим количеством, аравно 4 или больше. Утверждение Ферма относится к случаю(частный случай предположения Эйлера, причем то, что соответствующее уравнение решений не имеет, сам Ферма и доказал — вот только доказательства нам не оставил). Прошло почти 200 лет, прежде чем был найден первый пример, опровергающий предположение Эйлера (в случае), - для отыскания решения был использован компьютерный перебор (подробнее об этом можно прочесть в той же статье Лэндера и Паркина, на которую я уже ссылался выше и в которой сообщается о неудаче со случаем):
Вспомним еще об одном знаменитом примере вычисления, о котором известно лишь то, что оно в конце концов завершается; когда именно оно завершается, неизвестно до сих пор. Это вычисление связано с задачей об отыскании точки, в которой одна хорошо известная приближенная формула для определения количества простых чисел, меньших некоторого положительного целого n (интегральный логарифм Гаусса), оказывается не в состоянии это количество оценить. В 1914 году Дж. Э. Литлвуд показал, что в некоторой точке эта задача имеет решение. (Приблизительно то же можно выразить и иначе: например, доподлинно известно, что две кривые в некоторой точке пересекаются.)
В 1935 году ученик Литлвуда по фамилии Скьюс показал, что упомянутая точка приходится на число, меньшее, однако точное число так и остается неизвестным, хотя оно, конечно же, значительно меньше предела, поставленного Скьюсом. (Это число называли в свое время «наибольшим число, когда-либо естественным образом возникавшим в математике», однако тот временный рекорд оказался на настоящий момент побит с огромным отрывом в примере, приведенном в работе Грэма и Ротшильда [164], с. 290.)
Попробую осветить полученный вывод под несколько иным углом зрения. Предположим, что, пытаясь обойти налагаемые теоремой Гёделя ограничения, некто решил построить такого робота, который будет способен каким-либо образом «выскакивать из системы» всякий раз, когда управляющий им алгоритм попадет в вычислительную петлю. В конце концов именно постоянное приложение теоремы Гёделя не позволяет нам спокойно принять предположение о том, что математическое понимание можно объяснить посредством вычислительных процедур, поэтому, как мне кажется, стоит рассмотреть с этой точки зрения трудности, с которыми сталкивается любая вычислительная модель математического понимания при встрече с теоремой Гёделя.
Мне кто-то говорил, что где-то живут ящерицы, тупость которых настолько велика, что они, подобно «обычным компьютерам и некоторым насекомым», способны «зацикливаться». Если несколько таких ящериц поместить на край круглого блюда, то они в вечной «гонке за лидером» будут бегать по кругу до тех пор, пока не умрут от истощения. Смысл этой истории в том, что подлинно интеллектуальная система должна располагать какими-то средствами для разрыва таких петель, тогда как ни один из существующих компьютеров подобными качествами, вообще говоря, не обладает. (Проблему «разрыва петель» рассматривал Хофштадтерв[200].)
Вычислительная петля простейшего типа возникает, когда система на некотором этапе своей работы возвращается назад, в точности в то же состояние, в каком она пребывала на некотором предыдущем этапе. В отсутствие ввода каких-то дополнительных данных она будет просто повторять одно и то же вычисление бесконечно. Не составляет большой трудности построить систему, которая, в принципе, будет гарантированно (пусть и не слишком эффективно) выбираться из петель подобного рода по мере их возникновения (скажем, посредством ведения списка всех состояний, в которых оказывается система, и проверки на каждом этапе на предмет выяснения, не встречалось ли такое состояние когда-либо раньше). Существует, однако, множество других возможных типов петель, причем гораздо более сложных. Собственно говоря, проблеме образования петель посвящена большая часть рассуждений главы 2 (в особенности, §§2.1 — 2.6), так как вычисление, застрявшее в петле, есть не что иное, как вычисление, которое не завершается. Собственно говоря, под -высказыванием мы как раз и понимаем утверждение о том, что некоторое вычисление образует петлю (см. §2.10, комментарий к возражению). А еще в § 2.5 мы имели возможность убедиться в том, что факт незавершаемости вычисления (т. е. образования петли) однозначно установить с помощью одних лишь алгоритмических методов невозможно. Более того, как можно заключить из вышеприведенных рассуждений, процедуры, посредством которых математики-люди устанавливают, что данное конкретное вычисление действительно образует петлю (т. е. устанавливают истинность соответствующего-высказывания), вообще не являются алгоритмическими.
Таким образом, получается, что, если мы хотим встроить в систему все доступные человеку методы, позволяющие однозначно установить, что те или иные вычисления действительно образуют петли, необходимо снабдить ее неким «невычислительным интеллектом». Можно, конечно, предположить, что петель можно избежать с помощью некоего механизма, который будет оценивать, как долго уже выполняется текущее вычисление, и «выскакивать из системы», если ему покажется, что оно выполняется слишком долго. Однако такой способ не сработает, если механизм, принимающий подобные решения, является по своей природе вычислительным, поскольку в этом случае неизбежны ситуации, когда упомянутый механизм со своей задачей не справляется, либо приходя к ошибочному заключению, что вычисление зациклилось, либо вообще не приходя ни к какому заключению (по той причине, что теперь зациклился уже сам механизм). Целиком и полностью вычислительной системе нечего противопоставить проблеме образования петель, и нет никаких гарантий, что вся система в целом, пусть даже избежав ошибочных выводов, в конце концов не зациклится.
А что если ввести в процесс принятия решения о необходимости «выскакивать из системы» (в случае предположительно зациклившегося вычисления) и о том, когда именно это нужно делать, некоторые случайные элементы? Как мы отмечали выше (в частности, в §3.18), от чисто случайных элементов — в противоположность вычислительным псевдослучайным — нам в этой связи никакой реальной пользы не будет. Кроме того, если мы действительно хотим знать точно, образует ли петлю то или иное вычисление (т. е. истинно ли соответствующее-высказывание), то следует учесть еще один момент. Сами по себе случайные процедуры не годятся для решения таких задач, поскольку, исходя из самой природы феномена, называемого нами случайностью, о выводах, действительно обусловленных случайными элементами, определенно можно сказать лишь одно — какая бы то ни было определенность в них напрочь отсутствует. Известны, однако, вычислительные процедуры со случайными (или псевдослучайными) элементами, позволяющие получить математический результат с очень высокой степенью достоверности. Существуют, например, весьма эффективные методы со случайным входящим потоком, позволяющие определить, является ли данное большое число простым, причем практически в любом конкретном случае результат оказывается правильным. Математически строгие методы проверки гораздо менее эффективны — поневоле задумаешься, что же предпочтительнее: сложное, но математически точное построение, которое, не исключено, содержит не одну ошибку, или относительно простое, но вероятностное рассуждение, вероятность ошибки в котором на практике может оказаться значительно меньше, нежели в первом случае. Подобные размышления порождают множество неловких вопросов, ломать копья из-за которых я не испытываю ни малейшего желания. Достаточно будет сказать, что для «принципиальных» рассуждений, которым посвящена большая часть этой главы, вероятностное доказательство, с помощью которого можно устанавливать истинность-высказываний, неизбежно оказывается, скажем так, не совсем адекватным.
Если мы намерены научиться однозначно устанавливать истинность любого-высказывания в принципе, то, вместо того, чтобы бездумно полагаться на случайные или непознаваемые процедуры, нам необходимо достичь подлинного понимания смысла феноменов, с этими высказываниями действительно связанных. Возможно, процедуры, полученные методом проб и ошибок, и дадут нам некоторые указания относительно того, где искать необходимые сведения, однако сами по себе такие процедуры окончательными критериями истинности являться не могут.
В качестве примера вернемся к вычислению, приведенному в комментарии к возражению(§2.6): «распечатать последовательность изединиц, после чего остановиться». Если просто выполнять это вычисление в точном соответствии с данными инструкциями, то его никоим образом невозможно будет завершить, даже если каждый отдельный его шаг будет занимать наименьший возможный с точки зрения теоретической физики промежуток времени (околос) — на его выполнение потребуется срок, невообразимо больший нынешнего возраста Вселенной (или достижимого ею в любом обозримом будущем). И все же это вычисление весьма просто описать (особенно если припомнить, что), причем абсолютно очевидно, что в конечном итоге оно все равно завершится. Если же мы вознамеримся счесть, что вычисление зациклилось на том только основании, что оно якобы «выполняется слишком долго», каким безнадежно далеким от истины окажется такое предположение!
Несколько более интересным примером может послужить вычисление, которое, как нам недавно стало известно, все-таки завершается, хотя долгое время казалось, что конца ему не предвидится. Это вычисление происходит из допущения, сделанного великим швейцарским математиком Леонардом Эйлером, и состоит в отыскании решения в положительных целых числах (т. е. натуральных числах, кроме нуля) следующего уравнения:
В 1769 году Эйлер предположил, что это вычисление является незавершаемым. В середине 1960-х Л.Лэндером и Т. Паркином была предпринята попытка отыскать решение с помощью специально разработанной компьютерной программы (см. [233]), однако проект через некоторое время оставили ввиду отсутствия перспективы получить искомое решение в сколько-нибудь обозримом будущем — получаемые в процессе числа оказались слишком велики для имеющегося в распоряжении математиков компьютера, и они просто-напросто сдались. По всему выходило, что это вычисление и впрямь не завершается. Однако в 1987 году математику (человеку, кстати) Ноаму Элькису не только удалось показать, что решение таки существует, но и представить его в численном виде: ,,иОн также показал, что существует бесконечно много других решений, существенно отличных от полученного им. Воодушевленный этим результатом Роджер Фрай решил возобновить компьютерный поиск, внеся в программу несколько предложенных Элькисом упрощающих поправок и, в конечном счете, затратив приблизительно 100 часов компьютерного времени, получил несколько, правда, меньшее (вообще говоря, наименьшее возможное), но вполне подходящее решение:, ,и
Лавры за решение этой задачи следует разделить поровну между математическими интуитивными прозрениями и прямыми вычислительными подходами. Решая задачу математически, Элькис прибегал и к помощи компьютерных вычислений, пусть и относительно несущественных, хотя по большей своей части его аргументация таких подпорок не требует. И наоборот, как мы видели выше, для того чтобы сделать вычисление вообще возможным, Фраю потребовалось весьма существенная помощь со стороны человеческой интуиции.
Думаю, следует поместить нашу задачу в несколько более подробный контекст — первоначальное предположение Эйлера, сделанное в 1769 году, представляло собой нечто вроде обобщения знаменитой «последней теоремы Ферма», согласно которой, как читатель, возможно, припоминает, верно следующее:
уравнение
не имеет решения в положительных целых числахесли n больше 2 (см., напр., [88]9). Мы можем перефразировать предположение Эйлера и записать его в следующем виде: не имеет решения в положительных целых числах уравнение
гдесуть положительные целые числа общим количеством, аравно 4 или больше. Утверждение Ферма относится к случаю(частный случай предположения Эйлера, причем то, что соответствующее уравнение решений не имеет, сам Ферма и доказал — вот только доказательства нам не оставил). Прошло почти 200 лет, прежде чем был найден первый пример, опровергающий предположение Эйлера (в случае), - для отыскания решения был использован компьютерный перебор (подробнее об этом можно прочесть в той же статье Лэндера и Паркина, на которую я уже ссылался выше и в которой сообщается о неудаче со случаем):
Вспомним еще об одном знаменитом примере вычисления, о котором известно лишь то, что оно в конце концов завершается; когда именно оно завершается, неизвестно до сих пор. Это вычисление связано с задачей об отыскании точки, в которой одна хорошо известная приближенная формула для определения количества простых чисел, меньших некоторого положительного целого n (интегральный логарифм Гаусса), оказывается не в состоянии это количество оценить. В 1914 году Дж. Э. Литлвуд показал, что в некоторой точке эта задача имеет решение. (Приблизительно то же можно выразить и иначе: например, доподлинно известно, что две кривые в некоторой точке пересекаются.)
В 1935 году ученик Литлвуда по фамилии Скьюс показал, что упомянутая точка приходится на число, меньшее, однако точное число так и остается неизвестным, хотя оно, конечно же, значительно меньше предела, поставленного Скьюсом. (Это число называли в свое время «наибольшим число, когда-либо естественным образом возникавшим в математике», однако тот временный рекорд оказался на настоящий момент побит с огромным отрывом в примере, приведенном в работе Грэма и Ротшильда [164], с. 290.)