Теорема Райса-Шапиро — различия между версиями
(доказательство в одну сторону + философия) |
(доказательство леммы 1) |
||
| Строка 16: | Строка 16: | ||
Доказательство в одну сторону тривиально: пусть <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) | |
| − | + | for t = 1 to <tex>\infty</tex> | |
| − | + | for i = 1 to t | |
| − | + | ok <tex>\leftarrow</tex> true | |
| − | + | for j = 1 to <tex>|\Gamma_i|</tex> | |
| − | + | if <tex>\lnot L|_t (\Gamma_{ij})</tex> | |
| − | + | ok <tex>\leftarrow</tex> false | |
| − | + | if ok | |
| − | + | return true | |
| + | Для доказательства в другую сторону понадобятся следующие леммы: | ||
| + | {{Лемма | ||
| + | |||
| + | Строим доказательство от противного. Пусть G \in A, G \subset H, H \notin A, K — перечислимое неразрешимое множество. Построим следующую вычислимую функцию: f(x, y) = \begin{cases} x \in H & y \in K\\ x \in G & y \notin K \end{cases} | ||
| + | |||
| + | Вычисляется эта функция следующим образом: параллельно запускаем проверки x \in G и y \in K. Если x \in G, то x \in H, следовательно, функция возвращает единицу вне зависимости от y. Если y \in K, то запускаем проверку x \in H. | ||
| + | |||
| + | С помощью этой функции можно разрешить множество K следующим образом: для проверяемого элемента y подготовим программу g: | ||
| + | |||
| + | g(x): | ||
| + | return f(x, y) | ||
| + | |||
| + | После этого запустим параллельно проверки | ||
| + | |statement= | ||
| + | Пусть <tex>A</tex> — перечислимое свойство языков, <tex>G \in A</tex>. Тогда верно следствие: <tex>G \subset H \Rightarrow H \in A</tex>. | ||
| + | |proof= | ||
| + | Строим доказательство от противного. Пусть <tex>G \in A</tex>, <tex>G \subset H</tex>, <tex>H \notin A</tex>, <tex>K</tex> — перечислимое неразрешимое множество. Построим следующую вычислимую функцию: | ||
| + | <tex>f(x, y) = \begin{cases} | ||
| + | x \in H & y \in K\\ | ||
| + | x \in G & y \notin K | ||
| + | \end{cases}</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>: | ||
| + | |||
| + | g(x): | ||
| + | return f(x, y) | ||
| + | |||
| + | После этого запустим параллельно проверки <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> не является разрешимым множеством, получено противоречие. | ||
| + | }} | ||
== Литература == | == Литература == | ||
* ''Верещагин Н. К., Шень 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 (рус.) | ||
Версия 18:41, 14 января 2013
Теорема Райса-Шапиро позволяет дать простое описание перечислимым свойствам языков.
| Определение: |
| Образцом называется конечное множество слов. |
Будем говорить, что язык удовлетворяет образцу , если он содержит все слова . Также будем говорить, что язык удовлетворяет множеству образцов, если он удовлетворяет хотя бы одному образцу из этого множества.
Заметим, что образцы являются конструктивными объектами, следовательно, можно говорить о разрешимых и перечислимых множествах образцов.
| Теорема (Райса-Шапиро): |
Свойство языков перечислимо тогда и только тогда, когда существует перечислимое множество образцов , такое, что удовлетворяет тогда и только тогда, когда удовлетворяет . |
Доказательство в одну сторону тривиально: пусть — перечислимое множество образцов. Будем обозначать за образец с номером , а за — элемент с номером образца с номером . Далее приведён код перечислителя , который принимает на вход код перечислителя и возвращает значение .
A(L) for t = 1 to for i = 1 to t ok true for j = 1 to if ok false if ok return true
Для доказательства в другую сторону понадобятся следующие леммы: {{Лемма
Строим доказательство от противного. Пусть G \in A, G \subset H, H \notin A, K — перечислимое неразрешимое множество. Построим следующую вычислимую функцию: f(x, y) = \begin{cases} x \in H & y \in K\\ x \in G & y \notin K \end{cases}
Вычисляется эта функция следующим образом: параллельно запускаем проверки x \in G и y \in K. Если x \in G, то x \in H, следовательно, функция возвращает единицу вне зависимости от y. Если y \in K, то запускаем проверку x \in H.
С помощью этой функции можно разрешить множество K следующим образом: для проверяемого элемента y подготовим программу g:
g(x):
return f(x, y)
После этого запустим параллельно проверки |statement= Пусть — перечислимое свойство языков, . Тогда верно следствие: . |proof= Строим доказательство от противного. Пусть , , , — перечислимое неразрешимое множество. Построим следующую вычислимую функцию:
Вычисляется эта функция следующим образом: параллельно запускаем проверки и . Если , то , следовательно, функция возвращает единицу вне зависимости от . Если , то запускаем проверку .
С помощью этой функции можно разрешить множество следующим образом: для проверяемого элемента подготовим программу :
g(x): return f(x, y)
После этого запустим параллельно проверки и . Если , то первая проверка завершится. Иначе функция задаёт язык , который обладает свойством , следовательно, вторая проверка завершится, сигнализируя о том, что . Но не является разрешимым множеством, получено противоречие. }}
Литература
- Верещагин Н. К., Шень A. Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции. — М.: МЦНМО, 1999. С. 134. ISBN 5-900916-36-7
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.: Издательский дом «Вильямс», 2008. — С. 528 — ISBN 978-5-8459-1347-0 (рус.)