<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.155.4.168&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.155.4.168&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.155.4.168"/>
		<updated>2026-04-27T12:48:06Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=72092</id>
		<title>Свойства перечислимых языков. Теорема Успенского-Райса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D0%BF%D0%B5%D1%80%D0%B5%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D0%BC%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A3%D1%81%D0%BF%D0%B5%D0%BD%D1%81%D0%BA%D0%BE%D0%B3%D0%BE-%D0%A0%D0%B0%D0%B9%D1%81%D0%B0&amp;diff=72092"/>
				<updated>2020-01-06T12:08:06Z</updated>
		
		<summary type="html">&lt;p&gt;178.155.4.168: /* Теорема Успенского-Райса */ Fix html code issues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства языков ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим множество всех [[Перечислимые_языки|перечислимых]] языков &amp;lt;tex&amp;gt; \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Свойством языков''' (англ. ''property of languages'') называется множество &amp;lt;tex&amp;gt; A \subset \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство называется '''тривиальным''' (англ. ''trivial''), если &amp;lt;tex&amp;gt; A = \varnothing &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; A = \mathrm {RE} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Язык свойства''' (англ. ''language of property'') &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} множество программ, языки которых обладают этим свойством: &amp;lt;tex&amp;gt;L(A) \overset{\underset{\mathrm{def}}{}}{=} \lbrace p \mid L(p) \in A \rbrace &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Отметим''', что принадлежность программы &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; языку свойства &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; можно выразить двумя эквивалентными утверждениями: &lt;br /&gt;
:&amp;lt;tex&amp;gt;L(p) \in A&amp;lt;/tex&amp;gt; &lt;br /&gt;
:&amp;lt;tex&amp;gt;p \in L(A)&amp;lt;/tex&amp;gt; &lt;br /&gt;
Далее в конспекте будет употребляться  &amp;lt;tex&amp;gt;p \in L(A)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Свойство &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; называется '''разрешимым''' (англ. ''recursive''), если &amp;lt;tex&amp;gt;L(A) &amp;lt;/tex&amp;gt; является [[Разрешимые_(рекурсивные)_языки|разрешимым]].&lt;br /&gt;
}}&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
'''Примеры свойств''':&lt;br /&gt;
# Язык должен содержать слово ''hello''.&lt;br /&gt;
# Язык должен содержать хотя бы одно простое число.&lt;br /&gt;
&lt;br /&gt;
Псевдокод для  разрешителя &amp;lt;tex&amp;gt;L(A)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A = \mathrm {RE}: &amp;lt;/tex&amp;gt;&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; // &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt; {{---}} полуразрешитель некоторого языка&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''return''' ''true''&lt;br /&gt;
&lt;br /&gt;
Псевдокод для программы в общем случае, то есть для проверки того, что язык удовлетворяет свойству :&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt; &lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X \in L(A)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Псевдокод полуразрешителя для языка свойства из первого примера:&lt;br /&gt;
 &amp;lt;tex&amp;gt;p_A(p_X)&amp;lt;/tex&amp;gt; &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt; // &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} перечислимый язык в общем случае, поэтому &amp;lt;tex&amp;gt;p_A&amp;lt;/tex&amp;gt; {{---}} полуразрешитель (по [[Теорема Райса-Шапиро |теореме Райса-Шапиро]])&amp;lt;/font&amp;gt;&lt;br /&gt;
   '''return''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;('hello')&lt;br /&gt;
&lt;br /&gt;
== Теорема Успенского-Райса ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык никакого нетривиального свойства &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; не является разрешимым.&lt;br /&gt;
}}&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p_\infty&amp;lt;/tex&amp;gt; {{---}} всегда зацикливающийся алгоритм. &lt;br /&gt;
&lt;br /&gt;
'''Рассмотрим случай, когда &amp;lt;tex&amp;gt;p_\infty \in L(A)&amp;lt;/tex&amp;gt;.'''     &lt;br /&gt;
&lt;br /&gt;
Приведём доказательство от противного. Предположим, что &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; разрешимо.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим язык &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt; S \in \overline{A}&amp;lt;/tex&amp;gt; (такой язык существует, так как &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} нетривиально). Тогда  &amp;lt;tex&amp;gt;p_S \in L(\overline{A})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим также произвольное перечислимое неразрешимое множество &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;p_X(n)&amp;lt;/tex&amp;gt; {{---}} полуразрешитель &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зафиксируем произвольное &amp;lt;tex&amp;gt;n \in \mathbb{N}&amp;lt;/tex&amp;gt; и построим следующую функцию &lt;br /&gt;
&amp;lt;tex&amp;gt;V_n(x) = \begin{cases}&lt;br /&gt;
  p_S(x),  n \in X \\&lt;br /&gt;
  p_\infty(x), n \notin X \\&lt;br /&gt;
\end{cases} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;V_n&amp;lt;/tex&amp;gt;(x):&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;p_X&amp;lt;/tex&amp;gt;(n) == 1&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt;p_S&amp;lt;/tex&amp;gt;(x)&lt;br /&gt;
   '''while''' ''true''&lt;br /&gt;
&lt;br /&gt;
Получили, что если &amp;lt;tex&amp;gt;n \in X&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;V_n \in L(\overline A)&amp;lt;/tex&amp;gt;, а если &amp;lt;tex&amp;gt;n \notin X&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;V_n \in L(A)&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;n \in X \iff V_n \in L(\overline A)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;\overline A&amp;lt;/tex&amp;gt; {{---}} разрешимо, то можно проверить для любого &amp;lt;tex&amp;gt;V_n&amp;lt;/tex&amp;gt;, лежит ли оно в &amp;lt;tex&amp;gt;L(\overline{A})&amp;lt;/tex&amp;gt;. Но это тоже самое, что и проверка &amp;lt;tex&amp;gt;n \in X&amp;lt;/tex&amp;gt;. Тогда можно для каждого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; проверить, лежит ли оно в &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, а следовательно и построить разрешитель для &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} неразрешимо, получили противоречие.&lt;br /&gt;
&lt;br /&gt;
'''Теперь рассмотрим случай, когда &amp;lt;tex&amp;gt;p_\infty \in L(\overline{A})&amp;lt;/tex&amp;gt;.''' &lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;\overline{A}&amp;lt;/tex&amp;gt; {{---}} нетривиально (как дополнение к нетривиальному множеству), то по первой части доказательства оно неразрешимо. Следовательно, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; также неразрешимо.&lt;br /&gt;
===Альтернативное доказательство с использованием теоремы о рекурсии===&lt;br /&gt;
По [[Теорема о рекурсии | теореме о рекурсии]], программа может знать свой исходный код. Значит, в неё можно написать функцию &amp;lt;tex&amp;gt; \mathrm{getSrc()} &amp;lt;/tex&amp;gt;, которая вернёт строку {{---}} исходный код программы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} разрешимое семейство языков.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; L_A &amp;lt;/tex&amp;gt; {{---}} множество программ, удовлетворяющих св-ву &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь допустим, что язык &amp;lt;tex&amp;gt; L_A &amp;lt;/tex&amp;gt; разрешим. Тогда напишем такую программу:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;tex&amp;gt;propA(code){:}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    // программа, разрешающее свойство языка &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;&lt;br /&gt;
  &amp;lt;tex&amp;gt;f(x){:}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    // такая программа &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;f \in A &amp;lt;/tex&amp;gt;; существует потому что &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетривиальное свойство&lt;br /&gt;
  &amp;lt;tex&amp;gt;g(x){:}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    // такая программа &amp;lt;tex&amp;gt; g &amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;g \notin A &amp;lt;/tex&amp;gt;; существует потому что &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; {{---}} нетривиальное свойство &lt;br /&gt;
  &amp;lt;tex&amp;gt;p(x){:}&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''if''' &amp;lt;tex&amp;gt;propA(\mathrm{getSrc()})&amp;lt;/tex&amp;gt;&lt;br /&gt;
        '''return''' &amp;lt;tex&amp;gt;g(x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
    '''else'''&lt;br /&gt;
        '''return''' &amp;lt;tex&amp;gt;f(x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; не удовлетворяет свойству &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;, тогда будет выполняться всегда вторая ветка, и &amp;lt;tex&amp;gt; L(p) = L(f) &amp;lt;/tex&amp;gt;. Но язык программы &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;. Получили противоречие.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt; удовлетворяет свойству &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; L(p) = L(g) &amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt; g \notin A &amp;lt;/tex&amp;gt;. Опять получили противоречие.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Теорема о рекурсии]]&lt;br /&gt;
* [[Теорема Райса-Шапиро]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Rice%27s_theorem Wikipedia — Rice's theorem]&lt;br /&gt;
* Rice, H. G. {{---}} Classes of Recursively Enumerable Sets and Their Decision Problems.&amp;quot; {{---}} Trans. Amer. Math. Soc. 74, 358-366, 1953.&lt;br /&gt;
* Хопкрофт Д., Мотванн Р., Ульманн Д. {{---}}Введение в теорию автоматов, языков и вычислений {{---}} стр. 397.&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Теория вычислимости]]&lt;br /&gt;
[[Категория: Разрешимые и перечислимые языки]]&lt;/div&gt;</summary>
		<author><name>178.155.4.168</name></author>	</entry>

	</feed>