Итак, ваша цель - показать, что на основе (мы не не будем указывать, что именно это за классы, мы просто знаем, что они как-то параметризованы с размером ввода). У нас есть язык , решил какой - то алгоритм . Теперь мы создаем язык , добавляя каждое слово в , так что его длина теперь равна , и мы видим, что оно содержится в (наш новый алгоритм основном просто игнорирует добавленные нули и запускает на реальном, коротком входе).C L A S S 1 [ g ( n ) ] = C L A S S 2 [ h ( n ) ] L ∈ C L AСL A SS1[ г( ф( n ) ) ] = CL A SS2[ ч ( ф( н ) ) ]СL A SS1[ г( n ) ] = CL A SS2[ ч ( н ) ]A L ′ x ∈ L f ( n ) C L A S S 1 [ g ( n ) ] A ′ AL ∈ CL A SS1[ г( ф( н ) ) ]AL'x∈Lf(n)CLASS1[g(n)]A′A
Что мы делаем: мы берем язык из более крупного класса и дополняем его, чтобы он мог быть решен с помощью более слабого алгоритма, дающего нам сдерживание в меньшем классе - более слабый алгоритм может сделать это, потому что он имеет такое же количество «настоящая работа», как и прежде, но ее ограничения (являющиеся функцией длины ввода) снимаются путем расширения ввода.
Теперь мы знаем, что и, следовательно, (определяется по некоторому алгоритму ). Мы бы хотели добраться отсюда до . Но это просто - алгоритм решающий просто дополняет ввод соответствующим образом и запускает на дополненном вводе.L ′ ∈ C L A S S 2 [ h ( n ) ] B ′ L ∈ C L A S S 2 [ h ( f ( n ) ) ] B L B ′L′∈CLASS1[g(n)]L′∈CLASS2[h(n)]B′L∈CLASS2[h(f(n))]BLB′
Этот шаг можно резюмировать следующим образом: мы хотим выбрать в большем, более изобретательном классе. Используя наши дополнительные ресурсы, мы дополняем ввод и запускаем алгоритм, определяющий язык дополненияL .
Конечно, здесь есть некоторые технические детали (например, мы должны убедиться, что заполнение может быть реализовано в рассматриваемых нами классах), но я просто игнорирую их, чтобы дать общую интуицию.