<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8</id>
	<title>Проблема остановки - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8&amp;action=history"/>
	<updated>2026-07-18T03:26:13Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8&amp;diff=42216&amp;oldid=prev</id>
		<title>imported&gt;Linneris: /* Доказательство */</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8&amp;diff=42216&amp;oldid=prev"/>
		<updated>2026-01-24T14:23:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Доказательство&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Проблема остановки&amp;#039;&amp;#039;&amp;#039; ({{lang-en|Halting problem}}) — одна из проблем в [[теория алгоритмов|теории алгоритмов]]&amp;lt;ref&amp;gt;&amp;#039;&amp;#039;[[Верещагин, Николай Константинович|Н. К. Верещагин]], [[Шень, Александр Ханиевич|А. Шень]]&amp;#039;&amp;#039; [http://www.mccme.ru/free-books/shen/shen-logic-part3-2.pdf Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции] {{Wayback|url=http://www.mccme.ru/free-books/shen/shen-logic-part3-2.pdf |date=20151112035312 }}&amp;lt;/ref&amp;gt;, которая может неформально быть поставлена в виде: для данного описания процедуры и её начальных входных данных определить, завершится ли когда-либо выполнение процедуры с этими данными; либо, что процедура всё время будет работать без остановки.&lt;br /&gt;
&lt;br /&gt;
[[Тьюринг, Алан|Алан Тьюринг]] доказал в [[1936 год в науке|1936 году]], что проблема остановки [[неразрешимость|неразрешима]] на [[машина Тьюринга|машине Тьюринга]]. Другими словами, не существует общего алгоритма решения этой проблемы&amp;lt;ref&amp;gt;{{source|Q25864184|ref=Turing|ref-year=1937}} &amp;lt;!-- On Computable Numbers, with an Application to the Entscheidungsproblem // Proceedings of the London Mathematical Society --&amp;gt; (в этой публикации Тьюринг ввёл определение [[Машина Тьюринга|машины Тьюринга]], сформулировал проблему зависания и показывает, что она, также как и [[проблема разрешения]], неразрешима).&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проблема остановки занимает центральное место в [[теория вычислимости|теории вычислимости]], поскольку представляет собой первый пример задачи, которую невозможно решить алгоритмическим путём.&lt;br /&gt;
&lt;br /&gt;
В терминах функций проблему можно доступно описать следующим образом: для любой функции F(G, start_state), которая может определять, останавливается ли другая функция, всегда можно написать такую функцию G(start_state), при передаче которой в F результат выполнения будет противоположен тому, который предсказывает F.&lt;br /&gt;
&lt;br /&gt;
Для многих других задач{{каких}} можно доказать их алгоритмическую неразрешимость, попытавшись свести их к проблеме остановки. Это делается по схеме «от противного»: пусть есть некая задача, для которой требуется установить её неразрешимость. Тогда, предположим, что она разрешима, и попытаемся, используя этот факт, написать алгоритм решения проблемы остановки. Если это удастся, то мы придем к противоречию, ведь известно, что не существует алгоритма решения проблемы остановки. А значит, предположение было неверным и исходная задача также неразрешима.&lt;br /&gt;
&lt;br /&gt;
[[Граф потока управления]] может быть использован для быстрой категоризации, когда программа не имеет циклов (и поэтому останавливается), имеет тривиальные циклы (и поэтому останавливается), имеет нетривиальные циклы (неразрешимо) или входит в бесконечный цикл.&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
Рассмотрим множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; алгоритмов, которые принимают на вход натуральное число и на выходе тоже выдают натуральное число. Выберем какой-нибудь полный по Тьюрингу язык программирования. Каждый алгоритм можно записать в виде конечной последовательности символов на этом языке. Упорядочим множество &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; по алфавиту. При этом каждый алгоритм получит свой порядковый номер; более того, существует алгоритм, который по номеру элемента &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; восстанавливает его код в выбранном языке программирования. Назовем Анализатором гипотетический алгоритм, который получает на вход пару натуральных чисел &amp;lt;math&amp;gt;(N, X)&amp;lt;/math&amp;gt;, и:&lt;br /&gt;
* останавливается и возвращает 1, если алгоритм с номером &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; не останавливается, получив на вход &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;&lt;br /&gt;
* не останавливается в противном случае (если алгоритм с номером &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; останавливается, получив на вход &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Проблему остановки можно переформулировать следующим образом: существует ли Анализатор?&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Теорема.&amp;#039;&amp;#039; Анализатора не существует.&lt;br /&gt;
&lt;br /&gt;
Докажем это от противного. Допустим, Анализатор существует.&lt;br /&gt;
Напишем алгоритм Диагонализатор, который принимает на вход число &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, передает пару аргументов &amp;lt;math&amp;gt;(N, N)&amp;lt;/math&amp;gt; Анализатору и возвращает результат его работы. Другими словами, Диагонализатор останавливается в том и только том случае, если не останавливается алгоритм с номером &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, получив на вход число &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Пусть &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; — это порядковый номер Диагонализатора в множестве &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;. Запустим Диагонализатор, передав ему это число &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt;. Диагонализатор остановится в том и только том случае, если алгоритм с номером &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; (то есть, он сам) не останавливается, получив на вход число &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; (какое мы ему и передали). Из этого противоречия следует, что наше предположение неверно: Анализатора не существует, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [[c2:HaltingProblem]]&lt;br /&gt;
* [http://www.cprogramming.com/tutorial/computersciencetheory/halting.html Проблема зависания]{{ref|en}}&lt;br /&gt;
&lt;br /&gt;
{{rq|&lt;br /&gt;
{{стиль статьи|дата=2025-02-14}}&lt;br /&gt;
{{оформить формулы|дата=2025-02-14}}&lt;br /&gt;
{{проверить факты|дата=2025-02-14}}&lt;br /&gt;
}}&lt;br /&gt;
{{Внешние ссылки}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теория алгоритмов]]&lt;br /&gt;
[[Категория:Неразрешимые проблемы]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Linneris</name></author>
	</entry>
</feed>