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

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 38: Строка 38:
 
Приведём доказательство от противного.
 
Приведём доказательство от противного.
 
   
 
   
Предположим, что <tex>A</tex> разрешимо и нетривиально, <tex>p_A</tex> {{---}} программа, разрешающая <tex>A</tex>.
+
Предположим, что <tex>A</tex> разрешимо.
  
Не умаляя общности, можно считать, что <tex>\varnothing \notin A</tex> (в противном случае перейдём к <tex> \mathrm {RE} \setminus A</tex>, которое также будет разрешимым и нетривиальным, так как <tex> \mathrm {RE} \setminus A \neq \varnothing </tex>  и <tex> \mathrm {RE} \setminus A \neq \mathrm {RE} ) </tex>.  
+
Пусть <tex>p_\infty</tex> {{---}} всегда зацикливающийся алгоритм. Для упрощения предположим, что <tex>p_\infty \in A</tex>. В противном случае доказательство аналогично.
  
Поскольку <tex>A</tex> непусто, то найдётся перечислимый язык <tex>X \in A</tex>. Пусть <tex>p_X</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> U(i,x)</tex> {{---}} [[Универсальная функция | универсальная функция]]
+
Зафиксируем произвольное <tex>n \in \mathbb{N}</tex> и построим следующую функцию
 +
<tex>Vn(x) = \begin{cases}
 +
  a(x), n \in X; \\
 +
  p_\infty(x), n \notin X; \\
 +
\end{cases} </tex>
  
Тогда для произвольных <tex>i</tex> и <tex> x </tex> можем написать такую программу.
+
<code>
<tex>g_{i,x}(y):</tex>
+
'''function''' <tex>V_n</tex>(x):
  '''if''' <tex>U(i, x)</tex> == 1 
+
  '''if''' <tex>p_X</tex>(n)
     '''return''' <tex>p_X(y)</tex>
+
     '''return''' <tex>p_a</tex>(x)
  '''else'''
+
  '''while''' ''true''
    '''while''' ''true''
+
</code>
  
Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным <tex>i</tex> и <tex>x</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>US(\langle i, x \rangle )</tex>
+
 
  '''return''' <tex>p_A ( g_{i,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>
 
L(g_{i,x}) = \begin{cases}
 
  X, & U(i, x) = 1; \\
 
  \varnothing, & U(i, x) \neq 1; \\
 
\end{cases}
 
</tex>
 
  
Исключение пустого множества нам нужно чтобы различать <tex> X</tex> и пустое.
 
Следовательно, <br/> <tex>
 
US(\langle i, x \rangle ) = p_A(g_{i,x}) = \begin{cases}
 
  p_A(p_X), &  U(i, x) = 1; \\
 
  p_A(p_\varnothing ), & U(i, x) \neq 1; \\
 
\end{cases} = \begin{cases}
 
  1, & U(i, x) = 1; \\
 
  0, & U(i, x) \neq 1; \\
 
\end{cases}
 
</tex> {{---}} программа, разрешающая [[Универсальная функция | универсальное множество]]. Получили противоречие.
 
 
}}
 
}}
  

Версия 20:54, 20 ноября 2016

Свойства языков

Рассмотрим множество всех перечислимых языков [math] \mathrm {RE} [/math].

Определение:
Свойством языков (англ. property of languages) называется множество [math] A \subset \mathrm {RE} [/math].


Определение:
Свойство называется тривиальным (англ. trivial), если [math] A = \varnothing [/math] или [math] A = \mathrm {RE} [/math].


Определение:
Язык свойства (англ. language of property) [math] A [/math] — множество программ, языки которых обладают этим свойством: [math]L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace [/math].


Определение:
Свойство [math] A [/math] называется разрешимым (англ. recursive), если [math]L(A) [/math] является разрешимым.

Примеры

Примеры свойств:

  1. Язык должен содержать слово hello.
  2. Язык должен содержать хотя бы одно простое число.

Псевдокод для разрешителя [math]L(A)[/math], где [math]A = \mathrm {RE}: [/math]

[math]p_A(p_X)[/math]  // [math]p_X[/math] — полуразрешитель некоторого языка
  return true

Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :

[math]p_A(p_X)[/math] 
  return [math]L(p_X) \in A[/math]

Псевдокод полуразрешителя для языка свойства из первого примера:

[math]p_A(p_X)[/math]  // [math]X[/math] — перечислимый язык в общем случае, поэтому [math]p_A[/math] — полуразрешитель (по теореме Райса-Шапиро)
  return [math]p_X[/math]('hello')

Теорема Успенского-Райса

Теорема:
Язык никакого нетривиального свойства [math]A[/math] не является разрешимым.
Доказательство:
[math]\triangleright[/math]

Приведём доказательство от противного.

Предположим, что [math]A[/math] разрешимо.

Пусть [math]p_\infty[/math] — всегда зацикливающийся алгоритм. Для упрощения предположим, что [math]p_\infty \in A[/math]. В противном случае доказательство аналогично.

Рассмотрим [math]p_a[/math] — программу, такую что [math]a \in \overline A[/math] (такое [math]a[/math] существует, т.к. А - нетривиально). Рассмотрим также произвольное перечислимое неразрешимое множество [math]X[/math]. Пусть [math]p_X(n)[/math] - полуразрешитель [math]X[/math].

Зафиксируем произвольное [math]n \in \mathbb{N}[/math] и построим следующую функцию [math]Vn(x) = \begin{cases} a(x), n \in X; \\ p_\infty(x), n \notin X; \\ \end{cases} [/math]

function [math]V_n[/math](x):
  if [math]p_X[/math](n)
    return [math]p_a[/math](x)
  while true

Получили, что если [math]n \in X[/math], то [math]Vn(x) \in L(\overline S)[/math], а если [math]n \notin X[/math], то [math]Vn(x) \in L(S)[/math]. Таким образом, [math]n \in X \iff V_n(x) \in L(\overline S)[/math].

Так как [math]\overline S[/math] - разрешимо, то можно проверить для любого [math]a[/math], лежит ли оно в [math]\overline{S}[/math]. Но это тоже самое, что и проверка [math]n \in X[/math]. Тогда можно для каждого [math]n[/math] проверить лежит ли оно в [math]X[/math], а следовательно и построить разрешитель для [math]X[/math]. Так как [math]X[/math] - неразрешимо, получили противоречие.
[math]\triangleleft[/math]

См. также

Источники информации

  • 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.