Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17




НазваниеСодержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17
страница75/78
Дата конвертации11.12.2012
Размер5.58 Mb.
ТипРеферат
1   ...   70   71   72   73   74   75   76   77   78

Невычислимая функция


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

Проблема останова


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

while X not 0 do:

incr X; end;

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

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

Предыдущий пример показал, что результат, то есть остановится ли в конечном итоге программа, может зависеть от начальных значений переменных. Поэтому, если мы хотим предсказать, прекратится ли выполнение программы, необходимо соблюдать аккуратность в отношении ее начальных значений. Выбор, который мы собираемся сделать в отношении этих значений, может показаться вам на первый взгляд странным, но не теряйте веры. Наша цель — воспользоваться преимуществами метода под названием самовызов, идея которого заключается в том, что объект обращается к самому себе. Эта уловка часто приводит к удивительным результатам в математике, начиная от таких курьезов, как утверждение «Это утверждение является ложным» до более серьезного парадокса, представленного вопросом «Содержит ли набор всех наборов само себя?». Мы собираемся подготовить ситуацию для последовательности умозаключений, схожей с «Если это есть, то этого нет; но если этого нет, то оно есть».

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

Рассмотрим, что произойдет, если выполнить самовызов для простой программы

while X not 0 do:

incr X: end;

Мы хотим узнать, что произойдет, если запустить эту программу, присвоив переменной X закодированный вариант самой программы (рис. 11.3). В этом случае ответ очевиден. Так как значение X не равно нулю, программа попадет в цикл и никогда не остановится. С другой стороны, если выполнить подобный эксперимент над программой

clear X;

while X not 0 do:

incr X; end:

то она остановится, так как независимо от начального значения на момент достижения структуры while-end значением переменной X будет ноль.

Выведем следующее определение: программа на скелетном языке является самозавершающейся (selfterminating), если ее выполнение со значениями всех переменных, инициализированных закодированным представлением самой программы, приводит к окончанию выполнения. Проще говоря, программа является самозавершающейся, если ее выполнение прекращается при условии, что при запуске ей на вход была дана она сама. Это тот самый пример самовызова, о котором мы говорили.



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

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

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

Неразрешимость проблемы останова


Теперь мы хотим показать, что решение проблемы останова выходит за пределы возможностей машин. Мы будем исходить из того, что для решения задачи потребуется алгоритм вычисления невычислимой функции. Входами этой функции являются закодированные варианты программ на скелетном языке, а выходами — значения 0 и 1. Точнее, мы определяем функцию так, что при подаче на вход самозавершающейся программы она порождает выходное значение 1, а для программы, не завершающейся самостоятельно, она выдает 0. Для краткости мы будем называть эту функцию функцией останова.

Наша задача — продемонстрировать, что функция останова не вычислима. Действовать мы будем от противного, то есть докажем, что утверждение ложно, показав, что оно не может быть правдивым. Докажем, что утверждение «функция останова вычислима» не может быть правдой. Доказательство продемонстрировано на рис. 11.4.



Если функция останова вычислима, то (так как скелетный язык является универсальным языком программирования) должна существовать программа на скелетном языке для вычисления этой функции. Другими словами, эта программа должна останавливаться с выходом, равным 1, если ее вход — закодированный вариант самозавершающейся программы, и выдавать 0 в противном случае.

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

Предполагая, что выходная переменная программы — X (если это другая переменная, мы можем переименовать их), мы можем изменить программу, добавив в конце операторы

while X not 0 do: end;

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

В частности, если эта новая программа самозавершающаяся, и мы запустим ее с переменными, содержащими закодированное представление этой программы, то на момент, когда выполнение достигнет добавленного оператора while, значение переменной X будет равно 1. (До этого момента новая программа идентична исходной, которая выдает 1, если на вход было подано закодированное представление самозавершающейся программы.) Теперь программа навсегда войдет в цикл while-end, так как мы не предусмотрели уменьшение значения X в цикле. Однако это противоречит нашему предположению, что новая программа самозавершающаяся. Таким образом, мы можем сделать вывод, что новая программа не является самозавершающейся.

Если же новая программа не самозавершающаяся, и мы запустим ее, присвоив переменным закодированное значение программы, она достигнет добавленного оператора while со значением X, равным 0. (Это происходит потому, что операторы, предшествующие оператору while, генерируют выход программы, равный 0, если на вход подана кодировка не самозавершающейся программы.) В этом случае цикл while-end не будет выполнен, и программа остановится. Но это свойство самозавершающейся программы, поэтому мы делаем вывод, что новая программа самозавершающаяся, так же, как ранее увидели, что она не является самозавершающейся.

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

Мы делаем вывод, что функция останова невычислима, и, поскольку решение проблемы останова зависит от вычисления этой функции, можно утверждать, что ее решение лежит за пределами способностей любой алгоритмической системы. Подобные проблемы называются неразрешимыми проблемами (unresolvable problems).

В завершение необходимо связать полученные выводы с идеями, высказанными в главе 10. Ее главной темой был вопрос, включают ли возможности вычислительных машин качества, необходимые для проявления интеллекта. Вспомните, что машинам подвластны только задачи с алгоритмическими решениями, а сейчас мы обнаружили, что существуют проблемы без алгоритмических решений. Следовательно, возникает вопрос, способен ли человеческий разум на большее, чем просто выполнение алгоритмических процессов. Если нет, то границы, которые мы очертили, также являются пределами для человеческого интеллекта. Нет необходимости говорить, что это очень спорный и волнующий многих вопрос. Если, например, разум людей — это не больше, чем запрограммированная машина, то можно сделать вывод, что люди не обладают свободой воли.
1   ...   70   71   72   73   74   75   76   77   78

Похожие:

Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconОсновы работы с Sharepoint в какое место веб-страницы разрешается вставить новую веб-часть (в браузере)?
В какое представление веб-страницы будут вноситься изменения, если выбрать команду Настроить эту страницу?
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconВведение в физику и технологию элементной базы ЭВМ и компьютеров
Введение   8
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconСодержание
Содержание размещают после титульного листа отчёта (как правило, на стр. 2). Слово «Содержание» рас­полагают посередине страницы...
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconСоздание веб-страницы в простом текстовом редакторе
Давайте создадим  веб-страницу. Для этого нужно напечатать ее исходный код в простом текстовом редакторе  блокнот
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconЗагрузка uploading теория
После того как набор html страниц веб-сайта создан. Все они связаны между собой с помощью ссылок. Страницы наполнены контентом. Таким...
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconЛитература 153 Алфавитный указатель 155 Предисловие редактора русского издания Глубокоуважаемые коллеги! Содержа­ние этой книги значительно шире и глуб­же, нежели заявлено в ее названии. Я бы назвала ее «Лечение и реставрация молочных зубов»
Предисловие редактора русского издания 6 Введение 9 Предисловие 11 Благодарности 13
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 icon        Информатика  Системы счисления и  арифметические основы эвм  
Введение   
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconЯндекс - поисковая машина, способная по вашему запросу найти в русскоязычной части интернета наиболее подходящие веб-страницы, новости, картинки, статьи
Яндекс — поисковая машина, способная по вашему запросу найти в русскоязычной части интернета наиболее подходящие веб-страницы, новости,...
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconВзаимодействие веб-сайтов по культуре с пользователем. 
Предисловие к русскому изданию   4 
Содержание предисловие 2 веб-страницы 3 введение 6 1архитектура ЭВМ 17 iconВзаимодействие веб-сайтов по культуре с пользователем. 
Предисловие к русскому изданию   4 
Разместите кнопку на своём сайте:
kak.znate.ru


База данных защищена авторским правом ©kak.znate.ru 2012
обратиться к администрации
KakZnate
Главная страница