Теорема Бермана — Форчуна
| Лемма (1): |
| Доказательство: |
|
Пусть . Тогда и . Рассмотрим произвольный язык . Тогда . Так как , то , следовательно . Получили, что и . Значит . В обратную сторону доказательство аналогично. |
| Определение: |
| . |
| Лемма (2): |
| Доказательство: |
| , то есть . Тогда по лемме 1 . |
| Определение: |
| полином . |
| Теорема (Махэни, light): |
| Доказательство: |
|
Пусть существует . Разрешим за полином. Для начала напишем программу, разрешающую : if return if return 0 if return 1 return Ответом будет . Так как и , то , то есть . Поэтому, если в предыдущей программе заменить все обращения к , на , то полученная программа по прежнему будет разрешать . Оценим необходимый размер . Можно считать, что , где , а — монотонно возрастающий полином. Тогда . Так как , то , где — полином. Тогда размер можно оценить сверху: , где — полином. if //(1) return if return 0 if return 1 //(2) if exit return Рассмотрим двоичное дерево, получающееся в результате рекурсивных вызовов данной программы. Рассмотрим произвольный элемент . Найдем, сколько раз условие в ходе выполнения программы является ложным при обращении к элементу . Найдем в дереве такой узел, в котором есть обращение к , а в его поддереве обращений к этому элементу нет, причем . До этого момента количество обращений к не превышает глубины найденного узла, что не превосходит высоты дерева, что не превосходит некоторого полинома . После этого момента условие будет принимать истинное значение при обращении к . Значит, в ходе выполнения программы условие является ложным при обращении к не более раз. Так как всего в не более элементов, то суммарно за все время выполнения программы условие принимает ложное значение не более раз, то есть — полином. Отсюда следует, что присваивание выполняется не более раз, а значит в дереве не более внутренних вершин. Значит всего в дереве не более вершин, то есть данная программа работает за полиномиальное время. Итого, данная программа разрешает за полиномиальное время. Значит , откуда . |