Проблема остановки (англ. Halting problem) — это одна из проблем в теории алгоритмов, которая может неформально быть поставлена в виде:
 Алан Тьюринг доказал в 1936 году, что проблема остановки неразрешима на машине Тьюринга. Другими словами, не существует общего алгоритма решения этой проблемы.
 Проблема остановки занимает центральное место в теории вычислимости, поскольку представляет собой первый пример задачи, которую невозможно решить алгоритмическим путём.
 В терминах функций проблему можно доступно описать следующим образом:
 Для многих других задач[каких?] можно доказать их алгоритмическую неразрешимость, попытавшись свести их к проблеме остановки. Это делается по схеме "от противного": пусть есть некая задача, для которой требуется установить её неразрешимость. Тогда, предположим, что она разрешима, и попытаемся, используя этот факт, написать алгоритм решения проблемы остановки. Если это удастся, то мы придем к противоречию, ведь известно, что не существует алгоритма решения проблемы остановки. А значит, предположение было неверным и исходная задача также неразрешима.
 Рассмотрим множество 
  
    
      
        S
      
    
    {\displaystyle S}
  
 алгоритмов, которые принимают на вход натуральное число и на выходе тоже выдают натуральное число. Выберем какой-нибудь полный по Тьюрингу язык программирования. Каждый алгоритм можно записать в виде конечной последовательности символов на этом языке. Упорядочим множество 
  
    
      
        S
      
    
    {\displaystyle S}
  
 по алфавиту. При этом каждый алгоритм получит свой порядковый номер; более того существует алгоритм, который по номеру элемента 
  
    
      
        S
      
    
    {\displaystyle S}
  
 восстанавливает его код в выбранном языке программирования. Назовем Анализатором гипотетический алгоритм, который получает на вход пару натуральных чисел 
  
    
      
        (
        N
        ,
        X
        )
      
    
    {\displaystyle (N,X)}
  
, и:
 Проблему остановки можно переформулировать следующим образом: существует ли Анализатор?
 Теорема. Анализатора не существует.
 Докажем это от противного. Допустим, Анализатор существует.
Напишем алгоритм Диагонализатор, который принимает на вход число 
  
    
      
        N
      
    
    {\displaystyle N}
  
, передает пару аргументов 
  
    
      
        (
        N
        ,
        N
        )
      
    
    {\displaystyle (N,N)}
  
 Анализатору и возвращает результат его работы. Другими словами, Диагонализатор останавливается в том и только том случае, если не останавливается алгоритм с номером 
  
    
      
        N
      
    
    {\displaystyle N}
  
, получив на вход число 
  
    
      
        N
      
    
    {\displaystyle N}
  
. Пусть 
  
    
      
        K
      
    
    {\displaystyle K}
  
 — это порядковый номер Диагонализатора в множестве 
  
    
      
        S
      
    
    {\displaystyle S}
  
. Запустим Диагонализатор, передав ему это число 
  
    
      
        K
      
    
    {\displaystyle K}
  
. Диагонализатор остановится в том и только том случае, если алгоритм с номером 
  
    
      
        K
      
    
    {\displaystyle K}
  
 (то есть, он сам) не останавливается, получив на вход число 
  
    
      
        K
      
    
    {\displaystyle K}
  
 (какое мы ему и передали). Из этого противоречия следует, что наше предположение неверно: Анализатора не существует, что и требовалось доказать.