Jump to content

Семантика преобразователя предикатов

Семантика преобразователя предикатов была представлена ​​Эдсгером Дейкстрой в его основополагающей статье « Защищенные команды, неопределенность и формальный вывод программ ». Они определяют семантику императивной парадигмы программирования , присваивая каждому оператору этого языка соответствующий преобразователь предикатов : общую функцию между двумя предикатами в пространстве состояний оператора. В этом смысле семантика предикатов-преобразователей является разновидностью денотационной семантики . На самом деле в защищенных командах Дейкстра использует только один вид преобразователя предикатов: хорошо известные слабейшие предусловия (см. ниже).

Более того, семантика преобразователя предикатов представляет собой переформулировку логики Флойда-Хоара . В то время как логика Хоара представлена ​​как дедуктивная система , семантика преобразователя предикатов (либо с помощью слабейших предусловий , либо с помощью сильнейших постусловий , см. ниже) представляет собой полноценную стратегию построения действительных выводов логики Хоара. Другими словами, они предоставляют эффективный алгоритм , позволяющий свести проблему проверки тройки Хоара к проблеме доказательства формулы первого порядка . Технически семантика преобразователя предикатов выполняет своего рода символическое выполнение операторов в предикатах: выполнение выполняется назад в случае самых слабых предусловий или вперед в случае самых сильных постусловий.

Самые слабые предпосылки

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

Определение

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

Для утверждения S и постусловия R самым слабым предусловием является предикат Q что для любого предусловия P такой , тогда и только тогда, когда . Другими словами, это «самое слабое» или наименее ограничительное требование, необходимое для того, чтобы гарантировать R после S. выполнение Единственность легко следует из определения: если Q и Q' являются слабейшими предусловиями, то по определению так и так , и таким образом . Мы часто используем для обозначения самого слабого предварительного условия утверждения S относительно постусловия R .

Конвенции

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

Мы используем T для обозначения предиката, который всюду истинен, и F для обозначения предиката, который всюду ложен. Мы не должны, по крайней мере, концептуально путать себя с логическим выражением, определенным некоторым синтаксисом языка, которое также может содержать true и false в виде логических скаляров. Для таких скаляров нам нужно выполнить приведение типов так, чтобы мы имели T = predicate(true) и F = predicate(false). Такое продвижение часто осуществляется небрежно, поэтому люди склонны воспринимать Т как истинное, а F как ложное.

Пропускать

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

Прервать

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

Назначение

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

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

  • версия 1:

где y — новая переменная, несвободная в E и R (представляющая окончательное значение переменной x )

  • версия 2:

При условии, что E корректно определено, мы просто применяем так называемое правило одной точки к версии 1. Тогда

Первая версия позволяет избежать потенциального дублирования x в R встречается не более одного раза , тогда как вторая версия проще, когда x в R . Первая версия также обнаруживает глубокую двойственность между самым слабым предусловием и самым сильным постусловием (см. ниже).

Пример правильного расчета wp (с использованием версии 2) для присваиваний с целочисленной переменной x :

Это означает, что для того, чтобы постусловие x > 10 было истинным после присваивания, предусловие x > 15 должно быть истинным до присваивания. Это также «самое слабое предварительное условие», поскольку это «самое слабое» ограничение на значение x , которое делает x > 10 истинным после присваивания.

Последовательность

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

Например,

Условный

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

В качестве примера:

Пока цикл

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

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

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

На мгновение игнорируя завершение, мы можем определить правило для самого слабого либерального предварительного условия , обозначаемого wlp , используя предикат INV , называемый Loop INV ariant , обычно предоставляемый программистом:

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

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

Чтобы доказать полную корректность, нам также нужно показать, что цикл завершается. Для этого мы определяем обоснованное отношение в пространстве состояний, обозначаемое как ( wfs , <), и определяем вариантную функцию vf , такую, что мы имеем:

где v — новый набор переменных

Неформально, в приведенном выше сочетании трех формул:

  • первый означает, что вариант должен быть частью обоснованного отношения перед входом в цикл;
  • второй означает, что тело цикла (т.е. оператор S ) должно сохранить инвариант и сократить вариант;
  • последнее означает, что постусловие цикла R должно быть установлено после завершения цикла.

Однако соединение этих трех не является необходимым условием. Точно, у нас есть

Недетерминированные защищенные команды

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

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

  • что существует завершающее выполнение (например, существует реализация),
  • и что конечное состояние всего завершающегося выполнения удовлетворяет постусловию.

Обратите внимание, что определения слабейшего предусловия, данные выше (в частности, для цикла while ), сохраняют это свойство.

Выбор — это обобщение оператора if :

[ нужна ссылка ]

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

Повторение

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

обобщение оператора while Повторение — это аналогичное .

Заявление о спецификации

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

Уточняющее исчисление расширяет GCL понятием спецификации . Синтаксически мы предпочитаем писать оператор спецификации как

     

который определяет вычисление, которое начинается в состоянии, удовлетворяющем pre , и гарантируется закончить постом, удовлетворяющим состояние изменив только x . Мы звоним логическая константа, используемая для помощи в спецификации. Например, мы можем указать вычисление, которое увеличивает x на 1 как

     

Другой пример — вычисление квадратного корня из целого числа.

     

Оператор спецификации выглядит как примитив в том смысле, что он не содержит других операторов. Однако оно очень выразительно, поскольку pre и post — произвольные предикаты. Его самое слабое условие состоит в следующем.

где s свежий.

Он сочетает в себе синтаксическую идею Моргана с идеей резкости Байлсмы, Мэтьюза и Уилтинка. [1] Большим преимуществом этого является возможность определения wp для goto L и других операторов перехода. [2]

Перейти к оператору

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

Формализация операторов перехода, таких как goto L занимает очень долгий и трудный процесс. Распространенное мнение, похоже, указывает на то, что оператор goto может быть аргументирован только операционально. Вероятно, это связано с неспособностью признать, что goto L на самом деле является чудесным (то есть нестрогим) и не следует придуманному Дейкстрой Закону Исключенного Чуда, как он есть сам по себе. Но он имеет чрезвычайно простой эксплуатационный вид с точки зрения самых слабых предварительных условий, что было неожиданным. Мы определяем

где wpL — самое слабое предварительное условие на L. метке

Для Выполнение goto L передает управление метке L, на которой должно выполняться самое слабое предварительное условие. То, как wpL упоминается в правиле, не должно вызывать большого удивления. Это просто для некоторого Q, вычисленного до этой точки. Это похоже на любые правила wp, использующие составные операторы для определения wp, даже несмотря на то, что goto L выглядит примитивом. Правило не требует уникальности для мест, где находится wpL внутри программы, поэтому теоретически оно позволяет одной и той же метке появляться в нескольких местах, пока самым слабым предварительным условием в каждом месте является один и тот же wpL. Оператор goto может перейти в любое из таких мест. Это фактически оправдывает то, что мы можем размещать одни и те же метки в одном и том же месте несколько раз, как , что то же самое, что . Кроме того, он не подразумевает каких-либо правил области видимости, что позволяет, например, перейти в тело цикла. Вычислим wp следующей программы S, имеющей переход в тело цикла.

 wp(do x > 0 → L: x := x-1 od; если x < 0 → x := -x; перейти к L ⫿ x ≥ 0 → пропустить fi, опубликовать)   = { правила последовательной композиции и чередования }     wp(do x > 0 → L: x := x-1 od, (x<0 ∧ wp(x := -x; переход к L, сообщение)) ∨ (x ≥ 0 ∧ сообщение)   = { последовательная композиция, переход, правила присваивания }     wp(do x > 0 → L: x := x-1 od, x<0 ∧ wpL(x ← -x) ∨ x≥0 ∧ post)   = {правило повторения }     самое сильное решение               Z: [ Z ≡ x > 0 ∧ wp(L: x := x-1, Z) ∨ x < 0 ∧ wpL(x ← -x) ∨ x=0 ∧ post ]       = {правило присваивания, найдено wpL = Z(x ← x-1) }     самое сильное решение               Z: [ Z ≡ x > 0 ∧ Z(x ← x-1) ∨ x < 0 ∧ Z(x ← x-1) (x ← -x) ∨ x=0 ∧ post]   = { замена }     самое сильное решение               Z:[ Z ≡ x > 0 ∧ Z(x ← x-1) ∨ x < 0 ∧ Z(x ← -x-1) ∨ x=0 ∧ post ]   = {решить уравнение аппроксимацией }     сообщение(х ← 0) 

Поэтому,

wp(S, сообщение) = сообщение(х ← 0). 

Другие преобразователи предикатов

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

Самое слабое либеральное условие

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

Важным вариантом самого слабого предварительного условия является самое слабое либеральное предварительное условие. , что дает самое слабое условие, при котором S либо не завершается, либо устанавливает R . Поэтому он отличается от wp тем, что не гарантирует завершения. Следовательно, это соответствует логике Хоара с частичной корректностью: для языка операторов, приведенного выше, wlp отличается от wp только в while-loop , не требуя варианта (см. выше).

Сильнейшее постусловие

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

Если S — утверждение, а R ( — предусловие предикат начального состояния), то является их сильнейшим постусловием : оно подразумевает любое постусловие, удовлетворяемое конечным состоянием любого выполнения S, для любого начального состояния, удовлетворяющего R. Другими словами, тройка Хоара доказуемо в логике Хоара тогда и только тогда, когда выполняется приведенный ниже предикат:

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

Например, по заданию имеем:

где ты свежий

Выше логическая переменная y представляет начальное значение переменной x .Следовательно,

Судя по последовательности, sp работает вперед (тогда как wp работает назад):

Преобразователи предикатов выигрыша и греха

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

Лесли Лэмпорт предложил выигрыш и грех в качестве преобразователей предикатов для параллельного программирования . [3]

Свойства преобразователей предикатов

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

В этом разделе представлены некоторые характерные свойства преобразователей предикатов. [4] Ниже S обозначает преобразователь предикатов (функция между двумя предикатами в пространстве состояний), а P — предикат. Например, S(P) может обозначать wp(S,P) или sp(S,P) . Мы сохраняем x как переменную пространства состояний.

монотонный

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

Интересующие преобразователи предикатов ( wp , wlp и sp ) монотонны . Предикатный преобразователь S монотонен тогда и только тогда, когда:

Это свойство связано с правилом следствий логики Хоара .

Предикатный преобразователь S является строгим тогда и только тогда, когда:

Например, wp искусственно становится строгим, тогда как wlp обычно не является строгим. В частности, если оператор S не может завершиться, то является удовлетворительным. У нас есть

Действительно, T является допустимым инвариантом этого цикла.

Нестрогие, но монотонные или конъюнктивные преобразователи предикатов называются чудесными и могут также использоваться для определения класса программных конструкций, в частности, операторов перехода, которые Дейкстра меньше всего заботил. Эти операторы перехода включают в себя прямой переход к L, операторы прерывания и продолжения в цикле и операторы возврата в теле процедуры, обработку исключений и т. д. Оказывается, все операторы перехода — это исполняемые чудеса, [5] т.е. они могут быть реализованы, но не строго.

Прекращение

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

Преобразователь предикатов S завершается , если:

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

Кажется, правильнее было бы назвать это свойство непрерыванием : в полной корректности непрерывание есть аборт, а в частичной корректности - нет.

соединительный

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

Предикатный преобразователь S является конъюнктивным тогда и только тогда, когда:

Это относится к , даже если оператор S недетерминирован как оператор выбора или оператор спецификации.

Дизъюнктивный

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

Преобразователь предикатов S является дизъюнктивным тогда и только тогда, когда:

Обычно это не тот случай когда S недетерминирован. Действительно, рассмотрим недетерминированное утверждение S, выбирающее произвольное логическое значение. Этот оператор представлен здесь как следующий оператор выбора :

Затем, сводится к формуле .

Следовательно, сводится к тавтологии

Тогда как формула сводится к неправильному предложению .

Приложения

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

За пределами преобразователей предикатов

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

Слабейшие предусловия и сильнейшие постусловия императивных выражений

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

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

Среди них теория типов Хоара сочетает в себе логику Хоара для языка, подобного Haskell , логику разделения и теорию типов . [9] Эта система в настоящее время реализована как библиотека Coq под названием Ynot . [10] В этом языке вычисление выражений соответствует вычислению сильнейших постусловий .

Вероятностные преобразователи предикатов

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

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

См. также

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

Примечания

[ редактировать ]
  1. ^ Чен, Вэй и Уддинг, Ян Таймен, «Уточнение спецификации» WUCS-89-37 (1989). https://openscholarship.wustl.edu/cse_research/749
  2. ^ Чен, Вэй, «Характеристика операторов перехода», Международный симпозиум по теоретическим аспектам программной инженерии (TASE), 2021 г., стр. 15-22. дои: 10.1109/TASE52547.2021.00019.
  3. ^ Лэмпорт, Лесли (июль 1990 г.). « Победа и грех : преобразователи предикатов для параллелизма» . АКМ Транс. Программа. Ланг. Сист. 12 (3): 396–428. CiteSeerX   10.1.1.33.90 . дои : 10.1145/78969.78970 . S2CID   209901 .
  4. ^ Назад, Ральф-Йохан; Райт, Йоаким (2012) [1978]. Уточняющее исчисление: систематическое введение . Тексты по информатике. Спрингер. ISBN  978-1-4612-1674-2 .
  5. ^ Чен, Вэй, «Заявления о выходе - исполняемые чудеса» WUCS-91-53 (1991). https://openscholarship.wustl.edu/cse_research/671
  6. ^ Дейкстра, Эдсгер В. (1968). «Конструктивный подход к проблеме корректности программ». БИТ Численная математика . 8 (3): 174–186. дои : 10.1007/bf01933419 . S2CID   62224342 .
  7. ^ Вирт, Н. (апрель 1971 г.). «Разработка программы путем поэтапной доработки» (PDF) . Комм. АКМ . 14 (4): 221–7. дои : 10.1145/362575.362577 . hdl : 20.500.11850/80846 . S2CID   13214445 .
  8. ^ Учебное пособие по логике Хоара : библиотека Coq , дающая простое, но формальное доказательство того, что логика Хоара является правильной и полной с точки зрения операционной семантики .
  9. ^ Наневский, Александр; Моррисетт, Грег; Биркедал, Ларс (сентябрь 2008 г.). «Теория типов Хоара, полиморфизм и разделение» (PDF) . Журнал функционального программирования . 18 (5–6): 865–911. дои : 10.1017/S0956796808006953 . S2CID   6956622 .
  10. ^ Ynot библиотека Coq , реализующая теорию типов Хоара.
  11. ^ Морган, Кэрролл; МакИвер, Аннабель ; Зайдель, Карен (май 1996 г.). «Вероятностные преобразователи предикатов» (PDF) . АКМ Транс. Программа. Ланг. Сист . 18 (3): 325–353. CiteSeerX   10.1.1.41.9219 . дои : 10.1145/229542.229547 . S2CID   5812195 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d2cec9f4578148d5fd8ca05e11b123f0__1720497300
URL1:https://arc.ask3.ru/arc/aa/d2/f0/d2cec9f4578148d5fd8ca05e11b123f0.html
Заголовок, (Title) документа по адресу, URL1:
Predicate transformer semantics - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)