Примеры неразрешимых задач: проблема соответствий Поста — различия между версиями
Строка 44: | Строка 44: | ||
* <tex>c_{n+1} = \$</tex>; | * <tex>c_{n+1} = \$</tex>; | ||
* <tex>d_{n+1} = \#\$</tex>. | * <tex>d_{n+1} = \#\$</tex>. | ||
+ | |||
{{Лемма | {{Лемма | ||
Строка 91: | Строка 92: | ||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | где <tex> | + | Теперь покажем как свести универсальный язык к МПСП. |
+ | {{Определение | ||
+ | |definition= | ||
+ | Назовём '''снимком''' состояния МТ строку вида <tex>c_1 c_2 \ldots c_k \#_p c_{k+1} \ldots c_t</tex>, где <tex>c_1 c_2 \ldots c_t</tex> — строка на ленте, за исключением бесконечных последовательностей пробелов слева и справа, <tex>p</tex> — текущее состояние автомата МТ, головка расположена справа от <tex>\#_p</tex>. | ||
+ | }} | ||
+ | Построим списки <tex>A</tex> и <tex>B</tex> таким образом, чтобы решение МПСП образовывало строку | ||
− | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_n \$ snap_{n_{-1}} \$ snap_{n_{-2}} \$ \ldots \$ \#_{yes} \$ \$</tex>, | |
− | <tex> | + | где <tex>snap_i</tex> — снимки последовательных состояний МТ от стартового до конечного, <tex>snap_{n_{-t}}</tex> — последний снимок с <tex>t</tex> удалёнными символами, а <tex>\$</tex> - символ, не принадлежащий алфавиту ленты и алфавиту входных слов. Оговоримся, что отвергающего состояния <tex>no</tex> в автомате МТ не существует, а допуск происходит при попадании в состояние <tex>yes</tex>. |
− | + | Сформируем списки <tex>A</tex> и <tex>B</tex> по МТ <tex>M</tex> и входной строке <tex>w</tex>. Будем добавлять пары цепочек в эти списки по следующим правилам: | |
− | <tex>a_i = c</tex>, <tex>b_i = c</tex>, | + | :1. <tex>a_1 = \$ \#_{start} w \$ </tex>, <tex>b_1 = \$</tex>. По определению МПСП эта пара всегда будет первой в любом решении. |
+ | :2. <tex>a_i = c</tex>, <tex>b_i = c</tex> для всех символов <tex>c</tex> алфавита ленты. | ||
+ | :3. <tex>a_i = \$</tex>, <tex>b_i = \$</tex>. | ||
+ | :4. <tex>a_i = \#_q e d</tex>, <tex>b_i = e \#_p c</tex> для всех правил <tex>M</tex> вида <tex>\delta (p, c) = \langle q, d, \leftarrow \rangle</tex> и для всех символов алфавита <tex>e</tex>. | ||
+ | :5. <tex>a_i = d \#_q</tex>, <tex>b_i = \#_p c</tex> для всех правил <tex>M</tex> вида <tex>\delta (p, c) = \langle q, d, \rightarrow \rangle</tex>. | ||
+ | :6. <tex>a_i = \#_q d</tex>, <tex>b_i = \#_p c</tex> для всех правил <tex>M</tex> вида <tex>\delta (p, c) = \langle q, d, \downarrow \rangle</tex>. | ||
− | а | + | Заметим, что все элементы <tex>A</tex> и <tex>B</tex>, кроме первых, имеют одинаковую длину. Значит, строка, составленная из элементов <tex>A</tex>, всегда оказывается длиннее. Если представить процесс формирования решения МПСП как динамический, то строка из элементов <tex>B</tex> вынуждена постоянно "догонять" первую. Более того, можно заметить, что вторая строка всегда будет отставать ровно на один снимок. Действительно, первая пара из списков <tex>A</tex> и <tex>B</tex> задает это отставание. Затем при помощи элементов из правил <tex>4</tex>, <tex>5</tex> и <tex>6</tex> мы имитируем переход машины Тьюринга, добавляя во вторую строку то состояние и положение головки, которые были до перехода, а в первую строку - то состояние, положение головки и новый ленточный символ, которые стали после перехода. Нетрудно заметить, что тем самым строка составленная из элементов списка <tex>B</tex> будет соответствовать строке из элементов списка <tex>A</tex>, но с отставанием на один переход. Далее с помощью элементов из правил <tex>2</tex> и <tex>3</tex> мы допишем в обе строки одинаковые суффиксы текущего снимка, разделитель <tex>\$</tex> и префикс нового снимка до следующего перехода машины Тьюринга. Таким образом если первая строка равна |
− | <tex> | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_n \$</tex>, |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
то вторая будет равна | то вторая будет равна | ||
− | <tex>\$ | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_{n-1} \$</tex>, |
а через несколько шагов они изменятся на | а через несколько шагов они изменятся на | ||
− | <tex>\$ | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_n \$ snap_{n+1} \$</tex> |
и | и | ||
− | <tex>\$ | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_{n-1} \$ snap_n \$</tex>, |
соответственно. | соответственно. | ||
− | + | Теперь стоит новая задача — получить равные строки, если состояние <tex>\#_{yes}</tex> достижимо. Для этого добавим в уже имеющиеся последовательности элементы по следующим правилам: | |
− | для всех символов <tex>c</tex> алфавита ленты: | + | :7. <tex>a_i = \#_{yes}</tex>, <tex>b_i = \#_{yes} c</tex>, для всех символов <tex>c</tex> алфавита ленты. |
+ | :8. <tex>a_i = \#_{yes}</tex>, <tex>b_i = c \#_{yes}</tex>, для всех символов <tex>c</tex> алфавита ленты. | ||
+ | :9. <tex>a_i = \$'</tex>, <tex>b_i = \#_{yes} \$ \$'</tex>. | ||
− | <tex> | + | Если состояние <tex>yes</tex> недостижимо, в первой строке никогда не будет символа <tex>\#_{yes}</tex>, и ни одним из новых элементов воспользоваться не удастся. Значит, строки всегда будут иметь различную длину. |
− | <tex> | + | Если же допускающее состояние встретится, то "съедая" по одному символу с помощью элементов правил <tex>7</tex> и <tex>8</tex> и копируя все остальные с помощью элементов из правил <tex>2</tex> и <tex>3</tex> можно будет привести строки к виду |
− | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_n \$ snap_{n_{-1}} \$ snap_{n_{-2}} \$ \ldots \$ \#_{yes} \$</tex> | |
− | + | и | |
− | |||
− | |||
− | |||
− | |||
− | <tex>\$ | + | <tex>\$ snap_1 \$ snap_2 \$ \ldots \$ snap_n \$ snap_{n_{-1}} \$ snap_{n_{-2}} \$ \ldots \$ </tex>. |
− | + | И наконец, с помощью элементов из правила <tex>9</tex> сравняем строки. | |
− | |||
− | |||
=== Пример === | === Пример === | ||
Строка 177: | Строка 160: | ||
из <tex>yes</tex> переходов нет. | из <tex>yes</tex> переходов нет. | ||
− | + | Списки <tex>A</tex> и <tex>B</tex> для строки <tex>ab</tex> будут сформированы следующим образом: | |
{|class="wikitable" style="text-align: center" | {|class="wikitable" style="text-align: center" | ||
|- | |- | ||
! Номер элемента | ! Номер элемента | ||
− | ! | + | ! Список A |
− | ! | + | ! Список B |
|- | |- | ||
|1 | |1 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$</tex> |
− | |<tex>\$ | + | |<tex>\$</tex> |
|- | |- | ||
|2 | |2 | ||
Строка 241: | Строка 224: | ||
|align="center" | 1 | |align="center" | 1 | ||
|align="center" | 1 | |align="center" | 1 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$</tex> |
− | |<tex>\$ | + | |<tex>\$</tex> |
|- | |- | ||
|align="center" | 2 | |align="center" | 2 | ||
|align="center" | 5 | |align="center" | 5 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start}</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} a</tex> |
|- | |- | ||
|align="center" | 3 | |align="center" | 3 | ||
|align="center" | 3 | |align="center" | 3 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab</tex> |
|- | |- | ||
|align="center" | 4 | |align="center" | 4 | ||
|align="center" | 4 | |align="center" | 4 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$</tex> |
|- | |- | ||
|align="center" | 5 | |align="center" | 5 | ||
|align="center" | 3 | |align="center" | 3 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b</tex> |
|- | |- | ||
|align="center" | 6 | |align="center" | 6 | ||
|align="center" | 6 | |align="center" | 6 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b</tex> |
|- | |- | ||
|align="center" | 7 | |align="center" | 7 | ||
|align="center" | 4 | |align="center" | 4 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$</tex> |
|- | |- | ||
|align="center" | 8 | |align="center" | 8 | ||
|align="center" | 8 | |align="center" | 8 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$ \#_{yes}</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes}</tex> |
|- | |- | ||
|align="center" | 9 | |align="center" | 9 | ||
|align="center" | 3 | |align="center" | 3 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$ \#_{yes} b</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b</tex> |
|- | |- | ||
|align="center" | 10 | |align="center" | 10 | ||
|align="center" | 4 | |align="center" | 4 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$ \#_{yes} b \$</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b \$</tex> |
|- | |- | ||
|align="center" | 11 | |align="center" | 11 | ||
|align="center" | 10 | |align="center" | 10 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$ \#_{yes} b \$ \#_{yes}</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b \$ \#_{yes} b</tex> |
|- | |- | ||
|align="center" | 12 | |align="center" | 12 | ||
|align="center" | 4 | |align="center" | 4 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b\$ b \#_{yes} b \$ \#_{yes} b \$ \#_{yes} \$</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b \$ \#_{yes} b \$</tex> |
|- | |- | ||
|align="center" | 13 | |align="center" | 13 | ||
|align="center" | 11 | |align="center" | 11 | ||
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b \$ \#_{yes} b \$ \#_{yes} \$ \$'</tex> |
− | |<tex>\$ | + | |<tex>\$ \#_{start} ab \$ b \#_{start} b \$ b \#_{yes} b \$ \#_{yes} b \$ \#_{yes} \$ \$'</tex> |
|} | |} | ||
+ | {{Лемма | ||
+ | |statement= | ||
+ | Универсальный язык сводится к МПСП. | ||
+ | |proof= | ||
+ | Из определения [[M-сводимость|m-сведения]] следует, что мы должны доказать, что машина Тьюринга <tex>M</tex> допускает <tex>w</tex> тогда и только тогда, когда построенный экземпляр МПСП имеет решение. | ||
+ | <tex>\Rightarrow</tex> | ||
+ | Если <tex>w</tex> допускается <tex>M</tex>, то можно проимитировать работу <tex>M</tex> со входом <tex>w</tex> и, как показано в примере выше, получить равные строки из элементов списков <tex>A</tex> и <tex>B</tex>. То есть найти решение МПСП. | ||
− | + | <tex>\Leftarrow</tex> | |
+ | |||
+ | Поскольку все решения МПСП должны начинаться с первой пары, то длина соответствующих строк будет различаться, и, как было сказано выше, если в первой строке никогда не будет символа <tex>\#_{yes}</tex>, то "сравнять" строки по длине не удастся. Значит, если МПСП имеет решение, то символ <tex>\#_{yes}</tex> рано или поздно появится. А значит и машина Тьюринга допустит <tex>w</tex>. | ||
+ | |||
+ | }} | ||
+ | |||
+ | {{Теорема | ||
+ | |statement= | ||
+ | ПСП не разрешима. | ||
+ | |proof= | ||
+ | Скомбинировав обе леммы, мы сведем универсальный язык к языку ПСП, а так как универсальный язык неразрешим, то и ПСП - неразрешима. | ||
}} | }} | ||
Версия 00:41, 21 января 2014
Проблема соответствий Поста - один из основных примеров неразрешимой задачи, использующийся для доказательства неразрешимости многих других задач.
Содержание
Основные определения
Определение: |
Даны два конечных списка | и , где и для всех . Вопрос существования непустой последовательности индексов , удовлетворяющей условию , где для всех j, называется проблемой соответствий Поста (ПСП) (англ. Post correspondence problem). Такую последовательность индексов, в случае её существования, называют решением проблемы соответствий Поста.
Определение: |
Проблема соответствий Поста, для которой фиксирован элемент последовательности индексов | , называется модифицированной проблемой соответствий Поста (МПСП).
Перечислимость языка ПСП
Теорема: |
Язык пар последовательностей, для которых существует решение ПСП, перечислим. |
Доказательство: |
Для списков и размера из условия ПСП построим программу-полуразрешитель , проверяющую все возможные решения:forТаким образом, язык пар последовательностей, для которых существует решение ПСП, полуразрешим, а значит, перечислим. for all if return true |
Для МПСП доказательство перечислимости имеющих решение пар аналогично, но перебор индексов ведётся с
.Неразрешимость языка ПСП
Докажем неразрешимость языка ПСП следующим образом. Докажем, что универсальный язык сводится к языку МПСП, который в свою очередь сводится к языку ПСП.
Для начала покажем как свести МПСП к ПСП.
Пусть даны списки
и из условия МПСП. Построим два новых списка и и рассмотрим ПСП для них. Для этого введем два новых символа, которые не используются в словах из цепочек и . Пусть для определенности это будут символы и .Тогда сформируем два новых списка
по следующим правилам:- Для всех возьмем равное слову с символом после каждого его символа. Например, для положим ;
- Для всех возьмем равное слову с символом перед каждым его символом. Например, для положим ;
- ;
- ;
- ;
- .
Лемма: |
МПСП для пары списков сводится к ПСП для пары списков . |
Доказательство: |
Из определения m-сведения следует, что мы должны доказать равносильность наличия решения для построенных экземпляров МПСП и ПСП.
Пусть набор индексов - решение МПСП из условия леммы. То есть , где, . Рассмотрев цепочки и c аналогичными индексами, заметим, что мы имеем почти равные цепочки с той лишь разницей, что первой не хватает символа в начале, а второй - в конце. Конкретно,. Изменив первый индекс с на , решим проблему с символом в начале. Добавив индекс к набору, решим проблему с символом в конце.. Итого, если - решение исходной МПСП, то - решение построенной по правилам выше ПСП.
В любом существующем решении ПСП для списков должны выполняться условия:
Пусть последовательность является решением ПСП. Иными словами,. Если — наименьший индекс, равный , то , — префиксы исходных конкатенаций до первого символа , следовательно, равны между собой. Последовательность — также решение ПСП, причём первый индекс равен и . Остальные индексы не превосходят , но и не равны , иначе в левой части равенства образуется подстрока из двух подряд, а в правой её не может быть. Учитывая эти ограничения, перепишем получившееся равенство:. Оставив из этих двух строк символы, стоящие на чётных позициях, и удалив с конца , получимИтого, если . - решение ПСП, то - решение исходной МПСП. |
Теперь покажем как свести универсальный язык к МПСП.
Определение: |
Назовём снимком состояния МТ строку вида | , где — строка на ленте, за исключением бесконечных последовательностей пробелов слева и справа, — текущее состояние автомата МТ, головка расположена справа от .
Построим списки
и таким образом, чтобы решение МПСП образовывало строку,
где
— снимки последовательных состояний МТ от стартового до конечного, — последний снимок с удалёнными символами, а - символ, не принадлежащий алфавиту ленты и алфавиту входных слов. Оговоримся, что отвергающего состояния в автомате МТ не существует, а допуск происходит при попадании в состояние .Сформируем списки
и по МТ и входной строке . Будем добавлять пары цепочек в эти списки по следующим правилам:- 1. , . По определению МПСП эта пара всегда будет первой в любом решении.
- 2. , для всех символов алфавита ленты.
- 3. , .
- 4. , для всех правил вида и для всех символов алфавита .
- 5. , для всех правил вида .
- 6. , для всех правил вида .
Заметим, что все элементы
и , кроме первых, имеют одинаковую длину. Значит, строка, составленная из элементов , всегда оказывается длиннее. Если представить процесс формирования решения МПСП как динамический, то строка из элементов вынуждена постоянно "догонять" первую. Более того, можно заметить, что вторая строка всегда будет отставать ровно на один снимок. Действительно, первая пара из списков и задает это отставание. Затем при помощи элементов из правил , и мы имитируем переход машины Тьюринга, добавляя во вторую строку то состояние и положение головки, которые были до перехода, а в первую строку - то состояние, положение головки и новый ленточный символ, которые стали после перехода. Нетрудно заметить, что тем самым строка составленная из элементов списка будет соответствовать строке из элементов списка , но с отставанием на один переход. Далее с помощью элементов из правил и мы допишем в обе строки одинаковые суффиксы текущего снимка, разделитель и префикс нового снимка до следующего перехода машины Тьюринга. Таким образом если первая строка равна,
то вторая будет равна
,
а через несколько шагов они изменятся на
и
,
соответственно.
Теперь стоит новая задача — получить равные строки, если состояние
достижимо. Для этого добавим в уже имеющиеся последовательности элементы по следующим правилам:- 7. , , для всех символов алфавита ленты.
- 8. , , для всех символов алфавита ленты.
- 9. , .
Если состояние
недостижимо, в первой строке никогда не будет символа , и ни одним из новых элементов воспользоваться не удастся. Значит, строки всегда будут иметь различную длину.Если же допускающее состояние встретится, то "съедая" по одному символу с помощью элементов правил
и и копируя все остальные с помощью элементов из правил и можно будет привести строки к виду
и
.
И наконец, с помощью элементов из правила
сравняем строки.Пример
Пусть автомат МТ состоит из двух состояний
и , алфавит ленты содержит символы и . Переходы автомата устроены следующим образом:;
;
из
переходов нет.Списки
и для строки будут сформированы следующим образом:Номер элемента | Список A | Список B |
---|---|---|
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
11 |
Решение МПСП будет иметь следующий вид:
Шаг | Индекс элемента | Первая строка | Вторая строка |
---|---|---|---|
1 | 1 | ||
2 | 5 | ||
3 | 3 | ||
4 | 4 | ||
5 | 3 | ||
6 | 6 | ||
7 | 4 | ||
8 | 8 | ||
9 | 3 | ||
10 | 4 | ||
11 | 10 | ||
12 | 4 | ||
13 | 11 |
Лемма: |
Универсальный язык сводится к МПСП. |
Доказательство: |
Из определения m-сведения следует, что мы должны доказать, что машина Тьюринга допускает тогда и только тогда, когда построенный экземпляр МПСП имеет решение.
Если допускается , то можно проимитировать работу со входом и, как показано в примере выше, получить равные строки из элементов списков и . То есть найти решение МПСП.Поскольку все решения МПСП должны начинаться с первой пары, то длина соответствующих строк будет различаться, и, как было сказано выше, если в первой строке никогда не будет символа , то "сравнять" строки по длине не удастся. Значит, если МПСП имеет решение, то символ рано или поздно появится. А значит и машина Тьюринга допустит . |
Теорема: |
ПСП не разрешима. |
Доказательство: |
Скомбинировав обе леммы, мы сведем универсальный язык к языку ПСП, а так как универсальный язык неразрешим, то и ПСП - неразрешима. |
Источники
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2008. — С. 528. — ISBN 5-8459-1347-0
- Post correspondence problem - Wikipedia