Можно доказать, что DSPACE ( ф( 32н ) ) ≠ DSPACE( ф( н ) )еслиерастет хотя бы линейно, используя простой вариант стандартного аргумента заполнения. Для языкаLпустьL'= { х 0| х | / 2∣ x ∈ L }.
Запрос. L ∈ DSPACE (f(n)) тогда и только тогда, когда L′∈ DSPACE (f(23n))еслиf(n)≥32n.
(Мой первый ответ содержал несколько неправильных утверждений, спасибо Эмилю за то, что он это заметил.)
Сначала я покажу, как использовать утверждение, чтобы доказать иерархию. Поскольку f растет хотя бы линейно, имеем DSPACE (2f(n))⊂ DSPACE (f(2n)) . Возьмем язык L∈ DSPACE (f(2n))∖ DSPACE (f(n)) . Используя утверждение, L′∈ DSPACE (f(43n))= DSPACE(f(n)), где последнее равенство является косвенным предположением. Но тогдаL∈DSPACE(f(32n))= DSPACE(f(n)), где последнее равенство снова по косвенному предположению, что дает противоречие.
Доказательство претензии.
Если L′∈ DSPACE (f(23n)), то для доказательстваL∈DSPACE(f(n))нам просто нужно написать|x|/20 до конца вводаxи моделируют машину, которая принялаL′. Посколькуf(n)≥32n, это не увеличит пространство, которое мы используем. (На самом деле, зная, сколько писать 0, совсем не ясно, еслиfмало и мы не можем увеличить размер алфавита - вместо этого мы можем использовать другую ленту и записать на нее все, что будет после концаx.)
Другое направление - это просто, заменяя 0 на *, если нам разрешено писать *. (См. Проблемы с этим в моем комментарии к вопросу.) Если нам не разрешено писать звезды, мы слегка модифицируем определение L′ как L′={x10|x|/2∣x∈L} . Теперь вместо записи звезд мы сохраняем исходный ввод x10|x|/2и работать с этим. Но когда мы достигаем 1, мы идем вправо, пока не нажмем еще 1, чтобы проверить, был ли это конец слова 1 или нет. Если мы нашли еще одну 1, мы просто вернемся к нашей 1. Если мы не нашли, мы все еще вернемся, но мы будем знать, что ее следует рассматривать как звезду - если мы будем писать на ней, то мы также пишем 10 после него, чтобы иметь новый маркер конца текущего слова. (На самом деле, в этой части также есть небольшая загвоздка, если f мало - как мы можем проверить, имеет ли вход форму x10|x|/2 ? Без уничтожения ввода я могу решить эту проблему, используя несколько головок для малого f .)