Введение

Правила проверки корректности компьютерных программ

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

Трижды

Центральным элементом логики Хоара является тройка Хоара. Тройка описывает, как выполнение фрагмента кода изменяет состояние вычисления. Тройка Хоара имеет вид {P} C {Q}, где P и Q – утверждения, а C – команда. P называется предусловием, а Q – постусловием: если предусловие истинно, то выполнение команды гарантирует истинность постусловия. Утверждения – это формулы в логике предикатов. Логика Хоара предоставляет аксиомы и правила вывода для всех конструкций простого императивного языка программирования. Помимо правил для простого языка, представленных в оригинальной работе Хоара, с тех пор Хоаром и многими другими исследователями были разработаны правила для других языковых конструкций. Существуют правила для работы с конкурентностью, процедурами, переходами и указателями.

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

Используя стандартную логику Хоаре, можно доказать только частичную корректность. Полная корректность дополнительно требует доказательства завершения, которое можно доказать отдельно или с использованием расширенной версии правила While. Таким образом, интуитивное понимание тройки Хоаре заключается в следующем: если выполняется условие в состоянии перед выполнением , то будет выполняться после его выполнения, или не завершится. В последнем случае "после" не существует, поэтому может быть любым утверждением. Действительно, можно выбрать ложным, чтобы выразить, что не завершается. Под "завершением" здесь и во всей статье подразумевается в широком смысле конечное завершение вычислений, то есть отсутствие бесконечных циклов; это не подразумевает отсутствие нарушений предельных ограничений реализации (например, деления на ноль), приводящих к преждевременной остановке программы. В своей статье 1969 года Хоар использовал более узкое понятие завершения, которое также включало отсутствие нарушений ограничений реализации, и выразил предпочтение более широкому понятию завершения, поскольку оно обеспечивает независимость утверждений от реализации.

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

Правило пустого оператора утверждает, что оператор не изменяет состояние программы, следовательно, все, что было истинно до его выполнения, останется истинным и после него.