Учитывая инвариант цикла, Википедия перечисляет хороший способ создать самые слабые предварительные условия для цикла (из http://en.wikipedia.org/wiki/Predicate_transformer_semantics):
wp(while E inv I do S, R) =
I \wedge
\forall y. ((E \wedge I) \implies wp(S,I \wedge x < y))[x <- y] \wedge
\forall y. ((\neg E \wedge I) \implies R)[x <- y]
where y is a tuple of fresh variables.
M[x ‹- N] заменяет все вхождения x в M на N.
Теперь моя проблема - это переменная y. \forall y связывает y в выражении, поэтому «y - это кортеж свежих переменных» не анализируется для меня. Является ли y связанным в \forall таким же, как y в "[x ‹- y]"? Я просто не могу разобрать вышесказанное.
Изменить: перефразировано, чтобы избежать запроса ссылки.
Мой вопрос: какова прямая связь между инвариантами цикла и вычислением самых слабых предварительных условий, если таковые имеются. Кажется, что многие вещи, которые делаются на практике, ослабляют самое слабое предусловие для циклов до предусловия, подходящего для проверки. Приведенное выше из Википедии предполагает, что при наличии инварианта цикла действительно можно вычислить самые слабые предварительные условия на носу, но мне трудно понять это условие.