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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Примеры)
(Примеры)
Строка 24: Строка 24:
  
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
 
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :
  <tex>p_A(p_X)</tex> <font color="green"> // <tex>p_A</tex> {{---}} полуразрешитель, так как <tex>X</tex> {{---}} перечислимый язык в общем случае</font>
+
  <tex>p_A(p_X)</tex>  
 
   '''return''' <tex>L(p_X) \in A</tex>
 
   '''return''' <tex>L(p_X) \in A</tex>
  
 
Псевдокод полуразрешителя для языка свойства из первого примера:
 
Псевдокод полуразрешителя для языка свойства из первого примера:
  <tex>p_A(p_X)</tex>
+
  <tex>p_A(p_X)</tex> <font color="green"> // <tex>X</tex> {{---}} перечислимый язык в общем случае, поэтому <tex>p_A</tex> {{---}} полуразрешитель (по [[Теорема Райса-Шапиро |теореме Райса-Шапиро]])</font>
 
   '''return''' <tex>p_X</tex>('hello')
 
   '''return''' <tex>p_X</tex>('hello')
  

Версия 21:42, 22 декабря 2014

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

Рассмотрим множество всех перечислимых языков [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]\triangleright[/math]

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

Предположим, что [math]A[/math] разрешимо и нетривиально, [math]p_A[/math] — программа, разрешающая [math]A[/math].

Не умаляя общности, можно считать, что [math]\varnothing \notin A[/math] (в противном случае перейдём к [math] \mathrm {RE} \setminus A[/math], которое также будет разрешимым и нетривиальным, так как [math] \mathrm {RE} \setminus A \neq \varnothing [/math] и [math] \mathrm {RE} \setminus A \neq \mathrm {RE} ) [/math].

Поскольку [math]A[/math] непусто, то найдётся перечислимый язык [math]X \in A[/math]. Пусть [math]p_X[/math] — полуразрешитель [math]X[/math].

Рассмотрим вспомогательную программу: [math] U(i,x)[/math] универсальная функция

Тогда для произвольных [math]i[/math] и [math] x [/math] можем написать такую программу.

[math]g_{i,x}(y):[/math]
 if [math]U(i, x)[/math] == 1  
    return [math]p_X(y)[/math]
 else
    while true

Нетрудно понять, что в разумной модели вычислений номер этой программы можно вычислить по данным [math]i[/math] и [math]x[/math]. Значит, можно рассмотреть такую программу:

[math]US(\langle i, x \rangle )[/math]
  return [math]p_A ( g_{i,x} ) [/math]

Заметим, что [math] L(g_{i,x}) = \begin{cases} X, & U(i, x) = 1; \\ \varnothing, & U(i, x) \neq 1; \\ \end{cases} [/math]

Исключение пустого множества нам нужно чтобы различать [math] X[/math] и пустое.

Следовательно,
[math] 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} [/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.