Теорема Левина
Версия от 16:13, 15 марта 2010; SVKazakov (обсуждение | вклад)
По одному из определений
языка, язык принадлежит , если существует такая функция — -отношение для языка ( -relation), что: — такой сертификат для , что: и . Таким образом, для проверки принадлежности некоторого слова языку с -отношением необходимо предъявить соответствующий сертификат. Так как для любого слова из языка существует подтверждающий сертификат, то существует программа , которая для слов из языка возвращает нужный сертификат. А для слов не из языка никаких гарантий на возвращаемое значение функции нет, и потому она может либо вернуть неправильный сертификат, либо вообще зависнуть.Встает вопрос о возможности построения «оптимальной» программы для заранее заданного
языка и -отношения для этого языка , которая будет находить сертификат для слова. Оптимальность программы в данном случае означает, что время ее работы для слов из языка не сильно хуже, чем у любой другой программы, правильно находящей сертификат для слов из языка.Формулировка
Теорема Левина об оптимальной
программе утверждает, что для любого языка и функции ( -отношения для ) существует такая программа , что:- выполнено ;
- — такой программы, что выполнено , где — время работы программы на входе .
Заметим, что функция
не зависит от слова , т.е. константа от .Доказательство
Для доказательства теоремы будем строить оптимальную
программу для некоторого языка и отношения для него.Занумеруем все программы
сначала по длине программы, а в случае равенства длин — лексикографически.Будем запускать
каждый раз на один шаг и запоминать полученное состояние запущенной программы. Запускать будем в следующем порядке: 1, 2, 1, 3, 1, 2, 1, 4, 1, 2, 1, 3, 1, 2, 1, 5 и так далее. Заметим, что мы запускаем программу каждый -й раз, а потому, если программа завершается за шагов, то совершит не больше шагов до момента завершения на входе в программе .После того, как программа
остановилась, на её месте будем запускать программу , где - значение, которое вернула . Причем совершит не больше шагов до завершения программы , так как и она запускается каждый -й раз. Если вернула , то возвратим , так как — нужный сертификат для , а если , то ничего на этом месте больше запускать не будем.Осталось доказать, что данная программа действительно удовлетворяет пунктам 1 и 2 теоремы Левина.
- Так как программа возвращает только те , для которых , то получиться не может. Покажем, что и зависнуть на словах из языка не может. Как выше уже упоминалось, если слово принадлежит языку , то для него есть сертификат, а значит есть и программа , которая, например, просто этот сертификат возвращает. Так как все программы рано или поздно будут занумерованы, то и будет занумерована, а следовательно и запущена. После остановки и проверки правильности программа вернет его.
- Если программа правильно находит сертификаты для слов из языка и завершается за шагов для некоторого слова из , то программа завершится не более, чем за шагов для этого же слова. Заметим, что , так как — сертификат для и потому .
Теорема доказана.