Page 69 - 6571
P. 69

Передумова  спрощується  до  предиката  true,  яким  характе-
            ризуються всі стани. Таким чином, ця трійка означає, що, неза-
            лежно від початкового стану, після присвоювання змінній x зна-

            чення 1 отримується стан, що задовольняє предикату x == 1.
                  Більш загальний спосіб розгляду операції присвоєння можна
            охарактеризувати  фразою  «йти  вперед»,  тобто  розгляд  почина-

            ється з деякого предиката, що характеризує поточний стан, а по-
            тім  записується  предикат,  істинний  для  стану,  що  отримується
            після виконання операції присвоєння. Наприклад, якщо почати в
            стані, в якому x == 0, і додати 1 до x, то в результуючому стані

            значенням змінної x буде 1. Ця операція описується наступною
            трійкою

                  {x == 0} x = 1; {x == 1}.

                  Аксіома присвоєння описує зміну стану. Правила виведення
            в  такій  логіці  програмування  дозволяють  поєднувати  теореми,

            отримані з окремих випадків аксіоми присвоєння. Зокрема, пра-
            вила виведення використовуються для опису композиції операто-
            рів (списків операторів) і операторів керування, наприклад if та

            while. Вони також дозволяють змінювати предикати в трійках.
                  На рисунку 8.1 представлені чотири найбільш важливих пра-
            вила виведення. Правило композиції дозволяє склеїти трійки для

            двох  операторів,  виконуваних  один  за  одним.  Перша  гіпотеза  в
            правилі  оператора  if  характеризує  результат  виконання  опера-
            тора S, коли умова істинна; другий описує, що є істинно, якщо  B
            хиба. Як простий приклад використання цих правил розглянемо

            програму, яка присвоює змінній m максимальне із значень x та y.

                  {true} m = x; {m == x}
                  if (y > m) m = y;
                  {(m == xÙm >= y) or (m == y)Ùm > x)}

                  При будь-якому початковому стані перше присвоєння приз-
            водить  до  стану,  коли  m == x.  Після  виконання  оператора  if

            значення  змінної  m  рівне  x  і  не  менше  y,  або  воно  рівне  y  і  не
            більше за x.

                                                                 { }P S   { }, { }Q  Q S  { }R
                  Правило композиції                                     1              2
                                                                               ;
                                                                       { }P S S    2  { }R
                                                                              1



                                                        68
   64   65   66   67   68   69   70   71   72   73   74