Теорема Райса-Шапиро — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
'''Свойством программ''' называется подмножество перечислимых языков.
+
'''Свойством программ''' (англ. ''property'') называется подмножество перечислимых языков.
 
}}
 
}}
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
'''Образцом''' называется конечное множество слов.
+
'''Образцом''' (англ. ''pattern'') называется конечное множество слов, объединённое определённым общим свойством.
 
}}
 
}}
 
{{Определение
 
{{Определение
Строка 25: Строка 25:
 
Свойство языков <tex>A</tex> перечислимо тогда и только тогда, когда существует перечислимое множество образцов <tex>\Gamma</tex>, такое, что <tex>L</tex> удовлетворяет <tex>A</tex> тогда и только тогда, когда <tex>L</tex> удовлетворяет <tex>\Gamma</tex>.
 
Свойство языков <tex>A</tex> перечислимо тогда и только тогда, когда существует перечислимое множество образцов <tex>\Gamma</tex>, такое, что <tex>L</tex> удовлетворяет <tex>A</tex> тогда и только тогда, когда <tex>L</tex> удовлетворяет <tex>\Gamma</tex>.
 
}}
 
}}
 +
 +
1) <tex>\Rightarrow</tex>
 +
 
Доказательство в одну сторону тривиально: пусть <tex>\Gamma</tex> — перечислимое множество образцов. Будем обозначать за <tex>\Gamma_i</tex> образец с номером <tex>i</tex>, а за <tex>\Gamma_{ij}</tex> — элемент с номером <tex>j</tex> образца с номером <tex>i</tex>. Далее приведён код полуразрешителя <tex>A</tex>, который принимает на вход код полуразрешителя <tex>L</tex> и возвращает значение <tex>L \in A</tex>.
 
Доказательство в одну сторону тривиально: пусть <tex>\Gamma</tex> — перечислимое множество образцов. Будем обозначать за <tex>\Gamma_i</tex> образец с номером <tex>i</tex>, а за <tex>\Gamma_{ij}</tex> — элемент с номером <tex>j</tex> образца с номером <tex>i</tex>. Далее приведён код полуразрешителя <tex>A</tex>, который принимает на вход код полуразрешителя <tex>L</tex> и возвращает значение <tex>L \in A</tex>.
  
A(L)
+
  A(L):
  '''for''' t = 1 '''to''' <tex>\infty</tex>
+
    '''for''' t = 1 '''to''' <tex>\infty</tex>
    '''for''' i = 1 '''to''' t
+
      '''for''' i = 1 '''to''' t
      ok <tex>\leftarrow</tex> true
+
        ok <tex>\leftarrow</tex> true
      '''for''' j = 1 '''to''' <tex>|\Gamma_i|</tex>
+
      '''for''' j = 1 '''to''' <tex>|\Gamma_i|</tex>
        '''if''' <tex>\lnot L|_t (\Gamma_{ij})</tex>
+
        '''if''' <tex>\lnot L|_t (\Gamma_{ij})</tex>
          ok <tex>\leftarrow</tex> false
+
          ok <tex>\leftarrow</tex> false
      '''if''' ok
+
        '''if''' ok
        '''return''' true
+
          '''return''' true
 +
 
 +
2) <tex>\Leftarrow</tex>
  
 
Для доказательства в другую сторону понадобятся следующие леммы:
 
Для доказательства в другую сторону понадобятся следующие леммы:
Строка 50: Строка 55:
 
Вычисляется эта функция следующим образом: параллельно запускаем проверки <tex>x \in G</tex> и <tex>y \in K</tex>. Если <tex>x \in G</tex>, то <tex>x \in H</tex>, следовательно, функция возвращает единицу вне зависимости от <tex>y</tex>. Если <tex>y \in K</tex>, то запускаем проверку <tex>x \in H</tex>.
 
Вычисляется эта функция следующим образом: параллельно запускаем проверки <tex>x \in G</tex> и <tex>y \in K</tex>. Если <tex>x \in G</tex>, то <tex>x \in H</tex>, следовательно, функция возвращает единицу вне зависимости от <tex>y</tex>. Если <tex>y \in K</tex>, то запускаем проверку <tex>x \in H</tex>.
  
С помощью этой функции можно разрешить множество <tex>K</tex> следующим образом: для проверяемого элемента <tex>y</tex> подготовим программу <tex>g</tex>:
+
Разрешим множество <tex>K</tex>с помощью этой функции. Для проверяемого элемента <tex>y</tex> подготовим программу <tex>g</tex>:
  
g(x):
+
  g(x):
  '''return''' f(x, y)
+
    if <tex>x \in H</tex>
 +
      '''return''' <tex>y \in K</tex>
 +
    if <tex>x \in G</tex>
 +
      '''return''' <tex>y \notin K</tex>
  
 
После этого запустим параллельно проверки <tex>y \in K</tex> и <tex>L(g) \in A</tex>. Если <tex>y \in K</tex>, то первая проверка завершится. Иначе функция <tex>g</tex> задаёт язык <tex>G</tex>, который обладает свойством <tex>A</tex>, следовательно, вторая проверка завершится, сигнализируя о том, что <tex>y \notin K</tex>. Но <tex>K</tex> не является разрешимым множеством, получено противоречие.
 
После этого запустим параллельно проверки <tex>y \in K</tex> и <tex>L(g) \in A</tex>. Если <tex>y \in K</tex>, то первая проверка завершится. Иначе функция <tex>g</tex> задаёт язык <tex>G</tex>, который обладает свойством <tex>A</tex>, следовательно, вторая проверка завершится, сигнализируя о том, что <tex>y \notin K</tex>. Но <tex>K</tex> не является разрешимым множеством, получено противоречие.
Строка 67: Строка 75:
 
Заметим, что если <tex>y \in K</tex>, то <tex>f(x, y)</tex> распознаёт некоторое конечное подмножество <tex>G</tex> и всё множество <tex>G</tex> иначе. Эта функция тривиальным образом разрешима, построим с её помощью разрешитель <tex>K</tex>. Аналогично доказательству первой леммы, подготовим программу <tex>g</tex>:
 
Заметим, что если <tex>y \in K</tex>, то <tex>f(x, y)</tex> распознаёт некоторое конечное подмножество <tex>G</tex> и всё множество <tex>G</tex> иначе. Эта функция тривиальным образом разрешима, построим с её помощью разрешитель <tex>K</tex>. Аналогично доказательству первой леммы, подготовим программу <tex>g</tex>:
  
g(x):
+
  g(x):
  '''return''' f(x, y)
+
    '''return''' f(x, y)
  
 
После этого параллельно запустим проверки <tex>y \in K</tex> и <tex>L(g) \in A</tex>. Аналогично, данная процедура разрешает множество <tex>K</tex>. Но <tex>K</tex> не является разрешимым, получено противоречие.
 
После этого параллельно запустим проверки <tex>y \in K</tex> и <tex>L(g) \in A</tex>. Аналогично, данная процедура разрешает множество <tex>K</tex>. Но <tex>K</tex> не является разрешимым, получено противоречие.
 
}}
 
}}
 
Полуразрешитель для множества образцов, удовлетворяющих <tex>\Gamma</tex> строится следующим образом: для каждого образца <tex>\gamma</tex> строится текст программы
 
Полуразрешитель для множества образцов, удовлетворяющих <tex>\Gamma</tex> строится следующим образом: для каждого образца <tex>\gamma</tex> строится текст программы
f<tex>{}_\gamma</tex>(x):
+
  f<tex>{}_\gamma</tex>(x):
  '''return''' x <tex>{} \in \gamma</tex>
+
    '''return''' x <tex>{} \in \gamma</tex>
 
Текст программы передаётся полуразрешителю <tex>A</tex>.
 
Текст программы передаётся полуразрешителю <tex>A</tex>.
  
Строка 80: Строка 88:
  
 
Пусть <tex>L \in A</tex>. Тогда по второй лемме найдётся образец <tex>\gamma</tex>, который является подмножеством <tex>L</tex> и удовлетворяет свойству <tex>A</tex>. Следовательно, этот образец лежит в множестве <tex>\Gamma</tex> и язык <tex>A</tex> удовлетворяет множеству образцов <tex>\Gamma</tex>, что и требовалось доказать.
 
Пусть <tex>L \in A</tex>. Тогда по второй лемме найдётся образец <tex>\gamma</tex>, который является подмножеством <tex>L</tex> и удовлетворяет свойству <tex>A</tex>. Следовательно, этот образец лежит в множестве <tex>\Gamma</tex> и язык <tex>A</tex> удовлетворяет множеству образцов <tex>\Gamma</tex>, что и требовалось доказать.
== Литература ==
+
 
 +
== См. также==
 +
 
 +
 
 +
== Источники информации ==
 
* ''Верещагин Н. К., Шень A.'' Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. {{---}} М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
 
* ''Верещагин Н. К., Шень A.'' Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. {{---}} М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
 
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. {{---}} М.: Издательский дом «Вильямс», 2008. {{---}} С. 528 {{---}} ISBN 978-5-8459-1347-0 (рус.)
 
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. {{---}} М.: Издательский дом «Вильямс», 2008. {{---}} С. 528 {{---}} ISBN 978-5-8459-1347-0 (рус.)

Версия 00:04, 16 января 2017

Определение:
Свойством программ (англ. property) называется подмножество перечислимых языков.


Определение:
Образцом (англ. pattern) называется конечное множество слов, объединённое определённым общим свойством.


Определение:
Язык [math]L[/math] удовлетворяет образцу [math]A[/math], если [math]L[/math] содержит все элементы [math]A[/math].


Определение:
Язык [math]L[/math] удовлетворяет множеству образцов [math]X[/math], если [math]L[/math] удовлетворяет хотя бы одному образцу [math]A \in X[/math].

Теорема Райса-Шапиро позволяет дать простое описание перечислимым свойствам языков. Заметим, что вычислимо работать с произвольными языками возможности нет, поэтому далее неявно подразумевается, что все рассматриваемые языки являются перечислимыми.

Заметим, что образцы являются конструктивными объектами, следовательно, можно говорить о разрешимых и перечислимых множествах образцов.

Теорема (Райса-Шапиро):
Свойство языков [math]A[/math] перечислимо тогда и только тогда, когда существует перечислимое множество образцов [math]\Gamma[/math], такое, что [math]L[/math] удовлетворяет [math]A[/math] тогда и только тогда, когда [math]L[/math] удовлетворяет [math]\Gamma[/math].

1) [math]\Rightarrow[/math]

Доказательство в одну сторону тривиально: пусть [math]\Gamma[/math] — перечислимое множество образцов. Будем обозначать за [math]\Gamma_i[/math] образец с номером [math]i[/math], а за [math]\Gamma_{ij}[/math] — элемент с номером [math]j[/math] образца с номером [math]i[/math]. Далее приведён код полуразрешителя [math]A[/math], который принимает на вход код полуразрешителя [math]L[/math] и возвращает значение [math]L \in A[/math].

 A(L):
   for t = 1 to [math]\infty[/math]
     for i = 1 to t
       ok [math]\leftarrow[/math] true
     for j = 1 to [math]|\Gamma_i|[/math]
       if [math]\lnot L|_t (\Gamma_{ij})[/math]
         ok [math]\leftarrow[/math] false
       if ok
         return true

2) [math]\Leftarrow[/math]

Для доказательства в другую сторону понадобятся следующие леммы:

Лемма:
Пусть [math]A[/math] — перечислимое свойство языков, [math]G \in A[/math]. Тогда верно следствие: [math]G \subset H \Rightarrow H \in A[/math].
Доказательство:
[math]\triangleright[/math]

Строим доказательство от противного. Пусть [math]G \in A[/math], [math]G \subset H[/math], [math]H \notin A[/math], [math]K[/math] — перечислимое неразрешимое множество. Построим следующую вычислимую функцию: [math]f(x, y) = \begin{cases} x \in H & y \in K\\ x \in G & y \notin K \end{cases}[/math]

Вычисляется эта функция следующим образом: параллельно запускаем проверки [math]x \in G[/math] и [math]y \in K[/math]. Если [math]x \in G[/math], то [math]x \in H[/math], следовательно, функция возвращает единицу вне зависимости от [math]y[/math]. Если [math]y \in K[/math], то запускаем проверку [math]x \in H[/math].

Разрешим множество [math]K[/math]с помощью этой функции. Для проверяемого элемента [math]y[/math] подготовим программу [math]g[/math]:

 g(x):
   if [math]x \in H[/math]
     return [math]y \in K[/math]
   if [math]x \in G[/math]
     return [math]y \notin K[/math]
После этого запустим параллельно проверки [math]y \in K[/math] и [math]L(g) \in A[/math]. Если [math]y \in K[/math], то первая проверка завершится. Иначе функция [math]g[/math] задаёт язык [math]G[/math], который обладает свойством [math]A[/math], следовательно, вторая проверка завершится, сигнализируя о том, что [math]y \notin K[/math]. Но [math]K[/math] не является разрешимым множеством, получено противоречие.
[math]\triangleleft[/math]
Лемма:
Пусть [math]A[/math] — перечислимое свойство, [math]G \in A[/math]. Тогда существует конечное множество [math]H \in A[/math], которое является подмножеством [math]G[/math].
Доказательство:
[math]\triangleright[/math]

Строим доказательство от противного. Пусть [math]G \in A[/math], и любое конечное подмножество [math]G[/math] не удовлетворяет свойству [math]A[/math], [math]K[/math] — перечислимое неразрешимое множество. Определим следующую функцию:

  • [math]f(x, y) = [/math] false, если за [math]x[/math] шагов перечисления [math]K[/math] появилось слово [math]y[/math].
  • [math]f(x, y) = x \in G[/math] иначе.

Заметим, что если [math]y \in K[/math], то [math]f(x, y)[/math] распознаёт некоторое конечное подмножество [math]G[/math] и всё множество [math]G[/math] иначе. Эта функция тривиальным образом разрешима, построим с её помощью разрешитель [math]K[/math]. Аналогично доказательству первой леммы, подготовим программу [math]g[/math]:

 g(x):
   return f(x, y)
После этого параллельно запустим проверки [math]y \in K[/math] и [math]L(g) \in A[/math]. Аналогично, данная процедура разрешает множество [math]K[/math]. Но [math]K[/math] не является разрешимым, получено противоречие.
[math]\triangleleft[/math]

Полуразрешитель для множества образцов, удовлетворяющих [math]\Gamma[/math] строится следующим образом: для каждого образца [math]\gamma[/math] строится текст программы

 f[math]{}_\gamma[/math](x):
   return x [math]{} \in \gamma[/math]

Текст программы передаётся полуразрешителю [math]A[/math].

Докажем, что данное построение корректно. Обозначим множество образцов, принимаемое построенным выше полурарешителем [math]\Gamma[/math]. Пусть существует [math]\gamma \in \Gamma[/math] такой, что [math]L[/math] удовлетворяет [math]\gamma[/math]. По определению [math]\Gamma[/math], язык [math]\gamma[/math] удовлетворяет свойству [math]A[/math]. Язык [math]L[/math] удовлетворяет свойству [math]A[/math] по первой лемме как надмножество [math]\gamma[/math].

Пусть [math]L \in A[/math]. Тогда по второй лемме найдётся образец [math]\gamma[/math], который является подмножеством [math]L[/math] и удовлетворяет свойству [math]A[/math]. Следовательно, этот образец лежит в множестве [math]\Gamma[/math] и язык [math]A[/math] удовлетворяет множеству образцов [math]\Gamma[/math], что и требовалось доказать.

См. также

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

  • Верещагин Н. К., Шень A. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
  • Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.: Издательский дом «Вильямс», 2008. — С. 528 — ISBN 978-5-8459-1347-0 (рус.)