Теорема Бермана — Форчуна
Версия от 19:10, 4 сентября 2022; Maintenance script (обсуждение | вклад) (rollbackEdits.php mass rollback)
Лемма (1): |
Язык является -полным тогда и только тогда, когда является -полным (то есть ). |
Доказательство: |
Пусть — -полный. Тогда и .Рассмотрим произвольный язык лемме). . Тогда . Так как — -полный, то , следовательно (поПолучили, что В обратную сторону доказательство аналогично. и . Значит . |
Определение: |
— булева формула . |
Лемма (2): |
. |
Доказательство: |
, то есть . Кроме того, в качестве сертификата используется , на котором . Значит . Тогда по лемме (1) . |
Определение: |
полином . |
Теорема (Берман, Форчун): |
. |
Доказательство: |
Пусть существует . Разрешим за полином.Для начала напишем программу, разрешающую :: if return 0 if return 1 if return return Ответом будет .Так как и , то , то есть . Поэтому, если в предыдущей программе заменить все обращения к , на , то полученная программа по-прежнему будет разрешать .Оценим необходимый размер . Можно считать, что , где , а — монотонно возрастающий полином. Тогда . Так как , то , где — полином. Можно считать, что монотонно возрастает. Тогда размер (число слов длины не более в языке) можно оценить сверху: , где — полином.: if exit 0 if return 1 if //(1) return //(2) if exit return Рассмотрим двоичное дерево, получающееся в результате рекурсивных вызовов данной программы. Рассмотрим произвольный элемент . Найдем, сколько раз условие в ходе выполнения программы является ложным при обращении к элементу . Найдем в дереве такой узел, в котором есть обращение к , а в его поддереве обращений к этому элементу нет, причем . До этого момента количество обращений к не превышает глубины найденного узла, что не превосходит высоты дерева, что не превосходит некоторого полинома . После этого момента условие будет принимать истинное значение при обращении к . Значит, в ходе выполнения программы условие является ложным при обращении к не более раз.Так как всего в Итого, данная программа разрешает не более элементов, то суммарно за все время выполнения программы условие принимает ложное значение не более раз, то есть — полином. Отсюда следует, что присваивание выполняется не более раз, а значит в дереве не более внутренних вершин. Значит всего в дереве не более вершин, то есть данная программа работает за полиномиальное время. за полиномиальное время. А так как , то , то есть , откуда . |