Изменения

Перейти к: навигация, поиск
Нет описания правки
'''Проблема соответствий Поста''' - один из основных примеров неразрешимой задачи, использующийся для доказательства неразрешимости многих других задач.
 
== Основные определения ==
 
{{Определение
|definition=
Дана упорядоченная пара Даны два конечных последовательностей списка <tex>(A = (a_1, \ldots, a_n), </tex> и <tex>B = (b_1 ,\ldots ,b_n))</tex>, где <tex>a_i \in \Sigma ^*</tex> и <tex>b_i \in \Sigma ^*</tex> для всех <tex>i</tex>. Вопрос существования непустой последовательности индексов <tex>(i_1 , \ldots, i_k)</tex>, удовлетворяющей условию <tex>a_{i_1} \ldots a_{i_k} = b_{i_1} \ldots b_{i_k}</tex>, где <tex>1 \leq i_j \leq n</tex> для каждого всех j, называется '''проблемой соответствий Поста (ПСП)'''(англ. ''Post correspondence problem''). Такую последовательность индексов, в случае её существования, называют '''решением проблемы соответствий Поста'''.
}}
Проблема соответствий Поста, для которой фиксирован элемент последовательности индексов <tex>i_1 = 1</tex>, называется '''модифицированной проблемой соответствий Поста (МПСП)'''.
}}
 
== Перечислимость языка ПСП ==
{{Теорема
Язык пар последовательностей, для которых существует решение ПСП, перечислим.
|proof=
Пусть даны последовательности Для списков <tex>aA</tex> и <tex>bB</tex> размера <tex>n</tex> из условия ПСП. Построим построим программу-полуразрешитель <tex>p</tex>, проверяющую все возможные решения:
for <tex>m = 1 .. \infty</tex>
for all <tex>(i_1, i_2, \ldots, i_m): 1 \leq i_j \leq n</tex>
Для МПСП доказательство перечислимости имеющих решение пар аналогично, но перебор индексов ведётся с <tex>i_2</tex>.
== Неразрешимость языка ПСП == Докажем неразрешимость языка ПСП следующим образом. Докажем, что универсальный язык [[M-сводимость|сводится]] к языку МПСП, который в свою очередь сводится к языку ПСП.  Для начала покажем как свести МПСП к ПСП. Пусть даны списки <tex>A</tex> и <tex>B</tex> из условия МПСП. Построим два новых списка <tex>C</tex> и <tex>D</tex> и рассмотрим ПСП для них. Для этого введем два новых символа, которые не используются в словах из цепочек <tex>A</tex> и <tex>B</tex>. Пусть для определенности это будут символы <tex>\#</tex> и <tex>\$</tex>. Тогда сформируем два новых списка <tex>C, D</tex> по следующим правилам:* Для всех <tex>i = 1 \ldots n</tex> возьмем <tex>c_i</tex> равное слову <tex>a_i</tex> с символом <tex>\#</tex> после каждого его символа. Например, для <tex>a_i = 10zx</tex> положим <tex>c_i = 1\#0\#z\#x\#</tex>;* Для всех <tex>i = 1 \ldots n</tex> возьмем <tex>d_i</tex> равное слову <tex>b_i</tex> с символом <tex>\#</tex> перед каждым его символом. Например, для <tex>b_i = 10zx</tex> положим <tex>d_i = \#1\#0\#z\#x</tex>;* <tex>c_0 = \#c_1</tex>;* <tex>d_0 = d_1</tex>;* <tex>c_{n+1} = \$</tex>;* <tex>d_{Теоремаn+1} = \#\$</tex>. {{Лемма|id=lemma-|statement=МПСП для пары списков <tex>(A, B)</tex> сводится к ПСП для пары списков <tex>(C, D)</tex>.|proof=Из определения [[M-сводимость|m-сведения]] следует, что мы должны доказать равносильность наличия решения для построенных экземпляров МПСП и ПСП. <tex>\Rightarrow</tex> Пусть набор индексов <tex>(1, i_2, \ldots, i_k)</tex> - решение МПСП из условия леммы. То есть <tex>w_A = w_B</tex>, где  <tex>w_A = a_1 a_{i_2} \ldots a_{i_k}</tex>, <tex>w_B = b_1 b_{i_2} \ldots b_{i_k}</tex>. Рассмотрев цепочки <tex>w_C</tex> и <tex>w_D</tex> c аналогичными индексами, заметим, что мы имеем почти равные цепочки с той лишь разницей, что первой не хватает символа <tex>\#</tex> в начале, а второй - в конце. Конкретно, <tex>\# c_1 c_{i_2} \ldots c_{i_k} = d_1 d_{i_2} \ldots d_{i_k} \# </tex>. Изменив первый индекс с <tex>1</tex> на <tex>0</tex>, решим проблему с символом <tex>\#</tex> в начале. Добавив индекс <tex>n+1</tex> к набору, решим проблему с символом <tex>\#</tex> в конце. <tex> c_0 c_{i_2} \ldots c_{i_k} c_{n+1} = d_1 d_{i_2} \ldots d_{i_k} d_{n+1} </tex>. Итого, если <tex>(1, i_2, \ldots, i_k)</tex> - решение исходной МПСП, то <tex>(0, i_2, \ldots, i_k, n+1)</tex> - решение построенной по правилам выше ПСП. <tex>\Leftarrow</tex> В любом существующем решении ПСП для списков <tex>C, D</tex> должны выполняться условия: * <tex>i_1 = 0</tex>, так как только в паре <tex>(c_1, d_1)</tex> первые символы совпадают;* последний индекс равен <tex>n+1</tex>, так как только в паре <tex>(c_{n+1}, d_{n+1})</tex> строки заканчиваются одинаковыми символами. Пусть последовательность <tex>(0, i_2, i_3, \ldots, i_k, n + 1)</tex> является решением ПСП. Иными словами, <tex>c_0 c_{i_2} \ldots c_{i_k} c_{n+1} = d_0 d_{i_2} \ldots d_{i_k} d_{n+1}</tex>. Если <tex>i_f</tex> — наименьший индекс, равный <tex>n+1</tex>, то <tex>c_0 c_{i_2} \ldots c_{i_f}</tex>, <tex>d_0 d_{i_2} \ldots d_{i_f}</tex> — префиксы исходных конкатенаций до первого символа <tex>\$</tex>, следовательно, равны между собой. Последовательность <tex>(0, i_{2} \ldots, i_f)</tex> — также решение ПСП, причём первый индекс равен <tex>0</tex> и <tex>i_f = n + 1</tex>. Остальные индексы не превосходят <tex>n</tex>, но и не равны <tex>0</tex>, иначе в левой части равенства образуется подстрока из двух <tex>\#</tex> подряд, а в правой её не может быть. Учитывая эти ограничения, перепишем получившееся равенство: <tex>\# c_1 c_{i_2} \ldots c_{i_{f-1}}\$</tex> <tex>=</tex> <tex>d_1 d_{i_2} \ldots d_{i_{f-1}} \#\$</tex>. Оставив из этих двух строк символы, стоящие на чётных позициях, и удалив с конца <tex>\$</tex>, получим <tex>a_1 a_{i_2} \ldots a_{i_{f-1}} = b_1 b_{i_2} \ldots b_{i_{f-1}}</tex>. Итого, если <tex>(0, i_2, \ldots, i_k, n+1)</tex> - решение ПСП, то <tex>(1, i_2, \ldots, i_k)</tex> - решение исходной МПСП.}} {{Лемма
|statement=
Универсальный язык сводится к МПСП неразрешима.
|proof=
Выполним [[M-сводимость|m-сведение]] множества пар из машины Тьюринга [[Разрешимые (МТрекурсивные) языки#Пример неразрешимого множества|универсального языка]] к МПСП со списками <tex>MA</tex> и строки <tex>wB</tex>, где <tex>M(w)</tex> не зависает, к множеству решений МПСП.
Назовём '''снимком''' состояния МТ строку вида <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>. Построим последовательности таким образом, чтобы решение МПСП образовывало строку
{{Теорема
|statement=
ПСП неразрешима.
|proof=
Выполним [[M-сводимость|m-сведение]] множества решений МПСП к множеству решений ПСП.
 
Пусть даны последовательности <tex>a, b</tex> из условия МПСП. Обозначим как <tex>left(w, c)</tex> и <tex>right(w, c)</tex> строки, состоящие из символов <tex>w</tex>, разделённых <tex>c</tex>: <tex>left(w, c) = c w_1 c w_2 \ldots c w_k</tex>, <tex>right(w, c) = w_1 c w_2 c \dots w_k c</tex>.
 
Построим две новые последовательности <tex>a', b'</tex>:
* <tex>a'_1 = \$ right(a_1, \$)</tex>, <tex>b'_1 = left(b_1, \$)</tex>;
* <tex>\forall i = 1 .. n</tex>: <tex>a'_{i+1} = right(a_i, \$)</tex>, <tex>b'_{i+1} = left(b_i, \$)</tex>;
* <tex>a'_{n+2} = \#</tex>, <tex>b'_{n+2} = \$ \#</tex>,
где <tex>\$</tex>, <tex>\#</tex> — символы, не встречающиеся в словах исходных последовательностей.
 
{{Лемма
|id=lemma-
|statement=
Существование решения МПСП для <tex>a, b</tex> эквивалентно существованию решения ПСП для <tex>a', b'</tex>.
|proof=
<tex>\Rightarrow</tex>
 
Пусть
 
<tex>w_a = a_1 a_{i_2} \ldots a_{i_k}</tex>,
 
<tex>w_b = b_1 b_{i_2} \ldots b_{i_k}</tex>,
 
<tex>w_a = w_b</tex>. Рассмотрим
 
<tex>w'_a = a'_1 a'_{i_2+1} \ldots a'_{i_k+1} a'_{n+2} = \$ right(a_1, \$) right(a_{i_2}, \$) \ldots right(a_{i_k}, \$) \#</tex>,
 
<tex>w'_b = b'_1 b'_{i_2+1} \ldots b'_{i_k+1} b'_{n+2} = left(b_1, \$) left(b_{i_2}, \$) \ldots left(b_{i_k}, \$) \$ \#</tex>.
 
На чётных позициях в <tex>w'_a</tex> и <tex>w'_b</tex> стоят равные символы из <tex>w_a</tex> и <tex>w_b</tex>, а также <tex>\#</tex> (в конце); на нечётных — <tex>\$</tex>. Следовательно, <tex>w'_a = w'_b</tex>, то есть
 
<tex>a'_1 a'_{i_2+1} \ldots a'_{i_k+1} a'_{n+2} = b'_1 b'_{i_2+1} \ldots b'_{i_k+1} b'_{n+2}</tex>.
 
<tex>\Leftarrow</tex>
 
В любом существующем решении ПСП для <tex>a', b'</tex> должны выполняться условия:
* <tex>i_1 = 1</tex>, так как только в паре <tex>(a'_1, b'_1)</tex> первые символы совпадают;
* последний индекс равен <tex>n+2</tex>, так как только в паре <tex>(a'_{n+2}, b'_{n+2})</tex> строки заканчиваются одинаковыми символами.
 
Пусть
 
<tex>a'_1 a'_{i_2} \ldots a'_{i_k} = b'_1 b'_{i_2} \ldots b'_{i_k}</tex>.
 
Если <tex>i_f</tex> — наименьший индекс, равный <tex>n+2</tex>, то <tex>a'_1 a'_{i_2} \ldots a'_{i_f}</tex>, <tex>b'_1 b'_{i_2} \ldots b'_{i_f}</tex> — префиксы исходных конкатенаций до первого символа <tex>\#</tex>, следовательно, равны между собой. <tex>i_1, \ldots, i_f</tex> — также решение ПСП, причём <tex>i_1 = 1</tex>, <tex>i_f = n + 2</tex>. Остальные индексы не превосходят <tex>n+1</tex>, но и не равны <tex>1</tex>, иначе в левой части равенства образуется подстрока из двух <tex>\$</tex> подряд, а в правой её не может быть. Учитывая эти ограничения, перепишем получившееся равенство:
 
<tex>\$ right(a_1, \$) right(a_{i_2-1}, \$) \ldots right(a_{i_{f-1}-1}, \$) \#</tex> <tex>=</tex> <tex>left(b_1, \$) left(b_{i_2-1}, \$) \ldots left(b_{i_{f-1}-1}, \$) \$ \#</tex>.
 
Оставив из этих двух строк символы, стоящие на чётных позициях, и удалив с конца <tex>\#</tex>, получим
<tex>a_1 a_{i_2-1} \ldots a_{i_{f-1}-1} = b_1 b_{i_2-1} \ldots b_{i_{f-1}-1}</tex>.
}}
По доказанному ранее, МПСП неразрешима. Тогда, вследствие теоремы для m-сведения, ПСП неразрешима.
}}
== Литература Источники ==
* Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2008. — С. 528. — ISBN 5-8459-1347-0
* [http://en.wikipedia.org/wiki/Post_correspondence_problem Post correspondence problem - Wikipedia]
Анонимный участник

Навигация