Jump to content

логика Хоара

(Перенаправлено с тройки Хоара )

Логика Хоара (также известная как логика Флойда-Хора или правила Хоара ) — это формальная система с набором логических правил для строгого рассуждения о правильности компьютерных программ . Она была предложена в 1969 году британским ученым-компьютерщиком и логиком Тони Хоаром и впоследствии усовершенствована Хоаром и другими исследователями. [1] Оригинальные идеи были заложены в работе Роберта Флойда , опубликовавшего аналогичную систему. [2] для блок-схем .

Хоар тройной

[ редактировать ]

Центральной особенностью логики Хоара является тройка Хоара . Тройка описывает, как выполнение фрагмента кода меняет состояние вычислений. Тройка Хоара имеет вид

где и являются утверждениями и это команда . [примечание 1] называется предварительным условием и постусловие . : когда предусловие выполнено, выполнение команды устанавливает постусловие Утверждения — это формулы в логике предикатов .

Логика Хоара предоставляет аксиомы и правила вывода для всех конструкций простого императивного языка программирования . В дополнение к правилам для простого языка, описанным в оригинальной статье Хоара, с тех пор Хоар и многие другие исследователи разработали правила для других языковых конструкций. Существуют правила для параллелизма , процедур , переходов и указателей .

Частичная и полная правильность

[ редактировать ]

Используя стандартную логику Хоара, только частичную правильность можно доказать . Полная корректность дополнительно требует завершения , что можно доказать отдельно или с помощью расширенной версии правила While. [3] Таким образом, интуитивное прочтение тройки Хоара таково: всякий раз, когда удерживает государство до исполнения , затем сохранится впоследствии, или не прекращается. В последнем случае нет «после», поэтому может быть вообще любое утверждение. Действительно, можно выбрать быть ложным, чтобы выразить это не прекращается.

«Завершение» здесь и далее в этой статье подразумевается в более широком смысле, что вычисление в конечном итоге будет завершено, то есть подразумевает отсутствие бесконечных циклов; это не означает отсутствия нарушений предела реализации (например, деления на ноль), что приводит к преждевременной остановке программы. В своей статье 1969 года Хоар использовал более узкое понятие завершения, которое также влекло за собой отсутствие нарушений предела реализации, и выразил свое предпочтение более широкому понятию завершения, поскольку оно сохраняет утверждения независимыми от реализации: [4]

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

Схема аксиом пустого утверждения

[ редактировать ]

Правило пустого оператора утверждает, что Оператор пропуска не меняет состояние программы, поэтому все, что было верно до этого, Skip также остается верным и после этого. [примечание 2]

Схема аксиом присваивания

[ редактировать ]

Аксиома присваивания гласит, что после присваивания любой предикат, который ранее был истинным для правой части присваивания, теперь справедлив для переменной. Формально, пусть P в котором переменная x свободна — утверждение , . Затем:

где утверждение P, котором каждое свободное x E. заменено в выражением обозначает вхождение

Схема аксиом присваивания означает, что истинность эквивалентно истинности после присваивания P . Так было истинно до присваивания, согласно аксиоме присваивания, тогда P будет истинным после этого. И наоборот, были ложь (т.е. true) до оператора присваивания, P затем должно быть ложным.

Примеры допустимых троек включают в себя:

Все предусловия, которые не изменяются выражением, могут быть перенесены в постусловие. В первом примере присвоение не меняет того факта, что , поэтому оба утверждения могут появиться в постусловии. Формально этот результат получается применением схемы аксиом, где P равно ( и ), что дает существование ( и ), которое, в свою очередь, можно упростить до заданного предусловия .

Схема аксиом присваивания эквивалентна утверждению: чтобы найти предусловие, сначала возьмите постусловие и замените все вхождения левой части присваивания правой частью присваивания. Будьте осторожны и не пытайтесь сделать это наоборот, следуя этому неправильному образу мышления: ;это правило приводит к бессмысленным примерам, таким как:

Еще одно неверное правило, кажущееся заманчивым на первый взгляд: ; это приводит к бессмысленным примерам вроде:

Хотя данное постусловие P однозначно определяет предусловие , обратное неверно. Например:

  • ,
  • ,
  • , и

являются действительными экземплярами схемы аксиом присваивания.

Аксиома присвоения, предложенная Хоаром, не применяется , когда к одному и тому же хранимому значению может относиться более одного имени. Например,

неверно, если x и y относятся к одной и той же переменной ( псевдоним ), хотя это правильный пример схемы аксиом присваивания (с обоими и существование ).

Правило композиции

[ редактировать ]

Правило композиции Хоара применяется к последовательно выполняемым программам S и T , где S выполняется до T и записывается ( Q называется средним условием ): [5]

Например, рассмотрим следующие два примера аксиомы присваивания:

и

По правилу последовательности можно сделать вывод:

Другой пример показан в правом поле.

Условное правило

[ редактировать ]

Условное правило гласит, что постусловие Q, общее для тогда и иначе часть также является постусловием целого оператор if...endif . [6] В тогда и В противном неотрицательное и отрицаемое условие B можно добавить случае к предварительному условию P соответственно.Состояние B не должно иметь побочных эффектов.Пример приведен в следующем разделе .

Это правило не содержалось в оригинальной публикации Хоара. [1] Однако, поскольку заявление

имеет тот же эффект, что и конструкция одноразового цикла

условное правило может быть получено из других правил Хоара.Аналогичным образом действуют правила для других производных программных конструкций, например для цикла, делать... до цикла, выключатель , перерыв , continue можно свести путем преобразования программы к правилам из оригинальной статьи Хоара.

Правило следствия

[ редактировать ]

Это правило позволяет усилить предусловие и/или ослабить постусловие .Он используется, например, для достижения буквально идентичных постусловий для тогда и еще часть.

Например, доказательство

необходимо применить условное правило, которое, в свою очередь, требует доказать

или упрощенно

для затем расстаться и

или упрощенно

для еще часть.

Однако правило присваивания для тогда часть требует выбрать P как ; применение правил, следовательно, дает

, что логически эквивалентно
.

Правило последствий необходимо для усиления предусловия полученное из правила присваивания требуется для условного правила.

Аналогично, для else часть, правило присваивания дает

или эквивалентно
,

следовательно, правило последствий должно применяться с и существование и , соответственно, чтобы еще раз усилить предусловие. Неформально, эффект правила последствий состоит в том, чтобы «забыть», что известно при входе в else часть, поскольку правило присваивания, используемое для else часть не нуждается в этой информации.

Пока правят

[ редактировать ]

Здесь P инвариант цикла который должен сохраняться телом цикла S. , После завершения цикла этот инвариант P все еще сохраняется, и, более того, должно быть, привело к завершению цикла.Как и в условном правиле, B не должен иметь побочных эффектов.

Например, доказательство

к тому времени правило требует доказать

или упрощенно
,

которое легко получить по правилу присваивания.Наконец, постусловие можно упростить до .

Другой пример: правило while можно использовать для формальной проверки следующей странной программы для вычисления точного квадратного корня x из произвольного числа a , даже если x — целочисленная переменная, а a — не квадратное число:

После применения правила while, когда P равно правда , осталось доказать

,

что следует из правила пропуска и правила последствий.

На самом деле странная программа отчасти правильна: если бы она завершилась, то наверняка x (случайно) содержал бы значение квадратного корня.Во всех остальных случаях оно не будет прекращено; поэтому это не совсем правильно.

Хотя правило полной правильности

[ редактировать ]

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

В этом правиле, помимо сохранения инварианта цикла, также доказывается завершение с помощью выражения t , называемого вариантом цикла , значение которого строго уменьшается по отношению к обоснованному отношению < на некотором множестве доменов D во время каждой итерации. Поскольку < обосновано, строго убывающая цепочка членов D может иметь только конечную длину, поэтому t не может уменьшаться вечно. (Например, обычный порядок < хорошо обоснован для натуральных чисел , но ни в целых числах ни о положительных действительных числах ; все эти множества подразумеваются в математическом, а не в вычислительном смысле; в частности, все они бесконечны.)

Учитывая инвариант цикла P , условие B должно подразумевать, что t не является минимальным элементом , D поскольку в противном случае тело S не могло бы уменьшать t дальше, т. е. посылка правила была бы ложной. (Это одно из различных обозначений полной правильности.) [примечание 3]

Возвращаясь к первому примеру предыдущего раздела , для доказательства полной корректности

правило while для полной корректности может быть применено, например, D — это неотрицательные целые числа обычного порядка, а выражение t , что затем, в свою очередь, требует доказать

Неформально говоря, нам нужно доказать, что расстояние уменьшается в каждом цикле цикла, при этом всегда остается неотрицательным; этот процесс может продолжаться лишь конечное число циклов.

Предыдущую цель доказательства можно упростить до

,

что можно доказать следующим образом:

получается по правилу присваивания, а
можно усилить до по правилу последствий.

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

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Хоар первоначально написал " " скорее, чем " ".
  2. ^ В этой статье для правил используется естественная дедуктивная нотация. Например, неформально означает: «Если выполняются и α , и β , то выполняется и φ »; α и β называются предшественниками правила, φ называется его последователем. Правило без антецедентов называется аксиомой и записывается как .
  3. ^ Статья Хоара 1969 года не содержала правила полной корректности; ср. его обсуждение на стр.579 (вверху слева). Например учебник Рейнольдса [3] дает следующую версию правила полной корректности: когда z — целочисленная переменная, которая не встречается в свободном виде в P , B , S или t , а t — целочисленное выражение (переменные Рейнольдса переименованы, чтобы соответствовать настройкам этой статьи).
  1. ^ Jump up to: а б Хоар, ЦАР (октябрь 1969 г.). «Аксиоматические основы компьютерного программирования» . Коммуникации АКМ . 12 (10): 576–580. дои : 10.1145/363235.363259 . S2CID   207726175 .
  2. ^ Р.В. Флойд . « Придание значения программам ». Труды симпозиума Американского математического общества по прикладной математике. Том. 19, стр. 19–31. 1967.
  3. ^ Jump up to: а б Джон К. Рейнольдс (2009). Теории языков программирования . Издательство Кембриджского университета. ) Здесь: Разд. 3.4, с. 64.
  4. ^ Хоар (1969), стр.578-579.
  5. ^ Хут, Майкл; Райан, Марк (26 августа 2004 г.). Логика в информатике (второе изд.). ЧАШКА. п. 276. ИСБН  978-0521543101 .
  6. ^ Апт, Кшиштоф Р.; Ольдерог, Эрнст-Рюдигер (декабрь 2019 г.). «Пятьдесят лет логики Хоара» . Формальные аспекты вычислений . 31 (6): 759. doi : 10.1007/s00165-019-00501-3 . S2CID   102351597 .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ca1af9f2ca0efac49cb646b7ba3786df__1712345700
URL1:https://arc.ask3.ru/arc/aa/ca/df/ca1af9f2ca0efac49cb646b7ba3786df.html
Заголовок, (Title) документа по адресу, URL1:
Hoare logic - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)