~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 027549BDB819BB7202509CD60142F245__1710441900 ✰
Заголовок документа оригинал.:
✰ Termination analysis - Wikipedia ✰
Заголовок документа перевод.:
✰ Анализ завершения — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Termination_analysis ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/02/45/027549bdb819bb7202509cd60142f245.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/02/45/027549bdb819bb7202509cd60142f245__translat.html ✰
Дата и время сохранения документа:
✰ 11.06.2024 10:03:31 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 14 March 2024, at 21:45 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Анализ завершения — Википедия Jump to content

Анализ завершения

Из Википедии, бесплатной энциклопедии
void   f  (  int   n  )   { 
    while   (  n   >   1  ) 
       if   (  n   %   2   ==   0  ) 
           n   =   n   /   2  ; 
        иначе 
           n   =   3   *   n   +   1  ; 
  } 
По состоянию на 2024 год , это пока неизвестно
является ли эта C -программа
завершается для каждого ввода;
см . гипотезу Коллатца .

В информатике программы анализ завершения — это анализ программы , который пытается определить, прекращается ли выполнение данной для каждого ввода . Это значит определить, вычисляет ли входная программа итоговую функцию.

Она тесно связана с проблемой остановки , которая заключается в том, чтобы определить, останавливается ли данная программа для данного ввода, и которая неразрешима . Анализ завершения еще более сложен, чем проблема остановки: анализ завершения в модели машин Тьюринга как модели программ, реализующих вычислимые функции, будет иметь целью решить, является ли данная машина Тьюринга полной машиной Тьюринга , и эта проблема на уровне арифметической иерархии и, следовательно, является строго более сложной, чем проблема остановки.

Теперь, поскольку вопрос о том, является ли вычислимая функция полной, полуразрешим , [1] Каждый анализатор звукового завершения (т. е. утвердительный ответ никогда не дается для незавершаемой программы) является неполным , т. е. не может определить завершение для бесконечного числа завершающихся программ либо из-за бесконечной работы, либо из-за остановки с неопределенным ответом.

Доказательство прекращения действия [ править ]

Доказательство завершения — это тип математического доказательства , которое играет решающую роль в формальной проверке, зависит от завершения поскольку полная правильность алгоритма .

Простой общий метод построения доказательств завершения предполагает связывание меры с каждым шагом алгоритма. Мера берется из области хорошо обоснованного отношения , например, из порядковых чисел . Если мера «убывает» по отношению на каждом возможном шаге алгоритма, то он должен завершиться, поскольку не существует бесконечных нисходящих цепочек по обоснованному отношению .

Некоторые типы анализа прекращения могут автоматически генерировать или предполагать наличие доказательства прекращения.

Пример [ править ]

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

я := 0 
  цикл  , пока я не = SIZE_OF_DATA 
      process_data(data[i]))  // обрабатываем фрагмент данных в позиции i 
      i := i + 1  // переход к следующему фрагменту данных для обработки 

Если значение SIZE_OF_DATA неотрицательное, фиксированное и конечное, цикл в конечном итоге завершится, предполагая, что процесс_data также завершится.

При проверке человеком можно показать, что некоторые циклы всегда завершаются или никогда не завершаются. Например, следующий цикл теоретически никогда не остановится. Однако он может остановиться при выполнении на физической машине из-за арифметического переполнения : либо это приведет к исключению , либо приведет к переходу счетчика в отрицательное значение и позволит выполнить условие цикла.

я := 1 
  цикл  до тех пор, пока я = 0 
      я := я + 1 
 

При анализе завершения можно также попытаться определить поведение завершения некоторой программы в зависимости от некоторых неизвестных входных данных. Следующий пример иллюстрирует эту проблему.

я := 1 
  цикл  , пока я = НЕИЗВЕСТНО 
      я := я + 1 
 

Здесь условие цикла определяется с использованием некоторого значения НЕИЗВЕСТНО, где значение НЕИЗВЕСТНО неизвестно (например, определяется вводом пользователя при выполнении программы). Здесь анализ завершения должен принять во внимание все возможные значения UNKNOWN и выяснить, что в возможном случае UNKNOWN = 0 (как в исходном примере) завершение не может быть показано.

Однако не существует общей процедуры определения того, остановится ли выражение, включающее инструкции цикла, даже если проверку поручают людям. Теоретической причиной этого является неразрешимость проблемы остановки: не может существовать некий алгоритм, который определяет, останавливается ли какая-либо данная программа после конечного числа шагов вычислений.

На практике невозможно показать завершение (или отсутствие завершения), поскольку каждый алгоритм работает с конечным набором методов, способных извлечь соответствующую информацию из данной программы. Метод может смотреть на то, как изменяются переменные относительно некоторого условия цикла (возможно, показывая завершение этого цикла), другие методы могут попытаться преобразовать вычисления программы в некоторую математическую конструкцию и работать над этим, возможно, получая информацию о поведении завершения из некоторые свойства этой математической модели. Но поскольку каждый метод способен «видеть» только некоторые конкретные причины (не)завершения, даже с помощью комбинации таких методов невозможно охватить все возможные причины (не)завершения. [ нужна цитата ]

Рекурсивные функции и циклы эквивалентны по выражению; любое выражение, включающее циклы, можно записать с использованием рекурсии, и наоборот. Таким образом, завершение рекурсивных выражений также вообще неразрешимо. большинство рекурсивных выражений, встречающихся в обычном использовании (т.е. не патологических Можно показать, что ), завершаются различными способами, обычно в зависимости от определения самого выражения. Например, аргумент функции в рекурсивном выражении для функции факториала ниже всегда будет уменьшаться на 1; благодаря свойству упорядоченности натуральных чисел аргумент в конечном итоге достигнет 1, и рекурсия завершится.

функция  факториал (аргумент  как  натуральное число) 
      если  аргумент = 0  или  аргумент = 1 
          вернуть  1 
      в противном случае 
         вернуть  аргумент * факториал(аргумент - 1) 
 

Зависимые типы [ править ]

Проверка завершения очень важна в языках программирования с зависимой типизацией и системах доказательства теорем, таких как Coq и Agda . Эти системы используют изоморфизм Карри-Говарда между программами и доказательствами. Доказательства над индуктивно определенными типами данных традиционно описывались с использованием принципов индукции. Однако позже выяснилось, что описание программы с помощью рекурсивно определенной функции с сопоставлением с образцом является более естественным способом доказательства, чем непосредственное использование принципов индукции. К сожалению, разрешение бесконечных определений приводит к логической несогласованности в теориях типов. [ нужна цитата ] , поэтому Agda и Coq имеют встроенные средства проверки завершения.

Типы размеров [ править ]

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

Текущее исследование [ править ]

Есть несколько исследовательских групп, которые работают над новыми методами, которые могут показать (не)терминацию. Многие исследователи включают эти методы в программы. [2] которые пытаются автоматически проанализировать поведение завершения (то есть без участия человека). Продолжающийся аспект исследования заключается в том, чтобы позволить использовать существующие методы для анализа поведения завершения программ, написанных на языках программирования «реального мира». Для декларативных языков, таких как Haskell , Mercury и Prolog , существует множество результатов. [3] [4] [5] (в основном из-за сильной математической базы этих языков). Исследовательское сообщество также работает над новыми методами анализа поведения завершения программ, написанных на императивных языках, таких как C и Java.

См. также [ править ]

Ссылки [ править ]

  1. ^ Роджерс-младший, Хартли (1988). Теория рекурсивных функций и эффективная вычислимость . Кембридж (Массачусетс), Лондон (Англия): MIT Press. п. 476. ИСБН  0-262-68052-1 .
  2. ^ Инструменты на сайте Termination-portal.org.
  3. ^ Гизл, Дж.; Свидерски, С.; Шнайдер-Камп, П.; Тиманн, Р. Пфеннинг, Ф. (ред.). Автоматизированный анализ завершения для Haskell: от переписывания терминов к языкам программирования (приглашенная лекция) (постскриптум) . Переписывание терминов и приложения, 17-й Int. конф., РТА-06. ЛНКС. Том. 4098. стр. 297–312. (ссылка: Springerlink.com ).
  4. ^ Параметры компилятора для анализа завершения в Mercury
  5. ^ http://verify.rwth-aachen.de/giesl/papers/lopstr07-distribute.pdf [ пустой URL PDF ]

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

Системные описания инструментов автоматического анализа завершения включают в себя:

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 027549BDB819BB7202509CD60142F245__1710441900
URL1:https://en.wikipedia.org/wiki/Termination_analysis
Заголовок, (Title) документа по адресу, URL1:
Termination analysis - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)