Редактирование: Свойства перечислимых языков. Теорема Успенского-Райса

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
== Свойства языков ==
 
 
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков <tex> \mathrm {RE} </tex>.
 
{{Определение
 
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество <tex> A \subset \mathrm {RE} </tex>.
 
}}
 
 
{{Определение
 
{{Определение
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если <tex> A = \varnothing </tex> или <tex> A = \mathrm {RE} </tex>.
+
|definition=Рассмотрим множество перечислимых языков <tex>RE</tex>.
}}
+
*Свойством языков называется множество <tex>A \subset RE</tex>.
{{Определение
+
*Свойство <tex>A</tex> называется тривиальным, если <tex>A = \varnothing </tex> или <tex>A = RE</tex>.
|definition='''Язык свойства''' (англ. ''language of property'') <tex> A </tex> {{---}} множество программ, языки которых обладают этим свойством: <tex>L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace </tex>.
+
*Языком свойства называется множество программ, языки которых обладают этим свойством: <tex>L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p | L(p) \in A \rbrace </tex>.
 +
*Свойство <tex>A</tex> называется разрешимым (перечислимым), если <tex>L(A)</tex> разрешимо (перечислимо).
 
}}
 
}}
  
'''Отметим''', что принадлежность программы <tex>p</tex> языку свойства <tex>A</tex> можно выразить двумя эквивалентными утверждениями:
 
:<tex>L(p) \in A</tex>
 
:<tex>p \in L(A)</tex>
 
Далее в конспекте будет употребляться  <tex>p \in L(A)</tex>.
 
 
{{Определение
 
|definition=Свойство <tex> A </tex> называется '''разрешимым''' (англ. ''recursive''), если <tex>L(A) </tex> является [[Разрешимые_(рекурсивные)_языки|разрешимым]].
 
}}
 
=== Примеры ===
 
'''Примеры свойств''':
 
# Язык должен содержать слово ''hello''.
 
# Язык должен содержать хотя бы одно простое число.
 
 
Псевдокод для  разрешителя <tex>L(A)</tex>, где <tex>A = \mathrm {RE}: </tex>
 
<tex>p_A(p_X)</tex> <font color="green"> // <tex>p_X</tex> {{---}} полуразрешитель некоторого языка</font>
 
  '''return''' ''true''
 
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
 
<tex>p_A(p_X)</tex>
 
  '''return''' <tex>p_X \in L(A)</tex>
 
 
Псевдокод полуразрешителя для языка свойства из первого примера:
 
<tex>p_A(p_X)</tex> <font color="green"> // <tex>X</tex> {{---}} перечислимый язык в общем случае, поэтому <tex>p_A</tex> {{---}} полуразрешитель (по [[Теорема Райса-Шапиро |теореме Райса-Шапиро]])</font>
 
  '''return''' <tex>p_X</tex>('hello')
 
 
== Теорема Успенского-Райса ==
 
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
Язык никакого нетривиального свойства <tex>A</tex> не является разрешимым.
+
Никакое нетривиальное свойство языков не является разрешимым.
}}
+
|proof=
===Доказательство===
+
От противного. Предположим, что <tex>A</tex> разрешимо и нетривиально, <tex>p_A</tex> - программа, разрешающая <tex>A</tex>.
Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм.  
 
  
'''Рассмотрим случай, когда <tex>p_\infty \in L(A)</tex>.'''   
+
Не умаляя общности, можно считать, что <tex>\varnothing \notin A</tex> (в противном случае перейдем к <tex>RE \setminus A</tex>, которое также будет разрешимым и нетривиальным).  
  
Приведём доказательство от противного. Предположим, что <tex>A</tex> разрешимо.
+
В то же время, поскольку <tex>A</tex> непусто, найдется перечислимый язык <tex>X \in A</tex>. Пусть <tex>p_X</tex> - полуразрешитель <tex>X</tex>.
  
Рассмотрим язык <tex>S</tex>, такой что <tex> S \in \overline{A}</tex> (такой язык существует, так как <tex>A</tex> {{---}} нетривиально). Тогда  <tex>p_S \in L(\overline{A})</tex>.
+
Рассмотрим вспомогательную программу:
 +
<tex>g_{i,x}(y)</tex>
 +
  if U(i, x) = 1
 +
    return <tex>p_X(y)</tex>
 +
  else
 +
    зависнуть
  
Рассмотрим также произвольное перечислимое неразрешимое множество <tex>X</tex>. Пусть <tex>p_X(n)</tex> {{---}} полуразрешитель <tex>X</tex>.
+
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным <tex>i,x</tex>. Значит, можно рассмотреть такую программу:
 +
<tex>US(\langle i, x \rangle )</tex>
 +
    return <tex>p_A ( g_{i,x} ) </tex>
  
Зафиксируем произвольное <tex>n \in \mathbb{N}</tex> и построим следующую функцию
+
Заметим, что
<tex>V_n(x) = \begin{cases}
+
<tex>
   p_S(x),  n \in X \\
+
L(g_{i,x}) = \begin{cases}
   p_\infty(x), n \notin X \\
+
   X & U(i, x) = 1 \\
\end{cases} </tex>
+
   \varnothing & U(i, x) \neq 1 \\
 +
\end{cases}
 +
</tex>
  
<code>
+
Следовательно, <br/> <tex>  
'''function''' <tex>V_n</tex>(x):
+
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}
  '''if''' <tex>p_X</tex>(n) == 1
+
  p_A(p_X) & U(i, x) = 1 \\
    '''return''' <tex>p_S</tex>(x)
+
   p_A(p_\varnothing ) & U(i, x) \neq 1 \\
  '''while''' ''true''
+
\end{cases} = \begin{cases}
</code>
+
   1 & U(i, x) = 1 \\
 
+
   0 & U(i, x) \neq 1 \\
Получили, что если <tex>n \in X</tex>, то <tex>V_n \in L(\overline A)</tex>, а если <tex>n \notin X</tex>, то <tex>V_n \in L(A)</tex>. Таким образом, <tex>n \in X \iff V_n \in L(\overline A)</tex>.
+
\end{cases}
 
+
</tex> - программа, разрешающая универсальное множество. Противоречие.
Так как <tex>\overline A</tex> {{---}} разрешимо, то можно проверить для любого <tex>V_n</tex>, лежит ли оно в <tex>L(\overline{A})</tex>. Но это тоже самое, что и проверка <tex>n \in X</tex>. Тогда можно для каждого <tex>n</tex> проверить, лежит ли оно в <tex>X</tex>, а следовательно и построить разрешитель для <tex>X</tex>. Так как <tex>X</tex> {{---}} неразрешимо, получили противоречие.
+
}}
 
 
'''Теперь рассмотрим случай, когда <tex>p_\infty \in L(\overline{A})</tex>.'''
 
 
 
Так как <tex>\overline{A}</tex> {{---}} нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, <tex>A</tex> также неразрешимо.
 
===Альтернативное доказательство с использованием теоремы о рекурсии===
 
По [[Теорема о рекурсии | теореме о рекурсии]], программа может знать свой исходный код. Значит, в неё можно написать функцию <tex> \mathrm{getSrc()} </tex>, которая вернёт строку {{---}} исходный код программы.
 
 
 
<tex> A </tex> {{---}} разрешимое семейство языков.
 
 
 
<tex> L_A </tex> {{---}} множество программ, удовлетворяющих св-ву <tex> A </tex>.
 
 
 
Теперь допустим, что язык <tex> L_A </tex> разрешим. Тогда напишем такую программу:
 
 
 
<code>
 
   <tex>propA(code){:}</tex>
 
    // программа, разрешающее свойство языка <tex> A </tex>
 
  <tex>f(x){:}</tex>
 
    // такая программа <tex> f </tex>, что <tex>f \in A </tex>; существует потому что <tex> A </tex> {{---}} нетривиальное свойство
 
   <tex>g(x){:}</tex>
 
    // такая программа <tex> g </tex>, что <tex>g \notin A </tex>; существует потому что <tex> A </tex> {{---}} нетривиальное свойство
 
   <tex>p(x){:}</tex>
 
    '''if''' <tex>propA(\mathrm{getSrc()})</tex>
 
        '''return''' <tex>g(x)</tex>
 
    '''else'''
 
        '''return''' <tex>f(x)</tex>
 
</code>
 
 
 
Если <tex> p </tex> не удовлетворяет свойству <tex> A </tex>, тогда будет выполняться всегда вторая ветка, и <tex> L(p) = L(f) </tex>. Но язык программы <tex> f </tex> принадлежит <tex> A </tex>. Получили противоречие.
 
 
 
Если <tex> p </tex> удовлетворяет свойству <tex> A </tex>, то <tex> L(p) = L(g) </tex>, а <tex> g \notin A </tex>. Опять получили противоречие.
 
 
 
== См. также ==
 
* [[Теорема о рекурсии]]
 
* [[Теорема Райса-Шапиро]]
 
 
 
== Источники информации ==
 
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]
 
* Rice, H. G. {{---}} Classes of Recursively Enumerable Sets and Their Decision Problems." {{---}} Trans. Amer. Math. Soc. 74, 358-366, 1953.
 
* Хопкрофт Д., Мотванн Р., Ульманн Д. {{---}}Введение в теорию автоматов, языков и вычислений {{---}} стр. 397.
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория вычислимости]]
 
[[Категория: Разрешимые и перечислимые языки]]
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: