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

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 11: Строка 11:
 
|definition='''Язык свойства''' (англ. ''language of property'') <tex> A </tex> {{---}} множество программ, языки которых обладают этим свойством: <tex>L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace </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>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> является [[Разрешимые_(рекурсивные)_языки|разрешимым]].
 
|definition=Свойство <tex> A </tex> называется '''разрешимым''' (англ. ''recursive''), если <tex>L(A) </tex> является [[Разрешимые_(рекурсивные)_языки|разрешимым]].
Строка 31: Строка 25:
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
 
  <tex>p_A(p_X)</tex>  
 
  <tex>p_A(p_X)</tex>  
   '''return''' <tex>p_X \in L(A)</tex>
+
   '''return''' <tex>L(p_X) \in A</tex>
  
 
Псевдокод полуразрешителя для языка свойства из первого примера:
 
Псевдокод полуразрешителя для языка свойства из первого примера:
Строка 41: Строка 35:
 
|statement=
 
|statement=
 
Язык никакого нетривиального свойства <tex>A</tex> не является разрешимым.
 
Язык никакого нетривиального свойства <tex>A</tex> не является разрешимым.
}}
+
|proof=
===Доказательство===
+
Приведём доказательство от противного.
Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм.
+
 
+
Предположим, что <tex>A</tex> разрешимо.
'''Рассмотрим случай, когда <tex>p_\infty \in L(A)</tex>.'''   
 
 
 
Приведём доказательство от противного. Предположим, что <tex>A</tex> разрешимо.
 
  
Рассмотрим язык <tex>S</tex>, такой что <tex> S \in \overline{A}</tex> (такой язык существует, так как <tex>A</tex> {{---}} нетривиально). Тогда  <tex>p_S \in L(\overline{A})</tex>.
+
Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм. Для упрощения предположим, что <tex>p_\infty \in A</tex>. В противном случае доказательство аналогично.
  
Рассмотрим также произвольное перечислимое неразрешимое множество <tex>X</tex>. Пусть <tex>p_X(n)</tex> {{---}} полуразрешитель <tex>X</tex>.
+
Рассмотрим <tex>p_a</tex> {{---}} программу, такую что <tex>a \in \overline A</tex> (такое <tex>a</tex> существует, т.к. А - нетривиально). Рассмотрим также произвольное перечислимое неразрешимое множество <tex>X</tex>. Пусть <tex>p_X(n)</tex> - полуразрешитель <tex>X</tex>.
  
 
Зафиксируем произвольное <tex>n \in \mathbb{N}</tex> и построим следующую функцию  
 
Зафиксируем произвольное <tex>n \in \mathbb{N}</tex> и построим следующую функцию  
<tex>V_n(x) = \begin{cases}
+
<tex>Vn(x) = \begin{cases}
   p_S(x),  n \in X \\
+
   a(x),  n \in X; \\
   p_\infty(x), n \notin X \\
+
   p_\infty(x), n \notin X; \\
 
\end{cases} </tex>
 
\end{cases} </tex>
  
 
<code>
 
<code>
 
  '''function''' <tex>V_n</tex>(x):
 
  '''function''' <tex>V_n</tex>(x):
   '''if''' <tex>p_X</tex>(n) == 1
+
   '''if''' <tex>p_X</tex>(n)
     '''return''' <tex>p_S</tex>(x)
+
     '''return''' <tex>p_a</tex>(x)
 
   '''while''' ''true''
 
   '''while''' ''true''
 
</code>
 
</code>
  
Получили, что если <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>.  
+
Получили, что если <tex>n \in X</tex>, то <tex>Vn(x) \in L(\overline S)</tex>, а если <tex>n \notin X</tex>, то <tex>Vn(x) \in L(S)</tex>. Таким образом, <tex>n \in X \iff V_n(x) \in L(\overline S)</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>\overline S</tex> - разрешимо, то можно проверить для любого <tex>a</tex>, лежит ли оно в <tex>\overline{S}</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>. Опять получили противоречие.
 
  
 
== См. также ==
 
== См. также ==
Строка 106: Строка 70:
 
== Источники информации ==
 
== Источники информации ==
 
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]
 
* [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.
+
* Rice, H. G. "Classes of Recursively Enumerable Sets and Their Decision Problems." Trans. Amer. Math. Soc. 74, 358-366, 1953.
* Хопкрофт Д., Мотванн Р., Ульманн Д. {{---}}Введение в теорию автоматов, языков и вычислений {{---}} стр. 397.
+
* Хопкрофт Д., Мотванн Р., Ульманн Д. Введение в теорию автоматов, языков и вычислений страница 397.
 +
[[Категория: Теория вычислимости]]
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория формальных языков]]
[[Категория: Теория вычислимости]]
 
[[Категория: Разрешимые и перечислимые языки]]
 

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

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

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

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