Если вы внимательно прочитать книгу, вы увидите, что правило Фюля для оператора выбора выглядит следующим образом:
{B and P} S1 {Q}, {(not B) and P} S2 {Q}
--------------------------------------
{P} if B then S1 else S2 {Q}
Вы можете найти совершенно очевидный факт в книге, что
первый логический оператор над линией представляет , а затем; второй представляет еще статья.
Так что если у вас есть только то раздел правило меняется
{B and P} S {Q}, {not B and P} {Q}
--------------------------------------
{P} if B then S {Q}
Это очень логическое правило. Вы достигнете последовательности S, если и только если B это правда. Поэтому вы можете добавить его к утверждению о предварительном условии.
В вашем случае правило вывода выглядит следующим образом:
{n < 0 and n != 0} n = -n {n > 0}, {n >= 0 and n != 0} {n > 0}
--------------------------------------------------------------
{n != 0} if n < 0 then n = -n {n > 0}
Если мы докажем, логические операторы выше линии мы будем доказывать утверждение ниже линии.
Заявление
{n < 0 and n != 0} n = -n {n > 0}
можно доказать назначения аксиомы, которую можно найти на странице 150 в книге.
n = -n {n > 0}
Мы должны заменить п с п = -n в постусловии.Таким образом, мы имеем
{-n > 0}
, который приравнивает к
{n < 0}
, который, в свою очередь удовлетворяет предусловий.
Заявление
{n >= 0 and n != 0} {n > 0}
, очевидно, правильно тоже. Ну, мы убедились, что оба оператора над строкой верны, поэтому утверждение ниже строки правильное.