Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проблема самоприменимости




Тезис Черча-Тьюринга

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

Это утверждение – аналог тезиса Тьюринга (Всякий алгоритм может быть реализован машиной Тьюринга) для рекурсивных функций. Из сопоставления этих двух тезисов вытекает следующее утверждение: функция вычислима машиной Тьюринга тогда и только тогда, когда она частично-рекурсивна.

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

Ввиду инвариантности основных результатов общей теории алгоритмов прикладное значение ее результатов не связано с тем, насколько близки к практике используемые в ней модели алгоритмов.

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

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

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

Множество всех алгоритмов счетно. Это означает наличие взаимно-однозначного соответствия между алгоритмами и числами натурального ряда, т.е. функции типа

: Al N

Такая функция называется нумерацией алгоритмов, а ее значение (А) – номером алгоритма А при нумерации. Из взаимной однозначности отображения следует, что существует обратная функция -1(n)= Аn, восстанавливающая по номеру n описание алгоритма Аn.

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

Теорема 6.1. Не существует алгоритма В(x,y) такого, что для любого алгоритма Аx (с номером (А)=х)

Иначе говоря, не существует алгоритма, который по номеру х любого алгоритма и исходным данным y определял бы остановится алгоритм Ах при этих данных или нет.

Теорема 6.2. Проблема самоприменимости алгоритмов аналитически неразрешима.

Т.е. не существует алгоритма В1(х) такого, что для любого Ах

Эти две теоремы являются мощным средством для доказательства разных неразрешимостей.

Решение задачи перечисления всех алгоритмов (в частности, всех рекурсивных функций) в принципе ясно. Может показаться, что перечисление примитивно-рекурсивных или общерекурсивных функций окажется более легким делом.

Теорема 6.3. Для любого перечисления любого множества всюду определенных вычислимых (т.е. общерекурсивных) функций существует общерекурсивная функция не входящая в это перечисление.

Если в перечислении допускаются частичные функции, то определение В не приводит к противоречию, а лишь означает, что в точке Хв функция В(Хв) не определена.

Теорема 6.4. Проблема определения общерекурсивности алгоритмов неразрешима.

Не существует алгоритма В(х) такого, что для любого алгоритма Ах

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

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

Теорема 6.5. Существует такая частично-рекурсивная функция f, что никакая общерекурсивная функция g не является ее доопределением.

Следовательно, существуют частичные алгоритмы, которые нельзя доопределить до всюду определенного алгоритма.

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

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

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

Теорема Райса. Никакое нетривиальное свойство вычислимых функций не является алгоритмически разрешимым.

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

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

Для функций это неверно: при xy fx и fy могут быть одной и той же функцией (в ее классическом смысле).

Можно ли по тексту сколько-нибудь сложной программы (не запуская ее в работу) понять, что она делает (не имея гипотез о том, что она должна делать)? В этом тексте алгоритмическим путем можно отыскать так называемые синтаксические ошибки – те или иные свойства описания алгоритма (и это делают трансляторы и компиляторы с алгоритмических языков программирования).

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

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

Если же важно иметь дело с разрешимой задачей, то следует четко представлять, что, во-первых отсутствие общего алгоритма, решающего данную проблему не означает, что в частном случае нельзя добиться успеха. Во-вторых, появление неразрешимости – как правило, результат черезмерной общности задачи. Задача в более общей постановке имеет больше шансов оказаться неразрешимой.




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 1035; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.