SlideShare a Scribd company logo
1



       Semantiky programovacıch jazyku
        ´                   ´        ˚


Doporuc ´ literatura
      ˇena

• Glynn Winskel: The Formal Semantics of Programming Languages


• Matthew Hennesy: The Semantics of Programming Languages




• PDF a PS soubor teto prezentace je dostupny na
                   ´                        ´
    http://www.fi.muni.cz/usr/kucera/teach.html
2
                      Definice programovacıho jazyka
                                         ´



• Syntaxe definuje „spravne utvorene“ programy (akceptovane prekladac
                      ´ ˇ      ˇ ´                       ´ ˇ       ˇem).
    lexikalnı jednotky (klıc ´ slova, identifikatory, konstanty, operatory, . . . )
         ´ ´              ´ ˇova              ´                     ´

    frazova struktura (urc
      ´   ´              ˇuje jake posloupnosti lexikalnıch jednotek jsou „pr´pustne“
                                 ´                   ´ ´                    ˇı     ´
2
                      Definice programovacıho jazyka
                                         ´



• Syntaxe definuje „spravne utvorene“ programy (akceptovane prekladac
                      ´ ˇ      ˇ ´                       ´ ˇ       ˇem).
    lexikalnı jednotky (klıc ´ slova, identifikatory, konstanty, operatory, . . . )
         ´ ´              ´ ˇova              ´                     ´

    frazova struktura (urc
      ´   ´              ˇuje jake posloupnosti lexikalnıch jednotek jsou „pr´pustne“
                                 ´                   ´ ´                    ˇı     ´




• Semantika popisuje chovanı programu (co program „dela“)
   ´                     ´ ´                        ˇ ´
    neformalnı (uc
          ´ ´ ˇebnice programovacıch jazyku)
                                 ´        ˚

    formalnı („matematicka“)
        ´ ´              ´
3
                ´ ˇel
                Uc a pouzitelnost formalnı semantiky
                        ˇ             ´ ´ ´


• Korektnost implementace
    prekladac (co musı splnovat, aby byl „spravny“?)
     ˇ      ˇ        ´    ˇ                  ´ ´
    optimalizator (jake upravy kodu jsou „pr´pustne“?)
             ´        ´ ´       ´          ˇı     ´
3
                ´ ˇel
                Uc a pouzitelnost formalnı semantiky
                        ˇ             ´ ´ ´


• Korektnost implementace
    prekladac (co musı splnovat, aby byl „spravny“?)
     ˇ      ˇ        ´    ˇ                  ´ ´
    optimalizator (jake upravy kodu jsou „pr´pustne“?)
             ´        ´ ´       ´          ˇı     ´


• Verifikace programu
                   ˚
    vlastnosti programu (jak je vyjadrit, jak dokazat ze dany program ma danou vlastnost?)
                      ˚            ´ ˇ           ´    ˇ     ´          ´
    ekvivalence programu (co znamena, ze se dva programy „chovajı stejne“?)
                       ˚           ´ ˇ                          ´      ˇ
    systemy, ktere jsou paralelnı, distribuovane, pracujı s realnym c
        ´         ´             ´              ´        ´     ´ ´ ˇasem, nebo jsou r´zene
                                                                                   ˇı   ´
    udalostmi, nelze „ladit“!
      ´
     X := X + 1   X := X + 1
3
                ´ ˇel
                Uc a pouzitelnost formalnı semantiky
                        ˇ             ´ ´ ´


• Korektnost implementace
    prekladac (co musı splnovat, aby byl „spravny“?)
     ˇ      ˇ        ´    ˇ                  ´ ´
    optimalizator (jake upravy kodu jsou „pr´pustne“?)
             ´        ´ ´       ´          ˇı     ´


• Verifikace programu
                   ˚
    vlastnosti programu (jak je vyjadrit, jak dokazat ze dany program ma danou vlastnost?)
                      ˚            ´ ˇ           ´    ˇ     ´          ´
    ekvivalence programu (co znamena, ze se dva programy „chovajı stejne“?)
                       ˚           ´ ˇ                          ´      ˇ
    systemy, ktere jsou paralelnı, distribuovane, pracujı s realnym c
        ´         ´             ´              ´        ´     ´ ´ ˇasem, nebo jsou r´zene
                                                                                   ˇı   ´
    udalostmi, nelze „ladit“!
      ´
     X := X + 1   X := X + 1


• Navrh programovacıch jazyku
   ´               ´        ˚
4
       Zakladnı „styly“ semantik programovacıch jazyku
        ´     ´          ´                  ´        ˚



• Operac ´ semantika definuje jak se program provadı
       ˇnı ´                                    ´ ´
4
       Zakladnı „styly“ semantik programovacıch jazyku
        ´     ´          ´                  ´        ˚



• Operac ´ semantika definuje jak se program provadı
       ˇnı ´                                    ´ ´

• Denotac ´ semantika definuje co program poc´ta
        ˇnı ´                              ˇı ´
4
       Zakladnı „styly“ semantik programovacıch jazyku
        ´     ´          ´                  ´        ˚



• Operac ´ semantika definuje jak se program provadı
       ˇnı ´                                    ´ ´

• Denotac ´ semantika definuje co program poc´ta
        ˇnı ´                              ˇı ´

• Axiomaticka semantika umoznuje odvodit vlastnosti programu
            ´ ´            ˇˇ
5
                Abstraktnı syntax programovacıch jazyku
                         ´                   ´        ˚


• Abstraktnı syntakticka rovnice: rovnice tvaru
           ´           ´
    X   ::=    at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm))
  kde
     at1, · · · , atn jsou atomy.
     op1, · · · , opm jsou operace (ktere mohou mıt i nulovou aritu – pak jde o konstanty).
                                        ´        ´
     α(i,j) je bud’ X nebo atom (opakovane vyskyty jsou rozliseny indexy).
                                         ´ ´                 ˇ
     Pro kazdy atom ati je dana jeho syntakticka domena (mnozina) Ai.
           ˇ ´              ´                  ´    ´       ˇ
5
                Abstraktnı syntax programovacıch jazyku
                         ´                   ´        ˚


• Abstraktnı syntakticka rovnice: rovnice tvaru
           ´           ´
    X   ::=    at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm))
  kde
     at1, · · · , atn jsou atomy.
     op1, · · · , opm jsou operace (ktere mohou mıt i nulovou aritu – pak jde o konstanty).
                                        ´        ´
     α(i,j) je bud’ X nebo atom (opakovane vyskyty jsou rozliseny indexy).
                                         ´ ´                 ˇ
     Pro kazdy atom ati je dana jeho syntakticka domena (mnozina) Ai.
           ˇ ´              ´                  ´    ´       ˇ



• Pr´klad:
   ˇı

    X   ::=    num | ω | X0+X1 | X0−X1

  Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel, ω je konstanta.
                  ´                           ´ ´         ´   ˇı
6
                                     Syntakticke stromy
                                               ´

• Uvazme abstraktnı syntaktickou rovnici
     ˇ            ´
    X   ::=   at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm))
• Mnozina syntaktickych stromu pro X je definovana induktivne:
     ˇ              ´        ˚                ´            ˇ
     Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem
                             ´      ´   ˇ   ´         ˚                                   ´
     a syntakticky strom pro X vysky 0.
                  ´              ´ˇ
     Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0.
                                         ´                     ´              ´ˇ
     Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky,
                                                                           ˇ             ´     ´
     kde i-ty naslednık je bud’
             ´ ´      ´
     ∗ koren syntaktickeho stromu pro X, je-li αi = X,
         ˇ             ´
     ∗ prvek syntakticke domeny atomu at, je-li αi = at.
                       ´    ´
     take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene
        ´           ´                  ´ˇ                             ´ˇ    ´     ´ ˚ ˇ
     (prvky syntaktickych domen atomu majı vysku 0).
                      ´      ´       ˚    ´ ´ˇ
6
                                     Syntakticke stromy
                                               ´

• Uvazme abstraktnı syntaktickou rovnici
     ˇ            ´
    X   ::=   at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm))
• Mnozina syntaktickych stromu pro X je definovana induktivne:
     ˇ              ´        ˚                ´            ˇ
     Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem
                             ´      ´   ˇ   ´         ˚                                   ´
     a syntakticky strom pro X vysky 0.
                  ´              ´ˇ
     Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0.
                                         ´                     ´              ´ˇ
     Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky,
                                                                           ˇ             ´     ´
     kde i-ty naslednık je bud’
             ´ ´      ´
     ∗ koren syntaktickeho stromu pro X, je-li αi = X,
         ˇ             ´
     ∗ prvek syntakticke domeny atomu at, je-li αi = at.
                       ´    ´
     take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene
        ´           ´                  ´ˇ                             ´ˇ    ´     ´ ˚ ˇ
     (prvky syntaktickych domen atomu majı vysku 0).
                      ´      ´       ˚    ´ ´ˇ
• U syntaktickych stromu rozlisujeme poradı naslednıku.
              ´        ˚      ˇ        ˇ ´ ´       ´ ˚
6
                                     Syntakticke stromy
                                               ´

• Uvazme abstraktnı syntaktickou rovnici
     ˇ            ´
    X   ::=   at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm))
• Mnozina syntaktickych stromu pro X je definovana induktivne:
     ˇ              ´        ˚                ´            ˇ
     Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem
                             ´      ´   ˇ   ´         ˚                                   ´
     a syntakticky strom pro X vysky 0.
                  ´              ´ˇ
     Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0.
                                         ´                     ´              ´ˇ
     Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky,
                                                                           ˇ             ´     ´
     kde i-ty naslednık je bud’
             ´ ´      ´
     ∗ koren syntaktickeho stromu pro X, je-li αi = X,
         ˇ             ´
     ∗ prvek syntakticke domeny atomu at, je-li αi = at.
                       ´    ´
     take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene
        ´           ´                  ´ˇ                             ´ˇ    ´     ´ ˚ ˇ
     (prvky syntaktickych domen atomu majı vysku 0).
                      ´      ´       ˚    ´ ´ˇ
• U syntaktickych stromu rozlisujeme poradı naslednıku.
              ´        ˚      ˇ        ˇ ´ ´       ´ ˚
• Je mozne definovat i systemy syntaktickych rovnic, kde mnozina syntaktickych stromu urc ´
        ˇ ´                ´             ´                  ˇ             ´        ˚ ˇena
  jednou rovnicı definuje syntaktickou domenu atomu jine rovnice.
               ´                          ´           ´
7
                     Pr´klad definice abstraktnı syntaxe
                      ˇı                      ´


•    X   ::=   num | X0+X1 | X0−X1
    Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel.
                    ´                           ´ ´         ´   ˇı
7
                     Pr´klad definice abstraktnı syntaxe
                      ˇı                      ´


•    X   ::=   num | X0+X1 | X0−X1
    Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel.
                    ´                           ´ ´         ´   ˇı

•    Y   ::=   color(X0, X1, X2) | Y0#Y1 | Y0&Y1
    Syntaktickou domenou atomu X je mnozina vsech syntaktickych stromu pro X.
                    ´                  ˇ     ˇ              ´        ˚
7
                             Pr´klad definice abstraktnı syntaxe
                              ˇı                      ´


•    X       ::=       num | X0+X1 | X0−X1
    Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel.
                    ´                           ´ ´         ´   ˇı

•    Y       ::=       color(X0, X1, X2) | Y0#Y1 | Y0&Y1
    Syntaktickou domenou atomu X je mnozina vsech syntaktickych stromu pro X.
                    ´                  ˇ     ˇ              ´        ˚

             +                                                   &


         −                                       #                       color
                   8


     1       4                       color               color       1     2     4


                                 2    +      4       3    +      7


                                 −                   3           8
                                             8


                             1        4
8
             Konkretnı syntax programovacıch jazyku
                  ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´         ˇny
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´         ˇny
     prefixova notace:
             ´              + − 148
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´         ˇny
     prefixova notace:
             ´              + − 148
     postfixova notace:
               ´            841 − +
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´          ˇny
     prefixova notace:
             ´              + − 148
     postfixova notace:
               ´            841 − +
     zavorky:
      ´                     (1 − 4)+8
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´          ˇny
     prefixova notace:
             ´              + − 148
     postfixova notace:
               ´            841 − +
     zavorky:
      ´                     (1 − 4)+8


• Volitelna else klauzule pr´kazu if − then − else
          ´                ˇı
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´          ˇny
     prefixova notace:
             ´              + − 148
     postfixova notace:
               ´            841 − +
     zavorky:
      ´                     (1 − 4)+8


• Volitelna else klauzule pr´kazu if − then − else
          ´                ˇı
    zavorky
      ´
8
                   Konkretnı syntax programovacıch jazyku
                        ´ ´                    ´        ˚

Urc
  ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu.
                    ˇne                     ´             ˇ ˇ           ˚
• Aritmeticke vyrazy
            ´ ´
           +


       −
               8


   1       4


  Zapis 1 − 4 + 8 nenı jednoznac ´.
   ´                 ´          ˇny
     prefixova notace:
             ´              + − 148
     postfixova notace:
               ´            841 − +
     zavorky:
      ´                     (1 − 4)+8


• Volitelna else klauzule pr´kazu if − then − else
           ´               ˇı
    zavorky
      ´
    klıc ´ slovo fi
      ´ ˇove
9
        Odvozovacı systemy, dukazy a dokazatelna tvrzenı
                 ´     ´     ˚                 ´       ´


• Odvozovacı system je dan konec
           ´     ´      ´      ˇnou mnozinou schemat axiomu a odvozovacıch pravidel tvaru
                                       ˇ        ´         ˚            ´

    predpoklad1 · · · predpokladn
     ˇ                 ˇ
                                  podmınky
                                      ´
               zaver
                ´ ˇ

• Dukaz je konec ´ strom, jehoz listy jsou instance axiomu a vnitrnı uzly instance pravidel.
   ˚           ˇny            ˇ                          ˚       ˇ ´

• Tvrzenı α je dokazatelne, jestlize existuje dukaz s korenem α.
        ´                ´        ˇ            ˚        ˇ

• Dukazove stromy je zvykem psat „korenem dolu“ (tj. „obracene“ nez syntakticke stromy).
   ˚     ´                    ´     ˇ        ˚           ´   ˇ    ˇ           ´
10
Odvozovacı system vyrokove logiky
         ´     ´   ´     ´
10
                   Odvozovacı system vyrokove logiky
                            ´     ´   ´     ´


• Abstraktnı syntax formulı vyrokove logiky:
           ´              ´ ´      ´
     ϕ    ::=   vyrok | ϕ0→ϕ1 | ¬ϕ
                 ´
                ´    ´          ´          ˇetna mnozina atomickych vyroku {A, B, C . . .}.
  kde syntakticka domena atomu vyrok je spoc   ´    ˇ           ´    ´   ˚
10
                   Odvozovacı system vyrokove logiky
                            ´     ´   ´     ´


• Abstraktnı syntax formulı vyrokove logiky:
           ´              ´ ´      ´
     ϕ    ::=   vyrok | ϕ0→ϕ1 | ¬ϕ
                 ´
                ´    ´          ´          ˇetna mnozina atomickych vyroku {A, B, C . . .}.
  kde syntakticka domena atomu vyrok je spoc   ´    ˇ           ´    ´   ˚
• Schemata axiomu odvozovacıho systemu vyrokove logiky
     ´          ˚          ´       ´    ´     ´
    ϕ → (ψ → ϕ)
    (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ))
    (¬ϕ → ¬ψ) → (ψ → ϕ)
10
                   Odvozovacı system vyrokove logiky
                            ´     ´   ´     ´


• Abstraktnı syntax formulı vyrokove logiky:
           ´              ´ ´      ´
     ϕ    ::=   vyrok | ϕ0→ϕ1 | ¬ϕ
                 ´
                ´    ´          ´          ˇetna mnozina atomickych vyroku {A, B, C . . .}.
  kde syntakticka domena atomu vyrok je spoc   ´    ˇ           ´    ´   ˚
• Schemata axiomu odvozovacıho systemu vyrokove logiky
     ´          ˚          ´       ´    ´     ´
    ϕ → (ψ → ϕ)
    (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ))
    (¬ϕ → ¬ψ) → (ψ → ϕ)
• Odvozovacı pravidlo modus ponens
           ´
   ϕ     ϕ→ψ
         ψ
10
                   Odvozovacı system vyrokove logiky
                            ´     ´   ´     ´


• Abstraktnı syntax formulı vyrokove logiky:
           ´              ´ ´      ´
     ϕ    ::=   vyrok | ϕ0→ϕ1 | ¬ϕ
                 ´
                ´    ´          ´          ˇetna mnozina atomickych vyroku {A, B, C . . .}.
  kde syntakticka domena atomu vyrok je spoc   ´    ˇ           ´    ´   ˚
• Schemata axiomu odvozovacıho systemu vyrokove logiky
     ´          ˚          ´       ´    ´     ´
    ϕ → (ψ → ϕ)
    (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ))
    (¬ϕ → ¬ψ) → (ψ → ϕ)
• Odvozovacı pravidlo modus ponens
           ´
   ϕ     ϕ→ψ
         ψ
• Pr´klad: A → A je dokazatelna formule.
   ˇı                         ´
                A → ((A → A) → A)    (A → ((A → A) → A)) → ((A → (A → A)) → (A → A))
A → (A → A)                            (A → (A → A)) → (A → A)
                                         A→A
11
                           Indukce k vysce stromu
                                      ´ˇ


• Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy
            ˇ  ´      ˇ         ˚     ˇne ´ ˇ        ˇ   ´                 ´          ˇ ´
  strom T ∈ M bud’ pravdiva nebo nepravdiva.
                          ´               ´
11
                            Indukce k vysce stromu
                                       ´ˇ


• Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy
            ˇ  ´      ˇ         ˚     ˇne ´ ˇ        ˇ   ´                 ´          ˇ ´
  strom T ∈ M bud’ pravdiva nebo nepravdiva.
                          ´               ´

• Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka:
        ´              ´ˇ                         ˇ    ´      ´ ´     ´
     Pro kazde n ∈ N0:
           ˇ ´

           Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde
                             ´       ˇ ´        ´ˇ      ˇı ˇ                      ´       ˇ ´
           T ∈ M vysky prave n.
                       ´ˇ      ´ ˇ

  Pak V je pravdiva pro vsechny stromy z M.
                  ´      ˇ
11
                            Indukce k vysce stromu
                                       ´ˇ


• Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy
            ˇ  ´      ˇ         ˚     ˇne ´ ˇ        ˇ   ´                 ´          ˇ ´
  strom T ∈ M bud’ pravdiva nebo nepravdiva.
                          ´               ´

• Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka:
        ´              ´ˇ                         ˇ    ´      ´ ´     ´
     Pro kazde n ∈ N0:
           ˇ ´

           Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde
                             ´       ˇ ´        ´ˇ      ˇı ˇ                      ´       ˇ ´
           T ∈ M vysky prave n.
                       ´ˇ      ´ ˇ

  Pak V je pravdiva pro vsechny stromy z M.
                  ´      ˇ

• Strukturalnı indukce: indukce k vysce (syntaktickeho) stromu, kde M je mnozina vsech
          ´ ´                      ´ˇ              ´                        ˇ     ˇ
  syntaktickych stromu urc ´ danou abstraktnı syntaktickou rovnicı.
            ´         ˚ ˇena                ´                    ´
11
                            Indukce k vysce stromu
                                       ´ˇ


• Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy
            ˇ  ´      ˇ         ˚     ˇne ´ ˇ        ˇ   ´                 ´          ˇ ´
  strom T ∈ M bud’ pravdiva nebo nepravdiva.
                          ´               ´

• Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka:
        ´              ´ˇ                         ˇ    ´      ´ ´     ´
     Pro kazde n ∈ N0:
           ˇ ´

           Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde
                             ´       ˇ ´        ´ˇ      ˇı ˇ                      ´       ˇ ´
           T ∈ M vysky prave n.
                       ´ˇ      ´ ˇ

  Pak V je pravdiva pro vsechny stromy z M.
                  ´      ˇ

• Strukturalnı indukce: indukce k vysce (syntaktickeho) stromu, kde M je mnozina vsech
          ´ ´                      ´ˇ              ´                        ˇ     ˇ
  syntaktickych stromu urc ´ danou abstraktnı syntaktickou rovnicı.
            ´         ˚ ˇena                ´                    ´

• Indukce k vysce odvozenı: indukce k vysce (dukazoveho) stromu, kde M je mnozina vsech
             ´ˇ          ´             ´ˇ     ˚     ´                        ˇ     ˇ
  dukazu daneho odvozovacıho systemu.
    ˚   ˚    ´             ´      ´
12
Abstraktnı syntaxe jazyka IMP
         ´
12
                         Abstraktnı syntaxe jazyka IMP
                                  ´


• Zakladnı syntakticke domeny
   ´     ´           ´    ´
   Num    =   {0, 1, −1, 2, −2, . . .}
   Bool   =   {tt, ff}
   Var    =   {A, B, C, . . .}
12
                            Abstraktnı syntaxe jazyka IMP
                                     ´


• Zakladnı syntakticke domeny
   ´     ´           ´    ´
   Num      =    {0, 1, −1, 2, −2, . . .}
   Bool     =    {tt, ff}
   Var      =    {A, B, C, . . .}
• Aritmeticke vyrazy Aexp
            ´ ´
    a     ::=   n | X | a0+a1 | a0−a1 | a0∗a1
  kde n ∈ Num a X ∈ Var.
12
                            Abstraktnı syntaxe jazyka IMP
                                     ´


• Zakladnı syntakticke domeny
   ´     ´           ´    ´
   Num      =    {0, 1, −1, 2, −2, . . .}
   Bool     =    {tt, ff}
   Var      =    {A, B, C, . . .}
• Aritmeticke vyrazy Aexp
            ´ ´
    a     ::=   n | X | a0+a1 | a0−a1 | a0∗a1
  kde n ∈ Num a X ∈ Var.
• Pravdivostnı vyrazy Bexp
             ´ ´
    b     ::=   t | a0=a1 | a0≤a1 | not b | b0 and b1 | b0 or b1
  kde t ∈ Bool a a0, a1 ∈ Aexp.
12
                            Abstraktnı syntaxe jazyka IMP
                                     ´


• Zakladnı syntakticke domeny
   ´     ´           ´    ´
   Num      =    {0, 1, −1, 2, −2, . . .}
   Bool     =    {tt, ff}
   Var      =    {A, B, C, . . .}
• Aritmeticke vyrazy Aexp
            ´ ´
    a     ::=   n | X | a0+a1 | a0−a1 | a0∗a1
  kde n ∈ Num a X ∈ Var.
• Pravdivostnı vyrazy Bexp
             ´ ´
    b     ::=   t | a0=a1 | a0≤a1 | not b | b0 and b1 | b0 or b1
  kde t ∈ Bool a a0, a1 ∈ Aexp.
• Pr´kazy Com
   ˇı
    c     ::=   skip | X := a | c0;c1 | if b then c0 else c1 | while b do c
  kde X ∈ Var, a ∈ Aexp a b ∈ Bexp.
13
                               Operac ´ semantika
                                    ˇnı ´


• Programum v danem jazyce je prirazen prechodovy system, ktery popisuje vypoc ´ procesy
            ˚       ´          ˇˇ       ˇ       ´     ´       ´           ´ ˇetnı
  jednotlivych programu.
           ´          ˚

• Prechodovy system: trojice (S, A, →), kde
   ˇ       ´     ´

     S   je mnozina konfiguracı (ne nutne konec ´ !)
               ˇ             ´         ˇ     ˇna

     A je mnozina akcı
             ˇ       ´

     →⊆S×A×S            je prechodova relace
                            ˇ       ´
13
                               Operac ´ semantika
                                    ˇnı ´


• Programum v danem jazyce je prirazen prechodovy system, ktery popisuje vypoc ´ procesy
            ˚       ´          ˇˇ       ˇ       ´     ´       ´           ´ ˇetnı
  jednotlivych programu.
           ´          ˚

• Prechodovy system: trojice (S, A, →), kde
   ˇ       ´     ´

     S   je mnozina konfiguracı (ne nutne konec ´ !)
               ˇ             ´         ˇ     ˇna

     A je mnozina akcı
             ˇ       ´

     →⊆S×A×S            je prechodova relace
                            ˇ       ´

• Jednotlive „typy“ operac ´ semantiky se lis´ definicı mnoziny konfiguracı a prechodove relace
           ´             ˇnı ´              ˇı       ´    ˇ             ´    ˇ       ´

     SMC stroj:   Stack – Memory – Control stack

     λ-kalkul

     SOS:    Strukturalnı Operac ´ Semantika
                     ´ ´       ˇnı ´
14
           SOS semantika IMP prvnıho typu („big step“)
                ´                ´


• Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ.
                  ´                 ˇ     ˇ        ˚       ˇı

• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Σ,
        ˇ             ´
     mnozina akcı je Com,
        ˇ       ´
                                                                   c
     prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc
      ˇ       ´              ´ ´ ´      ´                     ˚           ´ ˇ    ˇ ´ ˇet
     programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ .
                    ´   ´               ˇı    ˇ
14
            SOS semantika IMP prvnıho typu („big step“)
                 ´                ´


• Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ.
                  ´                 ˇ     ˇ        ˚       ˇı

• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Σ,
        ˇ             ´
     mnozina akcı je Com,
        ˇ       ´
                                                                   c
     prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc
      ˇ       ´              ´ ´ ´      ´                     ˚           ´ ˇ    ˇ ´ ˇet
     programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ .
                    ´   ´               ˇı    ˇ

• Za tımto uc
      ´    ´ ˇelem definujeme odvozovacı systemy pro tri relace:
                                      ´     ´        ˇ
     →A ⊆ Aexp × Σ × Z; prvky zapisujeme ve tvaru a, σ →A n.
     →B ⊆ Bexp × Σ × T; prvky zapisujeme ve tvaru b, σ →B t.
     →C ⊆ Com × Σ × Σ; prvky zapisujeme ve tvaru c, σ →C σ .
  Indexy A, B, C budou obvykle vynechany.
                                     ´
14
            SOS semantika IMP prvnıho typu („big step“)
                 ´                ´


• Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ.
                  ´                 ˇ     ˇ        ˚       ˇı

• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Σ,
        ˇ             ´
     mnozina akcı je Com,
        ˇ       ´
                                                                   c
     prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc
      ˇ       ´              ´ ´ ´      ´                     ˚           ´ ˇ    ˇ ´ ˇet
     programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ .
                    ´   ´               ˇı    ˇ

• Za tımto uc
      ´    ´ ˇelem definujeme odvozovacı systemy pro tri relace:
                                      ´     ´        ˇ
     →A ⊆ Aexp × Σ × Z; prvky zapisujeme ve tvaru a, σ →A n.
     →B ⊆ Bexp × Σ × T; prvky zapisujeme ve tvaru b, σ →B t.
     →C ⊆ Com × Σ × Σ; prvky zapisujeme ve tvaru c, σ →C σ .
  Indexy A, B, C budou obvykle vynechany.
                                     ´
                            c
• Pak jiz lze definovat: σ → σ
        ˇ                          ⇐⇒       c, σ → σ
15
                  Aritmeticke vyrazy Aexp
                            ´ ´

a, σ → n   „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“
                      ´ ´                             ´
15
                      Aritmeticke vyrazy Aexp
                                ´ ´

a, σ → n       „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“
                          ´ ´                             ´



•   n, σ → n
15
                         Aritmeticke vyrazy Aexp
                                   ´ ´

a, σ → n          „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“
                             ´ ´                             ´



•   n, σ → n

•   X, σ → σ(X)
15
                           Aritmeticke vyrazy Aexp
                                     ´ ´

a, σ → n           „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“
                              ´ ´                             ´



•   n, σ → n

•   X, σ → σ(X)

    a0 , σ → n 0 a1 , σ → n 1
•                             n = n0 + n1
          a0 + a1 , σ → n
15
                           Aritmeticke vyrazy Aexp
                                     ´ ´

a, σ → n           „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“
                              ´ ´                             ´



•   n, σ → n

•   X, σ → σ(X)

    a0 , σ → n 0 a1 , σ → n 1
•                             n = n0 + n1
          a0 + a1 , σ → n

    a0 , σ → n 0 a1 , σ → n 1
•                             n = n0 − n1
          a0 − a1 , σ → n

    a0 , σ → n 0 a1 , σ → n 1
•                             n = n0 ∗ n1
           a0 ∗ a1 , σ → n
16
                    Pravdivostnı vyrazy Bexp
                               ´ ´

b, σ → t   „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                       ´ ´                             ´
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´



•   tt, σ → true

•   ff, σ → false
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´



•   tt, σ → true

•   ff, σ → false

    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
          a0 = a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
         a0 = a1, σ → false
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´



•   tt, σ → true

•   ff, σ → false

    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
          a0 = a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
         a0 = a1, σ → false

    a0 , σ → n 0 a1 , σ → n 1
•                             n0≤n1
         a0 ≤ a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0>n1
         a0 ≤ a1, σ → false
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´


                                                 b, σ → false
•   tt, σ → true                            •
                                                not b, σ → true
•   ff, σ → false                                 b, σ → true
                                            •
                                                not b, σ → false
    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
          a0 = a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
         a0 = a1, σ → false

    a0 , σ → n 0 a1 , σ → n 1
•                             n0≤n1
         a0 ≤ a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0>n1
         a0 ≤ a1, σ → false
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´


                                                 b, σ → false
•   tt, σ → true                            •
                                                not b, σ → true
•   ff, σ → false                                 b, σ → true
                                            •
                                                not b, σ → false
    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
          a0 = a1, σ → true                     b0, σ → t0 b1, σ → t1
                                            •                          t0=true ∧ t1=true
                                                   b0 and b1, σ → true
    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
         a0 = a1, σ → false                     b0, σ → t0 b1, σ → t1
                                            •                           t0=false ∨ t1=false
                                                   b0 and b1, σ → false
    a0 , σ → n 0 a1 , σ → n 1
•                             n0≤n1
         a0 ≤ a1, σ → true

    a0 , σ → n 0 a1 , σ → n 1
•                             n0>n1
         a0 ≤ a1, σ → false
16
                            Pravdivostnı vyrazy Bexp
                                       ´ ´

b, σ → t           „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“
                               ´ ´                             ´


                                                 b, σ → false
•   tt, σ → true                            •
                                                not b, σ → true
•   ff, σ → false                                 b, σ → true
                                            •
                                                not b, σ → false
    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
          a0 = a1, σ → true                     b0, σ → t0 b1, σ → t1
                                            •                          t0=true ∧ t1=true
                                                   b0 and b1, σ → true
    a0 , σ → n 0 a1 , σ → n 1
•                             n0=n1
         a0 = a1, σ → false                     b0, σ → t0 b1, σ → t1
                                            •                           t0=false ∨ t1=false
                                                   b0 and b1, σ → false
    a0 , σ → n 0 a1 , σ → n 1
•                             n0≤n1
         a0 ≤ a1, σ → true                      b0, σ → t0 b1, σ → t1
                                            •                          t0=true ∨ t1=true
                                                    b0 or b1, σ → true
    a0 , σ → n 0 a1 , σ → n 1
•                             n0>n1
         a0 ≤ a1, σ → false                     b0, σ → t0 b1, σ → t1
                                            •                           t0=false ∧ t1=false
                                                    b0 or b1, σ → false
17
                           Pr´kazy Com
                            ˇı

c, σ → σ   „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
             ˇı               ´                ˇı
17
                                  Pr´kazy Com
                                   ˇı

c, σ → σ          „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
                    ˇı               ´                ˇı



•   skip, σ → σ
17
                                  Pr´kazy Com
                                   ˇı

c, σ → σ          „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
                    ˇı               ´                ˇı



•   skip, σ → σ

         a, σ → n
•
    X := a, σ → σ[n/X]
17
                                  Pr´kazy Com
                                   ˇı

c, σ → σ          „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
                    ˇı               ´                ˇı



•   skip, σ → σ

         a, σ → n
•
    X := a, σ → σ[n/X]

    c0, σ → σ       c1, σ → σ
•
          c0; c1, σ → σ
17
                                  Pr´kazy Com
                                   ˇı

c, σ → σ          „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
                    ˇı               ´                ˇı



•   skip, σ → σ

         a, σ → n
•
    X := a, σ → σ[n/X]

    c0, σ → σ       c1, σ → σ
•
          c0; c1, σ → σ

    b, σ → true c0, σ → σ          b, σ → false c1, σ → σ
•
    if b then c0 else c1, σ → σ    if b then c0 else c1, σ → σ
17
                                  Pr´kazy Com
                                   ˇı

c, σ → σ          „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “
                    ˇı               ´                ˇı



•   skip, σ → σ

         a, σ → n
•
    X := a, σ → σ[n/X]

    c0, σ → σ       c1, σ → σ
•
          c0; c1, σ → σ

    b, σ → true c0, σ → σ          b, σ → false c1, σ → σ
•
    if b then c0 else c1, σ → σ    if b then c0 else c1, σ → σ

       b, σ → false                b, σ → true    c, σ → σ       while b do c, σ   →σ
•
    while b do c, σ → σ                           while b do c, σ → σ
18
     Pr´klad dukazoveho stromu v SOS semantice 1. typu
      ˇı      ˚     ´                 ´



Uvazme program while A ≤ 2 do A := A + C
   ˇ
18
      Pr´klad dukazoveho stromu v SOS semantice 1. typu
       ˇı      ˚     ´                 ´



Uvazme program while A ≤ 2 do A := A + C
   ˇ


• Stav σ je definovan takto: σ(A) = 1, σ(C) = 2, a pro A = B = C je σ(B) = 10. Pak
                   ´
   while A ≤ 2 do A := A + C, σ → σ[3/A], nebot’
                           A, σ → 1      C, σ → 2                A, σ[3/A] → 3      2, σ[3/A] → 2
    A, σ → 1    2, σ → 2        A + C, σ → 3                           A ≤ 2, σ[3/A] → false
       A ≤ 2, σ → true     A := A + C, σ → σ[3/A]          while A ≤ 2 do A := A + C, σ[3/A] → σ[3/A]
                              while A ≤ 2 do A := A + C, σ → σ[3/A]
18
      Pr´klad dukazoveho stromu v SOS semantice 1. typu
       ˇı      ˚     ´                 ´



Uvazme program while A ≤ 2 do A := A + C
   ˇ


• Stav σ je definovan takto: σ(A) = 1, σ(C) = 2, a pro A = B = C je σ(B) = 10. Pak
                   ´
   while A ≤ 2 do A := A + C, σ → σ[3/A], nebot’
                            A, σ → 1      C, σ → 2                A, σ[3/A] → 3      2, σ[3/A] → 2
     A, σ → 1    2, σ → 2        A + C, σ → 3                           A ≤ 2, σ[3/A] → false
        A ≤ 2, σ → true     A := A + C, σ → σ[3/A]          while A ≤ 2 do A := A + C, σ[3/A] → σ[3/A]
                               while A ≤ 2 do A := A + C, σ → σ[3/A]



• Stav σ = σ[0/C]. Dukazovy strom s korenem tvaru while A ≤ 2 do A := A + C, σ
                        ˚     ´       ˇ                                                                  → σ
  sestrojit nelze (pro zadne σ ).
                       ˇ´ ´
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ



Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ .
 ˚                   ´           ˇ                  ´    ´ˇ          ´
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ



Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ .
 ˚                   ´           ˇ                  ´    ´ˇ          ´
ad 1.
 • a ≡ n. Pak n, σ → n dle definice.
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ



Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ .
 ˚                   ´           ˇ                  ´    ´ˇ          ´
ad 1.
 • a ≡ n. Pak n, σ → n dle definice.
 • a ≡ X. Pak X, σ → σ(X) dle definice.
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ



Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ .
 ˚                   ´           ˇ                  ´    ´ˇ          ´
ad 1.
 • a ≡ n. Pak n, σ → n dle definice.
 • a ≡ X. Pak X, σ → σ(X) dle definice.
 • a ≡ a0 + a1. Podle indukc ´ho predpokladu existuje prave jedno n0 takove, ze a0, σ → n0,
                            ˇnı    ˇ                      ˇ               ´ ˇ
  a prave jedno n1 takove, ze a1, σ → n1. Proto a0 + a1, σ → n, kde n = n0 + n1.
      ´ ˇ               ´ ˇ
19
           SOS semantika prvnıho typu je deterministicka
                ´            ´                         ´


Veta 1.
 ˇ

1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n.
         ˇ ´                             ´ ˇ                  ´ ˇ

2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t.
         ˇ ´                             ´ ˇ                  ´ ˇ

3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ .
         ˇ ´                              ´ˇ                   ´ ˇ



Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ .
 ˚                   ´           ˇ                  ´    ´ˇ          ´
ad 1.
 • a ≡ n. Pak n, σ → n dle definice.
 • a ≡ X. Pak X, σ → σ(X) dle definice.
 • a ≡ a0 + a1. Podle indukc ´ho predpokladu existuje prave jedno n0 takove, ze a0, σ → n0,
                            ˇnı    ˇ                      ˇ               ´ ˇ
  a prave jedno n1 takove, ze a1, σ → n1. Proto a0 + a1, σ → n, kde n = n0 + n1.
      ´ ˇ               ´ ˇ
 • a ≡ a0 − a1. Podobne.
                      ˇ
 • a ≡ a0 ∗ a1. Podobne.
                      ˇ
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´

 •   skip, σ → σ.
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´

 •   skip, σ → σ.

 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                        ´ ´       ´              ´
  Podle 1. existuje prave jedno takove n, proto σ je urc
                     ˇ´ ˇ            ´                 ˇeno jednoznac ˇ .
                                                                    ˇne
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´

 •   skip, σ → σ.

 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                        ´ ´       ´              ´
  Podle 1. existuje prave jedno takove n, proto σ je urc
                     ˇ´ ˇ            ´                 ˇeno jednoznac ˇ .
                                                                    ˇne

 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                     ˇ                     ´ ´     ´                           → σ . Podle
  indukc ´ho predpokladu je σ i σ urc
       ˇnı     ˇ                    ˇeno jednoznac ˇ .
                                                 ˇne
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´

 •   skip, σ → σ.

 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                        ´ ´       ´              ´
  Podle 1. existuje prave jedno takove n, proto σ je urc
                     ˇ´ ˇ            ´                 ˇeno jednoznac ˇ .
                                                                    ˇne

 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                     ˇ                     ´ ´     ´                            → σ . Podle
  indukc ´ho predpokladu je σ i σ urc
       ˇnı     ˇ                    ˇeno jednoznac ˇ .
                                                 ˇne

 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                ´       ´     ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . Podle 2. nastava prave jedna z techto
                                                                      ´ ´ ´ ˇ            ˇ
  moznostı, proto je σ urc
     ˇ    ´                ˇeno jednoznac ˇ .
                                         ˇne
20
ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove,
            ´     ´ˇ           ´ ´ˇ      ˇ              ´                  ˇ   ´         ´
ze c, σ → σ , je toto σ urc
ˇ                         ˇeno jednoznac ˇ .
                                       ˇne

Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c.
                     ˇ    ˚     ´           ´ˇ             ´ ˇı    ˇ ´

 •   skip, σ → σ.

 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                        ´ ´       ´              ´
  Podle 1. existuje prave jedno takove n, proto σ je urc
                     ˇ´ ˇ            ´                 ˇeno jednoznac ˇ .
                                                                    ˇne

 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                     ˇ                     ´ ´     ´                            → σ . Podle
  indukc ´ho predpokladu je σ i σ urc
       ˇnı     ˇ                    ˇeno jednoznac ˇ .
                                                 ˇne

 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                ´       ´     ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . Podle 2. nastava prave jedna z techto
                                                                      ´ ´ ´ ˇ            ˇ
  moznostı, proto je σ urc
     ˇ    ´                ˇeno jednoznac ˇ .
                                         ˇne

 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka b, σ → false
                           ˇ                         ´          ´    ´     ´
  a σ = σ, nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Podle
                   ˇ ´       ´
  2. nastava prave jedna z techto moznostı. V prvnım pr´pade jsme hotovi ihned; v druhem
         ´ ´   ´ ˇ             ˇ       ˇ     ´     ´   ˇı     ˇ                         ´
  pouzijeme indukc ´ predpoklad podle nehoz je σ a σ urc
      ˇ           ˇnı ˇ                  ˇ ˇ            ˇeno jednoznac ˇ .
                                                                       ˇne
21
             Semanticka ekvivalence vyrazu a pr´kazu (I)
              ´       ´              ´   ˚    ˇı   ˚



• Aritmeticke vyrazy Aexp
            ´ ´
               def
   a0 ∼ a1    ⇐⇒     (∀n ∈ Z ∀σ ∈ Σ :   a0, σ → n ⇐⇒   a1, σ → n)
21
             Semanticka ekvivalence vyrazu a pr´kazu (I)
              ´       ´              ´   ˚    ˇı   ˚



• Aritmeticke vyrazy Aexp
            ´ ´
               def
   a0 ∼ a1    ⇐⇒     (∀n ∈ Z ∀σ ∈ Σ :   a0, σ → n ⇐⇒    a1, σ → n)


• Pravdivostnı vyrazy Bexp
             ´ ´
               def
   b0 ∼ b1    ⇐⇒     (∀t ∈ T ∀σ ∈ Σ :   b0, σ → t ⇐⇒   b1, σ → t)
21
             Semanticka ekvivalence vyrazu a pr´kazu (I)
              ´       ´              ´   ˚    ˇı   ˚



• Aritmeticke vyrazy Aexp
            ´ ´
                def
   a0 ∼ a1    ⇐⇒      (∀n ∈ Z ∀σ ∈ Σ :    a0, σ → n ⇐⇒     a1, σ → n)


• Pravdivostnı vyrazy Bexp
             ´ ´
                def
   b0 ∼ b1    ⇐⇒      (∀t ∈ T ∀σ ∈ Σ :   b0, σ → t ⇐⇒     b1, σ → t)


• Pr´kazy Com
   ˇı
                def
   c0 ∼ c1   ⇐⇒       (∀σ, σ ∈ Σ :   c0, σ → σ   ⇐⇒   c1, σ → σ )
22
                 Pr´klad ekvivaletnıch programu
                  ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ    while b do c   ∼   if b then (c; while b do c) else skip
22
                      Pr´klad ekvivaletnıch programu
                       ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ        while b do c   ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ   ⇒   if b then (c; while b do c) else skip, σ → σ
22
                         Pr´klad ekvivaletnıch programu
                          ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ          while b do c       ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ         ⇒   if b then (c; while b do c) else skip, σ → σ

    Jsou dve moznosti:
           ˇ   ˇ
                ...
           b, σ → false
                            .
        while b do c, σ → σ
22
                         Pr´klad ekvivaletnıch programu
                          ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ          while b do c       ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ      ⇒      if b then (c; while b do c) else skip, σ → σ

    Jsou dve moznosti:
           ˇ   ˇ
                ...                                    ...
           b, σ → false                            b, σ → false             skip, σ → σ
                            . Pak ale take
                                         ´
        while b do c, σ → σ                   if b then (c; while b do c) else skip, σ → σ
22
                          Pr´klad ekvivaletnıch programu
                           ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ             while b do c      ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ       ⇒       if b then (c; while b do c) else skip, σ → σ

    Jsou dve moznosti:
           ˇ   ˇ
                ...                                         ...
           b, σ → false                                 b, σ → false             skip, σ → σ
                            . Pak ale take
                                         ´
        while b do c, σ → σ                        if b then (c; while b do c) else skip, σ → σ

              ...               ...                       ...
          b, σ → true        c, σ → σ         while b do c, σ      →σ
                                                                           .
                             while b do c, σ → σ
22
                          Pr´klad ekvivaletnıch programu
                           ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ             while b do c        ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ       ⇒         if b then (c; while b do c) else skip, σ → σ

    Jsou dve moznosti:
           ˇ   ˇ
                ...                                         ...
           b, σ → false                                 b, σ → false             skip, σ → σ
                            . Pak ale take
                                         ´
        while b do c, σ → σ                        if b then (c; while b do c) else skip, σ → σ

              ...               ...                        ...
          b, σ → true        c, σ → σ           while b do c, σ      →σ
                                                                           . Pak ale take
                                                                                        ´
                             while b do c, σ → σ

                                  ...                       ...
              ...             c, σ → σ             while b do c, σ   →σ
          b, σ → true                    c; while b do c, σ → σ
                   if b then (c; while b do c) else skip, σ → σ
22
                          Pr´klad ekvivaletnıch programu
                           ˇı               ´          ˚


Dokazeme, ze
   ´ˇ     ˇ             while b do c        ∼    if b then (c; while b do c) else skip
•   while b do c, σ → σ       ⇒         if b then (c; while b do c) else skip, σ → σ

    Jsou dve moznosti:
           ˇ   ˇ
                ...                                         ...
           b, σ → false                                 b, σ → false             skip, σ → σ
                            . Pak ale take
                                         ´
        while b do c, σ → σ                        if b then (c; while b do c) else skip, σ → σ

              ...               ...                        ...
          b, σ → true        c, σ → σ           while b do c, σ      →σ
                                                                           . Pak ale take
                                                                                        ´
                             while b do c, σ → σ

                                  ...                       ...
              ...             c, σ → σ             while b do c, σ   →σ
          b, σ → true                    c; while b do c, σ → σ
                   if b then (c; while b do c) else skip, σ → σ


• Opac ´ implikace se ukaze podobne.
     ˇna                ´ˇ        ˇ
23
      Operac ´ semantika IMP druheho typu („small step“)
           ˇnı ´                 ´


• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Com × Σ,
        ˇ             ´
     mnozina akcı je {τ},
        ˇ       ´
                                                                        τ
      ˇ         ´             ´ ´         ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz
     prechodova relace odpovıda „kroku vypoc               ˚                         ´ ˇ     ˇ
     program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale
                  ˇ                   ´ ´      ´                                           ´
     provadı program c .
         ´ ´
23
      Operac ´ semantika IMP druheho typu („small step“)
           ˇnı ´                 ´


• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Com × Σ,
        ˇ             ´
     mnozina akcı je {τ},
        ˇ       ´
                                                                        τ
      ˇ         ´             ´ ´         ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz
     prechodova relace odpovıda „kroku vypoc               ˚                         ´ ˇ     ˇ
     program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale
                  ˇ                   ´ ´      ´                                           ´
     provadı program c .
         ´ ´

• Definujeme odvozovacı systemy pro tri relace:
                     ´     ´        ˇ
     →A ⊆ (Aexp × Σ) × (Aexp × Σ); prvky zapisujeme ve tvaru a, σ →A a , σ .
     →B ⊆ (Bexp × Σ) × (Bexp × Σ); prvky zapisujeme ve tvaru b, σ →B b , σ .
     →C ⊆ (Com × Σ) × (Com × Σ); prvky zapisujeme ve tvaru c, σ →C c , σ .
  Indexy A, B, C budou obvykle vynechany.
                                     ´
23
      Operac ´ semantika IMP druheho typu („small step“)
           ˇnı ´                 ´


• Cılem je definovat prechodovy system, kde
   ´                 ˇ       ´     ´
     mnozina konfiguracı je Com × Σ,
        ˇ             ´
     mnozina akcı je {τ},
        ˇ       ´
                                                                        τ
      ˇ         ´             ´ ´         ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz
     prechodova relace odpovıda „kroku vypoc               ˚                         ´ ˇ     ˇ
     program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale
                  ˇ                   ´ ´      ´                                           ´
     provadı program c .
         ´ ´

• Definujeme odvozovacı systemy pro tri relace:
                     ´     ´        ˇ
     →A ⊆ (Aexp × Σ) × (Aexp × Σ); prvky zapisujeme ve tvaru a, σ →A a , σ .
     →B ⊆ (Bexp × Σ) × (Bexp × Σ); prvky zapisujeme ve tvaru b, σ →B b , σ .
     →C ⊆ (Com × Σ) × (Com × Σ); prvky zapisujeme ve tvaru c, σ →C c , σ .
  Indexy A, B, C budou obvykle vynechany.
                                     ´
                                 τ
• Pak jiz lze definovat:
        ˇ                   c, σ → c , σ    ⇐⇒      c, σ →C c , σ
24
                            Aritmeticke vyrazy Aexp
                                      ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna
24
                            Aritmeticke vyrazy Aexp
                                      ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ
24
                            Aritmeticke vyrazy Aexp
                                      ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1
24
                                Aritmeticke vyrazy Aexp
                                          ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1

         a0 , σ → a0 , σ
•
    a0 + a1 , σ → a0 + a1 , σ
24
                                Aritmeticke vyrazy Aexp
                                          ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1

         a0 , σ → a0 , σ
•
    a0 + a1 , σ → a0 + a1 , σ

        a1 , σ → a1 , σ
•
    n + a1 , σ → n + a1 , σ
24
                                Aritmeticke vyrazy Aexp
                                          ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1

         a0 , σ → a0 , σ
•
    a0 + a1 , σ → a0 + a1 , σ

        a1 , σ → a1 , σ
•
    n + a1 , σ → n + a1 , σ

• podobne pro „−“ a „∗“
        ˇ
24
                                Aritmeticke vyrazy Aexp
                                          ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1

         a0 , σ → a0 , σ
•
    a0 + a1 , σ → a0 + a1 , σ

        a1 , σ → a1 , σ
•
    n + a1 , σ → n + a1 , σ

• podobne pro „−“ a „∗“
        ˇ


Pr´klad:
 ˇı

• Necht’ σ(X) = 1, σ(Y) = 2
24
                                Aritmeticke vyrazy Aexp
                                          ´ ´

•   n, σ   – konec ´ konfigurace
                 ˇna

•   X, σ → σ(X), σ

•   n0 + n1, σ → m, σ , kde m = n0 + n1

         a0 , σ → a0 , σ
•
    a0 + a1 , σ → a0 + a1 , σ

        a1 , σ → a1 , σ
•
    n + a1 , σ → n + a1 , σ

• podobne pro „−“ a „∗“
        ˇ


Pr´klad:
 ˇı

• Necht’ σ(X) = 1, σ(Y) = 2

•   (X + 3) ∗ Y, σ → (1 + 3) ∗ Y, σ → 4 ∗ Y, σ → 4 ∗ 2, σ → 8, σ
25
                            Pravdivostnı vyrazy Bexp
                                       ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna

•   ff, σ   – konec ´ konfigurace
                  ˇna
25
                              Pravdivostnı vyrazy Bexp
                                         ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna

•   ff, σ   – konec ´ konfigurace
                  ˇna

•   n0=n1, σ → tt, σ , je-li n0=n1

•   n0=n1, σ → ff, σ , je-li n0=n1

         a0 , σ → a0 , σ
•
    a0 = a1 , σ → a0 = a1 , σ

        a1 , σ → a1 , σ
•
    n = a1 , σ → n = a1 , σ
25
                              Pravdivostnı vyrazy Bexp
                                         ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna

•   ff, σ   – konec ´ konfigurace
                  ˇna

•   n0=n1, σ → tt, σ , je-li n0=n1

•   n0=n1, σ → ff, σ , je-li n0=n1

         a0 , σ → a0 , σ
•
    a0 = a1 , σ → a0 = a1 , σ

        a1 , σ → a1 , σ
•
    n = a1 , σ → n = a1 , σ

• podobne pro „≤“
        ˇ
25
                              Pravdivostnı vyrazy Bexp
                                         ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna                  •   not tt, σ → ff, σ ,   not ff, σ → tt, σ

                                               b, σ → b , σ
•   ff, σ   – konec ´ konfigurace
                  ˇna                  •
                                           not b, σ → not b , σ

•   n0=n1, σ → tt, σ , je-li n0=n1

•   n0=n1, σ → ff, σ , je-li n0=n1

         a0 , σ → a0 , σ
•
    a0 = a1 , σ → a0 = a1 , σ

        a1 , σ → a1 , σ
•
    n = a1 , σ → n = a1 , σ

• podobne pro „≤“
        ˇ
25
                              Pravdivostnı vyrazy Bexp
                                         ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna                  •   not tt, σ → ff, σ ,   not ff, σ → tt, σ

                                               b, σ → b , σ
•   ff, σ   – konec ´ konfigurace
                  ˇna                  •
                                           not b, σ → not b , σ

•   n0=n1, σ → tt, σ , je-li n0=n1     •   t1 and t2, σ → tt, σ je-li t1=tt a t2=tt

•   n0=n1, σ → ff, σ , je-li n0=n1     •   t1 and t2, σ → ff, σ je-li t1=ff nebo t2=ff

         a0 , σ → a0 , σ                          b0, σ → b0, σ
•                                      •
    a0 = a1 , σ → a0 = a1 , σ              b0 and b1, σ → b0 and b1, σ

        a1 , σ → a1 , σ                          b1, σ → b1, σ
•                                      •                             t ∈ {tt, ff}
    n = a1 , σ → n = a1 , σ                t and b1, σ → t and b1, σ

• podobne pro „≤“
        ˇ
25
                              Pravdivostnı vyrazy Bexp
                                         ´ ´


•   tt, σ   – konec ´ konfigurace
                  ˇna                  •   not tt, σ → ff, σ ,   not ff, σ → tt, σ

                                               b, σ → b , σ
•   ff, σ   – konec ´ konfigurace
                  ˇna                  •
                                           not b, σ → not b , σ

•   n0=n1, σ → tt, σ , je-li n0=n1     •   t1 and t2, σ → tt, σ je-li t1=tt a t2=tt

•   n0=n1, σ → ff, σ , je-li n0=n1     •   t1 and t2, σ → ff, σ je-li t1=ff nebo t2=ff

         a0 , σ → a0 , σ                          b0, σ → b0, σ
•                                      •
    a0 = a1 , σ → a0 = a1 , σ              b0 and b1, σ → b0 and b1, σ

        a1 , σ → a1 , σ                          b1, σ → b1, σ
•                                      •                             t ∈ {tt, ff}
    n = a1 , σ → n = a1 , σ                t and b1, σ → t and b1, σ

• podobne pro „≤“
        ˇ                              • podobne pro „or“
                                               ˇ
26
                                     Pr´kazy Com
                                      ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna
26
                                     Pr´kazy Com
                                      ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna


                                               a, σ → a , σ
•   X := n, σ → skip, σ[n/X]
                                          X := a, σ → X := a , σ
26
                                     Pr´kazy Com
                                      ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna


                                               a, σ → a , σ
•   X := n, σ → skip, σ[n/X]
                                          X := a, σ → X := a , σ


                                              c0, σ → c0, σ
•   skip; c, σ → c, σ
                                          c0; c1, σ → c0; c1, σ
26
                                       Pr´kazy Com
                                        ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna


                                                 a, σ → a , σ
•   X := n, σ → skip, σ[n/X]
                                            X := a, σ → X := a , σ


                                                c0, σ → c0, σ
•   skip; c, σ → c, σ
                                            c0; c1, σ → c0; c1, σ


•   if tt then c0 else c1, σ → c0, σ        if ff then c0 else c1, σ → c1, σ
26
                                        Pr´kazy Com
                                         ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna


                                                       a, σ → a , σ
•   X := n, σ → skip, σ[n/X]
                                                  X := a, σ → X := a , σ


                                                      c0, σ → c0, σ
•   skip; c, σ → c, σ
                                                  c0; c1, σ → c0; c1, σ


•   if tt then c0 else c1, σ → c0, σ              if ff then c0 else c1, σ → c1, σ


                       b, σ → b , σ
•
    if b then c0 else c1, σ → if b then c0 else c1, σ
26
                                        Pr´kazy Com
                                         ˇı


•   skip, σ   – konec ´ konfigurace
                    ˇna


                                                       a, σ → a , σ
•   X := n, σ → skip, σ[n/X]
                                                  X := a, σ → X := a , σ


                                                      c0, σ → c0, σ
•   skip; c, σ → c, σ
                                                  c0; c1, σ → c0; c1, σ


•   if tt then c0 else c1, σ → c0, σ              if ff then c0 else c1, σ → c1, σ


                       b, σ → b , σ
•
    if b then c0 else c1, σ → if b then c0 else c1, σ


•   while b do c, σ → if b then (c; while b do c) else skip, σ
27
            Semanticka ekvivalence vyrazu a pr´kazu (II)
             ´       ´              ´   ˚    ˇı   ˚


• Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ):
        ˇ ´                            ˇ
   →0      =   idCom×Σ
   →i+1    =   →i ◦ →
27
            Semanticka ekvivalence vyrazu a pr´kazu (II)
             ´       ´              ´   ˚    ˇı   ˚


• Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ):
        ˇ ´                            ˇ
   →0      =   idCom×Σ
   →i+1    =   →i ◦ →
                         S∞
• Dale definujeme →∗=
   ´                      k=0   →k
27
             Semanticka ekvivalence vyrazu a pr´kazu (II)
              ´       ´              ´   ˚    ˇı   ˚


• Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ):
        ˇ ´                            ˇ
   →0        =   idCom×Σ
   →i+1      =   →i ◦ →
                           S∞
• Dale definujeme →∗=
   ´                        k=0   →k

• Aritmeticke vyrazy Aexp
            ´ ´
                 def
   a0 ≈ a1       ⇐⇒    (∀n ∈ Z ∀σ ∈ Σ :   a0, σ →∗ n, σ   ⇐⇒    a1, σ →∗ n, σ )
27
             Semanticka ekvivalence vyrazu a pr´kazu (II)
              ´       ´              ´   ˚    ˇı   ˚


• Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ):
        ˇ ´                            ˇ
   →0        =   idCom×Σ
   →i+1      =   →i ◦ →
                           S∞
• Dale definujeme →∗=
   ´                        k=0   →k

• Aritmeticke vyrazy Aexp
            ´ ´
                 def
   a0 ≈ a1       ⇐⇒    (∀n ∈ Z ∀σ ∈ Σ :   a0, σ →∗ n, σ   ⇐⇒    a1, σ →∗ n, σ )

• Pravdivostnı vyrazy Bexp
             ´ ´
                 def
   b0 ≈ b1       ⇐⇒    (∀t ∈ T ∀σ ∈ Σ :   b0, σ →∗ t, σ   ⇐⇒   b1, σ →∗ t, σ )
27
             Semanticka ekvivalence vyrazu a pr´kazu (II)
              ´       ´              ´   ˚    ˇı   ˚


• Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ):
        ˇ ´                            ˇ
   →0        =    idCom×Σ
   →i+1      =    →i ◦ →
                            S∞
• Dale definujeme →∗=
   ´                         k=0   →k

• Aritmeticke vyrazy Aexp
            ´ ´
                 def
   a0 ≈ a1       ⇐⇒    (∀n ∈ Z ∀σ ∈ Σ :      a0, σ →∗ n, σ    ⇐⇒      a1, σ →∗ n, σ )

• Pravdivostnı vyrazy Bexp
             ´ ´
                 def
   b0 ≈ b1       ⇐⇒    (∀t ∈ T ∀σ ∈ Σ :      b0, σ →∗ t, σ    ⇐⇒     b1, σ →∗ t, σ )

• Pr´kazy Com
   ˇı
                 def
   c0 ≈ c1       ⇐⇒    (∀σ, σ ∈ Σ :     c0, σ →∗ skip, σ     ⇐⇒    c1, σ →∗ skip, σ )
28
                Ekvivalence SOS semantik 1. a 2. typu
                                 ´


Lema 2.
 1. Jestlize a, σ →k a , σ , pak a
          ˇ                          a1, σ →k a   a1 , σ a n   a, σ →k n   a , σ pro
  kazde
     ˇ ´    ∈ {+, −, ∗}.
28
                Ekvivalence SOS semantik 1. a 2. typu
                                 ´


Lema 2.
 1. Jestlize a, σ →k a , σ , pak a
          ˇ                          a1, σ →k a     a1 , σ a n   a, σ →k n   a , σ pro
  kazde
     ˇ ´    ∈ {+, −, ∗}.
 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
          ˇ
28
                 Ekvivalence SOS semantik 1. a 2. typu
                                  ´


Lema 2.
 1. Jestlize a, σ →k a , σ , pak a
          ˇ                           a1, σ →k a      a1 , σ a n   a, σ →k n   a , σ pro
  kazde
     ˇ ´    ∈ {+, −, ∗}.
 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
          ˇ
 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
          ˇ
28
                 Ekvivalence SOS semantik 1. a 2. typu
                                  ´


Lema 2.
 1. Jestlize a, σ →k a , σ , pak a
          ˇ                             a1, σ →k a      a1 , σ a n    a, σ →k n       a , σ pro
  kazde
     ˇ ´    ∈ {+, −, ∗}.
 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
          ˇ
 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
          ˇ
 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
          ˇ
28
                 Ekvivalence SOS semantik 1. a 2. typu
                                  ´


Lema 2.
 1. Jestlize a, σ →k a , σ , pak a
          ˇ                             a1, σ →k a      a1 , σ a n    a, σ →k n       a , σ pro
  kazde
     ˇ ´    ∈ {+, −, ∗}.
 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
          ˇ
 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
          ˇ
 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
          ˇ
Dukaz. Indukcı ke k.
 ˚           ´
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                             a1, σ →k a      a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                ⇐⇒ a0 = a0 ⇐⇒       a 0 + a 1 , σ →0 a 0 + a 1 , σ
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                             a1, σ →k a      a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                ⇐⇒ a0 = a0 ⇐⇒       a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒      a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                               a1, σ →k a         a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                  ⇐⇒ a0 = a0 ⇐⇒          a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒        a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
    a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ   (podle I.P.) ⇒
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                               a1, σ →k a         a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                  ⇐⇒ a0 = a0 ⇐⇒          a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒        a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
    a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ   (podle I.P.) ⇒
    a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                               a1, σ →k a         a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                  ⇐⇒ a0 = a0 ⇐⇒          a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒        a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
    a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ   (podle I.P.) ⇒
    a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒
    a0 + a1, σ →k+1 a0 + a1, σ
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                               a1, σ →k a         a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                  ⇐⇒ a0 = a0 ⇐⇒          a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒        a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
    a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ   (podle I.P.) ⇒
    a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒
    a0 + a1, σ →k+1 a0 + a1, σ
ad 2.,3.,4. Podobne.
                  ˇ
28
                   Ekvivalence SOS semantik 1. a 2. typu
                                    ´


Lema 2.
  1. Jestlize a, σ →k a , σ , pak a
           ˇ                               a1, σ →k a         a1 , σ a n     a, σ →k n          a , σ pro
   kazde
      ˇ ´    ∈ {+, −, ∗}.
  2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ
           ˇ
  3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ .
           ˇ
  4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ
           ˇ
Dukaz. Indukcı ke k.
 ˚           ´
ad 1., prvnı implikace.
           ´
  • Baze (k = 0): a0, σ →0 a0, σ
     ´                                  ⇐⇒ a0 = a0 ⇐⇒          a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • Indukc ´ krok:
          ˇnı
    a0, σ →k+1 a0, σ ⇒        a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
    a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ   (podle I.P.) ⇒
    a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒
    a0 + a1, σ →k+1 a0 + a1, σ
ad 2.,3.,4. Podobne.
                  ˇ
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ
          ˇ                                                        → c1, σ   →m skip, σ ,
  kde l, m < k a c0, σ →l skip, σ .
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ
          ˇ                                                           → c1, σ    →m skip, σ ,
  kde l, m < k a c0, σ →l skip, σ .
 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı:
          ˇ                                               ´          ´      ´ ´     ˇ    ´
      if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
      b, σ →l tt, σ .
      if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a
      b, σ →l ff, σ .
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ
          ˇ                                                           → c1, σ    →m skip, σ ,
  kde l, m < k a c0, σ →l skip, σ .
 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı:
          ˇ                                               ´          ´      ´ ´     ˇ    ´
      if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
      b, σ →l tt, σ .
      if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a
      b, σ →l ff, σ .
Dukaz. Indukcı ke k.
 ˚           ´
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ
          ˇ                                                           → c1, σ    →m skip, σ ,
  kde l, m < k a c0, σ →l skip, σ .
 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı:
          ˇ                                               ´          ´      ´ ´     ˇ    ´
      if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
      b, σ →l tt, σ .
      if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a
      b, σ →l ff, σ .
Dukaz. Indukcı ke k.
 ˚           ´
ad 1. Baze indukce (k = 0)
       ´
 • Jelikoz a0
         ˇ       a1, σ →0 n, σ , implikace platı.
                                               ´
29

Lema 3.
 1. Jestlize a0
          ˇ     a1, σ →k n, σ kde   ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m
   n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde
          ˇ
  σ = σ[n/X] a a, σ →k−1 n, σ .
 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ
          ˇ                                                           → c1, σ    →m skip, σ ,
  kde l, m < k a c0, σ →l skip, σ .
 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı:
          ˇ                                               ´          ´      ´ ´     ˇ    ´
       if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
       b, σ →l tt, σ .
       if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a
       b, σ →l ff, σ .
Dukaz. Indukcı ke k.
 ˚           ´
ad 1. Baze indukce (k = 0)
       ´
 • Jelikoz a0
         ˇ        a1, σ →0 n, σ , implikace platı.
                                                ´
Indukc ´ krok:
     ˇnı
30
                                                         k−1
• Jestlize a0 ∈ Num, pak a0
        ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                             l                  m
 Podle I.P. platı a0
                ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
            l                  m
  a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                       ´      a1, σ →l+1 n0     a 1 , σ →m
  n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
30
                                                         k−1
• Jestlize a0 ∈ Num, pak a0
        ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                             l                  m
 Podle I.P. platı a0
                ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
            l                  m
  a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                       ´      a1, σ →l+1 n0     a 1 , σ →m
  n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
• Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
        ˇ
  a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                         ´
 (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
            ˇı    ˇ                                 ˚              ´       ´ˇ
30
                                                         k−1
• Jestlize a0 ∈ Num, pak a0
        ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                             l                  m
 Podle I.P. platı a0
                ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
            l                  m
  a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                       ´      a1, σ →l+1 n0     a 1 , σ →m
  n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
• Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
        ˇ
  a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                         ´
 (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
            ˇı    ˇ                                 ˚              ´       ´ˇ
• Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
        ˇ                        ˇı     ˇ
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n    ⇐⇒       a, σ →∗ n, σ
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n    ⇐⇒       a, σ →∗ n, σ
2. Pro kazde b a σ platı:
         ˇ ´           ´
   •   b, σ → true     ⇐⇒      b, σ →∗ tt, σ
   •   b, σ → false     ⇐⇒      b, σ →∗ ff, σ
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n    ⇐⇒       a, σ →∗ n, σ
2. Pro kazde b a σ platı:
         ˇ ´           ´
   •   b, σ → true     ⇐⇒       b, σ →∗ tt, σ
   •   b, σ → false     ⇐⇒      b, σ →∗ ff, σ
3. Pro kazde c a σ, σ platı:
         ˇ ´              ´    c, σ → σ    ⇐⇒       c, σ →∗ skip, σ
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n      ⇐⇒     a, σ →∗ n, σ
2. Pro kazde b a σ platı:
         ˇ ´           ´
   •   b, σ → true     ⇐⇒       b, σ →∗ tt, σ
   •   b, σ → false     ⇐⇒       b, σ →∗ ff, σ
3. Pro kazde c a σ, σ platı:
         ˇ ´              ´    c, σ → σ      ⇐⇒     c, σ →∗ skip, σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n      ⇐⇒     a, σ →∗ n, σ
2. Pro kazde b a σ platı:
         ˇ ´           ´
   •    b, σ → true    ⇐⇒       b, σ →∗ tt, σ
   •    b, σ → false    ⇐⇒       b, σ →∗ ff, σ
3. Pro kazde c a σ, σ platı:
         ˇ ´              ´    c, σ → σ      ⇐⇒     c, σ →∗ skip, σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 1.
 • a ≡ n. Pak n, σ → n a n, σ →0 n, σ dle definice.
 • a ≡ X. Pak X, σ → σ(X) a X, σ → σ(X), σ dle definice.
30
                                                           k−1
 • Jestlize a0 ∈ Num, pak a0
         ˇ                      a1 , σ → a0        a1 , σ →     n, σ , kde a0, σ → a0, σ .
                              l                  m
  Podle I.P. platı a0
                 ´    a1 , σ → n 0      a1 , σ →     n0   n1, σ → n, σ , kde l, m < k − 1,
             l                  m
   a0 , σ → n 0 , σ a a1 , σ →       n1, σ . Proto take a0
                                                        ´      a1, σ →l+1 n0     a 1 , σ →m
   n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
 • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ →
         ˇ
   a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1
                          ´
  (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse.
             ˇı    ˇ                                 ˚              ´       ´ˇ
 • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0.
         ˇ                        ˇı     ˇ



Veta 4.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n      ⇐⇒     a, σ →∗ n, σ
2. Pro kazde b a σ platı:
         ˇ ´           ´
   •    b, σ → true    ⇐⇒       b, σ →∗ tt, σ
   •    b, σ → false    ⇐⇒       b, σ →∗ ff, σ
3. Pro kazde c a σ, σ platı:
         ˇ ´              ´    c, σ → σ      ⇐⇒     c, σ →∗ skip, σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 1.
 • a ≡ n. Pak n, σ → n a n, σ →0 n, σ dle definice.
 • a ≡ X. Pak X, σ → σ(X) a X, σ → σ(X), σ dle definice.
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
  a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
  a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
  a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
  a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
  a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
  a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
  a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
  a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
  a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
  a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
31
• a ≡ a0 + a1. Podle I.P. platı
                              ´
     a0 , σ → n 0   ⇐⇒       a 0 , σ →∗ n 0 , σ
     a1 , σ → n 1   ⇐⇒       a 1 , σ →∗ n 1 , σ
 Dale
  ´
  a0 + a1, σ → n ⇐⇒
  a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
  a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
  a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
  a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
• a ≡ a0 − a1. Podobne.
                     ˇ
• a ≡ a0 ∗ a1. Podobne.
                     ˇ
31
 • a ≡ a0 + a1. Podle I.P. platı
                               ´
         a0 , σ → n 0   ⇐⇒     a 0 , σ →∗ n 0 , σ
         a1 , σ → n 1   ⇐⇒     a 1 , σ →∗ n 1 , σ
   Dale
    ´
      a0 + a1, σ → n ⇐⇒
      a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
      a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
      a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
      a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
 • a ≡ a0 − a1. Podobne.
                      ˇ
 • a ≡ a0 ∗ a1. Podobne.
                      ˇ
ad 3.
(⇒)     Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
              ´    ´ˇ          ´              ´ ˇı    ˇ ´
31
 • a ≡ a0 + a1. Podle I.P. platı
                               ´
         a0 , σ → n 0   ⇐⇒     a 0 , σ →∗ n 0 , σ
         a1 , σ → n 1   ⇐⇒     a 1 , σ →∗ n 1 , σ
   Dale
    ´
      a0 + a1, σ → n ⇐⇒
      a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
      a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
      a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
      a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
 • a ≡ a0 − a1. Podobne.
                      ˇ
 • a ≡ a0 ∗ a1. Podobne.
                      ˇ
ad 3.
(⇒)     Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
              ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •      skip, σ → σ. Platı skip, σ →0 skip, σ
                         ´
31
 • a ≡ a0 + a1. Podle I.P. platı
                               ´
         a0 , σ → n 0   ⇐⇒     a 0 , σ →∗ n 0 , σ
         a1 , σ → n 1   ⇐⇒     a 1 , σ →∗ n 1 , σ
   Dale
    ´
      a0 + a1, σ → n ⇐⇒
      a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
      a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
      a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
      a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
 • a ≡ a0 − a1. Podobne.
                      ˇ
 • a ≡ a0 ∗ a1. Podobne.
                      ˇ
ad 3.
(⇒)     Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
              ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •      skip, σ → σ. Platı skip, σ →0 skip, σ
                         ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                     ˇ                     ´ ´    ´                 ´
                 ∗                        ∗           ∗
  Podle 1. a, σ → n, σ , proto X := a, σ → X := n, σ → skip, σ[n/X] podle lematu 2
  (2).
31
 • a ≡ a0 + a1. Podle I.P. platı
                               ´
         a0 , σ → n 0   ⇐⇒     a 0 , σ →∗ n 0 , σ
         a1 , σ → n 1   ⇐⇒     a 1 , σ →∗ n 1 , σ
   Dale
    ´
      a0 + a1, σ → n ⇐⇒
      a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
      a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
      a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
      a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
 • a ≡ a0 − a1. Podobne.
                      ˇ
 • a ≡ a0 ∗ a1. Podobne.
                      ˇ
ad 3.
(⇒)     Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
              ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •      skip, σ → σ. Platı skip, σ →0 skip, σ
                         ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                     ˇ                     ´ ´    ´                 ´
                 ∗                        ∗           ∗
  Podle 1. a, σ → n, σ , proto X := a, σ → X := n, σ → skip, σ[n/X] podle lematu 2
  (2).
32
• c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                     ˇ                 ´ ´      ´
 indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
        ˇnı   ˇ                   ∗
                                                                                    ´
  c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
32
• c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                     ˇ                 ´ ´      ´
 indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
        ˇnı   ˇ                   ∗
                                                                                    ´
  c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
• c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                  ˇ                                 ´        ´      ´
 true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                  ´  ˇı    ˇ
  c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
  c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                               ´ ˇı             ´ˇ         ˇ
32
• c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                     ˇ                 ´ ´      ´
 indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
        ˇnı   ˇ                   ∗
                                                                                    ´
  c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
• c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                  ˇ                                 ´        ´      ´
 true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                  ´  ˇı    ˇ
  c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
  c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                               ´ ˇı             ´ˇ         ˇ
• c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka
                                ˇ                              ´           ´      ´     ´
  b, σ    → false a σ = σ, nebo tri naslednıky b, σ
                                           ˇ    ´   ´         → true, c, σ       → σ a
  while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ →
                               ´    ˇı    ˇ
  if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ →
  skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ
                                        ´    ˇı   ˇ
                           ∗
 a while b do c, σ       →      skip, σ podle 2. a I.P. Proto take while b do c, σ →
                                                                  ´
  if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ →
  c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
32
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                      ˇ                 ´ ´      ´
  indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
         ˇnı   ˇ                   ∗
                                                                                     ´
   c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                 ´        ´      ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                   ´  ˇı    ˇ
   c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
   c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                                ´ ˇı             ´ˇ         ˇ
 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka
                                 ˇ                              ´           ´      ´     ´
   b, σ    → false a σ = σ, nebo tri naslednıky b, σ
                                            ˇ    ´   ´         → true, c, σ       → σ a
   while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ →
                                ´    ˇı    ˇ
   if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ →
   skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ
                                         ´    ˇı   ˇ
                            ∗
  a while b do c, σ       →      skip, σ podle 2. a I.P. Proto take while b do c, σ →
                                                                   ´
   if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ →
   c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
(⇐)   Indukcı ke k pro ktere c, σ →k skip, σ .
            ´              ´
32
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                      ˇ                 ´ ´      ´
  indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
         ˇnı   ˇ                   ∗
                                                                                     ´
   c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                 ´        ´      ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                   ´  ˇı    ˇ
   c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
   c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                                ´ ˇı             ´ˇ         ˇ
 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka
                                 ˇ                              ´           ´      ´     ´
   b, σ    → false a σ = σ, nebo tri naslednıky b, σ
                                            ˇ    ´   ´         → true, c, σ       → σ a
   while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ →
                                ´    ˇı    ˇ
   if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ →
   skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ
                                         ´    ˇı   ˇ
                            ∗
  a while b do c, σ       →      skip, σ podle 2. a I.P. Proto take while b do c, σ →
                                                                   ´
   if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ →
   c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
(⇐)   Indukcı ke k pro ktere c, σ →k skip, σ .
            ´              ´

Baze indukce:
 ´
 •    skip, σ →0 skip, σ . Platı skip, σ → σ.
                               ´
32
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                      ˇ                 ´ ´      ´
  indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
         ˇnı   ˇ                   ∗
                                                                                     ´
   c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                 ´        ´      ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                   ´  ˇı    ˇ
   c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
   c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                                ´ ˇı             ´ˇ         ˇ
 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka
                                 ˇ                              ´           ´      ´     ´
   b, σ    → false a σ = σ, nebo tri naslednıky b, σ
                                            ˇ    ´   ´         → true, c, σ       → σ a
   while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ →
                                ´    ˇı    ˇ
   if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ →
   skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ
                                         ´    ˇı   ˇ
                            ∗
  a while b do c, σ       →      skip, σ podle 2. a I.P. Proto take while b do c, σ →
                                                                   ´
   if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ →
   c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
(⇐)   Indukcı ke k pro ktere c, σ →k skip, σ .
            ´              ´

Baze indukce:
 ´
 •    skip, σ →0 skip, σ . Platı skip, σ → σ.
                               ´
Indukc ´ krok: Necht’ c, σ →k skip, σ
     ˇnı                                kde k ≥ 1. Uvaz´me mozne tvary c.
                                                     ´ ˇı    ˇ ´
32
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle
                      ˇ                 ´ ´      ´
  indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı
         ˇnı   ˇ                   ∗
                                                                                     ´
   c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                   ˇ                                 ´        ´      ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a
                                                                   ´  ˇı    ˇ
   c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ →
   c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne.
                                                ´ ˇı             ´ˇ         ˇ
 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka
                                 ˇ                              ´           ´      ´     ´
   b, σ    → false a σ = σ, nebo tri naslednıky b, σ
                                            ˇ    ´   ´         → true, c, σ       → σ a
   while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ →
                                ´    ˇı    ˇ
   if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ →
   skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ
                                         ´    ˇı   ˇ
                            ∗
  a while b do c, σ       →      skip, σ podle 2. a I.P. Proto take while b do c, σ →
                                                                   ´
   if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ →
   c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
(⇐)   Indukcı ke k pro ktere c, σ →k skip, σ .
            ´              ´

Baze indukce:
 ´
 •    skip, σ →0 skip, σ . Platı skip, σ → σ.
                               ´
Indukc ´ krok: Necht’ c, σ →k skip, σ
     ˇnı                                kde k ≥ 1. Uvaz´me mozne tvary c.
                                                     ´ ˇı    ˇ ´
33
                                k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →         n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
33
                                k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →         n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
33
                                    k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →             n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
• c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti:
                                                      ˇ   ˇ
     if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
     b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ ,
                                              ´                   ´
    tedy take if b then c0 else c1, σ → σ .
             ´
33
                                    k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →             n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
• c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti:
                                                      ˇ   ˇ
     if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
     b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ ,
                                              ´                   ´
    tedy take if b then c0 else c1, σ → σ .
             ´
    Druha moznost se over´ podobne.
        ´   ˇ          ˇ ˇı      ˇ
33
                                    k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →             n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
• c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti:
                                                      ˇ   ˇ
     if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
     b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ ,
                                              ´                   ´
    tedy take if b then c0 else c1, σ → σ .
             ´
    Druha moznost se over´ podobne.
        ´   ˇ          ˇ ˇı      ˇ
• c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle
 lematu 3 (4) jsou dve moznosti:
                     ˇ   ˇ
33
                                    k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →             n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
• c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti:
                                                      ˇ   ˇ
     if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
     b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ ,
                                              ´                   ´
    tedy take if b then c0 else c1, σ → σ .
             ´
    Druha moznost se over´ podobne.
        ´   ˇ          ˇ ˇı      ˇ
• c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle
 lematu 3 (4) jsou dve moznosti:
                     ˇ   ˇ
     if b then (c; while b do c) else skip, σ →l if tt then (c; while b do c) else skip, σ →
     c; while b do c, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . Opetovnym         ˇ    ´
    pouzitım lematu 3 (3) dostavame c; while b do c, σ →l skip; while b do c, σ
         ˇ ´                     ´ ´                                                        →
     while b do c, σ     →m skip, σ , kde l , m < m < k a c, σ →l skip, σ . Podle
    2. a I.P. dostavame b, σ → true, c, σ → σ a while b do c, σ
                   ´ ´                                                           → σ , proto
     while b do c, σ → σ .
33
                                    k−1                                            k−1
• c ≡ X := a. Pak X := a, σ →          X := n, σ → skip, σ[n/X] , kde a, σ →             n, σ
 (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X].
                                ´
• c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ     →m skip, σ kde l, m < k a
  c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ    → σ , tedy
  c0; c1, σ → σ .
• c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti:
                                                      ˇ   ˇ
     if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a
     b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ ,
                                              ´                   ´
    tedy take if b then c0 else c1, σ → σ .
             ´
    Druha moznost se over´ podobne.
        ´   ˇ          ˇ ˇı      ˇ
• c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle
 lematu 3 (4) jsou dve moznosti:
                     ˇ   ˇ
     if b then (c; while b do c) else skip, σ →l if tt then (c; while b do c) else skip, σ →
     c; while b do c, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . Opetovnym         ˇ    ´
    pouzitım lematu 3 (3) dostavame c; while b do c, σ →l skip; while b do c, σ
         ˇ ´                     ´ ´                                                        →
     while b do c, σ     →m skip, σ , kde l , m < m < k a c, σ →l skip, σ . Podle
    2. a I.P. dostavame b, σ → true, c, σ → σ a while b do c, σ
                   ´ ´                                                           → σ , proto
     while b do c, σ → σ .
34
                                          l
 if b then (c; while b do c) else skip, σ → if ff then (c; while b do c) else skip, σ →
 skip, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ (v tomto pr´pade je m = 0 a
                                                                     ˇı    ˇ
σ = σ). Podle 2. platı b, σ → false a tedy while b do c, σ → σ.
                      ´
35
Denotac ´ semantika IMP
      ˇnı ´
35
                   Denotac ´ semantika IMP
                         ˇnı ´



• A : Aexp → (Σ → Z)
35
                   Denotac ´ semantika IMP
                         ˇnı ´



• A : Aexp → (Σ → Z)


• B : Bexp → (Σ → T)
35
                      Denotac ´ semantika IMP
                            ˇnı ´



• A : Aexp → (Σ → Z)


• B : Bexp → (Σ → T)


• C : Com → (Σ → Σ)
35
                        Denotac ´ semantika IMP
                              ˇnı ´



• A : Aexp → (Σ → Z)


• B : Bexp → (Σ → T)


• C : Com → (Σ → Σ)



Argumenty funkcı A, B, C se pıs´ do „semantickych“ zavorek [[ ]]
               ´             ´ˇ ı     ´       ´     ´
36
                 Aritmeticke vyrazy Aexp
                           ´ ´



• A[[n]]σ   =n
36
                     Aritmeticke vyrazy Aexp
                               ´ ´



• A[[n]]σ   =n


• A[[X]]σ   = σ(X)
36
                              Aritmeticke vyrazy Aexp
                                        ´ ´



• A[[n]]σ         =n


• A[[X]]σ         = σ(X)


• A[[a0 + a1]]σ   = A[[a0]]σ + A[[a1]]σ
36
                              Aritmeticke vyrazy Aexp
                                        ´ ´



• A[[n]]σ         =n


• A[[X]]σ         = σ(X)


• A[[a0 + a1]]σ   = A[[a0]]σ + A[[a1]]σ


• A[[a0 − a1]]σ   = A[[a0]]σ − A[[a1]]σ
36
                              Aritmeticke vyrazy Aexp
                                        ´ ´



• A[[n]]σ         =n


• A[[X]]σ         = σ(X)


• A[[a0 + a1]]σ   = A[[a0]]σ + A[[a1]]σ


• A[[a0 − a1]]σ   = A[[a0]]σ − A[[a1]]σ


• A[[a0 ∗ a1]]σ   = A[[a0]]σ ∗ A[[a1]]σ
37
                      Pravdivostnı vyrazy Bexp
                                 ´ ´


• B[[tt]]σ   = true
37
                       Pravdivostnı vyrazy Bexp
                                  ´ ´


• B[[tt]]σ   = true


• B[[ff]]σ   = false
37
                             Pravdivostnı vyrazy Bexp
                                        ´ ´


• B[[tt]]σ        = true


• B[[ff]]σ        = false


• B[[a0 = a1]]σ   = A[[a0]]σ = A[[a1]]σ
37
                             Pravdivostnı vyrazy Bexp
                                        ´ ´


• B[[tt]]σ        = true


• B[[ff]]σ        = false


• B[[a0 = a1]]σ   = A[[a0]]σ = A[[a1]]σ


• B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ
37
                               Pravdivostnı vyrazy Bexp
                                          ´ ´


• B[[tt]]σ        = true


• B[[ff]]σ        = false


• B[[a0 = a1]]σ   = A[[a0]]σ = A[[a1]]σ


• B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ


• B[[ not b]]σ    = ¬B[[b]]σ
37
                               Pravdivostnı vyrazy Bexp
                                          ´ ´


• B[[tt]]σ        = true


• B[[ff]]σ        = false


• B[[a0 = a1]]σ   = A[[a0]]σ = A[[a1]]σ


• B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ


• B[[ not b]]σ    = ¬B[[b]]σ


• B[[b0 and b1]]σ = B[[b0]]σ ∧ B[[b1]]σ
37
                                Pravdivostnı vyrazy Bexp
                                           ´ ´


• B[[tt]]σ         = true


• B[[ff]]σ         = false


• B[[a0 = a1]]σ    = A[[a0]]σ = A[[a1]]σ


• B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ


• B[[ not b]]σ     = ¬B[[b]]σ


• B[[b0 and b1]]σ = B[[b0]]σ ∧ B[[b1]]σ


• B[[b0 or b1]]σ   = B[[b0]]σ ∨ B[[b1]]σ
38
                     Pr´kazy Com
                      ˇı



• C [[skip]]σ   =σ
38
                            Pr´kazy Com
                             ˇı



• C [[skip]]σ     =σ


• C [[X := a]]σ   = σ[A[[a]]σ/X]
38
                               Pr´kazy Com
                                ˇı



• C [[skip]]σ     =σ


• C [[X := a]]σ   = σ[A[[a]]σ/X]


• C [[c0; c1]]σ   = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ
38
                                              Pr´kazy Com
                                               ˇı



• C [[skip]]σ                   =σ


• C [[X := a]]σ                 = σ[A[[a]]σ/X]


• C [[c0; c1]]σ                 = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ

                                    
                                     C [[c0]]σ     jestlize B[[b]]σ = true
                                                          ˇ
• C [[if b then c0 else c1]]σ   =
                                    
                                        C [[c1]]σ   jestlize B[[b]]σ = false
                                                          ˇ
38
                                              Pr´kazy Com
                                               ˇı



• C [[skip]]σ                   =σ


• C [[X := a]]σ                 = σ[A[[a]]σ/X]


• C [[c0; c1]]σ                 = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ

                                    
                                     C [[c0]]σ     jestlize B[[b]]σ = true
                                                          ˇ
• C [[if b then c0 else c1]]σ   =
                                    
                                        C [[c1]]σ   jestlize B[[b]]σ = false
                                                          ˇ


• C [[while b do c]]σ           = ???
39
                  ´
                  Uplne c ´ stec ´ usporadanı (CPO)
                      ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ           ) je CPO, pokud kazdy nekonec ´ retez
                                              ˇ ´       ˇny ˇ ˇ

        d0   d1   d2   d3 · · ·

  prvku z D ma v D supremum.
      ˚      ´         ´
39
                      ´
                      Uplne c ´ stec ´ usporadanı (CPO)
                          ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ               ) je CPO, pokud kazdy nekonec ´ retez
                                                  ˇ ´       ˇny ˇ ˇ

            d0   d1   d2   d3 · · ·

   prvku z D ma v D supremum.
       ˚      ´         ´

Pr´klady:
 ˇı

• Kazda konec ´ usporadana mnozina je CPO.
    ˇ ´     ˇna     ˇ´   ´    ˇ
39
                      ´
                      Uplne c ´ stec ´ usporadanı (CPO)
                          ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ               ) je CPO, pokud kazdy nekonec ´ retez
                                                  ˇ ´       ˇny ˇ ˇ

            d0   d1   d2   d3 · · ·

   prvku z D ma v D supremum.
       ˚      ´         ´

Pr´klady:
 ˇı

• Kazda konec ´ usporadana mnozina je CPO.
    ˇ ´     ˇna     ˇ´   ´    ˇ

• Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO).
    ˇ ´    ˇ          ˇ´   ´                             ´ ´
39
                      ´
                      Uplne c ´ stec ´ usporadanı (CPO)
                          ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ               ) je CPO, pokud kazdy nekonec ´ retez
                                                  ˇ ´       ˇny ˇ ˇ

            d0   d1   d2   d3 · · ·

   prvku z D ma v D supremum.
       ˚      ´         ´

Pr´klady:
 ˇı

• Kazda konec ´ usporadana mnozina je CPO.
    ˇ ´     ˇna     ˇ´   ´    ˇ

• Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO).
    ˇ ´    ˇ          ˇ´   ´                             ´ ´

• Je-li M mnozina, je (2M, ⊆) CPO.
             ˇ
39
                      ´
                      Uplne c ´ stec ´ usporadanı (CPO)
                          ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ               ) je CPO, pokud kazdy nekonec ´ retez
                                                  ˇ ´       ˇny ˇ ˇ

            d0   d1   d2   d3 · · ·

   prvku z D ma v D supremum.
       ˚      ´         ´

Pr´klady:
 ˇı

• Kazda konec ´ usporadana mnozina je CPO.
    ˇ ´     ˇna     ˇ´   ´    ˇ

• Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO).
    ˇ ´    ˇ          ˇ´   ´                             ´ ´

• Je-li M mnozina, je (2M, ⊆) CPO.
             ˇ

• Kazdy uplny svaz je CPO.
    ˇ ´ ´   ´
39
                      ´
                      Uplne c ´ stec ´ usporadanı (CPO)
                          ´ ˇa     ˇne     ˇ´ ´ ´


• Usporadana mnozina (D,
      ˇ´   ´    ˇ               ) je CPO, pokud kazdy nekonec ´ retez
                                                  ˇ ´       ˇny ˇ ˇ

            d0   d1   d2   d3 · · ·

   prvku z D ma v D supremum.
       ˚      ´         ´

Pr´klady:
 ˇı

• Kazda konec ´ usporadana mnozina je CPO.
    ˇ ´     ˇna     ˇ´   ´    ˇ

• Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO).
    ˇ ´    ˇ          ˇ´   ´                             ´ ´

• Je-li M mnozina, je (2M, ⊆) CPO.
             ˇ

• Kazdy uplny svaz je CPO.
    ˇ ´ ´   ´

• (Σ → Σ, ⊆) je CPO.
      f ⊆ g je-li g „vıce definovana“ nez f.
                      ´           ´    ˇ
40
                         Monotonnı a spojite funkce
                              ´ ´          ´


• Necht’ (D, ), (E,   ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde
                                               ´ ´                    ´ ´         ˇ        ˇ ´
  a, b ∈ D platı:
               ´

        a    b   ⇒    f(a)    f(b).
40
                              Monotonnı a spojite funkce
                                   ´ ´          ´


• Necht’ (D, ), (E,     ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde
                                                 ´ ´                    ´ ´         ˇ        ˇ ´
  a, b ∈ D platı:
               ´

        a     b    ⇒        f(a)    f(b).

  f je spojita, je-li monotonnı a pro kazdy nekonec ´ retez
             ´             ´ ´          ˇ ´       ˇny ˇ ˇ

        a0    a1       a2     a3 · · ·

  prvku z D platı
      ˚         ´
         _            G
            f(ai) = f( ai)
        i∈N             i∈N
40
                                 Monotonnı a spojite funkce
                                      ´ ´          ´


• Necht’ (D, ), (E,        ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde
                                                    ´ ´                    ´ ´         ˇ        ˇ ´
  a, b ∈ D platı:
               ´

           a     b    ⇒        f(a)    f(b).

   f je spojita, je-li monotonnı a pro kazdy nekonec ´ retez
              ´             ´ ´          ˇ ´       ˇny ˇ ˇ

           a0    a1       a2     a3 · · ·

   prvku z D platı
       ˚         ´
          _            G
             f(ai) = f( ai)
           i∈N             i∈N

Pr´klad:
 ˇı

• Kazda funkce z diskretnıho CPO je spojita.
    ˇ ´               ´ ´                 ´
41
                       Postac ´cı podmınka spojitosti
                            ˇujı ´    ´


Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı
 ˇ                 ˇ                     ´ ˇ         ˇ ´           ´
              [
      f(A) =     f({a})
              a∈A

Pak f je spojita funkce na CPO (2M, ⊆).
               ´
41
                       Postac ´cı podmınka spojitosti
                            ˇujı ´    ´


Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı
 ˇ                 ˇ                     ´ ˇ         ˇ ´           ´
              [
      f(A) =     f({a})
              a∈A

Pak f je spojita funkce na CPO (2M, ⊆).
               ´

Dukaz.
 ˚
 • Monotonie: Necht’ A ⊆ B. Pak
                    [                 [
       f(A) =          f({a}) ⊆             f({a})   =   f(B).
                     a∈A              a∈B
41
                       Postac ´cı podmınka spojitosti
                            ˇujı ´    ´


Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı
 ˇ                 ˇ                     ´ ˇ         ˇ ´           ´
              [
      f(A) =     f({a})
               a∈A

Pak f je spojita funkce na CPO (2M, ⊆).
               ´

Dukaz.
 ˚
 • Monotonie: Necht’ A ⊆ B. Pak
                    [                 [
       f(A) =          f({a}) ⊆             f({a})     =   f(B).
                     a∈A              a∈B

 • Spojitost: Bud’ A1 ⊆ A2 ⊆ A3 ⊆ A4 · · · nekonec ´ retez podmnozin M. Pak
                                                 ˇny ˇ ˇ         ˇ
         [              [ [                    [
            f(Ai) =            f({a}) = f( Ai).
         i∈N               i∈N a∈Ai                  i∈N
42
                                 Veta o pevnem bode
                                  ˇ         ´     ˇ


Veta 6. Bud’ (D,
 ˇ                 ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme
                             ´ ´      ˇı                   ´                  ˇ
                   G i
      µΓ    =         Γ (⊥).
                   i∈N0

Pak µΓ je nejmens´ pevny bod Γ .
                ˇı     ´
42
                                   Veta o pevnem bode
                                    ˇ         ´     ˇ


Veta 6. Bud’ (D,
 ˇ                 ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme
                             ´ ´      ˇı                   ´                  ˇ
                   G i
      µΓ    =         Γ (⊥).
                   i∈N0

Pak µΓ je nejmens´ pevny bod Γ .
                ˇı     ´

Dukaz.
 ˚

 • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥)
                ´            ˇ ´            ´            Γ i+1(⊥) (snadno indukcı k i, pouzije se
                                                                                ´         ˇ
  monotonie Γ ). Dale
                  ´

         Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) =               Γ i+1(⊥) =             Γ i(⊥) = µΓ
                       F                   F                        F
                               0              i∈N 0                   i∈N
                                                                        0
42
                                   Veta o pevnem bode
                                    ˇ         ´     ˇ


Veta 6. Bud’ (D,
 ˇ                 ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme
                             ´ ´      ˇı                   ´                  ˇ
                   G i
      µΓ    =         Γ (⊥).
                   i∈N0

Pak µΓ je nejmens´ pevny bod Γ .
                ˇı     ´

Dukaz.
 ˚

 • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥)
                ´            ˇ ´            ´            Γ i+1(⊥) (snadno indukcı k i, pouzije se
                                                                                ´         ˇ
  monotonie Γ ). Dale
                  ´

         Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) =               Γ i+1(⊥) =             Γ i(⊥) = µΓ
                       F                   F                        F
                               0              i∈N 0                   i∈N
                                                                        0

 • µΓ je nejmens´ pevny bod Γ : Bud’ d pevny bod Γ (tj. Γ (d) = d). Stac´ ukazat, ze d je hornı
               ˇı     ´                    ´                           ˇı ´       ˇ           ´
  zavora mnoziny {Γ (⊥) | i ∈ N0}. Pak µΓ
   ´         ˇ     i
                                           d podle definice suprema.
                                                                 ´
42
                                   Veta o pevnem bode
                                    ˇ         ´     ˇ


Veta 6. Bud’ (D,
 ˇ                 ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme
                             ´ ´      ˇı                   ´                  ˇ
                   G i
      µΓ    =         Γ (⊥).
                   i∈N0

Pak µΓ je nejmens´ pevny bod Γ .
                ˇı     ´

Dukaz.
 ˚

 • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥)
                ´            ˇ ´            ´            Γ i+1(⊥) (snadno indukcı k i, pouzije se
                                                                                ´         ˇ
  monotonie Γ ). Dale
                  ´

         Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) =               Γ i+1(⊥) =             Γ i(⊥) = µΓ
                       F                   F                        F
                               0              i∈N 0                   i∈N
                                                                        0

 • µΓ je nejmens´ pevny bod Γ : Bud’ d pevny bod Γ (tj. Γ (d) = d). Stac´ ukazat, ze d je hornı
               ˇı     ´                    ´                           ˇı ´       ˇ           ´
  zavora mnoziny {Γ (⊥) | i ∈ N0}. Pak µΓ
   ´         ˇ     i
                                           d podle definice suprema.
                                                                 ´
   Indukcı k i dokazeme, ze Γ i(⊥)
          ´       ´ˇ        ˇ         d pro kazde i ∈ N0. Zrejme Γ 0(⊥) = ⊥
                                              ˇ ´            ˇ    ˇ                d; a platı-li
                                                                                            ´
   Γ i(⊥)   d, pak take Γ i+1(⊥)
                      ´          Γ (d) = d nebot’ Γ je monotonnı a d je pevny bod.
                                                            ´ ´             ´
43
                  Denotac ´ semantika while cyklu
                        ˇnı ´


• Oznac
      ˇme w   ≡    while b do c.
43
                     Denotac ´ semantika while cyklu
                           ˇnı ´


• Oznac
      ˇme w      ≡    while b do c.
• Platı w
      ´     ∼   if b then c; w else skip   (viz strana 22).
43
                       Denotac ´ semantika while cyklu
                             ˇnı ´


• Oznac
      ˇme w        ≡    while b do c.
• Platı w
      ´       ∼   if b then c; w else skip    (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´             =    C [[if b then c; w else skip]]
43
                         Denotac ´ semantika while cyklu
                               ˇnı ´


• Oznac
      ˇme w          ≡    while b do c.
• Platı w
      ´         ∼   if b then c; w else skip     (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´               =    C [[if b then c; w else skip]]
• Tedy
      C [[w]]   =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
43
                         Denotac ´ semantika while cyklu
                               ˇnı ´


• Oznac
      ˇme w          ≡     while b do c.
• Platı w
      ´         ∼   if b then c; w else skip     (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´                =   C [[if b then c; w else skip]]
• Tedy
      C [[w]]   =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]}
                ∪   {(σ, σ) | B[[b]]σ = false}

                =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
43
                         Denotac ´ semantika while cyklu
                               ˇnı ´


• Oznac
      ˇme w          ≡     while b do c.
• Platı w
      ´         ∼   if b then c; w else skip     (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´                =   C [[if b then c; w else skip]]
• Tedy
      C [[w]]   =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]}
                ∪   {(σ, σ) | B[[b]]σ = false}

                =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
• Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou
                         ´                                  ´ˇ             ´
  aproximaci C [[w]] spoc´tat „leps´“ aproximaci.
                        ˇı        ˇı
43
                         Denotac ´ semantika while cyklu
                               ˇnı ´


• Oznac
      ˇme w          ≡     while b do c.
• Platı w
      ´         ∼   if b then c; w else skip      (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´                =     C [[if b then c; w else skip]]
• Tedy
      C [[w]]   =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]}
                ∪   {(σ, σ) | B[[b]]σ = false}

                =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
• Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou
                         ´                                  ´ˇ             ´
  aproximaci C [[w]] spoc´tat „leps´“ aproximaci.
                        ˇı        ˇı
• Definujeme funkci Γ : (Σ → Σ) → (Σ → Σ) predpisem
                                          ˇ
      Γ (ϕ)     =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ ϕ ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
43
                         Denotac ´ semantika while cyklu
                               ˇnı ´


• Oznac
      ˇme w          ≡     while b do c.
• Platı w
      ´         ∼   if b then c; w else skip      (viz strana 22).
• Proto by melo platit take C [[w]]
            ˇ             ´                =     C [[if b then c; w else skip]]
• Tedy
      C [[w]]   =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]}
                ∪   {(σ, σ) | B[[b]]σ = false}

                =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
• Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou
                         ´                                  ´ˇ             ´
  aproximaci C [[w]] spoc´tat „leps´“ aproximaci.
                        ˇı        ˇı
• Definujeme funkci Γ : (Σ → Σ) → (Σ → Σ) predpisem
                                          ˇ
      Γ (ϕ)     =   {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ ϕ ◦ C [[c]]}
                ∪   {(σ, σ) | B[[b]]σ = false}
44
• Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’
          ´ ´          ´
                    [
      Γ (ϕ) =              {Γ ({(σ, σ )})}
                 (σ,σ )∈ϕ

  a lze tedy aplikovat vetu 5.
                        ˇ
44
• Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’
          ´ ´          ´
                    [
      Γ (ϕ) =              {Γ ({(σ, σ )})}
                   (σ,σ )∈ϕ

  a lze tedy aplikovat vetu 5.
                        ˇ
• C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]].
              ˇ    ´      ´
44
• Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’
          ´ ´          ´
                    [
      Γ (ϕ) =              {Γ ({(σ, σ )})}
                      (σ,σ )∈ϕ

  a lze tedy aplikovat vetu 5.
                        ˇ
• C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]].
              ˇ    ´      ´
• Γ muze mıt vıce pevnych bodu; ma-li vsak C [[w]] odpovıdat intuitivnımu vyznamu while cyklu,
        ˚ˇ  ´ ´       ´      ˚   ´     ˇ                ´             ´    ´
  je treba definovat
      ˇ
      C [[w]]   =     µΓ
  Nejmens´ pevny bod Γ existuje podle vety 6 a vypada takto:
        ˇı     ´                       ˇ            ´
              [ i
     µΓ =        Γ (∅)
                    i∈N0
44
• Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’
          ´ ´          ´
                    [
      Γ (ϕ) =              {Γ ({(σ, σ )})}
                      (σ,σ )∈ϕ

  a lze tedy aplikovat vetu 5.
                        ˇ
• C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]].
              ˇ    ´      ´
• Γ muze mıt vıce pevnych bodu; ma-li vsak C [[w]] odpovıdat intuitivnımu vyznamu while cyklu,
        ˚ˇ  ´ ´       ´      ˚   ´     ˇ                ´             ´    ´
  je treba definovat
      ˇ
      C [[w]]   =     µΓ
  Nejmens´ pevny bod Γ existuje podle vety 6 a vypada takto:
        ˇı     ´                       ˇ            ´
              [ i
     µΓ =        Γ (∅)
                    i∈N0

• Pozorovanı: (σ, σ ) ∈ Γ i(∅) prave kdyz while b do c aktivovany ve stavu σ skonc´ po nejvyse
            ´ ´                  ´ ˇ    ˇ                       ´                ˇı        ´ˇ
  i − 1 iteracıch ve stavu σ .
              ´
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
      1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
      1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
      2           1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
      1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
      2           1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
      3           2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
45
             Denotac ´ semantika while cyklu – pr´klady
                   ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
      1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
      2           1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
      3           2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
      4           3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
45
              Denotac ´ semantika while cyklu – pr´klady
                    ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
      0
     Γ (∅)   =   ∅
      1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
      2           1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
      3           2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
      4           3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
             .
             .
             .

  Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1.
       ˇ                                                        ˇ ´
45
              Denotac ´ semantika while cyklu – pr´klady
                    ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
       2          1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
       3          2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
       4          3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
             .
             .
             .

  Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1.
       ˇ                                                        ˇ ´

• while tt do X := X + 1
45
              Denotac ´ semantika while cyklu – pr´klady
                    ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
       2          1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
       3          2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
       4          3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
             .
             .
             .

  Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1.
       ˇ                                                        ˇ ´

• while tt do X := X + 1
       0
     Γ (∅)   =   ∅
45
              Denotac ´ semantika while cyklu – pr´klady
                    ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
       2          1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
       3          2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
       4          3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
             .
             .
             .

  Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1.
       ˇ                                                        ˇ ´

• while tt do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   ∅

  V tomto pr´pade tedy µΓ = Γ 0(∅) = ∅.
           ˇı   ˇ
45
              Denotac ´ semantika while cyklu – pr´klady
                    ˇnı ´                        ˇı


• while X ≤ 1 do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ(X) > 1}
       2          1
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
       3          2
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
       4          3
     Γ (∅)   =   Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
             .
             .
             .

  Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1.
       ˇ                                                        ˇ ´

• while tt do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   ∅

  V tomto pr´pade tedy µΓ = Γ 0(∅) = ∅.
           ˇı   ˇ
46
• while ff do X := X + 1
46
• while ff do X := X + 1
       0
     Γ (∅)   =   ∅
46
• while ff do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ ∈ Σ}
46
• while ff do X := X + 1
       0
     Γ (∅)   =   ∅
       1
     Γ (∅)   =   {(σ, σ) | σ ∈ Σ}
       2
     Γ (∅)   =   {(σ, σ) | σ ∈ Σ}

  V tomto pr´pade tedy µΓ = Γ 1(∅).
           ˇı   ˇ
47
Ekvivalence operac ´ a denotac ´ semantiky
                 ˇnı         ˇnı ´
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´              ´    a, σ → n   ⇐⇒   A[[a]]σ = n
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n    ⇐⇒    A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t   ⇐⇒    B[[b]]σ = t
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n    ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t   ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´   c, σ → σ    ⇐⇒  C [[c]]σ = σ
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´   c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´   c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´   c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •   skip, σ → σ. Platı C [[skip]]σ = σ podle definice.
                      ´
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´   a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´    b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´   c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •   skip, σ → σ. Platı C [[skip]]σ = σ podle definice.
                      ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                          ´ ´       ´      ´
  Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice.
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´    a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´     b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´    c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •   skip, σ → σ. Platı C [[skip]]σ = σ podle definice.
                      ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                          ´ ´       ´      ´
  Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice.
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                        ˇ                      ´ ´         ´                            → σ . Podle I.P.
  C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]].
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´    a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´     b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´    c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •   skip, σ → σ. Platı C [[skip]]σ = σ podle definice.
                      ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                          ´ ´       ´      ´
  Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice.
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                        ˇ                      ´ ´         ´                            → σ . Podle I.P.
  C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]].
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                      ˇ                                        ´      ´     ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade B[[b]]σ = true a
                                                                             ´   ˇı    ˇ
  C [[c0]]σ = σ (podle I.P. a 2.), tedy (σ, σ ) ∈ C [[if b then c0 else c1]] podle definice. Druhy pr´pad
                                                                                                ´ ˇı
  se dokaze podobne.
           ´ˇ         ˇ
47
              Ekvivalence operac ´ a denotac ´ semantiky
                               ˇnı         ˇnı ´


Veta 7.
 ˇ
1. Pro kazde a, σ a n platı:
         ˇ ´               ´    a, σ → n       ⇐⇒  A[[a]]σ = n
2. Pro kazde b, σ a t platı:
         ˇ ´              ´     b, σ → t      ⇐⇒  B[[b]]σ = t
3. Pro kazde c a σ, σ platı:
         ˇ ´               ´    c, σ → σ       ⇐⇒  C [[c]]σ = σ
Dukaz. 1. a 2. indukcı ke strukture a a b.
 ˚                   ´           ˇ
ad 3., „⇒“   Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c.
                   ´    ´ˇ          ´              ´ ˇı    ˇ ´

 •   skip, σ → σ. Platı C [[skip]]σ = σ podle definice.
                      ´
 • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X].
                        ˇ                          ´ ´       ´      ´
  Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice.
 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ
                        ˇ                      ´ ´         ´                            → σ . Podle I.P.
  C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]].
 • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ →
                                      ˇ                                        ´      ´     ´
  true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade B[[b]]σ = true a
                                                                             ´   ˇı    ˇ
  C [[c0]]σ = σ (podle I.P. a 2.), tedy (σ, σ ) ∈ C [[if b then c0 else c1]] podle definice. Druhy pr´pad
                                                                                                ´ ˇı
  se dokaze podobne.
           ´ˇ         ˇ
 • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’
                           ˇ                        ´
48
jedineho naslednıka b, σ
     ´      ´     ´        → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                         ´
(σ, σ) ∈ Γ (∅) ⊆ µΓ ;
48
jedineho naslednıka b, σ
     ´      ´     ´           → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                            ´
(σ, σ) ∈ Γ (∅) ⊆ µΓ ;
nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
      ˇ ´       ´
podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
              ´ ˇ                        ´                          ´ ´     ˇ
tedy (σ, σ ) ∈ µΓ .
48
      jedineho naslednıka b, σ
           ´      ´     ´           → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                  ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ
48
      jedineho naslednıka b, σ
           ´      ´     ´           → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                  ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
48
      jedineho naslednıka b, σ
           ´      ´     ´           → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                  ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                     → n, proto
   X := a, σ → σ[n/X].
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
 • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti:
                                   ˇ                                               ˇ   ˇ
      B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto
                                                               ´
       if b then c0 else c1, σ → σ .
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
 • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti:
                                   ˇ                                               ˇ   ˇ
      B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto
                                                               ´
       if b then c0 else c1, σ → σ .
      Druha moznost se over´ podobne.
          ´   ˇ          ˇ ˇı      ˇ
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
 • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti:
                                   ˇ                                               ˇ   ˇ
      B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto
                                                               ´
       if b then c0 else c1, σ → σ .
      Druha moznost se over´ podobne.
          ´   ˇ          ˇ ˇı      ˇ
 • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze
                               ˇ                                                             ´ ˇ
  (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ .
                          ´         ´ˇ     ˇ        ˇ
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
 • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti:
                                   ˇ                                               ˇ   ˇ
      B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto
                                                               ´
       if b then c0 else c1, σ → σ .
      Druha moznost se over´ podobne.
          ´   ˇ          ˇ ˇı      ˇ
 • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze
                               ˇ                                                             ´ ˇ
  (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ .
                          ´         ´ˇ     ˇ        ˇ
  k = 0. Jelikoz (σ, σ ) ∈ Γ 0(∅) = ∅, dokazovana implikace platı.
               ˇ                                ´               ´
48
      jedineho naslednıka b, σ
           ´      ´     ´             → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto
                                                    ´
      (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
      nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true
            ˇ ´       ´
      podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje
      k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅),
                    ´ ˇ                        ´                          ´ ´     ˇ
      tedy (σ, σ ) ∈ µΓ .

„⇐“   Indukcı ke strukture c.
            ´           ˇ

 • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice.
                 ´
 • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ
                   ´                                                                            → n, proto
   X := a, σ → σ[n/X].
 • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]]
                       ˇ                                                              ´ ˇ
  a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
                                        ´
 • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti:
                                   ˇ                                               ˇ   ˇ
      B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto
                                                               ´
       if b then c0 else c1, σ → σ .
      Druha moznost se over´ podobne.
          ´   ˇ          ˇ ˇı      ˇ
 • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze
                               ˇ                                                             ´ ˇ
  (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ .
                          ´         ´ˇ     ˇ        ˇ
  k = 0. Jelikoz (σ, σ ) ∈ Γ 0(∅) = ∅, dokazovana implikace platı.
               ˇ                                ´               ´
49
                                           k+1
Indukc ´ krok:
     ˇnı         Necht’ tedy (σ, σ ) ∈ Γ         (∅). Podle definice Γ jsou dve moznosti:
                                                                             ˇ   ˇ
  B[[b]]σ = true a (σ, σ ) ∈ Γ k(∅) ◦ C [[c]]. Podle 2. b, σ → true. Navıc existuje σ takove, ze
                                                                        ´                  ´ ˇ
  (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ k(∅). Podle I.P. c, σ → σ a while b do c, σ → σ , tedy
   while b do c, σ → σ .
49
                                           k+1
Indukc ´ krok:
     ˇnı         Necht’ tedy (σ, σ ) ∈ Γ         (∅). Podle definice Γ jsou dve moznosti:
                                                                             ˇ   ˇ
  B[[b]]σ = true a (σ, σ ) ∈ Γ k(∅) ◦ C [[c]]. Podle 2. b, σ → true. Navıc existuje σ takove, ze
                                                                        ´                  ´ ˇ
  (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ k(∅). Podle I.P. c, σ → σ a while b do c, σ → σ , tedy
   while b do c, σ → σ .
  B[[b]]σ = false a σ = σ . Pak b, σ → false podle 2., proto while b do c, σ → σ.
50
Axiomaticka semantika IMP
          ´ ´
50
                       Axiomaticka semantika IMP
                                 ´ ´


• Uvazme program
     ˇ             P   ≡   while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´

• Jak to dokazat?
            ´
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´

• Jak to dokazat?
            ´
     pomocı operac ´ nebo denotac ´ semantiky – problematicke.
          ´      ˇnı            ˇnı ´                       ´
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´

• Jak to dokazat?
            ´
     pomocı operac ´ nebo denotac ´ semantiky – problematicke.
          ´      ˇnı            ˇnı ´                       ´
     Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı
                       ´             ´         ´   ´ ˇ          ´            ´            ´
     system, ktery umoznı jejich platnost dokazat.
         ´       ´    ˇ ´                    ´
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´

• Jak to dokazat?
            ´
     pomocı operac ´ nebo denotac ´ semantiky – problematicke.
          ´      ˇnı            ˇnı ´                       ´
     Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı
                       ´             ´         ´   ´ ˇ          ´            ´            ´
     system, ktery umoznı jejich platnost dokazat.
         ´       ´    ˇ ´                    ´

• Pr´klad:
   ˇı
  {X + Y = i ∧ Z = j}
  while X < 0 do (X := X + 1; Y := Y − 1);
  {Z − (X + Y) = j − i}
  Z := Z − (X + Y)
  {Z = j − i}
50
                          Axiomaticka semantika IMP
                                    ´ ´


• Uvazme program
     ˇ                P   ≡    while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)

• Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i.
        ˇ ˇ        ˇ ˇ ´        ´                                ˇenı      ´

• Jak to dokazat?
            ´
     pomocı operac ´ nebo denotac ´ semantiky – problematicke.
          ´      ˇnı            ˇnı ´                       ´
     Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı
                       ´             ´         ´   ´ ˇ          ´            ´            ´
     system, ktery umoznı jejich platnost dokazat.
         ´       ´    ˇ ´                    ´

• Pr´klad:
   ˇı
  {X + Y = i ∧ Z = j}
  while X < 0 do (X := X + 1; Y := Y − 1);
  {Z − (X + Y) = j − i}
  Z := Z − (X + Y)
  {Z = j − i}
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

         {A}   c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

         {A}   c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
     {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı,
                                 ´ ˇa ˇne                             ˇı ´                   ´
     jestlize c ve stavu σ neskonc´.
           ˇ                     ˇı
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

         {A}   c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
     {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı,
                                 ´ ˇa ˇne                             ˇı ´                   ´
     jestlize c ve stavu σ neskonc´.
           ˇ                     ˇı
     Platı tedy napr.
         ´         ˇ    {true}   while tt do skip {false}
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

          {A}   c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
     {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı,
                                 ´ ˇa ˇne                             ˇı ´                   ´
     jestlize c ve stavu σ neskonc´.
           ˇ                     ˇı
     Platı tedy napr.
         ´         ˇ    {true}   while tt do skip {false}

• Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥:
              ˇ ´                       ´ ´
     Σ⊥    =     Σ ∪ {⊥}
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

          {A}   c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
     {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı,
                                 ´ ˇa ˇne                             ˇı ´                   ´
     jestlize c ve stavu σ neskonc´.
           ˇ                     ˇı
     Platı tedy napr.
         ´         ˇ    {true}   while tt do skip {false}

• Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥:
              ˇ ´                       ´ ´
     Σ⊥    =     Σ ∪ {⊥}
     Dale zavedeme funkci C⊥ : Com → (Σ⊥ → Σ⊥):
      ´
     ∗ C⊥[[c]]⊥ = ⊥          pro kazde c ∈ Com;
                                   ˇ ´
     ∗ C⊥[[c]]σ = C [[c]]σ   pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je definovano;
                                   ˇ ´                                        ´
     ∗ C⊥[[c]]σ = ⊥          pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je nedefinovano.
                                   ˇ ´                                          ´
51
• Cılem je definovat odvozovacı system pro trojice tvaru
   ´                         ´     ´

          {A}    c {B}

  kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı
                                       ´                  ˇı ´ ˇ         ˇ ´                      ´
  nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B.
   ´      ´ ´        ˇ                         ˇ ˇ ´                ˇı                  ´
     {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı,
                                 ´ ˇa ˇne                             ˇı ´                   ´
     jestlize c ve stavu σ neskonc´.
           ˇ                     ˇı
     Platı tedy napr.
         ´         ˇ     {true}   while tt do skip {false}

• Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥:
              ˇ ´                       ´ ´
     Σ⊥    =      Σ ∪ {⊥}
     Dale zavedeme funkci C⊥ : Com → (Σ⊥ → Σ⊥):
      ´
     ∗ C⊥[[c]]⊥ = ⊥           pro kazde c ∈ Com;
                                    ˇ ´
     ∗ C⊥[[c]]σ = C [[c]]σ    pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je definovano;
                                    ˇ ´                                        ´
     ∗ C⊥[[c]]σ = ⊥           pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je nedefinovano.
                                    ˇ ´                                          ´

• Vyznam
   ´            {A}   c {B}   pak lze vyjadrit takto:
                                         ´ ˇ

          {A}    c {B}        ⇐⇒        ∀σ ∈ Σ :    σ |= A   ⇒   C⊥[[c]]σ |= B
52
              Syntaxe a semantika tvrzenı o programech
                         ´              ´


• Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych.
                                    ˇetna  ˇ        ˇı    ´       ˇ ´
52
               Syntaxe a semantika tvrzenı o programech
                          ´              ´


• Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych.
                                    ˇetna  ˇ        ˇı    ´       ˇ ´

• Rozs´rene aritmeticke vyrazy Aexpv
     ˇ ıˇ ´           ´ ´

     a   ::=   n | X | i | a0+a1 | a0−a1 | a0∗a1

  kde n ∈ Num, X ∈ Var a i ∈ IntVar.
52
                Syntaxe a semantika tvrzenı o programech
                           ´              ´


• Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych.
                                    ˇetna  ˇ        ˇı    ´       ˇ ´

• Rozs´rene aritmeticke vyrazy Aexpv
     ˇ ıˇ ´           ´ ´

     a   ::=    n | X | i | a0+a1 | a0−a1 | a0∗a1

  kde n ∈ Num, X ∈ Var a i ∈ IntVar.

• Tvrzenı o programech („assertions“) Assn
        ´

     A    ::=   true | false | a0 = a1 | a0 ≤ a1 | A0∧A1 | A0∨A1 | ¬A | ∀i.A | ∃i.A

  kde a0, a1 ∈ Aexpv a i ∈ IntVar.
52
                Syntaxe a semantika tvrzenı o programech
                           ´              ´


• Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych.
                                    ˇetna  ˇ        ˇı    ´       ˇ ´

• Rozs´rene aritmeticke vyrazy Aexpv
     ˇ ıˇ ´           ´ ´

     a   ::=    n | X | i | a0+a1 | a0−a1 | a0∗a1

  kde n ∈ Num, X ∈ Var a i ∈ IntVar.

• Tvrzenı o programech („assertions“) Assn
        ´

     A    ::=   true | false | a0 = a1 | a0 ≤ a1 | A0∧A1 | A0∨A1 | ¬A | ∀i.A | ∃i.A

  kde a0, a1 ∈ Aexpv a i ∈ IntVar.

• Interpretace je funkce I : IntVar → Z. Mnozinu vsech interpretacı znac´me I .
                                            ˇ     ˇ               ´    ˇı
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
    E [[n]]Iσ      =n
    E [[X]]Iσ      = σ(X)
    E [[i]]Iσ      = I(i)
    E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“)
                                                     ˇ
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
     E [[n]]Iσ      =n
     E [[X]]Iσ      = σ(X)
     E [[i]]Iσ      = I(i)
     E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“)
                                                      ˇ

• A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A)
           ˇ                                            ´
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
     E [[n]]Iσ      =n
     E [[X]]Iσ      = σ(X)
     E [[i]]Iσ      = I(i)
     E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“)
                                                      ˇ

• A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A)
           ˇ                                            ´
     ⊥ |=I A        pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla:
                          ˇ ´                              ´    ´      ´ ´
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
     E [[n]]Iσ       =n
     E [[X]]Iσ       = σ(X)
     E [[i]]Iσ       = I(i)
     E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“)
                                                      ˇ

• A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A)
           ˇ                                            ´
     ⊥ |=I A         pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla:
                           ˇ ´                              ´    ´      ´ ´
     σ |=I true
     σ |=I a0 = a1   ⇐⇒       E [[a0]]Iσ = E [[a1]]Iσ
     σ |=I a0 ≤ a1   ⇐⇒       E [[a0]]Iσ ≤ E [[a1]]Iσ
     σ |=I A0 ∧ A1   ⇐⇒       σ |=I A0 ∧ σ |=I A1
     σ |=I A0 ∨ A1   ⇐⇒       σ |=I A0 ∨ σ |=I A1
     σ |=I ¬A        ⇐⇒       σ |=I A
     σ |=I ∀i.A      ⇐⇒       σ |=I[n/i] A pro kazde n ∈ Z
                                                 ˇ ´
     σ |=I ∃i.A      ⇐⇒       σ |=I[n/i] A pro nejake n ∈ Z
                                                ˇ   ´

• A ∈ Assn je platne, psano |= A, pokud σ |=I A pro kazde σ ∈ Σ a I ∈ I .
                   ´    ´                             ˇ ´
53
• Definujeme funkci E : Aexpv → (I → (Σ → Z))
     E [[n]]Iσ       =n
     E [[X]]Iσ       = σ(X)
     E [[i]]Iσ       = I(i)
     E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“)
                                                      ˇ

• A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A)
           ˇ                                            ´
     ⊥ |=I A         pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla:
                           ˇ ´                              ´    ´      ´ ´
     σ |=I true
     σ |=I a0 = a1   ⇐⇒       E [[a0]]Iσ = E [[a1]]Iσ
     σ |=I a0 ≤ a1   ⇐⇒       E [[a0]]Iσ ≤ E [[a1]]Iσ
     σ |=I A0 ∧ A1   ⇐⇒       σ |=I A0 ∧ σ |=I A1
     σ |=I A0 ∨ A1   ⇐⇒       σ |=I A0 ∨ σ |=I A1
     σ |=I ¬A        ⇐⇒       σ |=I A
     σ |=I ∀i.A      ⇐⇒       σ |=I[n/i] A pro kazde n ∈ Z
                                                 ˇ ´
     σ |=I ∃i.A      ⇐⇒       σ |=I[n/i] A pro nejake n ∈ Z
                                                ˇ   ´

• A ∈ Assn je platne, psano |= A, pokud σ |=I A pro kazde σ ∈ Σ a I ∈ I .
                   ´    ´                             ˇ ´
54

Lema 8.
 • Pro kazde a ∈ Aexp, σ ∈ Σ a I ∈ I platı A[[a]]σ = E [[a]]Iσ.
         ˇ ´                             ´
 • Pro kazde b ∈ Bexp a σ ∈ Σ platı
         ˇ ´                      ´
      B[[b]]σ = true    ⇐⇒     σ |=I b
      B[[b]]σ = false   ⇐⇒     σ |=I b
Dukaz. Strukturalnı indukcı.
 ˚             ´ ´        ´
55
               Tvrzenı o c ´ stec ´ korektnosti programu
                     ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.
55
                Tvrzenı o c ´ stec ´ korektnosti programu
                      ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}    ⇐⇒    (σ |=I A   =⇒    C⊥[[c]]σ |=I B)
55
                  Tvrzenı o c ´ stec ´ korektnosti programu
                        ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}    ⇐⇒    (σ |=I A   =⇒    C⊥[[c]]σ |=I B)

• |=I {A} c {B}      ⇐⇒    ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
55
                  Tvrzenı o c ´ stec ´ korektnosti programu
                        ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}    ⇐⇒        (σ |=I A   =⇒    C⊥[[c]]σ |=I B)

• |=I {A} c {B}      ⇐⇒        ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
     Platı
         ´   ⊥ |=I {A} c {B}     pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com.
                                       ˇ ´
55
                  Tvrzenı o c ´ stec ´ korektnosti programu
                        ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}    ⇐⇒        (σ |=I A    =⇒    C⊥[[c]]σ |=I B)

• |=I {A} c {B}      ⇐⇒        ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
     Platı
         ´   ⊥ |=I {A} c {B}     pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com.
                                       ˇ ´
     Proto    |=I {A} c {B}     ⇐⇒        ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech).
                                                                           ˇı     ˚
55
                   Tvrzenı o c ´ stec ´ korektnosti programu
                         ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}      ⇐⇒        (σ |=I A    =⇒    C⊥[[c]]σ |=I B)

• |=I {A} c {B}        ⇐⇒        ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
     Platı
         ´   ⊥ |=I {A} c {B}        pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com.
                                          ˇ ´
     Proto       |=I {A} c {B}    ⇐⇒        ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech).
                                                                             ˇı     ˚

• |= {A} c {B}         ⇐⇒        ∀I ∈ I : |=I {A} c {B}
55
                   Tvrzenı o c ´ stec ´ korektnosti programu
                         ´ ˇa       ˇne                    ˚


• Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru
        ´ ˇa ˇne

         {A} c {B}

  kde A, B ∈ Assn.

• σ |=I {A} c {B}      ⇐⇒        (σ |=I A    =⇒    C⊥[[c]]σ |=I B)

• |=I {A} c {B}        ⇐⇒        ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
     Platı
         ´   ⊥ |=I {A} c {B}        pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com.
                                          ˇ ´
     Proto       |=I {A} c {B}    ⇐⇒        ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech).
                                                                             ˇı     ˚

• |= {A} c {B}         ⇐⇒        ∀I ∈ I : |=I {A} c {B}

• Tvrzenı {A} c {B} pro ktere platı |= {A} c {B} nazyvame platne.
        ´                   ´     ´                 ´ ´        ´
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´

• Pravidlo pro sekvenc ´ kompozici:
                     ˇnı
         {A} c0 {C}      {C} c1 {B}
               {A} c0; c1 {B}
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´

• Pravidlo pro sekvenc ´ kompozici:
                     ˇnı
         {A} c0 {C}      {C} c1 {B}
               {A} c0; c1 {B}
• Pravidlo pro vetvenı:
                ˇ    ´
         {A ∧ b} c0 {B}     {A ∧ ¬b} c1 {B}
             {A} if b then c0 else c1 {B}
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´

• Pravidlo pro sekvenc ´ kompozici:
                     ˇnı
         {A} c0 {C}      {C} c1 {B}
               {A} c0; c1 {B}
• Pravidlo pro vetvenı:
                ˇ    ´
         {A ∧ b} c0 {B}     {A ∧ ¬b} c1 {B}
             {A} if b then c0 else c1 {B}
• Pravidlo pro cyklus:
               {A ∧ b} c {A}
         {A} while b do c {A ∧ ¬b}
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´

• Pravidlo pro sekvenc ´ kompozici:
                     ˇnı
         {A} c0 {C}      {C} c1 {B}
               {A} c0; c1 {B}
• Pravidlo pro vetvenı:
                ˇ    ´
         {A ∧ b} c0 {B}     {A ∧ ¬b} c1 {B}
             {A} if b then c0 else c1 {B}
• Pravidlo pro cyklus:
               {A ∧ b} c {A}
         {A} while b do c {A ∧ ¬b}
• Pravidlo dusledku:
            ˚
         |= (A ⇒ A )       {A } c {B }   |= (B ⇒ B)
                            {A} c {B}
56
Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti
     ˚           ´     ´            ´ ˇa       ˇne


• Axiom pro skip: {A} skip {A}

• Axiom pro prirazenı: {B[a/X]} X := a {B}
             ˇˇ     ´

• Pravidlo pro sekvenc ´ kompozici:
                     ˇnı
         {A} c0 {C}      {C} c1 {B}
               {A} c0; c1 {B}
• Pravidlo pro vetvenı:
                ˇ    ´
         {A ∧ b} c0 {B}     {A ∧ ¬b} c1 {B}
             {A} if b then c0 else c1 {B}
• Pravidlo pro cyklus:
               {A ∧ b} c {A}
         {A} while b do c {A ∧ ¬b}
• Pravidlo dusledku:
            ˚
         |= (A ⇒ A )       {A } c {B }   |= (B ⇒ B)
                            {A} c {B}
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´     {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                       ´         ˇ          ´
  systemu.
      ´
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´       {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                         ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´       {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                         ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´


Pr´klad:
 ˇı        {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´       {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                         ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´


Pr´klad:
 ˇı         {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}

     |= (X=5 ∧ X=5) ⇒ X=5    {X=5} Y := X − 2 {X=5}   |= X=5 ⇒ X=5
•
                      {X=5 ∧ X=5} Y := X − 2 {X=5}
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´        {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                          ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´


Pr´klad:
 ˇı         {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}

     |= (X=5 ∧ X=5) ⇒ X=5    {X=5} Y := X − 2 {X=5}     |= X=5 ⇒ X=5
•
                      {X=5 ∧ X=5} Y := X − 2 {X=5}

     |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5   {Y + 5 = 5} X := Y + 5 {X = 5}   |= X=5 ⇒ X=5
•
                           {X=5 ∧ ¬X=5} X := Y + 5 {X=5}
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´        {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                          ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´


Pr´klad:
 ˇı         {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}

     |= (X=5 ∧ X=5) ⇒ X=5    {X=5} Y := X − 2 {X=5}     |= X=5 ⇒ X=5
•
                      {X=5 ∧ X=5} Y := X − 2 {X=5}

     |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5   {Y + 5 = 5} X := Y + 5 {X = 5}   |= X=5 ⇒ X=5
•
                           {X=5 ∧ ¬X=5} X := Y + 5 {X=5}

     {X=5 ∧ X=5} Y := X − 2 {X=5}        {X=5 ∧ ¬X=5} X := Y + 5 {X=5}
•
             {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
57
• Tvrzenı {A} c {B} je dokazatelne, psano
        ´                        ´    ´        {A} c {B}, je-li odvoditelne v Hoarove odvozovacım
                                                                          ´         ˇ          ´
  systemu.
      ´

• Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c.
        ´           ´     ´                        ´ ´


Pr´klad:
 ˇı         {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}

     |= (X=5 ∧ X=5) ⇒ X=5    {X=5} Y := X − 2 {X=5}     |= X=5 ⇒ X=5
•
                      {X=5 ∧ X=5} Y := X − 2 {X=5}

     |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5   {Y + 5 = 5} X := Y + 5 {X = 5}   |= X=5 ⇒ X=5
•
                           {X=5 ∧ ¬X=5} X := Y + 5 {X=5}

     {X=5 ∧ X=5} Y := X − 2 {X=5}        {X=5 ∧ ¬X=5} X := Y + 5 {X=5}
•
             {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
58
Pr´klad:
 ˇı        {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}
58
Pr´klad:
 ˇı        {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}

     {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i}      {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i}
•
                       α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
58
Pr´klad:
 ˇı        {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}

     {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i}      {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i}
•
                       α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}

      |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α       |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i)
                       {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
•
             β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0}
58
Pr´klad:
 ˇı        {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}

     {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i}      {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i}
•
                       α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}

      |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α       |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i)
                       {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
•
             β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0}

     |= (X+Y=i ∧ Z=j) ⇒ Z−(X+Y) = j−i  β |= (Z−(X+Y) = j−i ∧ ¬X<0) ⇒ Z−(X+Y) = j−i
•
            γ ≡ {X+Y = i ∧ Z=j} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
58
Pr´klad:
 ˇı         {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}

     {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i}      {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i}
•
                       α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}

      |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α       |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i)
                       {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
•
             β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0}

     |= (X+Y=i ∧ Z=j) ⇒ Z−(X+Y) = j−i  β |= (Z−(X+Y) = j−i ∧ ¬X<0) ⇒ Z−(X+Y) = j−i
•
            γ ≡ {X+Y = i ∧ Z=j} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i}

          γ                  {Z−(X+Y) = j−i} Z := Z−(X+Y) {Z = j−i}
•
     {X+Y=i ∧ Z=j}   while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}
59
Korektnost Hoareova odvozovacıho systemu
                             ´       ´
59
              Korektnost Hoareova odvozovacıho systemu
                                           ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
 • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
 • σ |=I B[a/X]      ⇐⇒       σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ
59
               Korektnost Hoareova odvozovacıho systemu
                                            ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
  • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
  • σ |=I B[a/X]      ⇐⇒       σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ


Veta 10 (o korektnosti). Jestlize
 ˇ                             ˇ       {A} c {B}, pak |= {A} c {B}.
59
               Korektnost Hoareova odvozovacıho systemu
                                            ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
  • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
  • σ |=I B[a/X]      ⇐⇒       σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ


Veta 10 (o korektnosti). Jestlize
 ˇ                             ˇ       {A} c {B}, pak |= {A} c {B}.
Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}.
 ˚           ´    ´ˇ            ´
59
               Korektnost Hoareova odvozovacıho systemu
                                            ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
  • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
  • σ |=I B[a/X]      ⇐⇒       σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ


Veta 10 (o korektnosti). Jestlize
 ˇ                             ˇ       {A} c {B}, pak |= {A} c {B}.
Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}.
 ˚           ´    ´ˇ            ´
Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene:
  ´ ˇı      ´                  ˇ               ´ ˇ
  • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne.
                             ˇ                                  ´         ˇ      ´
59
               Korektnost Hoareova odvozovacıho systemu
                                            ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
  • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
  • σ |=I B[a/X]      ⇐⇒        σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ


Veta 10 (o korektnosti). Jestlize
 ˇ                             ˇ       {A} c {B}, pak |= {A} c {B}.
Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}.
 ˚           ´    ´ˇ            ´
Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene:
  ´ ˇı      ´                  ˇ               ´ ˇ
  • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne.
                             ˇ                                  ´         ˇ      ´
  • Axiom pro X := a. Pak je koren tvaru {B[a/X]} X := a {B}. Necht’ I ∈ I a σ ∈ Σ. Podle
                               ˇ
   lematu 9 platı σ |= B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B. Jelikoz σ[A[[a]]σ/X] = C [[X := a]]σ,
                ´     I
                                                             ˇ
   dostavame
       ´ ´

           σ |=I B[a/X]     ⇒     C [[X := a]]σ |=I B,

   tedy |= {B[a/X]} X := a {B}.
59
               Korektnost Hoareova odvozovacıho systemu
                                            ´       ´


Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ
                                                                               ˇ ´
platı:
    ´
  • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X]
  • σ |=I B[a/X]      ⇐⇒        σ[A[[a]]σ/X] |=I B
Dukaz. Indukcı ke strukture a0, resp. B.
 ˚           ´           ˇ


Veta 10 (o korektnosti). Jestlize
 ˇ                             ˇ       {A} c {B}, pak |= {A} c {B}.
Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}.
 ˚           ´    ´ˇ            ´
Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene:
  ´ ˇı      ´                  ˇ               ´ ˇ
  • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne.
                             ˇ                                  ´         ˇ      ´
  • Axiom pro X := a. Pak je koren tvaru {B[a/X]} X := a {B}. Necht’ I ∈ I a σ ∈ Σ. Podle
                               ˇ
   lematu 9 platı σ |= B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B. Jelikoz σ[A[[a]]σ/X] = C [[X := a]]σ,
                ´     I
                                                             ˇ
   dostavame
       ´ ´

           σ |=I B[a/X]     ⇒     C [[X := a]]σ |=I B,

   tedy |= {B[a/X]} X := a {B}.
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I

• Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B}
                   ˇ     ´            ˇ                             ´ ´      ´
 a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme,
                          ˇ                      ´    ´                        ˇ      ´
 ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I
  ˇ             ´                                      ´   ˇı    ˇ
 B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem
                                          ´   ˇı    ˇ    I

 |= {A} if b then c0 else c1 {B} (uzitım lematu 8).
                                   ˇ ´
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I

• Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B}
                   ˇ     ´            ˇ                             ´ ´      ´
 a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme,
                          ˇ                      ´    ´                        ˇ      ´
 ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I
  ˇ             ´                                      ´   ˇı    ˇ
 B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem
                                          ´   ˇı    ˇ    I

 |= {A} if b then c0 else c1 {B} (uzitım lematu 8).
                                   ˇ ´
• Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery
                                 ˇ                             ´ ´     ´                    ´
 je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze
                    ´        ´                            ˇ          ´     ˇ

        σ |=I A       ⇒     C⊥[[while b do c]]σ |=I A ∧ ¬b

 Mejme tedy σ a I takove, ze σ |=I A. Oznac
    ˇ                       ´ ˇ                ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme
 hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0
                                                                                         ˇ ´
                                S∞ i
 (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde
        ˇ                                           ˇ                     ˇı    ´      ˇ        ˇ ´
 j ∈ N0 platı ´

        D(j)      ≡       ∀σ, σ ∈ Σ, ∀I ∈ I :   ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A)    ⇒     σ |=I A ∧ ¬b
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I

• Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B}
                   ˇ     ´            ˇ                             ´ ´      ´
 a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme,
                          ˇ                      ´    ´                        ˇ      ´
 ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I
  ˇ             ´                                      ´   ˇı    ˇ
 B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem
                                          ´   ˇı    ˇ    I

 |= {A} if b then c0 else c1 {B} (uzitım lematu 8).
                                   ˇ ´
• Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery
                                 ˇ                             ´ ´     ´                    ´
 je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze
                    ´        ´                            ˇ          ´     ˇ

        σ |=I A       ⇒     C⊥[[while b do c]]σ |=I A ∧ ¬b

 Mejme tedy σ a I takove, ze σ |=I A. Oznac
    ˇ                       ´ ˇ                ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme
 hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0
                                                                                         ˇ ´
                                S∞ i
 (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde
        ˇ                                           ˇ                     ˇı    ´      ˇ        ˇ ´
 j ∈ N0 platı ´

        D(j)      ≡       ∀σ, σ ∈ Σ, ∀I ∈ I :   ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A)    ⇒     σ |=I A ∧ ¬b

 Indukcı vzhledem k j.
       ´
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I

• Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B}
                   ˇ     ´            ˇ                             ´ ´      ´
 a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme,
                          ˇ                      ´    ´                        ˇ      ´
 ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I
  ˇ             ´                                      ´   ˇı    ˇ
 B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem
                                          ´   ˇı    ˇ    I

 |= {A} if b then c0 else c1 {B} (uzitım lematu 8).
                                   ˇ ´
• Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery
                                 ˇ                             ´ ´     ´                    ´
 je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze
                    ´        ´                            ˇ          ´     ˇ

        σ |=I A       ⇒     C⊥[[while b do c]]σ |=I A ∧ ¬b

 Mejme tedy σ a I takove, ze σ |=I A. Oznac
    ˇ                       ´ ˇ                ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme
 hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0
                                                                                         ˇ ´
                                S∞ i
 (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde
        ˇ                                           ˇ                     ˇı    ´      ˇ        ˇ ´
 j ∈ N0 platı ´

        D(j)      ≡       ∀σ, σ ∈ Σ, ∀I ∈ I :   ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A)    ⇒     σ |=I A ∧ ¬b

 Indukcı vzhledem k j.
       ´
    j = 0.     Jelikoz Γ 0(∅) = ∅, neplatı antecedent dokazovane implikace.
                     ˇ                   ´                     ´
60
• Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C}
                         ˇnı                        ˇ                             ´ ´      ´
 a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze
                  ˇ                         ´       ´                                ˇ       ´         ˇ
 σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B}
               ´                                                                         ˇ
 a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}.
               I

• Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B}
                   ˇ     ´            ˇ                             ´ ´      ´
 a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme,
                          ˇ                      ´    ´                        ˇ      ´
 ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I
  ˇ             ´                                      ´   ˇı    ˇ
 B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem
                                          ´   ˇı    ˇ    I

 |= {A} if b then c0 else c1 {B} (uzitım lematu 8).
                                   ˇ ´
• Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery
                                 ˇ                             ´ ´     ´                    ´
 je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze
                    ´        ´                            ˇ          ´     ˇ

        σ |=I A       ⇒     C⊥[[while b do c]]σ |=I A ∧ ¬b

 Mejme tedy σ a I takove, ze σ |=I A. Oznac
    ˇ                       ´ ˇ                ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme
 hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0
                                                                                         ˇ ´
                                S∞ i
 (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde
        ˇ                                           ˇ                     ˇı    ´      ˇ        ˇ ´
 j ∈ N0 platı ´

        D(j)      ≡       ∀σ, σ ∈ Σ, ∀I ∈ I :   ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A)    ⇒     σ |=I A ∧ ¬b

 Indukcı vzhledem k j.
       ´
    j = 0.     Jelikoz Γ 0(∅) = ∅, neplatı antecedent dokazovane implikace.
                     ˇ                   ´                     ´
61
Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy
       ˇnı       ˇ      ´        ˇ           ´     ´ˇ     ˇ    ´
(σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti:
           j+1        I
                                                 ˇ    ˇ
61
Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy
       ˇnı       ˇ      ´        ˇ           ´     ´ˇ     ˇ    ´
(σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti:
           j+1        I
                                                 ˇ    ˇ
∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b.
                                                             ˇ ´
  Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı
   ´                     ´ ˇ                                              ˇ                       ´
  σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı.
                ´                 ´ ´                                         ´
61
Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy
       ˇnı       ˇ      ´        ˇ           ´     ´ˇ     ˇ    ´
(σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti:
           j+1        I
                                                 ˇ    ˇ
∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b.
                                                             ˇ ´
  Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı
   ´                     ´ ˇ                                              ˇ                       ´
  σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı.
                ´                 ´ ´                                         ´
∗ B[[b]]σ = false a σ = σ. Platı σ |=I ¬b a tedy σ |=I A ∧ ¬b, coz bylo dokazat.
                               ´                                 ˇ         ´
61
    Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy
           ˇnı       ˇ      ´        ˇ           ´     ´ˇ     ˇ    ´
    (σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti:
               j+1        I
                                                     ˇ    ˇ
    ∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b.
                                                                 ˇ ´
      Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı
       ´                     ´ ˇ                                              ˇ                       ´
      σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı.
                    ´                 ´ ´                                         ´
    ∗ B[[b]]σ = false a σ = σ. Platı σ |=I ¬b a tedy σ |=I A ∧ ¬b, coz bylo dokazat.
                                   ´                                 ˇ         ´
• Pravidlo dusledku. Pak koren {A} c {B} ma naslednıky |= (A ⇒ A ), {A } c {B } a |= (B ⇒ B).
              ˚                   ˇ               ´ ´      ´
 Podle I.P. je {A } c {B } platne tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Jestlize σ |=I A, platı take σ |=I A ,
                                ´       ´                              ˇ               ´    ´
 proto C⊥[[c]]σ |= B a tudız i C⊥[[c]]σ |= B.
                  I
                             ´ˇ            I
62
Nejslabs´ vstupnı podmınka
       ˇı       ´     ´
62
                          Nejslabs´ vstupnı podmınka
                                 ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
62
                          Nejslabs´ vstupnı podmınka
                                 ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
62
                           Nejslabs´ vstupnı podmınka
                                  ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
• Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I,
                                              ˇı     ´     ´
      ˇovana wpI[[c, B]], je definovana takto:
  oznac     ´                        ´

         wpI[[c, B]]   =   {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.
62
                           Nejslabs´ vstupnı podmınka
                                  ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
• Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I,
                                              ˇı     ´     ´
      ˇovana wpI[[c, B]], je definovana takto:
  oznac     ´                        ´

         wpI[[c, B]]   =   {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.

• Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}.
              ˇenı
62
                           Nejslabs´ vstupnı podmınka
                                  ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
• Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I,
                                              ˇı     ´     ´
      ˇovana wpI[[c, B]], je definovana takto:
  oznac     ´                        ´

         wpI[[c, B]]   =   {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.

• Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}.
              ˇenı
• Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı
      ´              ˇ           ˇı       ´     ´                           ˇ ´           ´
  AI = wpI[[c, B]].
62
                             Nejslabs´ vstupnı podmınka
                                    ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
• Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I,
                                              ˇı     ´     ´
      ˇovana wpI[[c, B]], je definovana takto:
  oznac     ´                        ´

         wpI[[c, B]]    =   {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.

• Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}.
              ˇenı
• Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı
      ´              ˇ           ˇı       ´     ´                           ˇ ´           ´
  AI = wpI[[c, B]].
• Platı |=I {A} c {B}
      ´                     ⇐⇒   AI ⊆ wpI[[c, B]].
62
                             Nejslabs´ vstupnı podmınka
                                    ˇı       ´     ´


• Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest
                          ´                                                 ˇnı               ´
  tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}.
       ˇ           ˇ        ´                    ´         ´
• Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı
     ´ˇ      ˇ        ´                      ´                ´                       ˇı       ´
  podmınka pro c1 a B (vyjadrena v Assn).
      ´                   ´ ˇ ´
• Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I,
                                              ˇı     ´     ´
      ˇovana wpI[[c, B]], je definovana takto:
  oznac     ´                        ´

         wpI[[c, B]]    =   {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.

• Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}.
              ˇenı
• Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı
      ´              ˇ           ˇı       ´     ´                           ˇ ´           ´
  AI = wpI[[c, B]].
• Platı |=I {A} c {B}
      ´                     ⇐⇒   AI ⊆ wpI[[c, B]].
• Predpokladejme, ze A0 ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c. Pak vyse
   ˇ        ´        ˇ                      ˇ       ˇı     ´       ´                       ´ˇ
  uvedenou ekvivalenci lze prepsat na |=I {A} c {B} ⇐⇒ AI ⊆ AI
                                ˇ                                    0    ⇐⇒ |=I (A ⇒ A0),
  coz platı pro libovolne I, tedy |= {A} c {B} ⇐⇒ |= (A ⇒ A0) (odtud pr´vlastek „nejslabs´“).
     ˇ    ´             ´                                              ˇı               ˇı
63
Nejslabs´ vstupnı podmınka – pr´klady
       ˇı       ´     ´       ˇı
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.   Vyjadritelne jako false.
                                      ´ ˇ     ´
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.    Vyjadritelne jako false.
                                       ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                    =      BI .
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.     Vyjadritelne jako false.
                                        ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                    =       BI .

• wpI[[while true do skip, true]]          =   Σ⊥.   Vyjadritelne jako true.
                                                        ´ ˇ     ´
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.     Vyjadritelne jako false.
                                        ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                    =       BI .

• wpI[[while true do skip, true]]          =   Σ⊥.   Vyjadritelne jako true.
                                                        ´ ˇ     ´

• wpI[[while true do skip, false]]         =   Σ⊥.   Vyjadritelne jako true.
                                                        ´ ˇ     ´
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.     Vyjadritelne jako false.
                                        ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                    =       BI .

• wpI[[while true do skip, true]]          =     Σ⊥.   Vyjadritelne jako true.
                                                          ´ ˇ     ´

• wpI[[while true do skip, false]]         =     Σ⊥.   Vyjadritelne jako true.
                                                          ´ ˇ     ´

• wpI[[X := 2; Y := 4, X = 3]]       =         {⊥}.
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.     Vyjadritelne jako false.
                                        ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                    =       BI .

• wpI[[while true do skip, true]]          =     Σ⊥.   Vyjadritelne jako true.
                                                          ´ ˇ     ´

• wpI[[while true do skip, false]]         =     Σ⊥.   Vyjadritelne jako true.
                                                          ´ ˇ     ´

• wpI[[X := 2; Y := 4, X = 3]]       =         {⊥}.

• wpI[[X := X + 1; Y := Y − 1, X = 3 ∧ Y = 6]]             =   {⊥} ∪ {σ ∈ Σ | σ(X) = 2 ∧ σ(Y) = 7}.
  Vyjadritelne jako X = 2 ∧ Y = 7.
     ´ ˇ     ´
63
                       Nejslabs´ vstupnı podmınka – pr´klady
                              ˇı       ´     ´       ˇı


• wpI[[skip, false]]    =   {⊥}.       Vyjadritelne jako false.
                                          ´ ˇ     ´

• Obecne wpI[[skip, B]]
       ˇ                        =     BI .

• wpI[[while true do skip, true]]            =     Σ⊥.   Vyjadritelne jako true.
                                                            ´ ˇ     ´

• wpI[[while true do skip, false]]           =     Σ⊥.   Vyjadritelne jako true.
                                                            ´ ˇ     ´

• wpI[[X := 2; Y := 4, X = 3]]        =          {⊥}.

• wpI[[X := X + 1; Y := Y − 1, X = 3 ∧ Y = 6]]               =   {⊥} ∪ {σ ∈ Σ | σ(X) = 2 ∧ σ(Y) = 7}.
  Vyjadritelne jako X = 2 ∧ Y = 7.
     ´ ˇ     ´

• wpI[[X := Y, i = X]]      =       {⊥} ∪ {σ ∈ Σ | σ(Y) = I(i)}.         Vyjadritelne jako Y = i.
                                                                            ´ ˇ     ´
64
                              Godeluv predikat β
                               ¨   ˚        ´


• Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem
              ´ ´        ´          ´    ´      ´   ˇı       ˇ

        β(a, b, i, x)   ⇐⇒   x = a mod(1 + b(1 + i))
64
                              Godeluv predikat β
                               ¨   ˚        ´


• Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem
              ´ ´        ´          ´    ´      ´   ˇı       ˇ

        β(a, b, i, x)   ⇐⇒   x = a mod(1 + b(1 + i))

                ˇna                    ´     ´      ´    ˇı              ˇ
• Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje
                                                                             ˇ       ˇ
  β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)).
            ´               ˇ        ˇ ´            ´
64
                               Godeluv predikat β
                                ¨   ˚        ´


• Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem
              ´ ´        ´          ´    ´      ´   ˇı       ˇ

        β(a, b, i, x)   ⇐⇒    x = a mod(1 + b(1 + i))

                ˇna                    ´     ´      ´    ˇı              ˇ
• Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje
                                                                             ˇ       ˇ
  β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)).
            ´               ˇ        ˇ ´            ´
• Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana
         ˇ ´                        ´                ˇ ´ ´                                ´
  predpisem Sa,b(i) = a mod(1 + b(1 + i)).
   ˇ
64
                                 Godeluv predikat β
                                  ¨   ˚        ´


• Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem
              ´ ´        ´          ´    ´      ´   ˇı       ˇ

         β(a, b, i, x)    ⇐⇒    x = a mod(1 + b(1 + i))

                ˇna                    ´     ´      ´    ˇı              ˇ
• Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje
                                                                             ˇ       ˇ
  β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)).
            ´               ˇ        ˇ ´            ´
• Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana
         ˇ ´                        ´                ˇ ´ ´                                ´
  predpisem Sa,b(i) = a mod(1 + b(1 + i)).
   ˇ
• Predikat β je vyjadritelny v Assn, nebot’ x = a mod b lze napsat jako
        ´          ´ ˇ     ´

         a≥0       ∧     b≥0 ∧
         ∃k :    (k ≥ 0   ∧    k∗b≤a        ∧   (k + 1) ∗ b > a    ∧      x = a − (k ∗ b))
64
                                  Godeluv predikat β
                                   ¨   ˚        ´


• Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem
              ´ ´        ´          ´    ´      ´   ˇı       ˇ

          β(a, b, i, x)    ⇐⇒    x = a mod(1 + b(1 + i))

                ˇna                    ´     ´      ´    ˇı              ˇ
• Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje
                                                                             ˇ       ˇ
  β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)).
            ´               ˇ        ˇ ´            ´
• Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana
         ˇ ´                        ´                ˇ ´ ´                                ´
  predpisem Sa,b(i) = a mod(1 + b(1 + i)).
   ˇ
• Predikat β je vyjadritelny v Assn, nebot’ x = a mod b lze napsat jako
        ´          ´ ˇ     ´

          a≥0       ∧     b≥0 ∧
          ∃k :    (k ≥ 0   ∧    k∗b≤a       ∧    (k + 1) ∗ b > a   ∧      x = a − (k ∗ b))


Veta 11. Pro kazdou konec
 ˇ              ˇ         ˇnou posloupnost n0, · · · , nk nezapornych celych c´sel existujı n, m ∈
                                                             ´    ´      ´   ˇı           ´
N0 takova, ze nj = Sn,m(j) pro kazde 0 ≤ j ≤ k. To znamena, ze pro kazde 0 ≤ j ≤ k platı
        ´ ˇ                      ˇ ´                          ´ ˇ       ˇ ´                  ´

      β(n, m, j, x) ⇐⇒ x = nj.

Dukaz. (osnova)
 ˚
65
• Necht’

         m = (max{k, n0, · · · , nk})!
 ˇı
 C´sla

         pi = 1 + m(1 + i),     0≤i≤k

 jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k.
          ´          ˇ ´                  ˇ ´
65
• Necht’

         m = (max{k, n0, · · · , nk})!
 ˇı
 C´sla

         pi = 1 + m(1 + i),         0≤i≤k

 jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k.
          ´          ˇ ´                  ˇ ´
• Dale pro kazde 0 ≤ i ≤ k definujeme
   ´         ˇ ´

         ci = p0 · . . . · pk/pi.

 Nynı pro kazde 0 ≤ i ≤ k existuje presne jedno di, 0 ≤ di ≤ pi, takove, ze (ci · di) mod pi = 1
    ´       ˇ ´                     ˇ   ˇ                             ´ ˇ
65
• Necht’

         m = (max{k, n0, · · · , nk})!
 ˇı
 C´sla

         pi = 1 + m(1 + i),          0≤i≤k

 jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k.
          ´          ˇ ´                  ˇ ´
• Dale pro kazde 0 ≤ i ≤ k definujeme
   ´         ˇ ´

         ci = p0 · . . . · pk/pi.

 Nynı pro kazde 0 ≤ i ≤ k existuje presne jedno di, 0 ≤ di ≤ pi, takove, ze (ci · di) mod pi = 1
    ´       ˇ ´                     ˇ   ˇ                             ´ ˇ
• Definujeme
                   k
         n =       i=0   ci · di · ni.

 Pro kazde 0 ≤ i ≤ k platı ni = n mod pi, coz je tvrzenı vety.
       ˇ ´               ´                  ˇ          ´ ˇ
66
                                                            ±
                             Rozs´reny predikat β
                                ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
66
                                                                ±
                               Rozs´reny predikat β
                                  ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
• Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak
      ´ ˇı         ˇ                                                         ˇ ´    ´ ˇı
  „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0
    ´    ´        ´ ´                      ˇ       ´      ´     ´ ˇı         ´               ´
  a 1).
66
                                                                ±
                               Rozs´reny predikat β
                                  ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
• Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak
      ´ ˇı         ˇ                                                         ˇ ´    ´ ˇı
  „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0
    ´    ´        ´ ´                      ˇ       ´      ´     ´ ˇı         ´               ´
  a 1).
• Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem
               ´ ´        ´                  ´              ´   ˇı       ˇ

         F(x, y) ⇐⇒         x≥0      ∧    ∃z :   (x = 2 ∗ z ⇒ y = z)      ∧    (x = 2 ∗ z + 1 ⇒
         y = −z)
66
                                                                ±
                               Rozs´reny predikat β
                                  ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
• Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak
      ´ ˇı         ˇ                                                         ˇ ´    ´ ˇı
  „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0
    ´    ´        ´ ´                      ˇ       ´      ´     ´ ˇı         ´               ´
  a 1).
• Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem
               ´ ´        ´                  ´              ´   ˇı       ˇ

         F(x, y) ⇐⇒         x≥0      ∧    ∃z :   (x = 2 ∗ z ⇒ y = z)      ∧    (x = 2 ∗ z + 1 ⇒
         y = −z)

• Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem
     ´                ´ ´        ´           ´   ˇı          ´ ˇ     ´          ˇ

         β±(n, m, j, y)    ⇐⇒      ∃x :   β(n, m, j, x)   ∧   F(x, y)
66
                                                                ±
                               Rozs´reny predikat β
                                  ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
• Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak
      ´ ˇı         ˇ                                                         ˇ ´    ´ ˇı
  „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0
    ´    ´        ´ ´                      ˇ       ´      ´     ´ ˇı         ´               ´
  a 1).
• Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem
               ´ ´        ´                  ´              ´   ˇı       ˇ

         F(x, y) ⇐⇒         x≥0      ∧    ∃z :   (x = 2 ∗ z ⇒ y = z)      ∧    (x = 2 ∗ z + 1 ⇒
         y = −z)

• Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem
     ´                ´ ´        ´           ´   ˇı          ´ ˇ     ´          ˇ

         β±(n, m, j, y)    ⇐⇒      ∃x :   β(n, m, j, x)   ∧   F(x, y)

• Analogicky jako pro β definujeme posloupnost splnujıcı β± a posloupnost Sn,m, ktera je jedinou
                                                 ˇ ´ ´                    ±
                                                                                   ´
                          ±
  posloupnostı splnujıcı β (pro dane n, m ∈ N0).
              ´   ˇ ´ ´            ´
66
                                                                 ±
                               Rozs´reny predikat β
                                  ˇ ıˇ ´       ´

• Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka
   ´            ˇ        ˇ           ´   ´ ´     ˇny              ´            ˇ ´
  IMP, tj. konec ´ ch posloupnostı celych c´sel.
               ˇny                 ´   ´   ˇı
• Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak
      ´ ˇı         ˇ                                                         ˇ ´    ´ ˇı
  „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0
    ´    ´        ´ ´                      ˇ       ´      ´     ´ ˇı         ´               ´
  a 1).
• Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem
               ´ ´        ´                  ´              ´   ˇı       ˇ

          F(x, y) ⇐⇒         x≥0      ∧    ∃z :   (x = 2 ∗ z ⇒ y = z)      ∧    (x = 2 ∗ z + 1 ⇒
          y = −z)

• Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem
     ´                ´ ´        ´           ´   ˇı          ´ ˇ     ´          ˇ

          β±(n, m, j, y)    ⇐⇒      ∃x :   β(n, m, j, x)   ∧   F(x, y)

• Analogicky jako pro β definujeme posloupnost splnujıcı β± a posloupnost Sn,m, ktera je jedinou
                                                 ˇ ´ ´                    ±
                                                                                   ´
                          ±
  posloupnostı splnujıcı β (pro dane n, m ∈ N0).
              ´   ˇ ´ ´            ´

Veta 12. Pro kazdou konec
 ˇ              ˇ        ˇnou posloupnost n0, · · · , nk celych c´sel existujı n, m ∈ N0 takova, ze
                                                            ´   ˇı           ´                ´ ˇ
      ±
nj = Sn,m(j) pro kazde 0 ≤ j ≤ k. To znamena, ze pro kazde 0 ≤ j ≤ k platı
                   ˇ ´                     ´ ˇ             ˇ ´                  ´

      β±(n, m, j, x) ⇐⇒ x = nj.
67
                                                 ±
                         Pr´klad uzitı predikatu β
                          ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ           ∧   Y = X! ?
67
                                                        ±
                              Pr´klad uzitı predikatu β
                               ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ               ∧    Y = X! ?

• „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X!
      ´
67
                                                        ±
                              Pr´klad uzitı predikatu β
                               ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ               ∧    Y = X! ?

• „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X!
      ´

     Y = X!
67
                                                                         ±
                              Pr´klad uzitı predikatu β
                               ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ               ∧    Y = X! ?

• „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X!
      ´

     Y = X!

     ∃S .       S (0) = 1
                ∧ ∀l . 1 ≤ l ≤ X         ⇒     (S (l) = S (l − 1) ∗ l)
                ∧ Y = S (X)
67
                                                                         ±
                              Pr´klad uzitı predikatu β
                               ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ               ∧    Y = X! ?

• „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X!
      ´

     Y = X!

     ∃S .       S (0) = 1
                ∧ ∀l . 1 ≤ l ≤ X         ⇒     (S (l) = S (l − 1) ∗ l)
                ∧ Y = S (X)

     ∃S .       S (0) = 1
                ∧ ∀l . 1 ≤ l ≤ X         ⇒     (∀u. ∀v. u = S (l) ∧ v = S (l − 1)   ⇒   u = v ∗ l)
                ∧ Y = S (X)
67
                                                                         ±
                              Pr´klad uzitı predikatu β
                               ˇı      ˇ ´        ´


• Lze v Assn vyjadrit X ≥ 0
                ´ ˇ               ∧    Y = X! ?

• „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X!
      ´

     Y = X!

     ∃S .       S (0) = 1
                ∧ ∀l . 1 ≤ l ≤ X         ⇒     (S (l) = S (l − 1) ∗ l)
                ∧ Y = S (X)

     ∃S .       S (0) = 1
                ∧ ∀l . 1 ≤ l ≤ X         ⇒     (∀u. ∀v. u = S (l) ∧ v = S (l − 1)   ⇒    u = v ∗ l)
                ∧ Y = S (X)

     ∃n .∃m . β±(n, m, 0, 1)
              ∧ ∀l . 1 ≤ l ≤ X           ⇒     (∀u. ∀v. β±(n, m, l, u) ∧ β±(n, m, l − 1, v)   ⇒
                                                u = v ∗ l)
                ∧   β±(n, m, X, Y)
68
          Vyjadritelnost nejslabs´ vstupnı podmınky v Assn
             ´ ˇ                ˇı       ´     ´


Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı
 ˇ                ˇ ´                                                ´ ˇ         ˇ ´           ´
A[[c, B]]I = wpI[[c, B]].
68
          Vyjadritelnost nejslabs´ vstupnı podmınky v Assn
             ´ ˇ                ˇı       ´     ´


Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı
 ˇ                ˇ ´                                                ´ ˇ         ˇ ´           ´
A[[c, B]]I = wpI[[c, B]].
Dukaz. Je dobre si znovu uvedomit, ze
 ˚            ´            ˇ       ˇ

      A[[c, B]]I = wpI[[c, B]]   ⇐⇒   ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B).
68
          Vyjadritelnost nejslabs´ vstupnı podmınky v Assn
             ´ ˇ                ˇı       ´     ´


Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı
 ˇ                ˇ ´                                                ´ ˇ         ˇ ´           ´
A[[c, B]]I = wpI[[c, B]].
Dukaz. Je dobre si znovu uvedomit, ze
 ˚            ´            ˇ       ˇ

      A[[c, B]]I = wpI[[c, B]]   ⇐⇒      ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B).

Dukaz je veden indukcı ke strukture c.
 ˚                   ´           ˇ
68
          Vyjadritelnost nejslabs´ vstupnı podmınky v Assn
             ´ ˇ                ˇı       ´     ´


Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı
 ˇ                ˇ ´                                                ´ ˇ         ˇ ´           ´
A[[c, B]]I = wpI[[c, B]].
Dukaz. Je dobre si znovu uvedomit, ze
 ˚            ´            ˇ       ˇ

      A[[c, B]]I = wpI[[c, B]]   ⇐⇒      ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B).

Dukaz je veden indukcı ke strukture c.
 ˚                   ´           ˇ

 • c ≡ skip. Stac´ polozit A[[skip, B]] = B. Pro kazde I ∈ I a σ ∈ Σ platı
                ˇı     ˇ                           ˇ ´                   ´

          σ ∈ wpI[[skip, B]]
          ⇐⇒ C⊥[[skip]]σ |=I B
          ⇐⇒ σ |=I B
          ⇐⇒ σ |=I A[[skip, B]].
68
          Vyjadritelnost nejslabs´ vstupnı podmınky v Assn
             ´ ˇ                ˇı       ´     ´


Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı
 ˇ                ˇ ´                                                ´ ˇ         ˇ ´           ´
A[[c, B]]I = wpI[[c, B]].
Dukaz. Je dobre si znovu uvedomit, ze
 ˚            ´            ˇ       ˇ

      A[[c, B]]I = wpI[[c, B]]   ⇐⇒      ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B).

Dukaz je veden indukcı ke strukture c.
 ˚                   ´           ˇ

 • c ≡ skip. Stac´ polozit A[[skip, B]] = B. Pro kazde I ∈ I a σ ∈ Σ platı
                ˇı     ˇ                           ˇ ´                   ´

          σ ∈ wpI[[skip, B]]
          ⇐⇒ C⊥[[skip]]σ |=I B
          ⇐⇒ σ |=I B
          ⇐⇒ σ |=I A[[skip, B]].

 • c ≡ X := a. Definujeme A[[X := a, B]] = B[a/X]. Pak pro kazde I ∈ I a σ ∈ Σ platı
                                                            ˇ ´                   ´

          σ ∈ wpI[[X := a, B]]
          ⇐⇒ σ[A[[a]]σ/X] |=I B
69
⇐⇒ σ |= B[a/X] (uzitım lematu 9)
         I
                 ˇ ´
⇐⇒ σ |=I A[[X := a, B]].
69
         ⇐⇒ σ |= B[a/X] (uzitım lematu 9)
                    I
                          ˇ ´
         ⇐⇒ σ |=I A[[X := a, B]].

• c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı
                                                                    ˇ ´                   ´

        σ ∈ wpI[[c0; c1, B]]
         ⇐⇒ C⊥[[c0; c1]]σ |=I B
         ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0; c1, B]].
69
         ⇐⇒ σ |= B[a/X] (uzitım lematu 9)
                    I
                          ˇ ´
         ⇐⇒ σ |=I A[[X := a, B]].

• c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı
                                                                    ˇ ´                   ´

        σ ∈ wpI[[c0; c1, B]]
         ⇐⇒ C⊥[[c0; c1]]σ |=I B
         ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0; c1, B]].

• c ≡ if b then c0 else c1. Definujeme A[[if b then c0 else c1, B]] = (b∧A[[c0, B]])∨(¬b∧A[[c1, B]]).
 Pak pro kazde I ∈ I a σ ∈ Σ platı
             ˇ ´                   ´

        σ ∈ wpI[[c, B]]
         ⇐⇒ C⊥[[c]]σ |=I B
         ⇐⇒ (B[[b]] = true ∧ C⊥[[c0]]σ |=I B) ∨ (B[[b]] = false ∧ C⊥[[c1]]σ |=I B)
         ⇐⇒ (σ |=I b ∧ σ |=I A[[c0, B]]) ∨ (σ |=I ¬b ∧ σ |=I A[[c1, B]]) podle I.P.
         ⇐⇒ σ |=I (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]) ⇐⇒ σ |=I A[[c, B]].
69
         ⇐⇒ σ |= B[a/X] (uzitım lematu 9)
                    I
                          ˇ ´
         ⇐⇒ σ |=I A[[X := a, B]].

• c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı
                                                                    ˇ ´                   ´

        σ ∈ wpI[[c0; c1, B]]
         ⇐⇒ C⊥[[c0; c1]]σ |=I B
         ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.)
         ⇐⇒ σ |=I A[[c0; c1, B]].

• c ≡ if b then c0 else c1. Definujeme A[[if b then c0 else c1, B]] = (b∧A[[c0, B]])∨(¬b∧A[[c1, B]]).
 Pak pro kazde I ∈ I a σ ∈ Σ platı
             ˇ ´                   ´

        σ ∈ wpI[[c, B]]
         ⇐⇒ C⊥[[c]]σ |=I B
         ⇐⇒ (B[[b]] = true ∧ C⊥[[c0]]σ |=I B) ∨ (B[[b]] = false ∧ C⊥[[c1]]σ |=I B)
         ⇐⇒ (σ |=I b ∧ σ |=I A[[c0, B]]) ∨ (σ |=I ¬b ∧ σ |=I A[[c1, B]]) podle I.P.
         ⇐⇒ σ |=I (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]) ⇐⇒ σ |=I A[[c, B]].

• c ≡ while b do c0. Platı σ ∈ wpI[[while b do c0, B]] ⇐⇒
                         ´
70
∀k ∀σ0, · · · .σk ∈ Σ :
   (σ = σ0    ∧    ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1))   ⇒   (σk |=I b ∨ B)(1)
70
       ∀k ∀σ0, · · · .σk ∈ Σ :
          (σ = σ0    ∧    ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1))   ⇒   (σk |=I b ∨ B)(1)

Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı:
    ˇı          ´ˇ         ´      ´ ˇ ˇ                         ˇ         ´       ´ ´        ´ ´
Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto
                        ´ ˇ   ˇ            ˇ ´          ´ ´                                  ´
X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi).
                         ´    ´           ˇ ´               ´
Pro kazde I ∈ I platı
         ˇ ´          ´

       σ |=I A      ⇐⇒    |=I A[s/X]                                                          (*)

coz lze snadno ukazat strukturalnı indukcı.
  ˇ              ´            ´ ´        ´
70
       ∀k ∀σ0, · · · .σk ∈ Σ :
          (σ = σ0      ∧   ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1))   ⇒    (σk |=I b ∨ B)(1)

Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı:
    ˇı          ´ˇ         ´      ´ ˇ ˇ                         ˇ         ´       ´ ´        ´ ´
Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto
                        ´ ˇ   ˇ            ˇ ´          ´ ´                                  ´
X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi).
                         ´    ´           ˇ ´               ´
Pro kazde I ∈ I platı
         ˇ ´          ´

       σ |=I A      ⇐⇒     |=I A[s/X]                                                           (*)

coz lze snadno ukazat strukturalnı indukcı. Necht’ X1, · · · , Xl jsou vsechny promenne, ktere se
  ˇ                 ´            ´ ´       ´                            ˇ          ˇ ´       ´
vyskytujı v c a B. Nynı lze (1) prepsat na
        ´             ´          ˇ

       ∀k ∀s0, · · · .sk ∈ Z :
          (σ |=I X = s0    ∧
          ∀i(0 ≤ i < k) : (|=I b[si/X] ∧ |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X]))
          ⇒      |=I (b ∨ B)[sk/X]                                                              (2)
70
       ∀k ∀σ0, · · · .σk ∈ Σ :
          (σ = σ0      ∧   ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1))       ⇒     (σk |=I b ∨ B)(1)

Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı:
    ˇı          ´ˇ         ´      ´ ˇ ˇ                         ˇ         ´       ´ ´        ´ ´
Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto
                        ´ ˇ   ˇ            ˇ ´          ´ ´                                  ´
X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi).
                         ´    ´           ˇ ´               ´
Pro kazde I ∈ I platı
         ˇ ´          ´

       σ |=I A      ⇐⇒     |=I A[s/X]                                                                (*)

coz lze snadno ukazat strukturalnı indukcı. Necht’ X1, · · · , Xl jsou vsechny promenne, ktere se
  ˇ                 ´            ´ ´       ´                            ˇ          ˇ ´       ´
vyskytujı v c a B. Nynı lze (1) prepsat na
        ´             ´          ˇ

       ∀k ∀s0, · · · .sk ∈ Z :
          (σ |=I X = s0    ∧
          ∀i(0 ≤ i < k) : (|=I b[si/X] ∧ |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X]))
          ⇒      |=I (b ∨ B)[sk/X]                                                                   (2)

Ukazeme, ze (1) a (2) jsou ekvivalentnı. K tomu je (zejmena) treba dokazat, ze pokud σi resp.
   ´ˇ      ˇ                             ´                 ´    ˇ     ´     ˇ
σi+1 majı na X hodnoty si resp. si+1 a jinde jsou stejne, platı
        ´                                              ´      ´

       C [[c0]]σi = σi+1    ⇐⇒       |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X]

pro kazde I ∈ I . Snadno se vidı, ze
      ˇ ´                      ´ ˇ
71
       C [[c0]]σi = σi+1   ⇐⇒              I
                                  σi ∈ wp [[c0, X = si+1]]   ∧   C [[c0]]σi je definovano.
                                                                                     ´

Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave
                                                                    ´                     ´     ´ ˇ
kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2).
   ˇ                             ´ ˇ      ˇı                                       ˇ ´
71
       C [[c0]]σi = σi+1   ⇐⇒                 I
                                    σi ∈ wp [[c0, X = si+1]]     ∧    C [[c0]]σi je definovano.
                                                                                          ´

Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave
                                                                    ´                     ´     ´ ˇ
kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli
    ˇ                            ´ ˇ      ˇı                                       ˇ ´
(2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“
            ´                      ´                         ´      ´                      ´
jednotliva si jako dvojice nezapornych celych c´sel:
         ´                     ´      ´       ´   ˇı

       ∀k, n0, m0, · · · , nk, mk ≥ 0 :
           Vl
         ( j=0 β±(n0, m0, j, Xj) ∧
                                                   Vl     ±
          ∀i(0 ≤ i < k) : ((∀x0, · · · , xl :        j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧
                                                Vl
            (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj))
               ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X])))
                                  Vl    ±
          ⇒    (∀x0. · · · , xl :  j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X])                       (3)
71
       C [[c0]]σi = σi+1   ⇐⇒                 I
                                    σi ∈ wp [[c0, X = si+1]]     ∧    C [[c0]]σi je definovano.
                                                                                          ´

Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave
                                                                    ´                     ´     ´ ˇ
kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli
    ˇ                            ´ ˇ      ˇı                                       ˇ ´
(2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“
            ´                      ´                         ´      ´                      ´
jednotliva si jako dvojice nezapornych celych c´sel:
         ´                     ´      ´       ´   ˇı

       ∀k, n0, m0, · · · , nk, mk ≥ 0 :
           Vl
         ( j=0 β±(n0, m0, j, Xj) ∧
                                                   Vl     ±
          ∀i(0 ≤ i < k) : ((∀x0, · · · , xl :        j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧
                                                Vl
            (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj))
               ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X])))
                                  Vl    ±
          ⇒    (∀x0. · · · , xl :  j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X])                       (3)

Zbyva zakodovat posloupnost n0, m0, · · · , nk, mk do jedine dvojice c´sel. Zıskane tvrzenı bude
  ´ ´     ´                                                ´         ˇı      ´    ´       ´
kvantifikovano takto:
          ´

       ∀k, n, m ≥ 0 :
71
       C [[c0]]σi = σi+1   ⇐⇒                 I
                                    σi ∈ wp [[c0, X = si+1]]     ∧    C [[c0]]σi je definovano.
                                                                                          ´

Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave
                                                                    ´                     ´     ´ ˇ
kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli
    ˇ                            ´ ˇ      ˇı                                       ˇ ´
(2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“
            ´                      ´                         ´      ´                      ´
jednotliva si jako dvojice nezapornych celych c´sel:
         ´                     ´      ´       ´   ˇı

       ∀k, n0, m0, · · · , nk, mk ≥ 0 :
           Vl
         ( j=0 β±(n0, m0, j, Xj) ∧
                                                   Vl     ±
          ∀i(0 ≤ i < k) : ((∀x0, · · · , xl :        j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧
                                                Vl
            (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj))
               ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X])))
                                  Vl    ±
          ⇒    (∀x0. · · · , xl :  j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X])                       (3)

Zbyva zakodovat posloupnost n0, m0, · · · , nk, mk do jedine dvojice c´sel. Zıskane tvrzenı bude
  ´ ´     ´                                                ´         ˇı      ´    ´       ´
kvantifikovano takto:
          ´

       ∀k, n, m ≥ 0 :

Dale provedeme tato nahrazenı:
 ´                                ´
   Vl     ±
     j=0 β (n0 , m0 , j, Xj ) nahradıme vyrazem
                                    ´    ´
Vl                       72
          ±                ±                            ±
∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q))   ⇒    j=0   β (p, q, j, Xj)
Vl                       72
           ±                  ±                              ±
∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒             j=0 β (p, q, j, Xj )
                  Vl    ±
∀x0, · · · , xl :  j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem
                                                             ´     ´
∀p, q :   (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒
                             Vl    ±
          (∀x0, · · · , xl :  j=0 β (p, q, j, xj ) ⇒ b[x/X]))
Vl                                         72
           ±                   ±                                 ±
∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒             j=0 β (p, q, j, Xj )
                  Vl    ±
∀x0, · · · , xl :  j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem
                                                             ´     ´
∀p, q :      (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒
                                 Vl    ±
             (∀x0, · · · , xl :   j=0 β (p, q, j, xj ) ⇒ b[x/X]))
                                        Vl
(∀x0, · · · , xl, y0, · · · , yl  :    ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme
                                                                                              ´
vyrazem
 ´
∀p, q, u, v :     (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧
                          β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒
                                                      Vl
                  (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj)))
Vl                                        72
            ±                    ±                                ±
∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒             j=0 β (p, q, j, Xj )
                  Vl    ±
∀x0, · · · , xl :  j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem
                                                             ´     ´
∀p, q :      (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒
                                 Vl    ±
             (∀x0, · · · , xl :   j=0 β (p, q, j, xj ) ⇒ b[x/X]))
                                        Vl
(∀x0, · · · , xl, y0, · · · , yl  :    ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme
                                                                                              ´
vyrazem
 ´
∀p, q, u, v :      (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧
                           β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒
                                                       Vl
                   (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj)))
                  Vl    ±
∀x0. · · · , xl :  j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X] nahradıme vyrazem´   ´
∀p, q :    (β±(n, m, 2 ∗ k, p) ∧ β±(n, m, 2 ∗ k + 1, q) ⇒
                              Vl    ±
           (∀x0, · · · , xl :  j=0 β (p, q, j, xj ) ⇒ (b ∨ B)[x/X].
Vl                                        72
              ±                    ±                                ±
  ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒             j=0 β (p, q, j, Xj )
                    Vl    ±
  ∀x0, · · · , xl :  j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem
                                                               ´     ´
  ∀p, q :      (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒
                                   Vl    ±
               (∀x0, · · · , xl :   j=0 β (p, q, j, xj ) ⇒ b[x/X]))
                                          Vl
  (∀x0, · · · , xl, y0, · · · , yl  :    ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme
                                                                                                ´
  vyrazem
   ´
  ∀p, q, u, v :      (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧
                             β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒
                                                         Vl
                     (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj)))
                    Vl    ±
  ∀x0. · · · , xl :  j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X] nahradıme vyrazem´   ´
  ∀p, q :    (β±(n, m, 2 ∗ k, p) ∧ β±(n, m, 2 ∗ k + 1, q) ⇒
                                Vl    ±
             (∀x0, · · · , xl :  j=0 β (p, q, j, xj ) ⇒ (b ∨ B)[x/X].

Zıskana formule jiz patr´ do Assn.
 ´    ´           ˇ    ˇı
73
´
Uplnost Hoareova odvozovacıho systemu
                          ´       ´
73
               ´
               Uplnost Hoareova odvozovacıho systemu
                                         ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
73
               ´
               Uplnost Hoareova odvozovacıho systemu
                                         ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
73
               ´
               Uplnost Hoareova odvozovacıho systemu
                                         ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
 • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto
                                               ´           ´
    {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku).
                              ˇ ´                               ˚
73
               ´
               Uplnost Hoareova odvozovacıho systemu
                                         ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
 • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto
                                               ´           ´
    {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku).
                              ˇ ´                               ˚
 • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla
                                                ´          ˇ ´               ˇˇ     ´
  dusledku dostavame {A[[X := a, B]]} X := a {B}.
   ˚           ´ ´
73
                 ´
                 Uplnost Hoareova odvozovacıho systemu
                                           ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
 • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto
                                               ´           ´
    {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku).
                              ˇ ´                               ˚
 • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla
                                                ´          ˇ ´               ˇˇ     ´
  dusledku dostavame {A[[X := a, B]]} X := a {B}.
   ˚           ´ ´
 • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´
                                                     ´                                        ˇ             ˇı
  vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0
         ´        ´                                              ˇ          ˇı          ´        ´
  a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro
  sekvenc ´ kompozici
           ˇnı              {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take
                                                                       ´   {A[[c0; c1, B]]} c0; c1 {B} uzitım
                                                                                                        ˇ ´
  pravidla dusledku.
              ˚
73
                 ´
                 Uplnost Hoareova odvozovacıho systemu
                                           ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
 • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto
                                               ´           ´
    {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku).
                              ˇ ´                               ˚
 • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla
                                                ´          ˇ ´               ˇˇ     ´
  dusledku dostavame {A[[X := a, B]]} X := a {B}.
   ˚           ´ ´
 • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´
                                                     ´                                        ˇ             ˇı
  vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0
         ´        ´                                              ˇ          ˇı          ´        ´
  a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro
  sekvenc ´ kompozici
           ˇnı              {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take
                                                                       ´   {A[[c0; c1, B]]} c0; c1 {B} uzitım
                                                                                                        ˇ ´
  pravidla dusledku.
              ˚
 • c ≡ if b then c0 else c1. Pak A[[c, B]] je ekvivalentnı (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]), kde
                                                                  ´
  A[[c0, B]] resp. A[[c1, B]] vyjadruje nejslabs´ vstupnı podmınku pro c0 resp. c1 a B. Podle I.P.
                                    ˇ               ˇı       ´       ´
     {A[[c0, B]]} c0 {B} a    {A[[c1, B]]} c1 {B}. Jelikoz |= (A[[c, B]] ∧ b) ⇒ A[[c0, B]], uzitım pravidla
                                                         ˇ                                     ˇ ´
  dusledku dostavame
   ˚                ´ ´        {A[[c, B]] ∧ b} c0 {B}. Podobne  ˇ     {A[[c, B]] ∧ ¬b} c1 {B}, muzeme tedy
                                                                                                 ˚ˇ
  pouz´t pravidlo pro vetvenı c´mz obdrz´me {A[[c, B]]} c {B}.
      ˇı                   ˇ    ´ ˇı ˇ         ˇı
73
                 ´
                 Uplnost Hoareova odvozovacıho systemu
                                           ´       ´


Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı
                                           ´                          ˇ           ˇı       ´
podmınku pro c a B. Pak {A[[c, B]]} c {B}.
    ´
Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13).
 ˚           ´           ˇ        ˇ             ˚    ˚      ˇ
 • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto
                                               ´           ´
    {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku).
                              ˇ ´                               ˚
 • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla
                                                ´          ˇ ´               ˇˇ     ´
  dusledku dostavame {A[[X := a, B]]} X := a {B}.
   ˚           ´ ´
 • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´
                                                     ´                                        ˇ             ˇı
  vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0
         ´        ´                                              ˇ          ˇı          ´        ´
  a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro
  sekvenc ´ kompozici
           ˇnı              {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take
                                                                       ´   {A[[c0; c1, B]]} c0; c1 {B} uzitım
                                                                                                        ˇ ´
  pravidla dusledku.
              ˚
 • c ≡ if b then c0 else c1. Pak A[[c, B]] je ekvivalentnı (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]), kde
                                                                  ´
  A[[c0, B]] resp. A[[c1, B]] vyjadruje nejslabs´ vstupnı podmınku pro c0 resp. c1 a B. Podle I.P.
                                    ˇ               ˇı       ´       ´
     {A[[c0, B]]} c0 {B} a    {A[[c1, B]]} c1 {B}. Jelikoz |= (A[[c, B]] ∧ b) ⇒ A[[c0, B]], uzitım pravidla
                                                         ˇ                                     ˇ ´
  dusledku dostavame
   ˚                ´ ´        {A[[c, B]] ∧ b} c0 {B}. Podobne  ˇ     {A[[c, B]] ∧ ¬b} c1 {B}, muzeme tedy
                                                                                                 ˚ˇ
  pouz´t pravidlo pro vetvenı c´mz obdrz´me {A[[c, B]]} c {B}.
      ˇı                   ˇ    ´ ˇı ˇ         ˇı
74
• c ≡ while b do c0. Dokazeme, ze
                        ´ˇ     ˇ
 a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]},
 b) |= (A[[c, B]] ∧ ¬b) ⇒ B.
 Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P.
       ˇ                                    ˇı       ´       ´
   {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto
                                                         ´
   {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame
                                      ˇ ´           ˚          ´                                  ´ ´
   {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}.
                                               ´             ˚             ˇne
74
• c ≡ while b do c0. Dokazeme, ze
                        ´ˇ     ˇ
 a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]},
 b) |= (A[[c, B]] ∧ ¬b) ⇒ B.
 Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P.
       ˇ                                    ˇı       ´       ´
   {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto
                                                         ´
   {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame
                                      ˇ ´           ˚          ´                                  ´ ´
   {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}.
                                               ´             ˚             ˇne
 ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj.
                                        ˇ                         ´
 C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı:
                                 ˇnı ´                    ´         ˇ     ´

         C⊥[[c]]   =     C⊥[[if b then c0; c else skip]]

 To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy
               ´ ˇ
 |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}.
74
• c ≡ while b do c0. Dokazeme, ze
                        ´ˇ     ˇ
 a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]},
 b) |= (A[[c, B]] ∧ ¬b) ⇒ B.
 Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P.
       ˇ                                    ˇı       ´       ´
   {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto
                                                         ´
   {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame
                                      ˇ ´           ˚          ´                                  ´ ´
   {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}.
                                               ´             ˚             ˇne
 ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj.
                                        ˇ                         ´
 C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı:
                                 ˇnı ´                    ´         ˇ     ´

         C⊥[[c]]   =     C⊥[[if b then c0; c else skip]]

 To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy
               ´ ˇ
 |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}.
 ad b)   Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ ¬b, pak σ |=I A[[c, B]] a σ |=I ¬b. Jelikoz
                                      ˇ                                                              ˇ

         C⊥[[c]]   =     C⊥[[if b then c0; c else skip]],

 dostavame C⊥[[c]]σ = σ, proto σ |=I B. Tedy |= (A[[c, B]] ∧ ¬b) ⇒ B.
     ´ ´
74
• c ≡ while b do c0. Dokazeme, ze
                        ´ˇ     ˇ
 a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]},
 b) |= (A[[c, B]] ∧ ¬b) ⇒ B.
 Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P.
       ˇ                                    ˇı       ´       ´
   {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto
                                                         ´
   {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame
                                      ˇ ´           ˚          ´                                  ´ ´
   {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}.
                                               ´             ˚             ˇne
 ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj.
                                        ˇ                         ´
 C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı:
                                 ˇnı ´                    ´         ˇ     ´

         C⊥[[c]]   =     C⊥[[if b then c0; c else skip]]

 To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy
               ´ ˇ
 |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}.
 ad b)   Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ ¬b, pak σ |=I A[[c, B]] a σ |=I ¬b. Jelikoz
                                      ˇ                                                              ˇ

         C⊥[[c]]   =     C⊥[[if b then c0; c else skip]],

 dostavame C⊥[[c]]σ = σ, proto σ |=I B. Tedy |= (A[[c, B]] ∧ ¬b) ⇒ B.
     ´ ´
75

Veta 15 (o uplnosti). Jestlize |= {A} c {B}, pak
 ˇ         ´                ˇ                      {A} c {B}.
75

Veta 15 (o uplnosti). Jestlize |= {A} c {B}, pak
 ˇ         ´                ˇ                      {A} c {B}.
Dukaz. Predpokladejme, ze |= {A} c {B}. Podle vety 13 existuje A[[c, B]] ∈ Assn, ktere vyjadruje
  ˚         ˇ         ´    ˇ                        ˇ                                ´      ˇ
nejslabs´ vstupnı podmınku pro c a B. Platı tedy |= (A ⇒ A[[c, B]]). Podle lematu 14 platı
         ˇı         ´    ´                     ´                                             ´
{A[[c, B]]} c {B} a tedy {A} c {B} uzitım pravidla dusledku.
                                    ˇ ´             ˚
76
         Ekvivalence axiomaticke a denotac ´ semantiky
                               ´         ˇnı ´

• Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci
             ´ ´         ˇ      ´    ˚               ´                        na
  pr´kazech:
   ˇı

        c0   c1   ⇐⇒    ∀A, B ∈ Assn :   (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})
76
           Ekvivalence axiomaticke a denotac ´ semantiky
                                 ´         ˇnı ´

• Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci
             ´ ´         ˇ      ´    ˚               ´                                na
  pr´kazech:
   ˇı

         c0    c1    ⇐⇒     ∀A, B ∈ Assn :         (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})


Veta 16. Pro kazde c0, c1 ∈ Com platı:
 ˇ             ˇ ´                  ´    C [[c0]] = C [[c1]]   ⇐⇒   c0    c1
76
           Ekvivalence axiomaticke a denotac ´ semantiky
                                 ´         ˇnı ´

• Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci
             ´ ´         ˇ      ´    ˚               ´                                na
  pr´kazech:
   ˇı

          c0       c1   ⇐⇒   ∀A, B ∈ Assn :        (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})


Veta 16. Pro kazde c0, c1 ∈ Com platı:
 ˇ             ˇ ´                  ´    C [[c0]] = C [[c1]]   ⇐⇒   c0    c1
Dukaz.
 ˚
„⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı
                              ´ ˇ                  ˇ                            ´
               I                    I
   C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B
76
            Ekvivalence axiomaticke a denotac ´ semantiky
                                  ´         ˇnı ´

• Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci
             ´ ´         ˇ      ´    ˚               ´                                     na
  pr´kazech:
   ˇı

          c0       c1    ⇐⇒    ∀A, B ∈ Assn :           (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})


Veta 16. Pro kazde c0, c1 ∈ Com platı:
 ˇ             ˇ ´                  ´         C [[c0]] = C [[c1]]   ⇐⇒   c0    c1
Dukaz.
 ˚
„⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı
                              ´ ˇ                  ˇ                            ´
               I                          I
   C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B

„⇐“   Ukazeme, ze pokud C [[c0]] = C [[c1]], pak existuje σ ∈ Σ a A, B ∈ Assn takove, ze
        ´ˇ     ˇ                                                                   ´ ˇ
   |= {A} c0 {B}    ⇐⇒    |= {A} c1 {B}
76
            Ekvivalence axiomaticke a denotac ´ semantiky
                                  ´         ˇnı ´

• Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci
             ´ ´         ˇ      ´    ˚               ´                                               na
  pr´kazech:
   ˇı

          c0       c1      ⇐⇒    ∀A, B ∈ Assn :           (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})


Veta 16. Pro kazde c0, c1 ∈ Com platı:
 ˇ             ˇ ´                  ´           C [[c0]] = C [[c1]]   ⇐⇒   c0    c1
Dukaz.
 ˚
„⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı
                              ´ ˇ                  ˇ                            ´
               I                            I
   C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B

„⇐“   Ukazeme, ze pokud C [[c0]] = C [[c1]], pak existuje σ ∈ Σ a A, B ∈ Assn takove, ze
        ´ˇ     ˇ                                                                   ´ ˇ
   |= {A} c0 {B}      ⇐⇒    |= {A} c1 {B}
Jestlize C [[c0]] = C [[c1]], existuje σ ∈ Σ takove, ze C⊥[[c0]]σ = C⊥[[c1]]σ. Necht’ X je mnozina vsech
      ˇ                                           ´ ˇ                                         ˇ     ˇ
promennych, ktere se vyskytujı v c0 a c1. Definujeme
      ˇ ´            ´                ´
                 ^
   A ≡              Y = nY
               Y ∈X
                      ˇ ´                 ´       ˇme σ0 = C⊥[[c0]]σ a σ1 = C⊥[[c1]]σ. Rozlis´me
kde nY je hodnota promenne Y ve stavu σ. Dale oznac                                         ˇı
tri moznosti:
 ˇ    ˇ
77
• σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme
                             ˇ                        ´ ˇ
 B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B}
                                        ˇ ´                              ´
 (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ).
                                      ´
77
• σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme
                             ˇ                        ´ ˇ
 B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B}
                                        ˇ ´                              ´
 (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ).
                                      ´
• σ0 = ⊥. Pak σ1 = ⊥. Proto |= {A} c0 {false}, zatımco |= {A} c1 {false}.
                                                  ´
77
• σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme
                             ˇ                        ´ ˇ
 B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B}
                                        ˇ ´                              ´
 (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ).
                                      ´
• σ0 = ⊥. Pak σ1 = ⊥. Proto |= {A} c0 {false}, zatımco |= {A} c1 {false}.
                                                  ´
• σ1 = ⊥. Podobne.
                ˇ
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
• Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı.
        ´              ´         ˇ ˇne                      ´                     ´
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
• Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı.
        ´              ´         ˇ ˇne                      ´                     ´
• Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu
     ˇ         ´                     ˇı        ´     ´          ´              ˇı       ˇı
  (programu), c´mz vznikne oznac
                ˇı ˇ              ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı
                                         ´ ˇı                             ´        ˇ         ´
  z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost
                      ˇnı       ´            ˇ                  ˇujı ´    ´
  daneho oznac
       ´         ˇkovanı.
                       ´
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
• Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı.
        ´              ´         ˇ ˇne                      ´                     ´
• Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu
     ˇ         ´                     ˇı        ´     ´          ´              ˇı       ˇı
  (programu), c´mz vznikne oznac
                ˇı ˇ              ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı
                                         ´ ˇı                             ´        ˇ         ´
  z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost
                      ˇnı       ´            ˇ                  ˇujı ´    ´
  daneho oznac
       ´         ˇkovanı.
                       ´
• Oznac
      ˇkovane pr´kazy ACom
            ´ ˇı
      c   ::=   skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c
                                                      ¯
  kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac
                                              ¯        ˇkovany pr´kaz ktery nenı prirazenım.
                                                             ´ ˇı         ´    ´ ˇˇ      ´
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
• Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı.
        ´              ´         ˇ ˇne                      ´                     ´
• Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu
     ˇ         ´                     ˇı        ´     ´          ´              ˇı       ˇı
  (programu), c´mz vznikne oznac
                ˇı ˇ              ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı
                                         ´ ˇı                             ´        ˇ         ´
  z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost
                      ˇnı       ´            ˇ                  ˇujı ´    ´
  daneho oznac
       ´         ˇkovanı.
                       ´
• Oznac
      ˇkovane pr´kazy ACom
            ´ ˇı
      c   ::=   skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c
                                                      ¯
  kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac
                                              ¯        ˇkovany pr´kaz ktery nenı prirazenım.
                                                             ´ ˇı         ´    ´ ˇˇ      ´
• Oznacˇkovane tvrzenı o c ´ stec ´ korektnosti je trojice tvaru {A} c {B}, kde A, B ∈ Assn a
             ´       ´     ˇa ˇne
  c ∈ ACom. Toto tvrzenı je platne, je-li platne tvrzenı {A} c {B} kde c ∈ Com vznikne z c
                         ´         ´           ´         ´
  vynechanım vsech prvku Assn.
         ´ ´   ˇ        ˚
78
                                Oznac
                                    ˇkovane pr´kazy
                                          ´ ˇı

• Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı
                  ´             ˇa ˇne                             ˇ                              ´
  A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B.
                                     ˇ          ˇı       ´       ´
• Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne
                    ˇ                              ´                    ´                   ˇ ´
  algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti.
                 ˇˇ                    ´ ˇa ˇne
• Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem
        ´                       ´    ˚    ˚                    ´               ˇe ˇ
  provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn.
                ´    ˇˇ ´          ˇ    ´               ˇity       ˇı       ´         ´
• Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı.
        ´              ´         ˇ ˇne                      ´                     ´
• Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu
     ˇ         ´                     ˇı        ´     ´          ´              ˇı       ˇı
  (programu), c´mz vznikne oznac
                ˇı ˇ              ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı
                                         ´ ˇı                             ´        ˇ         ´
  z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost
                      ˇnı       ´            ˇ                  ˇujı ´    ´
  daneho oznac
       ´         ˇkovanı.
                       ´
• Oznac
      ˇkovane pr´kazy ACom
            ´ ˇı
      c   ::=   skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c
                                                      ¯
  kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac
                                              ¯        ˇkovany pr´kaz ktery nenı prirazenım.
                                                             ´ ˇı         ´    ´ ˇˇ      ´
• Oznacˇkovane tvrzenı o c ´ stec ´ korektnosti je trojice tvaru {A} c {B}, kde A, B ∈ Assn a
             ´       ´     ˇa ˇne
  c ∈ ACom. Toto tvrzenı je platne, je-li platne tvrzenı {A} c {B} kde c ∈ Com vznikne z c
                         ´         ´           ´         ´
  vynechanım vsech prvku Assn.
         ´ ´   ˇ        ˚
79
                               Verifikac ´ podmınky
                                      ˇnı     ´


• Oznac
      ˇkovany while-cyklus
            ´

        {A} while b do {D}c {B}                                                                (*)

  obsahuje D ∈ Assn, ktere by melo byt invariantem, coz znamena ze {D ∧ b} c {D} je platne
                            ´       ˇ    ´                  ˇ          ´ ˇ                       ´
  tvrzenı. Pokud uz vıme, ze D je invariant, stac´ pro platnost (*) dokazat platnost tvrzenı A ⇒ D
        ´         ˇ ´     ˇ                     ˇı                     ´                   ´
  a D ∧ ¬b ⇒ B.
79
                                  Verifikac ´ podmınky
                                         ˇnı     ´


• Oznac
      ˇkovany while-cyklus
            ´

        {A} while b do {D}c {B}                                                                    (*)

  obsahuje D ∈ Assn, ktere by melo byt invariantem, coz znamena ze {D ∧ b} c {D} je platne
                            ´       ˇ    ´                  ˇ          ´ ˇ                       ´
  tvrzenı. Pokud uz vıme, ze D je invariant, stac´ pro platnost (*) dokazat platnost tvrzenı A ⇒ D
        ´         ˇ ´     ˇ                     ˇı                     ´                   ´
  a D ∧ ¬b ⇒ B.
      ˇ          ˇnı          ´         ˇkovane tvrzenı {A} c {B}, psano V ({A} c {B}), je
• Mnozina verifikac ´ch podmınek pro oznac     ´       ´              ´
  definovana induktivne takto:
        ´            ˇ
                    V ({A} skip {B})    =   {A ⇒ B}
                 V ({A} X := a {B})     =   {A ⇒ B[a/X]}
             V ({A} c0 ; X := a {B})    =   V ({A} c0 {B[a/X]})
               V ({A} c0 ; {D}c {B})
                              ¯         =   V ({A} c0 {D}) ∪ V ({D} c1 {B}) kde c nenı prirazenı
                                                                                ¯    ´ ˇˇ      ´
     V ({A} if b then c0 else c1 {B})   =   V ({A ∧ b} c0 {B}) ∪ V ({A ∧ ¬b} c1 {B})
       V ({A} while b do {D}c {B})      =   V ({D ∧ b} c {D}) ∪ {A ⇒ D} ∪ {D ∧ ¬b ⇒ B}
80

Veta 17. Necht’ {A} c {B} je oznac
 ˇ                                  ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky
                                             ´        ´ ˇa ˇne                      ˇ   ˇ
V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne.
                        ´       ´                      ´
80

Veta 17. Necht’ {A} c {B} je oznac
 ˇ                                  ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky
                                             ´        ´ ˇa ˇne                      ˇ   ˇ
V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne.
                        ´       ´                      ´
Dukaz. Indukcı ke strukture c.
 ˚           ´           ˇ



Pr´klad:
 ˇı

• {true} while false do {false} skip {true}
80

Veta 17. Necht’ {A} c {B} je oznac
 ˇ                                  ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky
                                             ´        ´ ˇa ˇne                      ˇ   ˇ
V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne.
                        ´       ´                      ´
Dukaz. Indukcı ke strukture c.
 ˚           ´           ˇ



Pr´klad:
 ˇı

• {true} while false do {false} skip {true}

• Toto oznac
           ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne.
                 ´       ´ ˇa ˇne                           ´
80

Veta 17. Necht’ {A} c {B} je oznac
 ˇ                                  ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky
                                             ´        ´ ˇa ˇne                      ˇ   ˇ
V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne.
                        ´       ´                      ´
Dukaz. Indukcı ke strukture c.
 ˚           ´           ˇ



Pr´klad:
 ˇı

• {true} while false do {false} skip {true}

• Toto oznac
           ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne.
                 ´       ´ ˇa ˇne                           ´

• V ({true} while false do {false} skip {true})     =
           V ({false ∧ false} skip {false})   ∪   {true ⇒ false}   ∪   {(false ∧ ¬false) ⇒ true}
80

Veta 17. Necht’ {A} c {B} je oznac
 ˇ                                  ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky
                                             ´        ´ ˇa ˇne                      ˇ   ˇ
V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne.
                        ´       ´                      ´
Dukaz. Indukcı ke strukture c.
 ˚           ´           ˇ



Pr´klad:
 ˇı

• {true} while false do {false} skip {true}

• Toto oznac
           ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne.
                 ´       ´ ˇa ˇne                           ´

• V ({true} while false do {false} skip {true})     =
           V ({false ∧ false} skip {false})   ∪   {true ⇒ false}   ∪   {(false ∧ ¬false) ⇒ true}

• true ⇒ false       ∈    V ({true} while false do {false} skip {true}) platne nenı; platnost prvku
                                                                             ´    ´               ˚
  V ({A} c {B}) je tedy pouze postac ´cı, nikoliv nutna podmınka platnosti {A} c {B}.
                                     ˇujı ´             ´        ´
81
              Operac ´ semantika paralelnıch programu
                   ˇnı ´                 ´          ˚


• Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany
                        ˇ ıˇı            ´     ´              ´ ˇı                      ´
  rovnicı
        ´

          c   ::=   skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1
81
              Operac ´ semantika paralelnıch programu
                   ˇnı ´                 ´          ˚


• Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany
                        ˇ ıˇı            ´     ´              ´ ˇı                      ´
  rovnicı
        ´

          c   ::=   skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1

• SOS semantiku II. typu rozs´r´me o pravidla
       ´                    ˇ ıˇı
             c0, σ → c0, σ                   c1, σ → c1, σ
          c0 c1, σ → c0 c1, σ             c0 c1, σ → c0 c1, σ
81
               Operac ´ semantika paralelnıch programu
                    ˇnı ´                 ´          ˚


• Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany
                        ˇ ıˇı            ´     ´              ´ ˇı                      ´
  rovnicı
        ´

          c    ::=   skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1

• SOS semantiku II. typu rozs´r´me o pravidla
       ´                    ˇ ıˇı
             c0, σ → c0, σ                     c1, σ → c1, σ
          c0 c1, σ → c0 c1, σ               c0 c1, σ → c0 c1, σ

• Podle stavajıcıch pravidel napr.
          ´ ´ ´                 ˇ

          (X := 1 X := 2); X := 3, σ    →
          (skip X := 2); X := 3, σ[1/X]     →
          (skip skip); X := 3, σ[2/X]

  Z konfigurace (skip skip); X := 3, σ[2/X] nenı mozne odvodit zadny prechod, ac
                                                  ´     ˇ ´         ˇ´ ´ ˇ           ˇkoliv pr´kaz
                                                                                             ˇı
  X := 3 je v teto konfiguraci proveditelny (podle intuitivnıho chapanı vyznamu „;“ a „ “).
               ´                         ´                 ´     ´ ´ ´ ´
81
               Operac ´ semantika paralelnıch programu
                    ˇnı ´                 ´          ˚


• Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany
                        ˇ ıˇı            ´     ´              ´ ˇı                      ´
  rovnicı
        ´

          c    ::=   skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1

• SOS semantiku II. typu rozs´r´me o pravidla
       ´                    ˇ ıˇı
             c0, σ → c0, σ                     c1, σ → c1, σ
          c0 c1, σ → c0 c1, σ               c0 c1, σ → c0 c1, σ

• Podle stavajıcıch pravidel napr.
          ´ ´ ´                 ˇ

          (X := 1 X := 2); X := 3, σ    →
          (skip X := 2); X := 3, σ[1/X]     →
          (skip skip); X := 3, σ[2/X]

  Z konfigurace (skip skip); X := 3, σ[2/X] nenı mozne odvodit zadny prechod, ac
                                                  ´     ˇ ´         ˇ´ ´ ˇ           ˇkoliv pr´kaz
                                                                                             ˇı
  X := 3 je v teto konfiguraci proveditelny (podle intuitivnıho chapanı vyznamu „;“ a „ “).
               ´                         ´                 ´     ´ ´ ´ ´
82
• Zavedeme predikat IsSkip predpisem
                 ´          ˇ

                   IsSkip(skip)     =   true
                 IsSkip(X := a)     =   false
                  IsSkip(c0; c1)    =   IsSkip(c0) ∧ IsSkip(c1)
     IsSkip(if b then c0 else c1)   =   false
           IsSkip(while b do c)     =   false
                  IsSkip(c0 c1)     =   IsSkip(c0) ∧ IsSkip(c1)
82
• Zavedeme predikat IsSkip predpisem
                 ´          ˇ

                    IsSkip(skip)     =   true
                  IsSkip(X := a)     =   false
                    IsSkip(c0; c1)   =   IsSkip(c0) ∧ IsSkip(c1)
     IsSkip(if b then c0 else c1)    =   false
             IsSkip(while b do c)    =   false
                   IsSkip(c0 c1)     =   IsSkip(c0) ∧ IsSkip(c1)

• Pravidlo      skip; c, σ → c, σ nahradıme pravidlem
                                        ´

                                IsSkip(c0)
          c0; c1, σ → c1, σ
82
• Zavedeme predikat IsSkip predpisem
                 ´          ˇ

                    IsSkip(skip)     =   true
                  IsSkip(X := a)     =   false
                    IsSkip(c0; c1)   =   IsSkip(c0) ∧ IsSkip(c1)
     IsSkip(if b then c0 else c1)    =   false
             IsSkip(while b do c)    =   false
                   IsSkip(c0 c1)     =   IsSkip(c0) ∧ IsSkip(c1)

• Pravidlo      skip; c, σ → c, σ nahradıme pravidlem
                                        ´

                                IsSkip(c0)
          c0; c1, σ → c1, σ

• Nynı je jiz odvoditelny prechod (skip skip); X := 3, σ[2/X] → X := 3, σ[2/X]
     ´      ˇ           ´ ˇ
82
• Zavedeme predikat IsSkip predpisem
                 ´          ˇ

                    IsSkip(skip)     =   true
                  IsSkip(X := a)     =   false
                    IsSkip(c0; c1)   =   IsSkip(c0) ∧ IsSkip(c1)
     IsSkip(if b then c0 else c1)    =   false
             IsSkip(while b do c)    =   false
                   IsSkip(c0 c1)     =   IsSkip(c0) ∧ IsSkip(c1)

• Pravidlo      skip; c, σ → c, σ nahradıme pravidlem
                                        ´

                                IsSkip(c0)
          c0; c1, σ → c1, σ

• Nynı je jiz odvoditelny prechod (skip skip); X := 3, σ[2/X] → X := 3, σ[2/X]
     ´      ˇ           ´ ˇ

• Paralelnı programy mohou byt nedeterministicke.
          ´                 ´                  ´
83
Verifikace paralelnıch a neukonc ´ ch programu
                  ´           ˇeny          ˚
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
     V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem
                                            ´       ´                    ´ ´       ´
     (bisimulac ´ ekvivalence apod.)
              ˇnı
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
     V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem
                                            ´       ´                    ´ ´       ´
     (bisimulac ´ ekvivalence apod.)
              ˇnı
• Overenı platnosti formule vhodne logiky.
    ˇˇ ´                         ´
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
     V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem
                                            ´       ´                    ´ ´       ´
     (bisimulac ´ ekvivalence apod.)
              ˇnı
• Overenı platnosti formule vhodne logiky.
    ˇˇ ´                         ´
     „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky.
                                   ˇı   ˇ          ˇ ´          ´ ´         ´ ´
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
     V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem
                                            ´       ´                    ´ ´       ´
     (bisimulac ´ ekvivalence apod.)
              ˇnı
• Overenı platnosti formule vhodne logiky.
    ˇˇ ´                         ´
     „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky.
                                   ˇı   ˇ          ˇ ´          ´ ´         ´ ´
     temporalnı logiky lze klasifikovat z mnoha hledisek, napr.
           ´ ´                                              ˇ
     ∗ „state-based“ × „action-based“
     ∗ „linear-time“ × „branching-time“
83
         Verifikace paralelnıch a neukonc ´ ch programu
                           ´           ˇeny          ˚


• Overenı semanticke ekvivalence.
    ˇˇ ´ ´         ´
     Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho
                         ˇna                   ´ˇ         ´     ˇ ˇı
     sıte, apod.) s dobre definovanou operac ´ semantikou.
      ´ˇ               ˇ                  ˇnı ´
     Dokaze se, ze specifikace a implementace jsou ekvivalentnı.
        ´ˇ      ˇ                                            ´
     V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem
                                            ´       ´                    ´ ´       ´
     (bisimulac ´ ekvivalence apod.)
              ˇnı
• Overenı platnosti formule vhodne logiky.
    ˇˇ ´                         ´
     „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky.
                                   ˇı   ˇ          ˇ ´          ´ ´         ´ ´
     temporalnı logiky lze klasifikovat z mnoha hledisek, napr.
           ´ ´                                              ˇ
     ∗ „state-based“ × „action-based“
     ∗ „linear-time“ × „branching-time“
• Z praktickeho hlediska je hlavnı omezujıcı faktor velikost mnoziny konfiguracı.
            ´                    ´       ´ ´                    ˇ             ´
84
„Obecna“ definice LTL
      ´
84
                             „Obecna“ definice LTL
                                   ´

Syntaxe LTL
• Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku.
                                ˇetna  ˇ           ´    ´   ˚
     ϕ    ::=   true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
84
                             „Obecna“ definice LTL
                                   ´

Syntaxe LTL
• Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku.
                                ˇetna  ˇ           ´    ´   ˚
     ϕ    ::=   true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  Dale definujeme F ϕ ≡ true U ϕ
   ´                                    a   G ϕ ≡ ¬F ¬ϕ
• Bud’ ϕ LTL formule.
     At(ϕ) oznac
               ˇuje mnozinu vsech atomickych vyroku, ktere se vyskytujı ve ϕ;
                       ˇ     ˇ           ´    ´   ˚      ´            ´
     charakteristicka abeceda formule ϕ je mnozina Σϕ = 2At(ϕ);
                    ´                         ˇ
     Σω oznac
      ϕ     ˇuje mnozinu vsech nekonec ´ ch slov nad abecedou Σϕ;
                    ˇ     ˇ          ˇny
     necht’ w ∈ Σω. Symbol w(i) oznac
                  ϕ                 ˇuje i-ty znak slova w; symbol wi oznac
                                            ´                             ˇuje i-ty sufix slova
                                                                                  ´
     w pro kazde i ∈ N0.
              ˇ ´
84
                                „Obecna“ definice LTL
                                      ´

Syntaxe LTL
• Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku.
                                ˇetna  ˇ           ´    ´   ˚
      ϕ    ::=   true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  Dale definujeme F ϕ ≡ true U ϕ
   ´                                       a   G ϕ ≡ ¬F ¬ϕ
• Bud’ ϕ LTL formule.
      At(ϕ) oznac
                ˇuje mnozinu vsech atomickych vyroku, ktere se vyskytujı ve ϕ;
                        ˇ     ˇ           ´    ´   ˚      ´            ´
      charakteristicka abeceda formule ϕ je mnozina Σϕ = 2At(ϕ);
                     ´                         ˇ
      Σω oznac
       ϕ     ˇuje mnozinu vsech nekonec ´ ch slov nad abecedou Σϕ;
                     ˇ     ˇ          ˇny
      necht’ w ∈ Σω. Symbol w(i) oznac
                   ϕ                 ˇuje i-ty znak slova w; symbol wi oznac
                                             ´                             ˇuje i-ty sufix slova
                                                                                   ´
      w pro kazde i ∈ N0.
               ˇ ´
Pr´klad:
 ˇı
• ϕ = (p ∨ q) U (p ∧ q)
• At(ϕ) = {p, q}
• Σϕ = {∅, {p}, {q}, {p, q}}
• je-li w = ∅ {p} ∅ {q} {q} {p, q} · · ·, platı w(2) = ∅, w(3) = {q}, w2 = ∅ {q} {q} {p, q} · · ·
                                              ´
85
Semantika LTL
 ´
• Bud’ ϕ LTL formule. Platnost ϕ pro dane w ∈ Σω je definovana indukcı ke strukture ϕ:
                                        ´      ϕ          ´         ´           ˇ
    w   |=   true
    w   |=   p         ⇐⇒   p ∈ w(0)
    w   |=   ¬ϕ        ⇐⇒   w |= ϕ
    w   |=   ϕ1 ∧ ϕ2   ⇐⇒   w |= ϕ1 ∧ w |= ϕ2
    w   |=   Xϕ        ⇐⇒   w1 |= ϕ
    w   |=   ϕ1 U ϕ2   ⇐⇒   ∃j : wj |= ϕ2 ∧ ∀i < j : wi |= ϕ1
85
Semantika LTL
 ´
• Bud’ ϕ LTL formule. Platnost ϕ pro dane w ∈ Σω je definovana indukcı ke strukture ϕ:
                                        ´      ϕ          ´         ´           ˇ
    w   |=   true
    w   |=   p         ⇐⇒   p ∈ w(0)
    w   |=   ¬ϕ        ⇐⇒   w |= ϕ
    w   |=   ϕ1 ∧ ϕ2   ⇐⇒   w |= ϕ1 ∧ w |= ϕ2
    w   |=   Xϕ        ⇐⇒   w1 |= ϕ
    w   |=   ϕ1 U ϕ2   ⇐⇒   ∃j : wj |= ϕ2 ∧ ∀i < j : wi |= ϕ1
• Charakteristicky jazyk LTL formule ϕ je mnozina nekonec ´ ch slov Lϕ = {w ∈ Σω | w |= ϕ}
                 ´                           ˇ          ˇny                    ϕ
86
LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                        ´         ´           ˇeny
                      programu ˚
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
     ϕ    ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
     ϕ    ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  kde A ∈ Assn.
• Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı
                            ˇ                                 ˇna                      ´

         α =    c0, σ0   c1, σ1   c2, σ2   c3, σ3 · · ·,

  kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0.
                                                 ˇ ´
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
     ϕ    ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  kde A ∈ Assn.
• Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı
                            ˇ                                 ˇna                      ´

         α =    c0, σ0   c1, σ1   c2, σ2   c3, σ3 · · ·,

  kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0.
                                                 ˇ ´
• Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli
                                           ˇ                 ´          ˇ
  ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}.
                               ϕ    ϕ        ϕ
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
      ϕ   ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  kde A ∈ Assn.
• Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı
                            ˇ                                 ˇna                      ´

          α =   c0, σ0   c1, σ1   c2, σ2   c3, σ3 · · ·,

  kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0.
                                                 ˇ ´
• Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli
                                           ˇ                 ´          ˇ
  ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}.
                               ϕ    ϕ        ϕ

• Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ.
   ˇ       ˇ                   ˇ                    ´                  ˇ   ϕ
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
      ϕ   ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  kde A ∈ Assn.
• Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı
                            ˇ                                 ˇna                      ´

          α =   c0, σ0   c1, σ1   c2, σ2   c3, σ3 · · ·,

  kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0.
                                                 ˇ ´
• Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli
                                           ˇ                 ´          ˇ
  ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}.
                               ϕ    ϕ        ϕ

• Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ.
   ˇ       ˇ                   ˇ                    ´                  ˇ   ϕ

• Konfigurace c, σ splnuje LTL formuli ϕ pri interpretaci I, psano c, σ |=I ϕ, jestlize pro kazdy
                        ˇ                ˇ                    ´                     ˇ        ˇ ´
  beh α zac´najıcı v c, σ platı α |=I ϕ.
   ˇ      ˇı ´ ´              ´
86
      LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch
                              ´         ´           ˇeny
                            programu ˚

• Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj.
    ´ ˇı
      ϕ   ::=   true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  kde A ∈ Assn.
• Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı
                            ˇ                                 ˇna                      ´

          α =   c0, σ0   c1, σ1   c2, σ2   c3, σ3 · · ·,

  kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0.
                                                 ˇ ´
• Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli
                                           ˇ                 ´          ˇ
  ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}.
                               ϕ    ϕ        ϕ

• Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ.
   ˇ       ˇ                   ˇ                    ´                  ˇ   ϕ

• Konfigurace c, σ splnuje LTL formuli ϕ pri interpretaci I, psano c, σ |=I ϕ, jestlize pro kazdy
                        ˇ                ˇ                    ´                     ˇ        ˇ ´
  beh α zac´najıcı v c, σ platı α |=I ϕ.
   ˇ      ˇı ´ ´              ´
• Mnozina vlastnostı behu vyjadritelnych v LTL je uzavrena na negaci. Mnozina vlastnostı
      ˇ              ´ ˇ ˚     ´ ˇ    ´                 ˇ ´                   ˇ             ´
  konfiguracı vyjadritelnych v LTL na negaci uzavrena nenı (v dusledku „vestavene“ univerzalnı
            ´    ´ ˇ    ´                       ˇ ´     ´     ˚              ˇ ´         ´ ´
  kvantifikace pres behy)!
               ˇ      ˇ
87
Pr´klady:
 ˇı
• c    ≡    while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I.
                                                                 ˇ ´
87
Pr´klady:
 ˇı
• c    ≡    while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I.
                                                                 ˇ ´
• c   ≡      X := 2. Pak c, σ     |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh
                                                      ˇ ´                          ˇ´ ´ ˇ
  zac´najıcı v c, σ .
    ˇı ´ ´
87
Pr´klady:
 ˇı
• c    ≡    while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I.
                                                                 ˇ ´
• c   ≡      X := 2. Pak c, σ     |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh
                                                      ˇ ´                          ˇ´ ´ ˇ
  zac´najıcı v c, σ .
    ˇı ´ ´
• c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı
                                                            ˇ ´           ˇ          ´
   c, σ |=I (X = 2) ⇒ G (X = 2)
87
Pr´klady:
 ˇı
• c    ≡    while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I.
                                                                 ˇ ´
• c   ≡      X := 2. Pak c, σ     |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh
                                                      ˇ ´                          ˇ´ ´ ˇ
  zac´najıcı v c, σ .
    ˇı ´ ´
• c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı
                                                            ˇ ´           ˇ          ´
   c, σ |=I (X = 2) ⇒ G (X = 2)
• c ≡ X := 2 X := 3 while tt do skip. Uvazme stav σ kde σ(X) = 2. Pak c, σ |=I
                                             ˇ
  F (X = 3) a c, σ |= G (X = 3) pro kazde I.
                     I
                                      ˇ ´
87
Pr´klady:
 ˇı
• c    ≡     while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I.
                                                                  ˇ ´
• c   ≡      X := 2. Pak c, σ       |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh
                                                        ˇ ´                          ˇ´ ´ ˇ
  zac´najıcı v c, σ .
    ˇı ´ ´
• c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı
                                                            ˇ ´           ˇ          ´
   c, σ |=I (X = 2) ⇒ G (X = 2)
• c ≡ X := 2 X := 3 while tt do skip. Uvazme stav σ kde σ(X) = 2. Pak c, σ |=I
                                             ˇ
  F (X = 3) a c, σ |= G (X = 3) pro kazde I.
                     I
                                      ˇ ´


Problem:
     ´      Jak efektivne overit, zda c, σ |=I ϕ ?
                        ˇ   ˇˇ
88
ω-regularnı jazyky a Buchiho automaty
       ´ ´            ¨
88
                 ω-regularnı jazyky a Buchiho automaty
                        ´ ´            ¨


• Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde
   ¨                  ˇ
     Q je konec ´ mnozina stavu;
              ˇna    ˇ        ˚
     Σ je konec ´ abeceda;
              ˇna
                                                                       a
     δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q);
                   ˇ       ´          ´                           ´
     q0 ∈ Q je poc ´ tec ´ stav;
                 ˇa ˇnı
     F ⊆ Q je mnozina koncovych stavu.
                 ˇ          ´       ˚
88
                 ω-regularnı jazyky a Buchiho automaty
                        ´ ´            ¨


• Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde
   ¨                  ˇ
     Q je konec ´ mnozina stavu;
              ˇna    ˇ        ˚
     Σ je konec ´ abeceda;
              ˇna
                                                                        a
     δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q);
                   ˇ       ´          ´                           ´
     q0 ∈ Q je poc ´ tec ´ stav;
                 ˇa ˇnı
     F ⊆ Q je mnozina koncovych stavu.
                 ˇ          ´       ˚
• Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova,
   ´ ˇet                  ˇ                 ˇna                 ˚                     ´
                   w(i)
  ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery
  ˇ                              ˇ ´        ´ ˇet           ´ ´        ˇ        ˇ   ˇ    ´
  koncovy stav vyskytuje ∞-krat.
         ´                   ´
88
                 ω-regularnı jazyky a Buchiho automaty
                        ´ ´            ¨


• Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde
   ¨                  ˇ
     Q je konec ´ mnozina stavu;
              ˇna    ˇ        ˚
     Σ je konec ´ abeceda;
              ˇna
                                                                          a
     δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q);
                   ˇ       ´          ´                           ´
     q0 ∈ Q je poc ´ tec ´ stav;
                 ˇa ˇnı
     F ⊆ Q je mnozina koncovych stavu.
                 ˇ          ´       ˚
• Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova,
   ´ ˇet                  ˇ                 ˇna                 ˚                     ´
                   w(i)
  ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery
  ˇ                              ˇ ´        ´ ˇet           ´ ´        ˇ        ˇ   ˇ    ´
  koncovy stav vyskytuje ∞-krat.
         ´                   ´
• Automat A akceptuje jazyk L(A) ⊆ Σω slozeny ze slov, pro ktera existuje akceptujıcı vypoc
                                         ˇ ´                   ´                  ´ ´ ´ ˇet.
88
                 ω-regularnı jazyky a Buchiho automaty
                        ´ ´            ¨


• Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde
   ¨                  ˇ
     Q je konec ´ mnozina stavu;
              ˇna    ˇ        ˚
     Σ je konec ´ abeceda;
              ˇna
                                                                          a
     δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q);
                   ˇ       ´          ´                           ´
     q0 ∈ Q je poc ´ tec ´ stav;
                 ˇa ˇnı
     F ⊆ Q je mnozina koncovych stavu.
                 ˇ          ´       ˚
• Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova,
   ´ ˇet                  ˇ                 ˇna                 ˚                     ´
                   w(i)
  ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery
  ˇ                              ˇ ´        ´ ˇet           ´ ´        ˇ        ˇ   ˇ    ´
  koncovy stav vyskytuje ∞-krat.
         ´                   ´
• Automat A akceptuje jazyk L(A) ⊆ Σω slozeny ze slov, pro ktera existuje akceptujıcı vypoc
                                         ˇ ´                   ´                  ´ ´ ´ ˇet.
• Bud’ Σ konec ´ abeceda. L ⊆ Σω je ω-regularnı. pokud existuje Buchiho automat A takovy,
             ˇna                           ´ ´                   ¨                     ´
  ze L(A) = L.
  ˇ
89
Pr´klad: Uvazme nasledujıcı Buchiho automat A:
 ˇı         ˇ    ´      ´ ´ ¨
                1




         0,1          1


Pak L(A) obsahuje prave ta nekonec ´ slova nad abecedou 0, 1, ve kterych se 0 vyskytuje
                    ´ ˇ          ˇna                                 ´
konec ˇ -krat.
    ˇne ´
90
Vlastnosti Buchiho automatu a ω-regularnıch jazyku
            ¨             ˚          ´ ´         ˚
90
       Vlastnosti Buchiho automatu a ω-regularnıch jazyku
                   ¨             ˚          ´ ´         ˚


Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take
 ˇ                                 ´ ´                                                       ´
ω-regularnı jazyky.
       ´ ´
90
         Vlastnosti Buchiho automatu a ω-regularnıch jazyku
                     ¨             ˚          ´ ´         ˚


Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take
 ˇ                                 ´ ´                                                       ´
ω-regularnı jazyky.
       ´ ´

Dukaz. Necht’ L1 = L(A1) a L2 = L(A2), kde A1 = (Q1, Σ, δ1, q1, F1) a A2 = (Q2, Σ, δ2, q2, F2).
 ˚
Bez ujmy na obecnosti muzeme predpokladat, ze Q1 ∩ Q2 = ∅. Zrejme L1 ∪ L2 = L(A∪), kde
    ´                  ˚ˇ      ˇ     ´     ˇ                 ˇ     ˇ
     ∪                                                         a         a
   A      =   (Q1 ∪ Q2 ∪ {q0},   Σ,   δ1 ∪ δ2 ∪ {(q0, a, q) | q1 → q ∨ q2 → q},   q0,   F1 ∪ F 2 )
kde q0 ∈ Q1 ∪ Q2.
90
         Vlastnosti Buchiho automatu a ω-regularnıch jazyku
                     ¨             ˚          ´ ´         ˚


Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take
 ˇ                                 ´ ´                                                       ´
ω-regularnı jazyky.
       ´ ´

Dukaz. Necht’ L1 = L(A1) a L2 = L(A2), kde A1 = (Q1, Σ, δ1, q1, F1) a A2 = (Q2, Σ, δ2, q2, F2).
 ˚
Bez ujmy na obecnosti muzeme predpokladat, ze Q1 ∩ Q2 = ∅. Zrejme L1 ∪ L2 = L(A∪), kde
    ´                  ˚ˇ      ˇ     ´     ˇ                 ˇ     ˇ
     ∪                                                           a        a
   A      =   (Q1 ∪ Q2 ∪ {q0},   Σ,   δ1 ∪ δ2 ∪ {(q0, a, q) | q1 → q ∨ q2 → q},   q0,   F1 ∪ F 2 )
kde q0 ∈ Q1 ∪ Q2. Dale L1 ∩ L2 = L(A∩), kde
                   ´
     ∩                                    ∩
   A      =   (Q1×Q2 × {1, 2},   Σ,   δ ,     (q1, q2, 1),   F1×Q2×{1})
a δ∩ je urc
          ˇena predpisem
                ˇ
              a                       a         a
 • (p, q, 1) → (p , q , 1), jestlize p → p , q → q a p ∈ F1;
                                  ˇ
              a                       a         a
 • (p, q, 1) → (p , q , 2), jestlize p → p , q → q a p ∈ F1;
                                  ˇ
              a                       a         a
 • (p, q, 2) → (p , q , 2), jestlize p → p , q → q a q ∈ F2;
                                  ˇ
              a                       a         a
 • (p, q, 2) → (p , q , 1), jestlize p → p , q → q a q ∈ F2.
                                  ˇ
91

Veta 19. Necht’ A je Buchiho automat. Problem, zda L(A) = ∅ je rozhodnutelny (v polynomialnım
  ˇ                   ¨                    ´                               ´            ´ ´
c
ˇase).
91

Veta 19. Necht’ A je Buchiho automat. Problem, zda L(A) = ∅ je rozhodnutelny (v polynomialnım
  ˇ                   ¨                    ´                               ´            ´ ´
c
ˇase).


Dukaz. Necht’ A = (Q, Σ, δ, q0, F). Stac´ si uvedomit, ze L(A) = ∅ prave kdyz existuje f ∈ F
  ˚                                    ˇı      ˇ       ˇ              ´ ˇ     ˇ
takovy, ze f je v (grafu) automatu A dosazitelny z q0 a existuje cesta z f do f delky alespon
     ´ ˇ                                   ˇ     ´                               ´          ˇ
1. Oba tyto (grafove) problemy jsou snadno rozhodnutelne v polynomialnım c
                     ´       ´                              ´            ´ ´ ˇase (dokonce
v nedeterministickem logaritmickem prostoru).
                   ´            ´
92
                        Vztah LTL a Buchiho automatu
                                     ¨             ˚


Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat
 ˇ                                              ´ ´                                ¨
Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ.
                           ´
92
                                   Vztah LTL a Buchiho automatu
                                                ¨             ˚


Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat
 ˇ                                              ´ ´                                ¨
Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ.
                           ´


Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou
 ˇı         ˇ
Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem
                                       ´   ¨
                            {m}            {c}, {m,c}




       0, {c}, {m}, {m,c}         0, {m}          0, {c}, {m}, {m,c}
92
                                   Vztah LTL a Buchiho automatu
                                                ¨             ˚


Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat
 ˇ                                              ´ ´                                ¨
Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ.
                           ´


Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou
 ˇı         ˇ
Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem
                                       ´   ¨
                            {m}            {c}, {m,c}




       0, {c}, {m}, {m,c}         0, {m}          0, {c}, {m}, {m,c}




Overovanı platnosti LTL formulı
  ˇˇ ´ ´                      ´
• Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗
                             ´ ˇ ˇ          ´     ´
   c , σ }, ma konec ˇ mnoho konfiguracı.
             ´     ˇne                 ´
92
                                   Vztah LTL a Buchiho automatu
                                                ¨             ˚


Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat
 ˇ                                              ´ ´                                ¨
Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ.
                           ´


Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou
 ˇı         ˇ
Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem
                                       ´   ¨
                            {m}            {c}, {m,c}




       0, {c}, {m}, {m,c}         0, {m}          0, {c}, {m}, {m,c}




Overovanı platnosti LTL formulı
  ˇˇ ´ ´                      ´
• Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗
                             ´ ˇ ˇ          ´     ´
   c , σ }, ma konec ˇ mnoho konfiguracı.
             ´     ˇne                 ´
• Necht’ ϕ je LTL formule a I interpretace. Definujeme Buchiho automat A = (S, Σϕ, δ, c, σ , S),
                                                       ¨
               M
  kde c , σ → c , σ prave kdyz M = {A ∈ Assn(ϕ) | σ |=I ϕ}.
                            ´ ˇ      ˇ
92
                                   Vztah LTL a Buchiho automatu
                                                ¨             ˚


Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat
 ˇ                                              ´ ´                                ¨
Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ.
                           ´


Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou
 ˇı         ˇ
Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem
                                       ´   ¨
                            {m}            {c}, {m,c}




       0, {c}, {m}, {m,c}         0, {m}          0, {c}, {m}, {m,c}




Overovanı platnosti LTL formulı
  ˇˇ ´ ´                      ´
• Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗
                             ´ ˇ ˇ          ´     ´
   c , σ }, ma konec ˇ mnoho konfiguracı.
             ´     ˇne                 ´
• Necht’ ϕ je LTL formule a I interpretace. Definujeme Buchiho automat A = (S, Σϕ, δ, c, σ , S),
                                                       ¨
               M
  kde c , σ → c , σ prave kdyz M = {A ∈ Assn(ϕ) | σ |=I ϕ}.
                            ´ ˇ      ˇ
• Platı c, σ |=I ϕ prave kdyz L(A) ∩ L(A¬ϕ) = ∅.
      ´              ´ ˇ    ˇ
93
Pr´klad:
 ˇı
• Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde
    σ(X) = 2.
93
Pr´klad:
 ˇı
• Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde
    σ(X) = 2.
• Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı
         ˇı                                         ´

         w, σ      →
         if tt then (X := 1; X := 2; w) else skip, σ   →
         X := 1; X := 2; w, σ      →
         skip; X := 2; w, σ[1/X]      →
         X := 2; w, σ[1/X]       →
         skip; w, σ      →
         w, σ

  Automat A tedy vypada nasledovne:
                      ´ ´        ˇ
                 {X=2}          {X=2}         {X=2}        {X=1}   {X=1}




                                              {X=2}
93
Pr´klad:
 ˇı
• Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde
    σ(X) = 2.
• Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı
         ˇı                                         ´

         w, σ      →
         if tt then (X := 1; X := 2; w) else skip, σ   →
         X := 1; X := 2; w, σ      →
         skip; X := 2; w, σ[1/X]      →
         X := 2; w, σ[1/X]       →
         skip; w, σ      →
         w, σ

  Automat A tedy vypada nasledovne:
                      ´ ´        ˇ
                 {X=2}          {X=2}         {X=2}        {X=1}   {X=1}




                                              {X=2}


• Dale ¬ϕ ≡ F (X=1∧ G (¬(X=2)), lze tedy pouz´t (mırne modifikovany) automat z predchozıho
    ´                                       ˇı    ´ ˇ            ´             ˇ      ´
  pr´kladu.
   ˇı
93
Pr´klad:
 ˇı
• Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde
    σ(X) = 2.
• Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı
         ˇı                                         ´

         w, σ      →
         if tt then (X := 1; X := 2; w) else skip, σ   →
         X := 1; X := 2; w, σ      →
         skip; X := 2; w, σ[1/X]      →
         X := 2; w, σ[1/X]       →
         skip; w, σ      →
         w, σ

  Automat A tedy vypada nasledovne:
                      ´ ´        ˇ
                 {X=2}          {X=2}         {X=2}        {X=1}   {X=1}




                                              {X=2}


• Dale ¬ϕ ≡ F (X=1∧ G (¬(X=2)), lze tedy pouz´t (mırne modifikovany) automat z predchozıho
    ´                                         ˇı   ´ ˇ              ´           ˇ      ´
  pr´kladu.
   ˇı
• Nynı stac´ sestrojit automat A∩ z dukazu vety 18 a overit, zda L(A∩) = ∅ (coz lze rovnez
      ´     ˇı                         ˚    ˇ          ˇˇ                     ˇ          ˇˇ
  provest algoritmicky podle vety 19).
       ´                      ˇ

More Related Content

PPT
Twilight1
PDF
KMS_1.-6. místo
PPTX
secom : managing information security in a risky world
PPTX
The Twilight Series
PPT
Twilight Book Presentation
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
Twilight1
KMS_1.-6. místo
secom : managing information security in a risky world
The Twilight Series
Twilight Book Presentation
2024 Trend Updates: What Really Works In SEO & Content Marketing
Storytelling For The Web: Integrate Storytelling in your Design Process
Ad

Nps54.tmp

  • 1. 1 Semantiky programovacıch jazyku ´ ´ ˚ Doporuc ´ literatura ˇena • Glynn Winskel: The Formal Semantics of Programming Languages • Matthew Hennesy: The Semantics of Programming Languages • PDF a PS soubor teto prezentace je dostupny na ´ ´ http://www.fi.muni.cz/usr/kucera/teach.html
  • 2. 2 Definice programovacıho jazyka ´ • Syntaxe definuje „spravne utvorene“ programy (akceptovane prekladac ´ ˇ ˇ ´ ´ ˇ ˇem). lexikalnı jednotky (klıc ´ slova, identifikatory, konstanty, operatory, . . . ) ´ ´ ´ ˇova ´ ´ frazova struktura (urc ´ ´ ˇuje jake posloupnosti lexikalnıch jednotek jsou „pr´pustne“ ´ ´ ´ ˇı ´
  • 3. 2 Definice programovacıho jazyka ´ • Syntaxe definuje „spravne utvorene“ programy (akceptovane prekladac ´ ˇ ˇ ´ ´ ˇ ˇem). lexikalnı jednotky (klıc ´ slova, identifikatory, konstanty, operatory, . . . ) ´ ´ ´ ˇova ´ ´ frazova struktura (urc ´ ´ ˇuje jake posloupnosti lexikalnıch jednotek jsou „pr´pustne“ ´ ´ ´ ˇı ´ • Semantika popisuje chovanı programu (co program „dela“) ´ ´ ´ ˇ ´ neformalnı (uc ´ ´ ˇebnice programovacıch jazyku) ´ ˚ formalnı („matematicka“) ´ ´ ´
  • 4. 3 ´ ˇel Uc a pouzitelnost formalnı semantiky ˇ ´ ´ ´ • Korektnost implementace prekladac (co musı splnovat, aby byl „spravny“?) ˇ ˇ ´ ˇ ´ ´ optimalizator (jake upravy kodu jsou „pr´pustne“?) ´ ´ ´ ´ ˇı ´
  • 5. 3 ´ ˇel Uc a pouzitelnost formalnı semantiky ˇ ´ ´ ´ • Korektnost implementace prekladac (co musı splnovat, aby byl „spravny“?) ˇ ˇ ´ ˇ ´ ´ optimalizator (jake upravy kodu jsou „pr´pustne“?) ´ ´ ´ ´ ˇı ´ • Verifikace programu ˚ vlastnosti programu (jak je vyjadrit, jak dokazat ze dany program ma danou vlastnost?) ˚ ´ ˇ ´ ˇ ´ ´ ekvivalence programu (co znamena, ze se dva programy „chovajı stejne“?) ˚ ´ ˇ ´ ˇ systemy, ktere jsou paralelnı, distribuovane, pracujı s realnym c ´ ´ ´ ´ ´ ´ ´ ˇasem, nebo jsou r´zene ˇı ´ udalostmi, nelze „ladit“! ´ X := X + 1 X := X + 1
  • 6. 3 ´ ˇel Uc a pouzitelnost formalnı semantiky ˇ ´ ´ ´ • Korektnost implementace prekladac (co musı splnovat, aby byl „spravny“?) ˇ ˇ ´ ˇ ´ ´ optimalizator (jake upravy kodu jsou „pr´pustne“?) ´ ´ ´ ´ ˇı ´ • Verifikace programu ˚ vlastnosti programu (jak je vyjadrit, jak dokazat ze dany program ma danou vlastnost?) ˚ ´ ˇ ´ ˇ ´ ´ ekvivalence programu (co znamena, ze se dva programy „chovajı stejne“?) ˚ ´ ˇ ´ ˇ systemy, ktere jsou paralelnı, distribuovane, pracujı s realnym c ´ ´ ´ ´ ´ ´ ´ ˇasem, nebo jsou r´zene ˇı ´ udalostmi, nelze „ladit“! ´ X := X + 1 X := X + 1 • Navrh programovacıch jazyku ´ ´ ˚
  • 7. 4 Zakladnı „styly“ semantik programovacıch jazyku ´ ´ ´ ´ ˚ • Operac ´ semantika definuje jak se program provadı ˇnı ´ ´ ´
  • 8. 4 Zakladnı „styly“ semantik programovacıch jazyku ´ ´ ´ ´ ˚ • Operac ´ semantika definuje jak se program provadı ˇnı ´ ´ ´ • Denotac ´ semantika definuje co program poc´ta ˇnı ´ ˇı ´
  • 9. 4 Zakladnı „styly“ semantik programovacıch jazyku ´ ´ ´ ´ ˚ • Operac ´ semantika definuje jak se program provadı ˇnı ´ ´ ´ • Denotac ´ semantika definuje co program poc´ta ˇnı ´ ˇı ´ • Axiomaticka semantika umoznuje odvodit vlastnosti programu ´ ´ ˇˇ
  • 10. 5 Abstraktnı syntax programovacıch jazyku ´ ´ ˚ • Abstraktnı syntakticka rovnice: rovnice tvaru ´ ´ X ::= at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm)) kde at1, · · · , atn jsou atomy. op1, · · · , opm jsou operace (ktere mohou mıt i nulovou aritu – pak jde o konstanty). ´ ´ α(i,j) je bud’ X nebo atom (opakovane vyskyty jsou rozliseny indexy). ´ ´ ˇ Pro kazdy atom ati je dana jeho syntakticka domena (mnozina) Ai. ˇ ´ ´ ´ ´ ˇ
  • 11. 5 Abstraktnı syntax programovacıch jazyku ´ ´ ˚ • Abstraktnı syntakticka rovnice: rovnice tvaru ´ ´ X ::= at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm)) kde at1, · · · , atn jsou atomy. op1, · · · , opm jsou operace (ktere mohou mıt i nulovou aritu – pak jde o konstanty). ´ ´ α(i,j) je bud’ X nebo atom (opakovane vyskyty jsou rozliseny indexy). ´ ´ ˇ Pro kazdy atom ati je dana jeho syntakticka domena (mnozina) Ai. ˇ ´ ´ ´ ´ ˇ • Pr´klad: ˇı X ::= num | ω | X0+X1 | X0−X1 Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel, ω je konstanta. ´ ´ ´ ´ ˇı
  • 12. 6 Syntakticke stromy ´ • Uvazme abstraktnı syntaktickou rovnici ˇ ´ X ::= at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm)) • Mnozina syntaktickych stromu pro X je definovana induktivne: ˇ ´ ˚ ´ ˇ Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem ´ ´ ˇ ´ ˚ ´ a syntakticky strom pro X vysky 0. ´ ´ˇ Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0. ´ ´ ´ˇ Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky, ˇ ´ ´ kde i-ty naslednık je bud’ ´ ´ ´ ∗ koren syntaktickeho stromu pro X, je-li αi = X, ˇ ´ ∗ prvek syntakticke domeny atomu at, je-li αi = at. ´ ´ take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene ´ ´ ´ˇ ´ˇ ´ ´ ˚ ˇ (prvky syntaktickych domen atomu majı vysku 0). ´ ´ ˚ ´ ´ˇ
  • 13. 6 Syntakticke stromy ´ • Uvazme abstraktnı syntaktickou rovnici ˇ ´ X ::= at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm)) • Mnozina syntaktickych stromu pro X je definovana induktivne: ˇ ´ ˚ ´ ˇ Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem ´ ´ ˇ ´ ˚ ´ a syntakticky strom pro X vysky 0. ´ ´ˇ Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0. ´ ´ ´ˇ Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky, ˇ ´ ´ kde i-ty naslednık je bud’ ´ ´ ´ ∗ koren syntaktickeho stromu pro X, je-li αi = X, ˇ ´ ∗ prvek syntakticke domeny atomu at, je-li αi = at. ´ ´ take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene ´ ´ ´ˇ ´ˇ ´ ´ ˚ ˇ (prvky syntaktickych domen atomu majı vysku 0). ´ ´ ˚ ´ ´ˇ • U syntaktickych stromu rozlisujeme poradı naslednıku. ´ ˚ ˇ ˇ ´ ´ ´ ˚
  • 14. 6 Syntakticke stromy ´ • Uvazme abstraktnı syntaktickou rovnici ˇ ´ X ::= at1 | · · · | atn | op1(α(1,1), . . . , α(1,n1)) | · · · | opm(α(m,1), . . . , α(m,nm)) • Mnozina syntaktickych stromu pro X je definovana induktivne: ˇ ´ ˚ ´ ˇ Je-li a prvek syntakticke domeny nektereho z atomu at1, · · · , atn, je strom s jedinym uzlem ´ ´ ˇ ´ ˚ ´ a syntakticky strom pro X vysky 0. ´ ´ˇ Je-li op konstanta, je strom s jedinym uzlem op syntakticky strom pro X vysky 0. ´ ´ ´ˇ Je-li op operace arity n ≥ 1 s argumenty α1, · · · , αn, je strom s korenem op a n naslednıky, ˇ ´ ´ kde i-ty naslednık je bud’ ´ ´ ´ ∗ koren syntaktickeho stromu pro X, je-li αi = X, ˇ ´ ∗ prvek syntakticke domeny atomu at, je-li αi = at. ´ ´ take syntaktickym stromem pro X vysky k + 1, kde k je maximum z vysek naslednıku korene ´ ´ ´ˇ ´ˇ ´ ´ ˚ ˇ (prvky syntaktickych domen atomu majı vysku 0). ´ ´ ˚ ´ ´ˇ • U syntaktickych stromu rozlisujeme poradı naslednıku. ´ ˚ ˇ ˇ ´ ´ ´ ˚ • Je mozne definovat i systemy syntaktickych rovnic, kde mnozina syntaktickych stromu urc ´ ˇ ´ ´ ´ ˇ ´ ˚ ˇena jednou rovnicı definuje syntaktickou domenu atomu jine rovnice. ´ ´ ´
  • 15. 7 Pr´klad definice abstraktnı syntaxe ˇı ´ • X ::= num | X0+X1 | X0−X1 Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel. ´ ´ ´ ´ ˇı
  • 16. 7 Pr´klad definice abstraktnı syntaxe ˇı ´ • X ::= num | X0+X1 | X0−X1 Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel. ´ ´ ´ ´ ˇı • Y ::= color(X0, X1, X2) | Y0#Y1 | Y0&Y1 Syntaktickou domenou atomu X je mnozina vsech syntaktickych stromu pro X. ´ ˇ ˇ ´ ˚
  • 17. 7 Pr´klad definice abstraktnı syntaxe ˇı ´ • X ::= num | X0+X1 | X0−X1 Syntaktickou domenou atomu num jsou dekadicke zapisy celych c´sel. ´ ´ ´ ´ ˇı • Y ::= color(X0, X1, X2) | Y0#Y1 | Y0&Y1 Syntaktickou domenou atomu X je mnozina vsech syntaktickych stromu pro X. ´ ˇ ˇ ´ ˚ + & − # color 8 1 4 color color 1 2 4 2 + 4 3 + 7 − 3 8 8 1 4
  • 18. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚
  • 19. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny
  • 20. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148
  • 21. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148 postfixova notace: ´ 841 − +
  • 22. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148 postfixova notace: ´ 841 − + zavorky: ´ (1 − 4)+8
  • 23. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148 postfixova notace: ´ 841 − + zavorky: ´ (1 − 4)+8 • Volitelna else klauzule pr´kazu if − then − else ´ ˇı
  • 24. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148 postfixova notace: ´ 841 − + zavorky: ´ (1 − 4)+8 • Volitelna else klauzule pr´kazu if − then − else ´ ˇı zavorky ´
  • 25. 8 Konkretnı syntax programovacıch jazyku ´ ´ ´ ˚ Urc ˇuje, jak jednoznac ˇ zapisovat syntakticke stromy jako retezce symbolu. ˇne ´ ˇ ˇ ˚ • Aritmeticke vyrazy ´ ´ + − 8 1 4 Zapis 1 − 4 + 8 nenı jednoznac ´. ´ ´ ˇny prefixova notace: ´ + − 148 postfixova notace: ´ 841 − + zavorky: ´ (1 − 4)+8 • Volitelna else klauzule pr´kazu if − then − else ´ ˇı zavorky ´ klıc ´ slovo fi ´ ˇove
  • 26. 9 Odvozovacı systemy, dukazy a dokazatelna tvrzenı ´ ´ ˚ ´ ´ • Odvozovacı system je dan konec ´ ´ ´ ˇnou mnozinou schemat axiomu a odvozovacıch pravidel tvaru ˇ ´ ˚ ´ predpoklad1 · · · predpokladn ˇ ˇ podmınky ´ zaver ´ ˇ • Dukaz je konec ´ strom, jehoz listy jsou instance axiomu a vnitrnı uzly instance pravidel. ˚ ˇny ˇ ˚ ˇ ´ • Tvrzenı α je dokazatelne, jestlize existuje dukaz s korenem α. ´ ´ ˇ ˚ ˇ • Dukazove stromy je zvykem psat „korenem dolu“ (tj. „obracene“ nez syntakticke stromy). ˚ ´ ´ ˇ ˚ ´ ˇ ˇ ´
  • 27. 10 Odvozovacı system vyrokove logiky ´ ´ ´ ´
  • 28. 10 Odvozovacı system vyrokove logiky ´ ´ ´ ´ • Abstraktnı syntax formulı vyrokove logiky: ´ ´ ´ ´ ϕ ::= vyrok | ϕ0→ϕ1 | ¬ϕ ´ ´ ´ ´ ˇetna mnozina atomickych vyroku {A, B, C . . .}. kde syntakticka domena atomu vyrok je spoc ´ ˇ ´ ´ ˚
  • 29. 10 Odvozovacı system vyrokove logiky ´ ´ ´ ´ • Abstraktnı syntax formulı vyrokove logiky: ´ ´ ´ ´ ϕ ::= vyrok | ϕ0→ϕ1 | ¬ϕ ´ ´ ´ ´ ˇetna mnozina atomickych vyroku {A, B, C . . .}. kde syntakticka domena atomu vyrok je spoc ´ ˇ ´ ´ ˚ • Schemata axiomu odvozovacıho systemu vyrokove logiky ´ ˚ ´ ´ ´ ´ ϕ → (ψ → ϕ) (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ)) (¬ϕ → ¬ψ) → (ψ → ϕ)
  • 30. 10 Odvozovacı system vyrokove logiky ´ ´ ´ ´ • Abstraktnı syntax formulı vyrokove logiky: ´ ´ ´ ´ ϕ ::= vyrok | ϕ0→ϕ1 | ¬ϕ ´ ´ ´ ´ ˇetna mnozina atomickych vyroku {A, B, C . . .}. kde syntakticka domena atomu vyrok je spoc ´ ˇ ´ ´ ˚ • Schemata axiomu odvozovacıho systemu vyrokove logiky ´ ˚ ´ ´ ´ ´ ϕ → (ψ → ϕ) (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ)) (¬ϕ → ¬ψ) → (ψ → ϕ) • Odvozovacı pravidlo modus ponens ´ ϕ ϕ→ψ ψ
  • 31. 10 Odvozovacı system vyrokove logiky ´ ´ ´ ´ • Abstraktnı syntax formulı vyrokove logiky: ´ ´ ´ ´ ϕ ::= vyrok | ϕ0→ϕ1 | ¬ϕ ´ ´ ´ ´ ˇetna mnozina atomickych vyroku {A, B, C . . .}. kde syntakticka domena atomu vyrok je spoc ´ ˇ ´ ´ ˚ • Schemata axiomu odvozovacıho systemu vyrokove logiky ´ ˚ ´ ´ ´ ´ ϕ → (ψ → ϕ) (ϕ → (ψ → ξ)) → ((ϕ → ψ) → (ϕ → ξ)) (¬ϕ → ¬ψ) → (ψ → ϕ) • Odvozovacı pravidlo modus ponens ´ ϕ ϕ→ψ ψ • Pr´klad: A → A je dokazatelna formule. ˇı ´ A → ((A → A) → A) (A → ((A → A) → A)) → ((A → (A → A)) → (A → A)) A → (A → A) (A → (A → A)) → (A → A) A→A
  • 32. 11 Indukce k vysce stromu ´ˇ • Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy ˇ ´ ˇ ˚ ˇne ´ ˇ ˇ ´ ´ ˇ ´ strom T ∈ M bud’ pravdiva nebo nepravdiva. ´ ´
  • 33. 11 Indukce k vysce stromu ´ˇ • Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy ˇ ´ ˇ ˚ ˇne ´ ˇ ˇ ´ ´ ˇ ´ strom T ∈ M bud’ pravdiva nebo nepravdiva. ´ ´ • Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka: ´ ´ˇ ˇ ´ ´ ´ ´ Pro kazde n ∈ N0: ˇ ´ Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde ´ ˇ ´ ´ˇ ˇı ˇ ´ ˇ ´ T ∈ M vysky prave n. ´ˇ ´ ˇ Pak V je pravdiva pro vsechny stromy z M. ´ ˇ
  • 34. 11 Indukce k vysce stromu ´ˇ • Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy ˇ ´ ˇ ˚ ˇne ´ ˇ ˇ ´ ´ ˇ ´ strom T ∈ M bud’ pravdiva nebo nepravdiva. ´ ´ • Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka: ´ ´ˇ ˇ ´ ´ ´ ´ Pro kazde n ∈ N0: ˇ ´ Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde ´ ˇ ´ ´ˇ ˇı ˇ ´ ˇ ´ T ∈ M vysky prave n. ´ˇ ´ ˇ Pak V je pravdiva pro vsechny stromy z M. ´ ˇ • Strukturalnı indukce: indukce k vysce (syntaktickeho) stromu, kde M je mnozina vsech ´ ´ ´ˇ ´ ˇ ˇ syntaktickych stromu urc ´ danou abstraktnı syntaktickou rovnicı. ´ ˚ ˇena ´ ´
  • 35. 11 Indukce k vysce stromu ´ˇ • Bud’ M (nejaka) mnozina stromu konec ´ vysky a V (nejaka) vlastnost, ktera je pro kazdy ˇ ´ ˇ ˚ ˇne ´ ˇ ˇ ´ ´ ˇ ´ strom T ∈ M bud’ pravdiva nebo nepravdiva. ´ ´ • Tvrzenı o indukci k vysce stromu: Necht’ je splnena nasledujıcı podmınka: ´ ´ˇ ˇ ´ ´ ´ ´ Pro kazde n ∈ N0: ˇ ´ Je-li V je pravdiva pro kazde T ∈ M vysky mens´ nez n, pak V je pravdiva pro kazde ´ ˇ ´ ´ˇ ˇı ˇ ´ ˇ ´ T ∈ M vysky prave n. ´ˇ ´ ˇ Pak V je pravdiva pro vsechny stromy z M. ´ ˇ • Strukturalnı indukce: indukce k vysce (syntaktickeho) stromu, kde M je mnozina vsech ´ ´ ´ˇ ´ ˇ ˇ syntaktickych stromu urc ´ danou abstraktnı syntaktickou rovnicı. ´ ˚ ˇena ´ ´ • Indukce k vysce odvozenı: indukce k vysce (dukazoveho) stromu, kde M je mnozina vsech ´ˇ ´ ´ˇ ˚ ´ ˇ ˇ dukazu daneho odvozovacıho systemu. ˚ ˚ ´ ´ ´
  • 37. 12 Abstraktnı syntaxe jazyka IMP ´ • Zakladnı syntakticke domeny ´ ´ ´ ´ Num = {0, 1, −1, 2, −2, . . .} Bool = {tt, ff} Var = {A, B, C, . . .}
  • 38. 12 Abstraktnı syntaxe jazyka IMP ´ • Zakladnı syntakticke domeny ´ ´ ´ ´ Num = {0, 1, −1, 2, −2, . . .} Bool = {tt, ff} Var = {A, B, C, . . .} • Aritmeticke vyrazy Aexp ´ ´ a ::= n | X | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num a X ∈ Var.
  • 39. 12 Abstraktnı syntaxe jazyka IMP ´ • Zakladnı syntakticke domeny ´ ´ ´ ´ Num = {0, 1, −1, 2, −2, . . .} Bool = {tt, ff} Var = {A, B, C, . . .} • Aritmeticke vyrazy Aexp ´ ´ a ::= n | X | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num a X ∈ Var. • Pravdivostnı vyrazy Bexp ´ ´ b ::= t | a0=a1 | a0≤a1 | not b | b0 and b1 | b0 or b1 kde t ∈ Bool a a0, a1 ∈ Aexp.
  • 40. 12 Abstraktnı syntaxe jazyka IMP ´ • Zakladnı syntakticke domeny ´ ´ ´ ´ Num = {0, 1, −1, 2, −2, . . .} Bool = {tt, ff} Var = {A, B, C, . . .} • Aritmeticke vyrazy Aexp ´ ´ a ::= n | X | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num a X ∈ Var. • Pravdivostnı vyrazy Bexp ´ ´ b ::= t | a0=a1 | a0≤a1 | not b | b0 and b1 | b0 or b1 kde t ∈ Bool a a0, a1 ∈ Aexp. • Pr´kazy Com ˇı c ::= skip | X := a | c0;c1 | if b then c0 else c1 | while b do c kde X ∈ Var, a ∈ Aexp a b ∈ Bexp.
  • 41. 13 Operac ´ semantika ˇnı ´ • Programum v danem jazyce je prirazen prechodovy system, ktery popisuje vypoc ´ procesy ˚ ´ ˇˇ ˇ ´ ´ ´ ´ ˇetnı jednotlivych programu. ´ ˚ • Prechodovy system: trojice (S, A, →), kde ˇ ´ ´ S je mnozina konfiguracı (ne nutne konec ´ !) ˇ ´ ˇ ˇna A je mnozina akcı ˇ ´ →⊆S×A×S je prechodova relace ˇ ´
  • 42. 13 Operac ´ semantika ˇnı ´ • Programum v danem jazyce je prirazen prechodovy system, ktery popisuje vypoc ´ procesy ˚ ´ ˇˇ ˇ ´ ´ ´ ´ ˇetnı jednotlivych programu. ´ ˚ • Prechodovy system: trojice (S, A, →), kde ˇ ´ ´ S je mnozina konfiguracı (ne nutne konec ´ !) ˇ ´ ˇ ˇna A je mnozina akcı ˇ ´ →⊆S×A×S je prechodova relace ˇ ´ • Jednotlive „typy“ operac ´ semantiky se lis´ definicı mnoziny konfiguracı a prechodove relace ´ ˇnı ´ ˇı ´ ˇ ´ ˇ ´ SMC stroj: Stack – Memory – Control stack λ-kalkul SOS: Strukturalnı Operac ´ Semantika ´ ´ ˇnı ´
  • 43. 14 SOS semantika IMP prvnıho typu („big step“) ´ ´ • Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ. ´ ˇ ˇ ˚ ˇı • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Σ, ˇ ´ mnozina akcı je Com, ˇ ´ c prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc ˇ ´ ´ ´ ´ ´ ˚ ´ ˇ ˇ ´ ˇet programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ . ´ ´ ˇı ˇ
  • 44. 14 SOS semantika IMP prvnıho typu („big step“) ´ ´ • Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ. ´ ˇ ˇ ˚ ˇı • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Σ, ˇ ´ mnozina akcı je Com, ˇ ´ c prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc ˇ ´ ´ ´ ´ ´ ˚ ´ ˇ ˇ ´ ˇet programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ . ´ ´ ˇı ˇ • Za tımto uc ´ ´ ˇelem definujeme odvozovacı systemy pro tri relace: ´ ´ ˇ →A ⊆ Aexp × Σ × Z; prvky zapisujeme ve tvaru a, σ →A n. →B ⊆ Bexp × Σ × T; prvky zapisujeme ve tvaru b, σ →B t. →C ⊆ Com × Σ × Σ; prvky zapisujeme ve tvaru c, σ →C σ . Indexy A, B, C budou obvykle vynechany. ´
  • 45. 14 SOS semantika IMP prvnıho typu („big step“) ´ ´ • Stav je zobrazenı σ : Var → Z, mnozina vsech stavu se znac´ Σ. ´ ˇ ˇ ˚ ˇı • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Σ, ˇ ´ mnozina akcı je Com, ˇ ´ c prechodova relace odpovıda „vyslednemu efektu“ programu, tj. σ → σ prave kdyz vypoc ˇ ´ ´ ´ ´ ´ ˚ ´ ˇ ˇ ´ ˇet programu c zahajeny ve stavu σ skonc´ a prejde do stavu σ . ´ ´ ˇı ˇ • Za tımto uc ´ ´ ˇelem definujeme odvozovacı systemy pro tri relace: ´ ´ ˇ →A ⊆ Aexp × Σ × Z; prvky zapisujeme ve tvaru a, σ →A n. →B ⊆ Bexp × Σ × T; prvky zapisujeme ve tvaru b, σ →B t. →C ⊆ Com × Σ × Σ; prvky zapisujeme ve tvaru c, σ →C σ . Indexy A, B, C budou obvykle vynechany. ´ c • Pak jiz lze definovat: σ → σ ˇ ⇐⇒ c, σ → σ
  • 46. 15 Aritmeticke vyrazy Aexp ´ ´ a, σ → n „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“ ´ ´ ´
  • 47. 15 Aritmeticke vyrazy Aexp ´ ´ a, σ → n „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“ ´ ´ ´ • n, σ → n
  • 48. 15 Aritmeticke vyrazy Aexp ´ ´ a, σ → n „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“ ´ ´ ´ • n, σ → n • X, σ → σ(X)
  • 49. 15 Aritmeticke vyrazy Aexp ´ ´ a, σ → n „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“ ´ ´ ´ • n, σ → n • X, σ → σ(X) a0 , σ → n 0 a1 , σ → n 1 • n = n0 + n1 a0 + a1 , σ → n
  • 50. 15 Aritmeticke vyrazy Aexp ´ ´ a, σ → n „aritmeticky vyraz a se ve stavu σ vyhodnotı na n ∈ Z“ ´ ´ ´ • n, σ → n • X, σ → σ(X) a0 , σ → n 0 a1 , σ → n 1 • n = n0 + n1 a0 + a1 , σ → n a0 , σ → n 0 a1 , σ → n 1 • n = n0 − n1 a0 − a1 , σ → n a0 , σ → n 0 a1 , σ → n 1 • n = n0 ∗ n1 a0 ∗ a1 , σ → n
  • 51. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´
  • 52. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ • tt, σ → true • ff, σ → false
  • 53. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ • tt, σ → true • ff, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → false
  • 54. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ • tt, σ → true • ff, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0≤n1 a0 ≤ a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0>n1 a0 ≤ a1, σ → false
  • 55. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ b, σ → false • tt, σ → true • not b, σ → true • ff, σ → false b, σ → true • not b, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0≤n1 a0 ≤ a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0>n1 a0 ≤ a1, σ → false
  • 56. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ b, σ → false • tt, σ → true • not b, σ → true • ff, σ → false b, σ → true • not b, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → true b0, σ → t0 b1, σ → t1 • t0=true ∧ t1=true b0 and b1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → false b0, σ → t0 b1, σ → t1 • t0=false ∨ t1=false b0 and b1, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0≤n1 a0 ≤ a1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0>n1 a0 ≤ a1, σ → false
  • 57. 16 Pravdivostnı vyrazy Bexp ´ ´ b, σ → t „pravdivostnı vyraz b se ve stavu σ vyhodnotı na t ∈ T“ ´ ´ ´ b, σ → false • tt, σ → true • not b, σ → true • ff, σ → false b, σ → true • not b, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → true b0, σ → t0 b1, σ → t1 • t0=true ∧ t1=true b0 and b1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0=n1 a0 = a1, σ → false b0, σ → t0 b1, σ → t1 • t0=false ∨ t1=false b0 and b1, σ → false a0 , σ → n 0 a1 , σ → n 1 • n0≤n1 a0 ≤ a1, σ → true b0, σ → t0 b1, σ → t1 • t0=true ∨ t1=true b0 or b1, σ → true a0 , σ → n 0 a1 , σ → n 1 • n0>n1 a0 ≤ a1, σ → false b0, σ → t0 b1, σ → t1 • t0=false ∧ t1=false b0 or b1, σ → false
  • 58. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı
  • 59. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı • skip, σ → σ
  • 60. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı • skip, σ → σ a, σ → n • X := a, σ → σ[n/X]
  • 61. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı • skip, σ → σ a, σ → n • X := a, σ → σ[n/X] c0, σ → σ c1, σ → σ • c0; c1, σ → σ
  • 62. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı • skip, σ → σ a, σ → n • X := a, σ → σ[n/X] c0, σ → σ c1, σ → σ • c0; c1, σ → σ b, σ → true c0, σ → σ b, σ → false c1, σ → σ • if b then c0 else c1, σ → σ if b then c0 else c1, σ → σ
  • 63. 17 Pr´kazy Com ˇı c, σ → σ „pr´kaz c aktivovany ve stavu σ skonc´ ve stavu σ “ ˇı ´ ˇı • skip, σ → σ a, σ → n • X := a, σ → σ[n/X] c0, σ → σ c1, σ → σ • c0; c1, σ → σ b, σ → true c0, σ → σ b, σ → false c1, σ → σ • if b then c0 else c1, σ → σ if b then c0 else c1, σ → σ b, σ → false b, σ → true c, σ → σ while b do c, σ →σ • while b do c, σ → σ while b do c, σ → σ
  • 64. 18 Pr´klad dukazoveho stromu v SOS semantice 1. typu ˇı ˚ ´ ´ Uvazme program while A ≤ 2 do A := A + C ˇ
  • 65. 18 Pr´klad dukazoveho stromu v SOS semantice 1. typu ˇı ˚ ´ ´ Uvazme program while A ≤ 2 do A := A + C ˇ • Stav σ je definovan takto: σ(A) = 1, σ(C) = 2, a pro A = B = C je σ(B) = 10. Pak ´ while A ≤ 2 do A := A + C, σ → σ[3/A], nebot’ A, σ → 1 C, σ → 2 A, σ[3/A] → 3 2, σ[3/A] → 2 A, σ → 1 2, σ → 2 A + C, σ → 3 A ≤ 2, σ[3/A] → false A ≤ 2, σ → true A := A + C, σ → σ[3/A] while A ≤ 2 do A := A + C, σ[3/A] → σ[3/A] while A ≤ 2 do A := A + C, σ → σ[3/A]
  • 66. 18 Pr´klad dukazoveho stromu v SOS semantice 1. typu ˇı ˚ ´ ´ Uvazme program while A ≤ 2 do A := A + C ˇ • Stav σ je definovan takto: σ(A) = 1, σ(C) = 2, a pro A = B = C je σ(B) = 10. Pak ´ while A ≤ 2 do A := A + C, σ → σ[3/A], nebot’ A, σ → 1 C, σ → 2 A, σ[3/A] → 3 2, σ[3/A] → 2 A, σ → 1 2, σ → 2 A + C, σ → 3 A ≤ 2, σ[3/A] → false A ≤ 2, σ → true A := A + C, σ → σ[3/A] while A ≤ 2 do A := A + C, σ[3/A] → σ[3/A] while A ≤ 2 do A := A + C, σ → σ[3/A] • Stav σ = σ[0/C]. Dukazovy strom s korenem tvaru while A ≤ 2 do A := A + C, σ ˚ ´ ˇ → σ sestrojit nelze (pro zadne σ ). ˇ´ ´
  • 67. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ
  • 68. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ . ˚ ´ ˇ ´ ´ˇ ´
  • 69. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ . ˚ ´ ˇ ´ ´ˇ ´ ad 1. • a ≡ n. Pak n, σ → n dle definice.
  • 70. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ . ˚ ´ ˇ ´ ´ˇ ´ ad 1. • a ≡ n. Pak n, σ → n dle definice. • a ≡ X. Pak X, σ → σ(X) dle definice.
  • 71. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ . ˚ ´ ˇ ´ ´ˇ ´ ad 1. • a ≡ n. Pak n, σ → n dle definice. • a ≡ X. Pak X, σ → σ(X) dle definice. • a ≡ a0 + a1. Podle indukc ´ho predpokladu existuje prave jedno n0 takove, ze a0, σ → n0, ˇnı ˇ ˇ ´ ˇ a prave jedno n1 takove, ze a1, σ → n1. Proto a0 + a1, σ → n, kde n = n0 + n1. ´ ˇ ´ ˇ
  • 72. 19 SOS semantika prvnıho typu je deterministicka ´ ´ ´ Veta 1. ˇ 1. Pro kazde a ∈ Aexp a σ ∈ Σ existuje prave jedno n ∈ Z takove, ze a, σ → n. ˇ ´ ´ ˇ ´ ˇ 2. Pro kazde b ∈ Bexp a σ ∈ Σ existuje prave jedno t ∈ T takove, ze b, σ → t. ˇ ´ ´ ˇ ´ ˇ 3. Pro kazde c ∈ Com a σ ∈ Σ existuje nejvyse jedno σ ∈ Σ takove, ze c, σ → σ . ˇ ´ ´ˇ ´ ˇ Dukaz. 1. a 2. indukcı ke strukture a a b, 3. indukcı k vysce odvozenı c, σ → σ . ˚ ´ ˇ ´ ´ˇ ´ ad 1. • a ≡ n. Pak n, σ → n dle definice. • a ≡ X. Pak X, σ → σ(X) dle definice. • a ≡ a0 + a1. Podle indukc ´ho predpokladu existuje prave jedno n0 takove, ze a0, σ → n0, ˇnı ˇ ˇ ´ ˇ a prave jedno n1 takove, ze a1, σ → n1. Proto a0 + a1, σ → n, kde n = n0 + n1. ´ ˇ ´ ˇ • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ
  • 73. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne
  • 74. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´
  • 75. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´ • skip, σ → σ.
  • 76. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´ • skip, σ → σ. • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. existuje prave jedno takove n, proto σ je urc ˇ´ ˇ ´ ˇeno jednoznac ˇ . ˇne
  • 77. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´ • skip, σ → σ. • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. existuje prave jedno takove n, proto σ je urc ˇ´ ˇ ´ ˇeno jednoznac ˇ . ˇne • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle indukc ´ho predpokladu je σ i σ urc ˇnı ˇ ˇeno jednoznac ˇ . ˇne
  • 78. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´ • skip, σ → σ. • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. existuje prave jedno takove n, proto σ je urc ˇ´ ˇ ´ ˇeno jednoznac ˇ . ˇne • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle indukc ´ho predpokladu je σ i σ urc ˇnı ˇ ˇeno jednoznac ˇ . ˇne • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . Podle 2. nastava prave jedna z techto ´ ´ ´ ˇ ˇ moznostı, proto je σ urc ˇ ´ ˇeno jednoznac ˇ . ˇne
  • 79. 20 ad 3. Indukcı k vysce odvozenı ukazeme, ze pokud pro dane c a σ existuje (nejake) σ takove, ´ ´ˇ ´ ´ˇ ˇ ´ ˇ ´ ´ ze c, σ → σ , je toto σ urc ˇ ˇeno jednoznac ˇ . ˇne Necht’ c, σ → σ je koren dukazoveho stromu vysky n ∈ N0. Uvaz´me mozne tvary c. ˇ ˚ ´ ´ˇ ´ ˇı ˇ ´ • skip, σ → σ. • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. existuje prave jedno takove n, proto σ je urc ˇ´ ˇ ´ ˇeno jednoznac ˇ . ˇne • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle indukc ´ho predpokladu je σ i σ urc ˇnı ˇ ˇeno jednoznac ˇ . ˇne • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . Podle 2. nastava prave jedna z techto ´ ´ ´ ˇ ˇ moznostı, proto je σ urc ˇ ´ ˇeno jednoznac ˇ . ˇne • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka b, σ → false ˇ ´ ´ ´ ´ a σ = σ, nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Podle ˇ ´ ´ 2. nastava prave jedna z techto moznostı. V prvnım pr´pade jsme hotovi ihned; v druhem ´ ´ ´ ˇ ˇ ˇ ´ ´ ˇı ˇ ´ pouzijeme indukc ´ predpoklad podle nehoz je σ a σ urc ˇ ˇnı ˇ ˇ ˇ ˇeno jednoznac ˇ . ˇne
  • 80. 21 Semanticka ekvivalence vyrazu a pr´kazu (I) ´ ´ ´ ˚ ˇı ˚ • Aritmeticke vyrazy Aexp ´ ´ def a0 ∼ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ → n ⇐⇒ a1, σ → n)
  • 81. 21 Semanticka ekvivalence vyrazu a pr´kazu (I) ´ ´ ´ ˚ ˇı ˚ • Aritmeticke vyrazy Aexp ´ ´ def a0 ∼ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ → n ⇐⇒ a1, σ → n) • Pravdivostnı vyrazy Bexp ´ ´ def b0 ∼ b1 ⇐⇒ (∀t ∈ T ∀σ ∈ Σ : b0, σ → t ⇐⇒ b1, σ → t)
  • 82. 21 Semanticka ekvivalence vyrazu a pr´kazu (I) ´ ´ ´ ˚ ˇı ˚ • Aritmeticke vyrazy Aexp ´ ´ def a0 ∼ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ → n ⇐⇒ a1, σ → n) • Pravdivostnı vyrazy Bexp ´ ´ def b0 ∼ b1 ⇐⇒ (∀t ∈ T ∀σ ∈ Σ : b0, σ → t ⇐⇒ b1, σ → t) • Pr´kazy Com ˇı def c0 ∼ c1 ⇐⇒ (∀σ, σ ∈ Σ : c0, σ → σ ⇐⇒ c1, σ → σ )
  • 83. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip
  • 84. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ
  • 85. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ Jsou dve moznosti: ˇ ˇ ... b, σ → false . while b do c, σ → σ
  • 86. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ Jsou dve moznosti: ˇ ˇ ... ... b, σ → false b, σ → false skip, σ → σ . Pak ale take ´ while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ
  • 87. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ Jsou dve moznosti: ˇ ˇ ... ... b, σ → false b, σ → false skip, σ → σ . Pak ale take ´ while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ ... ... ... b, σ → true c, σ → σ while b do c, σ →σ . while b do c, σ → σ
  • 88. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ Jsou dve moznosti: ˇ ˇ ... ... b, σ → false b, σ → false skip, σ → σ . Pak ale take ´ while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ ... ... ... b, σ → true c, σ → σ while b do c, σ →σ . Pak ale take ´ while b do c, σ → σ ... ... ... c, σ → σ while b do c, σ →σ b, σ → true c; while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ
  • 89. 22 Pr´klad ekvivaletnıch programu ˇı ´ ˚ Dokazeme, ze ´ˇ ˇ while b do c ∼ if b then (c; while b do c) else skip • while b do c, σ → σ ⇒ if b then (c; while b do c) else skip, σ → σ Jsou dve moznosti: ˇ ˇ ... ... b, σ → false b, σ → false skip, σ → σ . Pak ale take ´ while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ ... ... ... b, σ → true c, σ → σ while b do c, σ →σ . Pak ale take ´ while b do c, σ → σ ... ... ... c, σ → σ while b do c, σ →σ b, σ → true c; while b do c, σ → σ if b then (c; while b do c) else skip, σ → σ • Opac ´ implikace se ukaze podobne. ˇna ´ˇ ˇ
  • 90. 23 Operac ´ semantika IMP druheho typu („small step“) ˇnı ´ ´ • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Com × Σ, ˇ ´ mnozina akcı je {τ}, ˇ ´ τ ˇ ´ ´ ´ ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz prechodova relace odpovıda „kroku vypoc ˚ ´ ˇ ˇ program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale ˇ ´ ´ ´ ´ provadı program c . ´ ´
  • 91. 23 Operac ´ semantika IMP druheho typu („small step“) ˇnı ´ ´ • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Com × Σ, ˇ ´ mnozina akcı je {τ}, ˇ ´ τ ˇ ´ ´ ´ ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz prechodova relace odpovıda „kroku vypoc ˚ ´ ˇ ˇ program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale ˇ ´ ´ ´ ´ provadı program c . ´ ´ • Definujeme odvozovacı systemy pro tri relace: ´ ´ ˇ →A ⊆ (Aexp × Σ) × (Aexp × Σ); prvky zapisujeme ve tvaru a, σ →A a , σ . →B ⊆ (Bexp × Σ) × (Bexp × Σ); prvky zapisujeme ve tvaru b, σ →B b , σ . →C ⊆ (Com × Σ) × (Com × Σ); prvky zapisujeme ve tvaru c, σ →C c , σ . Indexy A, B, C budou obvykle vynechany. ´
  • 92. 23 Operac ´ semantika IMP druheho typu („small step“) ˇnı ´ ´ • Cılem je definovat prechodovy system, kde ´ ˇ ´ ´ mnozina konfiguracı je Com × Σ, ˇ ´ mnozina akcı je {τ}, ˇ ´ τ ˇ ´ ´ ´ ´ ˇtu“ programu, tj. c, σ → c , σ prave kdyz prechodova relace odpovıda „kroku vypoc ˚ ´ ˇ ˇ program c prejde ze stavu σ vykonanım jedne instrukce do stavu σ a z tohoto stavu se dale ˇ ´ ´ ´ ´ provadı program c . ´ ´ • Definujeme odvozovacı systemy pro tri relace: ´ ´ ˇ →A ⊆ (Aexp × Σ) × (Aexp × Σ); prvky zapisujeme ve tvaru a, σ →A a , σ . →B ⊆ (Bexp × Σ) × (Bexp × Σ); prvky zapisujeme ve tvaru b, σ →B b , σ . →C ⊆ (Com × Σ) × (Com × Σ); prvky zapisujeme ve tvaru c, σ →C c , σ . Indexy A, B, C budou obvykle vynechany. ´ τ • Pak jiz lze definovat: ˇ c, σ → c , σ ⇐⇒ c, σ →C c , σ
  • 93. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna
  • 94. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ
  • 95. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1
  • 96. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1 a0 , σ → a0 , σ • a0 + a1 , σ → a0 + a1 , σ
  • 97. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1 a0 , σ → a0 , σ • a0 + a1 , σ → a0 + a1 , σ a1 , σ → a1 , σ • n + a1 , σ → n + a1 , σ
  • 98. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1 a0 , σ → a0 , σ • a0 + a1 , σ → a0 + a1 , σ a1 , σ → a1 , σ • n + a1 , σ → n + a1 , σ • podobne pro „−“ a „∗“ ˇ
  • 99. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1 a0 , σ → a0 , σ • a0 + a1 , σ → a0 + a1 , σ a1 , σ → a1 , σ • n + a1 , σ → n + a1 , σ • podobne pro „−“ a „∗“ ˇ Pr´klad: ˇı • Necht’ σ(X) = 1, σ(Y) = 2
  • 100. 24 Aritmeticke vyrazy Aexp ´ ´ • n, σ – konec ´ konfigurace ˇna • X, σ → σ(X), σ • n0 + n1, σ → m, σ , kde m = n0 + n1 a0 , σ → a0 , σ • a0 + a1 , σ → a0 + a1 , σ a1 , σ → a1 , σ • n + a1 , σ → n + a1 , σ • podobne pro „−“ a „∗“ ˇ Pr´klad: ˇı • Necht’ σ(X) = 1, σ(Y) = 2 • (X + 3) ∗ Y, σ → (1 + 3) ∗ Y, σ → 4 ∗ Y, σ → 4 ∗ 2, σ → 8, σ
  • 101. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • ff, σ – konec ´ konfigurace ˇna
  • 102. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • ff, σ – konec ´ konfigurace ˇna • n0=n1, σ → tt, σ , je-li n0=n1 • n0=n1, σ → ff, σ , je-li n0=n1 a0 , σ → a0 , σ • a0 = a1 , σ → a0 = a1 , σ a1 , σ → a1 , σ • n = a1 , σ → n = a1 , σ
  • 103. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • ff, σ – konec ´ konfigurace ˇna • n0=n1, σ → tt, σ , je-li n0=n1 • n0=n1, σ → ff, σ , je-li n0=n1 a0 , σ → a0 , σ • a0 = a1 , σ → a0 = a1 , σ a1 , σ → a1 , σ • n = a1 , σ → n = a1 , σ • podobne pro „≤“ ˇ
  • 104. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • not tt, σ → ff, σ , not ff, σ → tt, σ b, σ → b , σ • ff, σ – konec ´ konfigurace ˇna • not b, σ → not b , σ • n0=n1, σ → tt, σ , je-li n0=n1 • n0=n1, σ → ff, σ , je-li n0=n1 a0 , σ → a0 , σ • a0 = a1 , σ → a0 = a1 , σ a1 , σ → a1 , σ • n = a1 , σ → n = a1 , σ • podobne pro „≤“ ˇ
  • 105. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • not tt, σ → ff, σ , not ff, σ → tt, σ b, σ → b , σ • ff, σ – konec ´ konfigurace ˇna • not b, σ → not b , σ • n0=n1, σ → tt, σ , je-li n0=n1 • t1 and t2, σ → tt, σ je-li t1=tt a t2=tt • n0=n1, σ → ff, σ , je-li n0=n1 • t1 and t2, σ → ff, σ je-li t1=ff nebo t2=ff a0 , σ → a0 , σ b0, σ → b0, σ • • a0 = a1 , σ → a0 = a1 , σ b0 and b1, σ → b0 and b1, σ a1 , σ → a1 , σ b1, σ → b1, σ • • t ∈ {tt, ff} n = a1 , σ → n = a1 , σ t and b1, σ → t and b1, σ • podobne pro „≤“ ˇ
  • 106. 25 Pravdivostnı vyrazy Bexp ´ ´ • tt, σ – konec ´ konfigurace ˇna • not tt, σ → ff, σ , not ff, σ → tt, σ b, σ → b , σ • ff, σ – konec ´ konfigurace ˇna • not b, σ → not b , σ • n0=n1, σ → tt, σ , je-li n0=n1 • t1 and t2, σ → tt, σ je-li t1=tt a t2=tt • n0=n1, σ → ff, σ , je-li n0=n1 • t1 and t2, σ → ff, σ je-li t1=ff nebo t2=ff a0 , σ → a0 , σ b0, σ → b0, σ • • a0 = a1 , σ → a0 = a1 , σ b0 and b1, σ → b0 and b1, σ a1 , σ → a1 , σ b1, σ → b1, σ • • t ∈ {tt, ff} n = a1 , σ → n = a1 , σ t and b1, σ → t and b1, σ • podobne pro „≤“ ˇ • podobne pro „or“ ˇ
  • 107. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna
  • 108. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna a, σ → a , σ • X := n, σ → skip, σ[n/X] X := a, σ → X := a , σ
  • 109. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna a, σ → a , σ • X := n, σ → skip, σ[n/X] X := a, σ → X := a , σ c0, σ → c0, σ • skip; c, σ → c, σ c0; c1, σ → c0; c1, σ
  • 110. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna a, σ → a , σ • X := n, σ → skip, σ[n/X] X := a, σ → X := a , σ c0, σ → c0, σ • skip; c, σ → c, σ c0; c1, σ → c0; c1, σ • if tt then c0 else c1, σ → c0, σ if ff then c0 else c1, σ → c1, σ
  • 111. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna a, σ → a , σ • X := n, σ → skip, σ[n/X] X := a, σ → X := a , σ c0, σ → c0, σ • skip; c, σ → c, σ c0; c1, σ → c0; c1, σ • if tt then c0 else c1, σ → c0, σ if ff then c0 else c1, σ → c1, σ b, σ → b , σ • if b then c0 else c1, σ → if b then c0 else c1, σ
  • 112. 26 Pr´kazy Com ˇı • skip, σ – konec ´ konfigurace ˇna a, σ → a , σ • X := n, σ → skip, σ[n/X] X := a, σ → X := a , σ c0, σ → c0, σ • skip; c, σ → c, σ c0; c1, σ → c0; c1, σ • if tt then c0 else c1, σ → c0, σ if ff then c0 else c1, σ → c1, σ b, σ → b , σ • if b then c0 else c1, σ → if b then c0 else c1, σ • while b do c, σ → if b then (c; while b do c) else skip, σ
  • 113. 27 Semanticka ekvivalence vyrazu a pr´kazu (II) ´ ´ ´ ˚ ˇı ˚ • Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ): ˇ ´ ˇ →0 = idCom×Σ →i+1 = →i ◦ →
  • 114. 27 Semanticka ekvivalence vyrazu a pr´kazu (II) ´ ´ ´ ˚ ˇı ˚ • Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ): ˇ ´ ˇ →0 = idCom×Σ →i+1 = →i ◦ → S∞ • Dale definujeme →∗= ´ k=0 →k
  • 115. 27 Semanticka ekvivalence vyrazu a pr´kazu (II) ´ ´ ´ ˚ ˇı ˚ • Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ): ˇ ´ ˇ →0 = idCom×Σ →i+1 = →i ◦ → S∞ • Dale definujeme →∗= ´ k=0 →k • Aritmeticke vyrazy Aexp ´ ´ def a0 ≈ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ →∗ n, σ ⇐⇒ a1, σ →∗ n, σ )
  • 116. 27 Semanticka ekvivalence vyrazu a pr´kazu (II) ´ ´ ´ ˚ ˇı ˚ • Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ): ˇ ´ ˇ →0 = idCom×Σ →i+1 = →i ◦ → S∞ • Dale definujeme →∗= ´ k=0 →k • Aritmeticke vyrazy Aexp ´ ´ def a0 ≈ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ →∗ n, σ ⇐⇒ a1, σ →∗ n, σ ) • Pravdivostnı vyrazy Bexp ´ ´ def b0 ≈ b1 ⇐⇒ (∀t ∈ T ∀σ ∈ Σ : b0, σ →∗ t, σ ⇐⇒ b1, σ →∗ t, σ )
  • 117. 27 Semanticka ekvivalence vyrazu a pr´kazu (II) ´ ´ ´ ˚ ˇı ˚ • Pro kazde k ∈ N0 definujeme (induktivne) relaci →k ⊆ (Com × Σ) × (Com × Σ): ˇ ´ ˇ →0 = idCom×Σ →i+1 = →i ◦ → S∞ • Dale definujeme →∗= ´ k=0 →k • Aritmeticke vyrazy Aexp ´ ´ def a0 ≈ a1 ⇐⇒ (∀n ∈ Z ∀σ ∈ Σ : a0, σ →∗ n, σ ⇐⇒ a1, σ →∗ n, σ ) • Pravdivostnı vyrazy Bexp ´ ´ def b0 ≈ b1 ⇐⇒ (∀t ∈ T ∀σ ∈ Σ : b0, σ →∗ t, σ ⇐⇒ b1, σ →∗ t, σ ) • Pr´kazy Com ˇı def c0 ≈ c1 ⇐⇒ (∀σ, σ ∈ Σ : c0, σ →∗ skip, σ ⇐⇒ c1, σ →∗ skip, σ )
  • 118. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}.
  • 119. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ
  • 120. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ
  • 121. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ
  • 122. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´
  • 123. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ
  • 124. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒
  • 125. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒ a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ (podle I.P.) ⇒
  • 126. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒ a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ (podle I.P.) ⇒ a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒
  • 127. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒ a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ (podle I.P.) ⇒ a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒ a0 + a1, σ →k+1 a0 + a1, σ
  • 128. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒ a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ (podle I.P.) ⇒ a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒ a0 + a1, σ →k+1 a0 + a1, σ ad 2.,3.,4. Podobne. ˇ
  • 129. 28 Ekvivalence SOS semantik 1. a 2. typu ´ Lema 2. 1. Jestlize a, σ →k a , σ , pak a ˇ a1, σ →k a a1 , σ a n a, σ →k n a , σ pro kazde ˇ ´ ∈ {+, −, ∗}. 2. Jestlize a, σ →k a , σ , pak X := a, σ →k X := a , σ ˇ 3. Jestlize c, σ →k c , σ , pak c; c1, σ →k c ; c1, σ . ˇ 4. Jestlize b, σ →k b , σ , pak if b then c0 else c1, σ →k if b then c0 else c1, σ ˇ Dukaz. Indukcı ke k. ˚ ´ ad 1., prvnı implikace. ´ • Baze (k = 0): a0, σ →0 a0, σ ´ ⇐⇒ a0 = a0 ⇐⇒ a 0 + a 1 , σ →0 a 0 + a 1 , σ • Indukc ´ krok: ˇnı a0, σ →k+1 a0, σ ⇒ a 0 , σ → a 0 , σ a a 0 , σ →k a 0 , σ ⇒ a 0 , σ → a 0 , σ a a 0 + a 1 , σ →k a 0 + a 1 , σ (podle I.P.) ⇒ a0 + a1, σ → a0 + a1, σ a a0 + a1, σ →k a0 + a1, σ ⇒ a0 + a1, σ →k+1 a0 + a1, σ ad 2.,3.,4. Podobne. ˇ
  • 130. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ .
  • 131. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ .
  • 132. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ . 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ ˇ → c1, σ →m skip, σ , kde l, m < k a c0, σ →l skip, σ .
  • 133. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ . 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ ˇ → c1, σ →m skip, σ , kde l, m < k a c0, σ →l skip, σ . 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı: ˇ ´ ´ ´ ´ ˇ ´ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ .
  • 134. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ . 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ ˇ → c1, σ →m skip, σ , kde l, m < k a c0, σ →l skip, σ . 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı: ˇ ´ ´ ´ ´ ˇ ´ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ . Dukaz. Indukcı ke k. ˚ ´
  • 135. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ . 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ ˇ → c1, σ →m skip, σ , kde l, m < k a c0, σ →l skip, σ . 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı: ˇ ´ ´ ´ ´ ˇ ´ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ . Dukaz. Indukcı ke k. ˚ ´ ad 1. Baze indukce (k = 0) ´ • Jelikoz a0 ˇ a1, σ →0 n, σ , implikace platı. ´
  • 136. 29 Lema 3. 1. Jestlize a0 ˇ a1, σ →k n, σ kde ∈ {+, −, ∗}, pak a0 a 1 , σ →l n 0 a 1 , σ →m n0 n1, σ → n, σ , kde n = n0 n1, a0, σ →l n0, σ a a1, σ →m n1, σ . 2. Jestlize X := a, σ →k skip, σ , pak X := a, σ →k−1 X := n, σ → skip, σ[n/X] , kde ˇ σ = σ[n/X] a a, σ →k−1 n, σ . 3. Jestlize c0; c1, σ →k skip, σ , pak c0; c1, σ →l skip; c1, σ ˇ → c1, σ →m skip, σ , kde l, m < k a c0, σ →l skip, σ . 4. Jestlize if b then c0 else c1, σ →k skip, σ , pak platı jedna z nasledujıcıch moznostı: ˇ ´ ´ ´ ´ ˇ ´ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . if b then c0 else c1, σ →l if ff then c0 else c1, σ → c1, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ . Dukaz. Indukcı ke k. ˚ ´ ad 1. Baze indukce (k = 0) ´ • Jelikoz a0 ˇ a1, σ →0 n, σ , implikace platı. ´ Indukc ´ krok: ˇnı
  • 137. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ .
  • 138. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ
  • 139. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ
  • 140. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ
  • 141. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ 2. Pro kazde b a σ platı: ˇ ´ ´ • b, σ → true ⇐⇒ b, σ →∗ tt, σ • b, σ → false ⇐⇒ b, σ →∗ ff, σ
  • 142. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ 2. Pro kazde b a σ platı: ˇ ´ ´ • b, σ → true ⇐⇒ b, σ →∗ tt, σ • b, σ → false ⇐⇒ b, σ →∗ ff, σ 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ c, σ →∗ skip, σ
  • 143. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ 2. Pro kazde b a σ platı: ˇ ´ ´ • b, σ → true ⇐⇒ b, σ →∗ tt, σ • b, σ → false ⇐⇒ b, σ →∗ ff, σ 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ c, σ →∗ skip, σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ
  • 144. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ 2. Pro kazde b a σ platı: ˇ ´ ´ • b, σ → true ⇐⇒ b, σ →∗ tt, σ • b, σ → false ⇐⇒ b, σ →∗ ff, σ 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ c, σ →∗ skip, σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 1. • a ≡ n. Pak n, σ → n a n, σ →0 n, σ dle definice. • a ≡ X. Pak X, σ → σ(X) a X, σ → σ(X), σ dle definice.
  • 145. 30 k−1 • Jestlize a0 ∈ Num, pak a0 ˇ a1 , σ → a0 a1 , σ → n, σ , kde a0, σ → a0, σ . l m Podle I.P. platı a0 ´ a1 , σ → n 0 a1 , σ → n0 n1, σ → n, σ , kde l, m < k − 1, l m a0 , σ → n 0 , σ a a1 , σ → n1, σ . Proto take a0 ´ a1, σ →l+1 n0 a 1 , σ →m n0 n1, σ → n, σ , kde l + 1, m < k a a0, σ →l+1 n0, σ . • Jestlize a0 ≡ n0 a a1 ∈ Num, pak n0 a1, σ → n0 a1, σ →k−1 n, σ , kde a1, σ → ˇ a1, σ . Podle I.P. platı n0 a1, σ →l n0 a1, σ →m n0 n1, σ → n, σ , kde l, m < k−1 ´ (v tomto pr´pade l = 0) a a1, σ →m n1, σ . Zbytek dukazu je podobny jako vyse. ˇı ˇ ˚ ´ ´ˇ • Jestlize a0 ≡ n0 a a1 ≡ n1, stac´ polozit l = m = 0. ˇ ˇı ˇ Veta 4. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ a, σ →∗ n, σ 2. Pro kazde b a σ platı: ˇ ´ ´ • b, σ → true ⇐⇒ b, σ →∗ tt, σ • b, σ → false ⇐⇒ b, σ →∗ ff, σ 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ c, σ →∗ skip, σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 1. • a ≡ n. Pak n, σ → n a n, σ →0 n, σ dle definice. • a ≡ X. Pak X, σ → σ(X) a X, σ → σ(X), σ dle definice.
  • 146. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ
  • 147. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒
  • 148. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒
  • 149. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒
  • 150. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒
  • 151. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1))
  • 152. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1)) • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ
  • 153. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1)) • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ ad 3. (⇒) Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´
  • 154. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1)) • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ ad 3. (⇒) Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı skip, σ →0 skip, σ ´
  • 155. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1)) • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ ad 3. (⇒) Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı skip, σ →0 skip, σ ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ ∗ ∗ ∗ Podle 1. a, σ → n, σ , proto X := a, σ → X := n, σ → skip, σ[n/X] podle lematu 2 (2).
  • 156. 31 • a ≡ a0 + a1. Podle I.P. platı ´ a0 , σ → n 0 ⇐⇒ a 0 , σ →∗ n 0 , σ a1 , σ → n 1 ⇐⇒ a 1 , σ →∗ n 1 , σ Dale ´ a0 + a1, σ → n ⇐⇒ a0, σ → n0 a a1, σ → n1 kde n = n0 + n1 ⇐⇒ a0, σ →∗ n0, σ a a1, σ →∗ n1, σ kde n = n0 + n1 (podle I.P.) ⇐⇒ a0 + a1, σ →∗ n0 + a1 →∗ n0 + n1, σ → n, σ kde n = n0 + n1 (lema 2 (1)) ⇐⇒ a0 + a1, σ →∗ n, σ (podle lematu 3 (1)) • a ≡ a0 − a1. Podobne. ˇ • a ≡ a0 ∗ a1. Podobne. ˇ ad 3. (⇒) Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı skip, σ →0 skip, σ ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ ∗ ∗ ∗ Podle 1. a, σ → n, σ , proto X := a, σ → X := n, σ → skip, σ[n/X] podle lematu 2 (2).
  • 157. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ .
  • 158. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ
  • 159. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka ˇ ´ ´ ´ ´ b, σ → false a σ = σ, nebo tri naslednıky b, σ ˇ ´ ´ → true, c, σ → σ a while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ → ´ ˇı ˇ if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ → skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ ´ ˇı ˇ ∗ a while b do c, σ → skip, σ podle 2. a I.P. Proto take while b do c, σ → ´ if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ → c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2.
  • 160. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka ˇ ´ ´ ´ ´ b, σ → false a σ = σ, nebo tri naslednıky b, σ ˇ ´ ´ → true, c, σ → σ a while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ → ´ ˇı ˇ if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ → skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ ´ ˇı ˇ ∗ a while b do c, σ → skip, σ podle 2. a I.P. Proto take while b do c, σ → ´ if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ → c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2. (⇐) Indukcı ke k pro ktere c, σ →k skip, σ . ´ ´
  • 161. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka ˇ ´ ´ ´ ´ b, σ → false a σ = σ, nebo tri naslednıky b, σ ˇ ´ ´ → true, c, σ → σ a while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ → ´ ˇı ˇ if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ → skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ ´ ˇı ˇ ∗ a while b do c, σ → skip, σ podle 2. a I.P. Proto take while b do c, σ → ´ if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ → c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2. (⇐) Indukcı ke k pro ktere c, σ →k skip, σ . ´ ´ Baze indukce: ´ • skip, σ →0 skip, σ . Platı skip, σ → σ. ´
  • 162. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka ˇ ´ ´ ´ ´ b, σ → false a σ = σ, nebo tri naslednıky b, σ ˇ ´ ´ → true, c, σ → σ a while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ → ´ ˇı ˇ if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ → skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ ´ ˇı ˇ ∗ a while b do c, σ → skip, σ podle 2. a I.P. Proto take while b do c, σ → ´ if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ → c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2. (⇐) Indukcı ke k pro ktere c, σ →k skip, σ . ´ ´ Baze indukce: ´ • skip, σ →0 skip, σ . Platı skip, σ → σ. ´ Indukc ´ krok: Necht’ c, σ →k skip, σ ˇnı kde k ≥ 1. Uvaz´me mozne tvary c. ´ ˇı ˇ ´
  • 163. 32 • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ → σ . Podle ˇ ´ ´ ´ indukc ´ho predpokladu c0, σ → skip, σ a c1, σ →∗ skip, σ . Podle lematu 2 (3) platı ˇnı ˇ ∗ ´ c0; c1, σ →∗ skip; c1, σ → c1, σ →∗ skip, σ . • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade b, σ →∗ tt, σ a ´ ˇı ˇ c0, σ →∗ skip, σ (podle I.P. a 2.), tedy if b then c0 else c1, σ →∗ if tt then c0 else c1, σ → c0, σ →∗ skip, σ podle lematu 2 (4). Druhy pr´pad se dokaze podobne. ´ ˇı ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ jedineho naslednıka ˇ ´ ´ ´ ´ b, σ → false a σ = σ, nebo tri naslednıky b, σ ˇ ´ ´ → true, c, σ → σ a while b do c, σ → σ . V prvnım pr´pade b, σ →∗ ff, σ podle 2., proto while b do c, σ → ´ ˇı ˇ if b then (c; while b do c) else skip, σ →∗ if ff then (c; while b do c) else skip, σ → skip, σ podle lematu 2 (4). V druhem pr´pade b, σ →∗ tt, σ , c, σ →∗ skip, σ ´ ˇı ˇ ∗ a while b do c, σ → skip, σ podle 2. a I.P. Proto take while b do c, σ → ´ if b then (c; while b do c) else skip, σ →∗ if tt then (c; while b do c) else skip, σ → c; while b do c, σ →∗ while b do c, σ →∗ skip, σ podle lematu 2. (⇐) Indukcı ke k pro ktere c, σ →k skip, σ . ´ ´ Baze indukce: ´ • skip, σ →0 skip, σ . Platı skip, σ → σ. ´ Indukc ´ krok: Necht’ c, σ →k skip, σ ˇnı kde k ≥ 1. Uvaz´me mozne tvary c. ´ ˇı ˇ ´
  • 164. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´
  • 165. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ .
  • 166. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . • c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ , ´ ´ tedy take if b then c0 else c1, σ → σ . ´
  • 167. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . • c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ , ´ ´ tedy take if b then c0 else c1, σ → σ . ´ Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ
  • 168. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . • c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ , ´ ´ tedy take if b then c0 else c1, σ → σ . ´ Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ
  • 169. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . • c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ , ´ ´ tedy take if b then c0 else c1, σ → σ . ´ Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then (c; while b do c) else skip, σ →l if tt then (c; while b do c) else skip, σ → c; while b do c, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . Opetovnym ˇ ´ pouzitım lematu 3 (3) dostavame c; while b do c, σ →l skip; while b do c, σ ˇ ´ ´ ´ → while b do c, σ →m skip, σ , kde l , m < m < k a c, σ →l skip, σ . Podle 2. a I.P. dostavame b, σ → true, c, σ → σ a while b do c, σ ´ ´ → σ , proto while b do c, σ → σ .
  • 170. 33 k−1 k−1 • c ≡ X := a. Pak X := a, σ → X := n, σ → skip, σ[n/X] , kde a, σ → n, σ (podle lematu 3 (2)). Proto take a, σ → n podle 1. Tedy X := a, σ → σ[n/X]. ´ • c ≡ c0; c1. Pak c0; c1, σ →l skip; c1, σ → c1, σ →m skip, σ kde l, m < k a c0, σ →l skip, σ podle lematu 3 (3). Podle I.P. c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . • c ≡ if b then c0 else c1. Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then c0 else c1, σ →l if tt then c0 else c1, σ → c0, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ (podle lematu 3 (4)). Dale podle 2. a I.P. platı b, σ → true a c0, σ → σ , ´ ´ tedy take if b then c0 else c1, σ → σ . ´ Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Pak while b do c, σ → if b then (c; while b do c) else skip, σ . Podle lematu 3 (4) jsou dve moznosti: ˇ ˇ if b then (c; while b do c) else skip, σ →l if tt then (c; while b do c) else skip, σ → c; while b do c, σ →m skip, σ , kde l, m < k a b, σ →l tt, σ . Opetovnym ˇ ´ pouzitım lematu 3 (3) dostavame c; while b do c, σ →l skip; while b do c, σ ˇ ´ ´ ´ → while b do c, σ →m skip, σ , kde l , m < m < k a c, σ →l skip, σ . Podle 2. a I.P. dostavame b, σ → true, c, σ → σ a while b do c, σ ´ ´ → σ , proto while b do c, σ → σ .
  • 171. 34 l if b then (c; while b do c) else skip, σ → if ff then (c; while b do c) else skip, σ → skip, σ →m skip, σ , kde l, m < k a b, σ →l ff, σ (v tomto pr´pade je m = 0 a ˇı ˇ σ = σ). Podle 2. platı b, σ → false a tedy while b do c, σ → σ. ´
  • 172. 35 Denotac ´ semantika IMP ˇnı ´
  • 173. 35 Denotac ´ semantika IMP ˇnı ´ • A : Aexp → (Σ → Z)
  • 174. 35 Denotac ´ semantika IMP ˇnı ´ • A : Aexp → (Σ → Z) • B : Bexp → (Σ → T)
  • 175. 35 Denotac ´ semantika IMP ˇnı ´ • A : Aexp → (Σ → Z) • B : Bexp → (Σ → T) • C : Com → (Σ → Σ)
  • 176. 35 Denotac ´ semantika IMP ˇnı ´ • A : Aexp → (Σ → Z) • B : Bexp → (Σ → T) • C : Com → (Σ → Σ) Argumenty funkcı A, B, C se pıs´ do „semantickych“ zavorek [[ ]] ´ ´ˇ ı ´ ´ ´
  • 177. 36 Aritmeticke vyrazy Aexp ´ ´ • A[[n]]σ =n
  • 178. 36 Aritmeticke vyrazy Aexp ´ ´ • A[[n]]σ =n • A[[X]]σ = σ(X)
  • 179. 36 Aritmeticke vyrazy Aexp ´ ´ • A[[n]]σ =n • A[[X]]σ = σ(X) • A[[a0 + a1]]σ = A[[a0]]σ + A[[a1]]σ
  • 180. 36 Aritmeticke vyrazy Aexp ´ ´ • A[[n]]σ =n • A[[X]]σ = σ(X) • A[[a0 + a1]]σ = A[[a0]]σ + A[[a1]]σ • A[[a0 − a1]]σ = A[[a0]]σ − A[[a1]]σ
  • 181. 36 Aritmeticke vyrazy Aexp ´ ´ • A[[n]]σ =n • A[[X]]σ = σ(X) • A[[a0 + a1]]σ = A[[a0]]σ + A[[a1]]σ • A[[a0 − a1]]σ = A[[a0]]σ − A[[a1]]σ • A[[a0 ∗ a1]]σ = A[[a0]]σ ∗ A[[a1]]σ
  • 182. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true
  • 183. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false
  • 184. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false • B[[a0 = a1]]σ = A[[a0]]σ = A[[a1]]σ
  • 185. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false • B[[a0 = a1]]σ = A[[a0]]σ = A[[a1]]σ • B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ
  • 186. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false • B[[a0 = a1]]σ = A[[a0]]σ = A[[a1]]σ • B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ • B[[ not b]]σ = ¬B[[b]]σ
  • 187. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false • B[[a0 = a1]]σ = A[[a0]]σ = A[[a1]]σ • B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ • B[[ not b]]σ = ¬B[[b]]σ • B[[b0 and b1]]σ = B[[b0]]σ ∧ B[[b1]]σ
  • 188. 37 Pravdivostnı vyrazy Bexp ´ ´ • B[[tt]]σ = true • B[[ff]]σ = false • B[[a0 = a1]]σ = A[[a0]]σ = A[[a1]]σ • B[[a0 ≤ a1]]σ = A[[a0]]σ ≤ A[[a1]]σ • B[[ not b]]σ = ¬B[[b]]σ • B[[b0 and b1]]σ = B[[b0]]σ ∧ B[[b1]]σ • B[[b0 or b1]]σ = B[[b0]]σ ∨ B[[b1]]σ
  • 189. 38 Pr´kazy Com ˇı • C [[skip]]σ =σ
  • 190. 38 Pr´kazy Com ˇı • C [[skip]]σ =σ • C [[X := a]]σ = σ[A[[a]]σ/X]
  • 191. 38 Pr´kazy Com ˇı • C [[skip]]σ =σ • C [[X := a]]σ = σ[A[[a]]σ/X] • C [[c0; c1]]σ = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ
  • 192. 38 Pr´kazy Com ˇı • C [[skip]]σ =σ • C [[X := a]]σ = σ[A[[a]]σ/X] • C [[c0; c1]]σ = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ   C [[c0]]σ jestlize B[[b]]σ = true ˇ • C [[if b then c0 else c1]]σ =  C [[c1]]σ jestlize B[[b]]σ = false ˇ
  • 193. 38 Pr´kazy Com ˇı • C [[skip]]σ =σ • C [[X := a]]σ = σ[A[[a]]σ/X] • C [[c0; c1]]σ = C [[c1]](C [[c0]]σ) = (C [[c1]] ◦ C [[c0]])σ   C [[c0]]σ jestlize B[[b]]σ = true ˇ • C [[if b then c0 else c1]]σ =  C [[c1]]σ jestlize B[[b]]σ = false ˇ • C [[while b do c]]σ = ???
  • 194. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´
  • 195. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´ Pr´klady: ˇı • Kazda konec ´ usporadana mnozina je CPO. ˇ ´ ˇna ˇ´ ´ ˇ
  • 196. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´ Pr´klady: ˇı • Kazda konec ´ usporadana mnozina je CPO. ˇ ´ ˇna ˇ´ ´ ˇ • Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO). ˇ ´ ˇ ˇ´ ´ ´ ´
  • 197. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´ Pr´klady: ˇı • Kazda konec ´ usporadana mnozina je CPO. ˇ ´ ˇna ˇ´ ´ ˇ • Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO). ˇ ´ ˇ ˇ´ ´ ´ ´ • Je-li M mnozina, je (2M, ⊆) CPO. ˇ
  • 198. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´ Pr´klady: ˇı • Kazda konec ´ usporadana mnozina je CPO. ˇ ´ ˇna ˇ´ ´ ˇ • Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO). ˇ ´ ˇ ˇ´ ´ ´ ´ • Je-li M mnozina, je (2M, ⊆) CPO. ˇ • Kazdy uplny svaz je CPO. ˇ ´ ´ ´
  • 199. 39 ´ Uplne c ´ stec ´ usporadanı (CPO) ´ ˇa ˇne ˇ´ ´ ´ • Usporadana mnozina (D, ˇ´ ´ ˇ ) je CPO, pokud kazdy nekonec ´ retez ˇ ´ ˇny ˇ ˇ d0 d1 d2 d3 · · · prvku z D ma v D supremum. ˚ ´ ´ Pr´klady: ˇı • Kazda konec ´ usporadana mnozina je CPO. ˇ ´ ˇna ˇ´ ´ ˇ • Kazda mnozina M usporadana identitou je CPO (tzv. diskretnı CPO). ˇ ´ ˇ ˇ´ ´ ´ ´ • Je-li M mnozina, je (2M, ⊆) CPO. ˇ • Kazdy uplny svaz je CPO. ˇ ´ ´ ´ • (Σ → Σ, ⊆) je CPO. f ⊆ g je-li g „vıce definovana“ nez f. ´ ´ ˇ
  • 200. 40 Monotonnı a spojite funkce ´ ´ ´ • Necht’ (D, ), (E, ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde ´ ´ ´ ´ ˇ ˇ ´ a, b ∈ D platı: ´ a b ⇒ f(a) f(b).
  • 201. 40 Monotonnı a spojite funkce ´ ´ ´ • Necht’ (D, ), (E, ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde ´ ´ ´ ´ ˇ ˇ ´ a, b ∈ D platı: ´ a b ⇒ f(a) f(b). f je spojita, je-li monotonnı a pro kazdy nekonec ´ retez ´ ´ ´ ˇ ´ ˇny ˇ ˇ a0 a1 a2 a3 · · · prvku z D platı ˚ ´ _ G f(ai) = f( ai) i∈N i∈N
  • 202. 40 Monotonnı a spojite funkce ´ ´ ´ • Necht’ (D, ), (E, ) jsou CPO, f : D → E totalnı funkce. f je monotonnı, jestlize pro kazde ´ ´ ´ ´ ˇ ˇ ´ a, b ∈ D platı: ´ a b ⇒ f(a) f(b). f je spojita, je-li monotonnı a pro kazdy nekonec ´ retez ´ ´ ´ ˇ ´ ˇny ˇ ˇ a0 a1 a2 a3 · · · prvku z D platı ˚ ´ _ G f(ai) = f( ai) i∈N i∈N Pr´klad: ˇı • Kazda funkce z diskretnıho CPO je spojita. ˇ ´ ´ ´ ´
  • 203. 41 Postac ´cı podmınka spojitosti ˇujı ´ ´ Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı ˇ ˇ ´ ˇ ˇ ´ ´ [ f(A) = f({a}) a∈A Pak f je spojita funkce na CPO (2M, ⊆). ´
  • 204. 41 Postac ´cı podmınka spojitosti ˇujı ´ ´ Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı ˇ ˇ ´ ˇ ˇ ´ ´ [ f(A) = f({a}) a∈A Pak f je spojita funkce na CPO (2M, ⊆). ´ Dukaz. ˚ • Monotonie: Necht’ A ⊆ B. Pak [ [ f(A) = f({a}) ⊆ f({a}) = f(B). a∈A a∈B
  • 205. 41 Postac ´cı podmınka spojitosti ˇujı ´ ´ Veta 5. Bud’ M mnozina, f : 2M → 2M takova, ze pro kazde A ⊆ M platı ˇ ˇ ´ ˇ ˇ ´ ´ [ f(A) = f({a}) a∈A Pak f je spojita funkce na CPO (2M, ⊆). ´ Dukaz. ˚ • Monotonie: Necht’ A ⊆ B. Pak [ [ f(A) = f({a}) ⊆ f({a}) = f(B). a∈A a∈B • Spojitost: Bud’ A1 ⊆ A2 ⊆ A3 ⊆ A4 · · · nekonec ´ retez podmnozin M. Pak ˇny ˇ ˇ ˇ [ [ [ [ f(Ai) = f({a}) = f( Ai). i∈N i∈N a∈Ai i∈N
  • 206. 42 Veta o pevnem bode ˇ ´ ˇ Veta 6. Bud’ (D, ˇ ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme ´ ´ ˇı ´ ˇ G i µΓ = Γ (⊥). i∈N0 Pak µΓ je nejmens´ pevny bod Γ . ˇı ´
  • 207. 42 Veta o pevnem bode ˇ ´ ˇ Veta 6. Bud’ (D, ˇ ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme ´ ´ ˇı ´ ˇ G i µΓ = Γ (⊥). i∈N0 Pak µΓ je nejmens´ pevny bod Γ . ˇı ´ Dukaz. ˚ • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥) ´ ˇ ´ ´ Γ i+1(⊥) (snadno indukcı k i, pouzije se ´ ˇ monotonie Γ ). Dale ´ Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) = Γ i+1(⊥) = Γ i(⊥) = µΓ F F F 0 i∈N 0 i∈N 0
  • 208. 42 Veta o pevnem bode ˇ ´ ˇ Veta 6. Bud’ (D, ˇ ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme ´ ´ ˇı ´ ˇ G i µΓ = Γ (⊥). i∈N0 Pak µΓ je nejmens´ pevny bod Γ . ˇı ´ Dukaz. ˚ • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥) ´ ˇ ´ ´ Γ i+1(⊥) (snadno indukcı k i, pouzije se ´ ˇ monotonie Γ ). Dale ´ Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) = Γ i+1(⊥) = Γ i(⊥) = µΓ F F F 0 i∈N 0 i∈N 0 • µΓ je nejmens´ pevny bod Γ : Bud’ d pevny bod Γ (tj. Γ (d) = d). Stac´ ukazat, ze d je hornı ˇı ´ ´ ˇı ´ ˇ ´ zavora mnoziny {Γ (⊥) | i ∈ N0}. Pak µΓ ´ ˇ i d podle definice suprema. ´
  • 209. 42 Veta o pevnem bode ˇ ´ ˇ Veta 6. Bud’ (D, ˇ ) CPO majıcı nejmens´ prvek ⊥ a Γ spojita funkce na D. Polozme ´ ´ ˇı ´ ˇ G i µΓ = Γ (⊥). i∈N0 Pak µΓ je nejmens´ pevny bod Γ . ˇı ´ Dukaz. ˚ • µΓ je pevny bod Γ : Pro kazde i ∈ N0 platı Γ i(⊥) ´ ˇ ´ ´ Γ i+1(⊥) (snadno indukcı k i, pouzije se ´ ˇ monotonie Γ ). Dale ´ Γ (µΓ ) = Γ ( i∈N Γ i(⊥)) = Γ i+1(⊥) = Γ i(⊥) = µΓ F F F 0 i∈N 0 i∈N 0 • µΓ je nejmens´ pevny bod Γ : Bud’ d pevny bod Γ (tj. Γ (d) = d). Stac´ ukazat, ze d je hornı ˇı ´ ´ ˇı ´ ˇ ´ zavora mnoziny {Γ (⊥) | i ∈ N0}. Pak µΓ ´ ˇ i d podle definice suprema. ´ Indukcı k i dokazeme, ze Γ i(⊥) ´ ´ˇ ˇ d pro kazde i ∈ N0. Zrejme Γ 0(⊥) = ⊥ ˇ ´ ˇ ˇ d; a platı-li ´ Γ i(⊥) d, pak take Γ i+1(⊥) ´ Γ (d) = d nebot’ Γ je monotonnı a d je pevny bod. ´ ´ ´
  • 210. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c.
  • 211. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22).
  • 212. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]]
  • 213. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]] • Tedy C [[w]] = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]} ∪ {(σ, σ) | B[[b]]σ = false}
  • 214. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]] • Tedy C [[w]] = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]} ∪ {(σ, σ) | B[[b]]σ = false} = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false}
  • 215. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]] • Tedy C [[w]] = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]} ∪ {(σ, σ) | B[[b]]σ = false} = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false} • Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou ´ ´ˇ ´ aproximaci C [[w]] spoc´tat „leps´“ aproximaci. ˇı ˇı
  • 216. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]] • Tedy C [[w]] = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]} ∪ {(σ, σ) | B[[b]]σ = false} = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false} • Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou ´ ´ˇ ´ aproximaci C [[w]] spoc´tat „leps´“ aproximaci. ˇı ˇı • Definujeme funkci Γ : (Σ → Σ) → (Σ → Σ) predpisem ˇ Γ (ϕ) = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ ϕ ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false}
  • 217. 43 Denotac ´ semantika while cyklu ˇnı ´ • Oznac ˇme w ≡ while b do c. • Platı w ´ ∼ if b then c; w else skip (viz strana 22). • Proto by melo platit take C [[w]] ˇ ´ = C [[if b then c; w else skip]] • Tedy C [[w]] = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[c; w]]} ∪ {(σ, σ) | B[[b]]σ = false} = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ C [[w]] ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false} • Tuto rovnost nelze chapat definitoricky, ale lze na ni nahlızet jako na „navod“, jak pro danou ´ ´ˇ ´ aproximaci C [[w]] spoc´tat „leps´“ aproximaci. ˇı ˇı • Definujeme funkci Γ : (Σ → Σ) → (Σ → Σ) predpisem ˇ Γ (ϕ) = {(σ, σ ) | B[[b]]σ = true ∧ (σ, σ ) ∈ ϕ ◦ C [[c]]} ∪ {(σ, σ) | B[[b]]σ = false}
  • 218. 44 • Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’ ´ ´ ´ [ Γ (ϕ) = {Γ ({(σ, σ )})} (σ,σ )∈ϕ a lze tedy aplikovat vetu 5. ˇ
  • 219. 44 • Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’ ´ ´ ´ [ Γ (ϕ) = {Γ ({(σ, σ )})} (σ,σ )∈ϕ a lze tedy aplikovat vetu 5. ˇ • C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]]. ˇ ´ ´
  • 220. 44 • Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’ ´ ´ ´ [ Γ (ϕ) = {Γ ({(σ, σ )})} (σ,σ )∈ϕ a lze tedy aplikovat vetu 5. ˇ • C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]]. ˇ ´ ´ • Γ muze mıt vıce pevnych bodu; ma-li vsak C [[w]] odpovıdat intuitivnımu vyznamu while cyklu, ˚ˇ ´ ´ ´ ˚ ´ ˇ ´ ´ ´ je treba definovat ˇ C [[w]] = µΓ Nejmens´ pevny bod Γ existuje podle vety 6 a vypada takto: ˇı ´ ˇ ´ [ i µΓ = Γ (∅) i∈N0
  • 221. 44 • Γ je totalnı a spojita funkce na CPO (Σ → Σ, ⊆), nebot’ ´ ´ ´ [ Γ (ϕ) = {Γ ({(σ, σ )})} (σ,σ )∈ϕ a lze tedy aplikovat vetu 5. ˇ • C [[w]] by melo byt pevnym bodem funkce Γ , tj. Γ (C [[w]]) = C [[w]]. ˇ ´ ´ • Γ muze mıt vıce pevnych bodu; ma-li vsak C [[w]] odpovıdat intuitivnımu vyznamu while cyklu, ˚ˇ ´ ´ ´ ˚ ´ ˇ ´ ´ ´ je treba definovat ˇ C [[w]] = µΓ Nejmens´ pevny bod Γ existuje podle vety 6 a vypada takto: ˇı ´ ˇ ´ [ i µΓ = Γ (∅) i∈N0 • Pozorovanı: (σ, σ ) ∈ Γ i(∅) prave kdyz while b do c aktivovany ve stavu σ skonc´ po nejvyse ´ ´ ´ ˇ ˇ ´ ˇı ´ˇ i − 1 iteracıch ve stavu σ . ´
  • 222. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1
  • 223. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅
  • 224. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1}
  • 225. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1}
  • 226. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0}
  • 227. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1}
  • 228. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1} . . . Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1. ˇ ˇ ´
  • 229. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1} . . . Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1. ˇ ˇ ´ • while tt do X := X + 1
  • 230. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1} . . . Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1. ˇ ˇ ´ • while tt do X := X + 1 0 Γ (∅) = ∅
  • 231. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1} . . . Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1. ˇ ˇ ´ • while tt do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = ∅ V tomto pr´pade tedy µΓ = Γ 0(∅) = ∅. ˇı ˇ
  • 232. 45 Denotac ´ semantika while cyklu – pr´klady ˇnı ´ ˇı • while X ≤ 1 do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ(X) > 1} 2 1 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 1} 3 2 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = 0} 4 3 Γ (∅) = Γ (∅) ∪ {(σ, σ[2/X]) | σ(X) = −1} . . . Obecne Γ i+1(∅) = Γ i(∅) ∪ {(σ, σ[2/X]) | σ(X) = 2 − i} pro kazde i ≥ 1. ˇ ˇ ´ • while tt do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = ∅ V tomto pr´pade tedy µΓ = Γ 0(∅) = ∅. ˇı ˇ
  • 233. 46 • while ff do X := X + 1
  • 234. 46 • while ff do X := X + 1 0 Γ (∅) = ∅
  • 235. 46 • while ff do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ ∈ Σ}
  • 236. 46 • while ff do X := X + 1 0 Γ (∅) = ∅ 1 Γ (∅) = {(σ, σ) | σ ∈ Σ} 2 Γ (∅) = {(σ, σ) | σ ∈ Σ} V tomto pr´pade tedy µΓ = Γ 1(∅). ˇı ˇ
  • 237. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´
  • 238. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n
  • 239. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t
  • 240. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ
  • 241. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ
  • 242. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´
  • 243. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı C [[skip]]σ = σ podle definice. ´
  • 244. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı C [[skip]]σ = σ podle definice. ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice.
  • 245. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı C [[skip]]σ = σ podle definice. ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice. • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle I.P. C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]].
  • 246. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı C [[skip]]σ = σ podle definice. ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice. • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle I.P. C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]]. • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade B[[b]]σ = true a ´ ˇı ˇ C [[c0]]σ = σ (podle I.P. a 2.), tedy (σ, σ ) ∈ C [[if b then c0 else c1]] podle definice. Druhy pr´pad ´ ˇı se dokaze podobne. ´ˇ ˇ
  • 247. 47 Ekvivalence operac ´ a denotac ´ semantiky ˇnı ˇnı ´ Veta 7. ˇ 1. Pro kazde a, σ a n platı: ˇ ´ ´ a, σ → n ⇐⇒ A[[a]]σ = n 2. Pro kazde b, σ a t platı: ˇ ´ ´ b, σ → t ⇐⇒ B[[b]]σ = t 3. Pro kazde c a σ, σ platı: ˇ ´ ´ c, σ → σ ⇐⇒ C [[c]]σ = σ Dukaz. 1. a 2. indukcı ke strukture a a b. ˚ ´ ˇ ad 3., „⇒“ Indukcı k vysce odvozenı c, σ → σ . Uvaz´me mozne tvary c. ´ ´ˇ ´ ´ ˇı ˇ ´ • skip, σ → σ. Platı C [[skip]]σ = σ podle definice. ´ • c ≡ X := a. Pak koren X := a, σ → σ ma naslednıka a, σ → n a platı σ = σ[n/X]. ˇ ´ ´ ´ ´ Podle 1. A[[a]]σ = n a C [[X := a]]σ = σ[n/X] dle definice. • c ≡ c0; c1. Pak koren c0; c1, σ → σ ma naslednıky c0, σ → σ a c1, σ ˇ ´ ´ ´ → σ . Podle I.P. C [[c0]]σ = σ a C [[c1]]σ = σ , proto (σ, σ ) ∈ C [[c1]] ◦ C [[c0]] = C [[c0; c1]]. • c ≡ if b then c0 else c1. Pak koren if b then c0 else c1, σ → σ ma bud’ naslednıky b, σ → ˇ ´ ´ ´ true a c0, σ → σ , nebo b, σ → false a c1, σ → σ . V prvem pr´pade B[[b]]σ = true a ´ ˇı ˇ C [[c0]]σ = σ (podle I.P. a 2.), tedy (σ, σ ) ∈ C [[if b then c0 else c1]] podle definice. Druhy pr´pad ´ ˇı se dokaze podobne. ´ˇ ˇ • c ≡ while b do c. Pak koren while b do c, σ → σ ma bud’ ˇ ´
  • 248. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ;
  • 249. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ .
  • 250. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ
  • 251. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´
  • 252. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X].
  • 253. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´
  • 254. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´ • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti: ˇ ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto ´ if b then c0 else c1, σ → σ .
  • 255. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´ • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti: ˇ ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto ´ if b then c0 else c1, σ → σ . Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ
  • 256. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´ • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti: ˇ ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto ´ if b then c0 else c1, σ → σ . Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze ˇ ´ ˇ (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ . ´ ´ˇ ˇ ˇ
  • 257. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´ • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti: ˇ ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto ´ if b then c0 else c1, σ → σ . Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze ˇ ´ ˇ (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ . ´ ´ˇ ˇ ˇ k = 0. Jelikoz (σ, σ ) ∈ Γ 0(∅) = ∅, dokazovana implikace platı. ˇ ´ ´
  • 258. 48 jedineho naslednıka b, σ ´ ´ ´ → false a platı σ = σ. Pak B[[b]]σ = false podle 2., proto ´ (σ, σ) ∈ Γ (∅) ⊆ µΓ ; nebo tri naslednıky b, σ → true, c, σ → σ a while b do c, σ → σ . Pak B[[b]]σ = true ˇ ´ ´ podle 2. a (σ, σ ) ∈ C [[c]], (σ , σ ) ∈ C [[while b do c]] podle I.P. Podle definice µΓ existuje k ∈ N0 takove, ze (σ , σ ) ∈ Γ k(∅). Dale podle definice Γ dostavame, ze (σ, σ ) ∈ Γ k+1(∅), ´ ˇ ´ ´ ´ ˇ tedy (σ, σ ) ∈ µΓ . „⇐“ Indukcı ke strukture c. ´ ˇ • c ≡ skip. Platı C [[skip]]σ = σ a skip, σ → σ podle definice. ´ • c ≡ X := a. Platı C [[X := a]]σ = σ[n/X] kde A[[a]]σ = n. Podle 1. a, σ ´ → n, proto X := a, σ → σ[n/X]. • c ≡ c0; c1. Jestlize (σ, σ ) ∈ C [[c0; c1]] = C [[c1]] ◦ C [[c0]], existuje σ takove, ze (σ, σ ) ∈ C [[c0]] ˇ ´ ˇ a (σ , σ ) ∈ C [[c1]]. Podle I.P. platı c0, σ → σ a c1, σ → σ , tedy c0; c1, σ → σ . ´ • c ≡ if b then c0 else c1. Jestlize (σ, σ ) ∈ C [[if b then c0 else c1]], jsou dve moznosti: ˇ ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ C [[c0]]. Podle 2. a I.P. platı b, σ → true a c0, σ → σ , proto ´ if b then c0 else c1, σ → σ . Druha moznost se over´ podobne. ´ ˇ ˇ ˇı ˇ • c ≡ while b do c. Jestlize (σ, σ ) ∈ C [[while b do c]] = µΓ , existuje k ∈ N0 takove, ze ˇ ´ ˇ (σ, σ ) ∈ Γ k(∅). Indukcı ke k dokazeme, ze jestlize (σ, σ ) ∈ Γ k(∅), pak while b do c, σ → σ . ´ ´ˇ ˇ ˇ k = 0. Jelikoz (σ, σ ) ∈ Γ 0(∅) = ∅, dokazovana implikace platı. ˇ ´ ´
  • 259. 49 k+1 Indukc ´ krok: ˇnı Necht’ tedy (σ, σ ) ∈ Γ (∅). Podle definice Γ jsou dve moznosti: ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ Γ k(∅) ◦ C [[c]]. Podle 2. b, σ → true. Navıc existuje σ takove, ze ´ ´ ˇ (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ k(∅). Podle I.P. c, σ → σ a while b do c, σ → σ , tedy while b do c, σ → σ .
  • 260. 49 k+1 Indukc ´ krok: ˇnı Necht’ tedy (σ, σ ) ∈ Γ (∅). Podle definice Γ jsou dve moznosti: ˇ ˇ B[[b]]σ = true a (σ, σ ) ∈ Γ k(∅) ◦ C [[c]]. Podle 2. b, σ → true. Navıc existuje σ takove, ze ´ ´ ˇ (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ k(∅). Podle I.P. c, σ → σ a while b do c, σ → σ , tedy while b do c, σ → σ . B[[b]]σ = false a σ = σ . Pak b, σ → false podle 2., proto while b do c, σ → σ.
  • 262. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y)
  • 263. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´
  • 264. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´ • Jak to dokazat? ´
  • 265. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´ • Jak to dokazat? ´ pomocı operac ´ nebo denotac ´ semantiky – problematicke. ´ ˇnı ˇnı ´ ´
  • 266. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´ • Jak to dokazat? ´ pomocı operac ´ nebo denotac ´ semantiky – problematicke. ´ ˇnı ˇnı ´ ´ Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı ´ ´ ´ ´ ˇ ´ ´ ´ system, ktery umoznı jejich platnost dokazat. ´ ´ ˇ ´ ´
  • 267. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´ • Jak to dokazat? ´ pomocı operac ´ nebo denotac ´ semantiky – problematicke. ´ ˇnı ˇnı ´ ´ Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı ´ ´ ´ ´ ˇ ´ ´ ´ system, ktery umoznı jejich platnost dokazat. ´ ´ ˇ ´ ´ • Pr´klad: ˇı {X + Y = i ∧ Z = j} while X < 0 do (X := X + 1; Y := Y − 1); {Z − (X + Y) = j − i} Z := Z − (X + Y) {Z = j − i}
  • 268. 50 Axiomaticka semantika IMP ´ ´ • Uvazme program ˇ P ≡ while X < 0 do (X := X + 1; Y := Y − 1); Z := Z − (X + Y) • Jestlize pred spustenım P platı X + Y = i a Z = j, pak po dokonc ´ P platı Z = j − i. ˇ ˇ ˇ ˇ ´ ´ ˇenı ´ • Jak to dokazat? ´ pomocı operac ´ nebo denotac ´ semantiky – problematicke. ´ ˇnı ˇnı ´ ´ Hoare: do P doplnıme „tvrzenı“ (pravdiva v „mıste“ jejich vyskytu) a podame odvozovacı ´ ´ ´ ´ ˇ ´ ´ ´ system, ktery umoznı jejich platnost dokazat. ´ ´ ˇ ´ ´ • Pr´klad: ˇı {X + Y = i ∧ Z = j} while X < 0 do (X := X + 1; Y := Y − 1); {Z − (X + Y) = j − i} Z := Z − (X + Y) {Z = j − i}
  • 269. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´
  • 270. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´ {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı, ´ ˇa ˇne ˇı ´ ´ jestlize c ve stavu σ neskonc´. ˇ ˇı
  • 271. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´ {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı, ´ ˇa ˇne ˇı ´ ´ jestlize c ve stavu σ neskonc´. ˇ ˇı Platı tedy napr. ´ ˇ {true} while tt do skip {false}
  • 272. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´ {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı, ´ ˇa ˇne ˇı ´ ´ jestlize c ve stavu σ neskonc´. ˇ ˇı Platı tedy napr. ´ ˇ {true} while tt do skip {false} • Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥: ˇ ´ ´ ´ Σ⊥ = Σ ∪ {⊥}
  • 273. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´ {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı, ´ ˇa ˇne ˇı ´ ´ jestlize c ve stavu σ neskonc´. ˇ ˇı Platı tedy napr. ´ ˇ {true} while tt do skip {false} • Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥: ˇ ´ ´ ´ Σ⊥ = Σ ∪ {⊥} Dale zavedeme funkci C⊥ : Com → (Σ⊥ → Σ⊥): ´ ∗ C⊥[[c]]⊥ = ⊥ pro kazde c ∈ Com; ˇ ´ ∗ C⊥[[c]]σ = C [[c]]σ pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je definovano; ˇ ´ ´ ∗ C⊥[[c]]σ = ⊥ pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je nedefinovano. ˇ ´ ´
  • 274. 51 • Cılem je definovat odvozovacı system pro trojice tvaru ´ ´ ´ {A} c {B} kde c ∈ Com a A, B jsou „tvrzenı“. {A} c {B} r´ka, ze pro kazdy stav σ ∈ Σ platı ´ ˇı ´ ˇ ˇ ´ ´ nasledujıcı: Jestlize σ |= A, pak pokud c spusteny ve stavu σ skonc´ ve stavu σ , platı σ |= B. ´ ´ ´ ˇ ˇ ˇ ´ ˇı ´ {A} c {B} je tedy tvrzenı o c ´ stec ´ korektnosti programu c; ner´ka nic o tom, co platı, ´ ˇa ˇne ˇı ´ ´ jestlize c ve stavu σ neskonc´. ˇ ˇı Platı tedy napr. ´ ˇ {true} while tt do skip {false} • Pro zjednodusenı notace zavedeme specialnı „stav“ ⊥: ˇ ´ ´ ´ Σ⊥ = Σ ∪ {⊥} Dale zavedeme funkci C⊥ : Com → (Σ⊥ → Σ⊥): ´ ∗ C⊥[[c]]⊥ = ⊥ pro kazde c ∈ Com; ˇ ´ ∗ C⊥[[c]]σ = C [[c]]σ pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je definovano; ˇ ´ ´ ∗ C⊥[[c]]σ = ⊥ pro kazde c ∈ Com a σ ∈ Σ, kde C [[c]]σ je nedefinovano. ˇ ´ ´ • Vyznam ´ {A} c {B} pak lze vyjadrit takto: ´ ˇ {A} c {B} ⇐⇒ ∀σ ∈ Σ : σ |= A ⇒ C⊥[[c]]σ |= B
  • 275. 52 Syntaxe a semantika tvrzenı o programech ´ ´ • Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych. ˇetna ˇ ˇı ´ ˇ ´
  • 276. 52 Syntaxe a semantika tvrzenı o programech ´ ´ • Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych. ˇetna ˇ ˇı ´ ˇ ´ • Rozs´rene aritmeticke vyrazy Aexpv ˇ ıˇ ´ ´ ´ a ::= n | X | i | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num, X ∈ Var a i ∈ IntVar.
  • 277. 52 Syntaxe a semantika tvrzenı o programech ´ ´ • Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych. ˇetna ˇ ˇı ´ ˇ ´ • Rozs´rene aritmeticke vyrazy Aexpv ˇ ıˇ ´ ´ ´ a ::= n | X | i | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num, X ∈ Var a i ∈ IntVar. • Tvrzenı o programech („assertions“) Assn ´ A ::= true | false | a0 = a1 | a0 ≤ a1 | A0∧A1 | A0∨A1 | ¬A | ∀i.A | ∃i.A kde a0, a1 ∈ Aexpv a i ∈ IntVar.
  • 278. 52 Syntaxe a semantika tvrzenı o programech ´ ´ • Bud’ IntVar = {i, j, k, . . .} spoc ´ mnozina celoc´selnych promennych. ˇetna ˇ ˇı ´ ˇ ´ • Rozs´rene aritmeticke vyrazy Aexpv ˇ ıˇ ´ ´ ´ a ::= n | X | i | a0+a1 | a0−a1 | a0∗a1 kde n ∈ Num, X ∈ Var a i ∈ IntVar. • Tvrzenı o programech („assertions“) Assn ´ A ::= true | false | a0 = a1 | a0 ≤ a1 | A0∧A1 | A0∨A1 | ¬A | ∀i.A | ∃i.A kde a0, a1 ∈ Aexpv a i ∈ IntVar. • Interpretace je funkce I : IntVar → Z. Mnozinu vsech interpretacı znac´me I . ˇ ˇ ´ ˇı
  • 279. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z))
  • 280. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z)) E [[n]]Iσ =n E [[X]]Iσ = σ(X) E [[i]]Iσ = I(i) E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“) ˇ
  • 281. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z)) E [[n]]Iσ =n E [[X]]Iσ = σ(X) E [[i]]Iσ = I(i) E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“) ˇ • A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A) ˇ ´
  • 282. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z)) E [[n]]Iσ =n E [[X]]Iσ = σ(X) E [[i]]Iσ = I(i) E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“) ˇ • A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A) ˇ ´ ⊥ |=I A pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla: ˇ ´ ´ ´ ´ ´
  • 283. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z)) E [[n]]Iσ =n E [[X]]Iσ = σ(X) E [[i]]Iσ = I(i) E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“) ˇ • A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A) ˇ ´ ⊥ |=I A pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla: ˇ ´ ´ ´ ´ ´ σ |=I true σ |=I a0 = a1 ⇐⇒ E [[a0]]Iσ = E [[a1]]Iσ σ |=I a0 ≤ a1 ⇐⇒ E [[a0]]Iσ ≤ E [[a1]]Iσ σ |=I A0 ∧ A1 ⇐⇒ σ |=I A0 ∧ σ |=I A1 σ |=I A0 ∨ A1 ⇐⇒ σ |=I A0 ∨ σ |=I A1 σ |=I ¬A ⇐⇒ σ |=I A σ |=I ∀i.A ⇐⇒ σ |=I[n/i] A pro kazde n ∈ Z ˇ ´ σ |=I ∃i.A ⇐⇒ σ |=I[n/i] A pro nejake n ∈ Z ˇ ´ • A ∈ Assn je platne, psano |= A, pokud σ |=I A pro kazde σ ∈ Σ a I ∈ I . ´ ´ ˇ ´
  • 284. 53 • Definujeme funkci E : Aexpv → (I → (Σ → Z)) E [[n]]Iσ =n E [[X]]Iσ = σ(X) E [[i]]Iσ = I(i) E [[a0 + a1]]Iσ = E [[a0]]Iσ + E [[a1]]Iσ (podobne pro „−“ a „∗“) ˇ • A je splneno ve stavu σ ∈ Σ⊥ za interpretace I ∈ I (psano σ |=I A) ˇ ´ ⊥ |=I A pro kazde A ∈ Assn; je-li σ = ⊥, uplatnıme nasledujıcı pravidla: ˇ ´ ´ ´ ´ ´ σ |=I true σ |=I a0 = a1 ⇐⇒ E [[a0]]Iσ = E [[a1]]Iσ σ |=I a0 ≤ a1 ⇐⇒ E [[a0]]Iσ ≤ E [[a1]]Iσ σ |=I A0 ∧ A1 ⇐⇒ σ |=I A0 ∧ σ |=I A1 σ |=I A0 ∨ A1 ⇐⇒ σ |=I A0 ∨ σ |=I A1 σ |=I ¬A ⇐⇒ σ |=I A σ |=I ∀i.A ⇐⇒ σ |=I[n/i] A pro kazde n ∈ Z ˇ ´ σ |=I ∃i.A ⇐⇒ σ |=I[n/i] A pro nejake n ∈ Z ˇ ´ • A ∈ Assn je platne, psano |= A, pokud σ |=I A pro kazde σ ∈ Σ a I ∈ I . ´ ´ ˇ ´
  • 285. 54 Lema 8. • Pro kazde a ∈ Aexp, σ ∈ Σ a I ∈ I platı A[[a]]σ = E [[a]]Iσ. ˇ ´ ´ • Pro kazde b ∈ Bexp a σ ∈ Σ platı ˇ ´ ´ B[[b]]σ = true ⇐⇒ σ |=I b B[[b]]σ = false ⇐⇒ σ |=I b Dukaz. Strukturalnı indukcı. ˚ ´ ´ ´
  • 286. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn.
  • 287. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B)
  • 288. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B) • |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ⊥ : σ |=I {A} c {B}
  • 289. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B) • |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ⊥ : σ |=I {A} c {B} Platı ´ ⊥ |=I {A} c {B} pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com. ˇ ´
  • 290. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B) • |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ⊥ : σ |=I {A} c {B} Platı ´ ⊥ |=I {A} c {B} pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com. ˇ ´ Proto |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech). ˇı ˚
  • 291. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B) • |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ⊥ : σ |=I {A} c {B} Platı ´ ⊥ |=I {A} c {B} pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com. ˇ ´ Proto |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech). ˇı ˚ • |= {A} c {B} ⇐⇒ ∀I ∈ I : |=I {A} c {B}
  • 292. 55 Tvrzenı o c ´ stec ´ korektnosti programu ´ ˇa ˇne ˚ • Tvrzenı o c ´ stec ´ korektnosti programu c ∈ Com je trojice tvaru ´ ˇa ˇne {A} c {B} kde A, B ∈ Assn. • σ |=I {A} c {B} ⇐⇒ (σ |=I A =⇒ C⊥[[c]]σ |=I B) • |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ⊥ : σ |=I {A} c {B} Platı ´ ⊥ |=I {A} c {B} pro kazde I ∈ I , A, B ∈ Assn, c ∈ Com. ˇ ´ Proto |=I {A} c {B} ⇐⇒ ∀σ ∈ Σ : σ |=I {A} c {B} (lze vyuz´t v dukazech). ˇı ˚ • |= {A} c {B} ⇐⇒ ∀I ∈ I : |=I {A} c {B} • Tvrzenı {A} c {B} pro ktere platı |= {A} c {B} nazyvame platne. ´ ´ ´ ´ ´ ´
  • 293. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne
  • 294. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A}
  • 295. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´
  • 296. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´ • Pravidlo pro sekvenc ´ kompozici: ˇnı {A} c0 {C} {C} c1 {B} {A} c0; c1 {B}
  • 297. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´ • Pravidlo pro sekvenc ´ kompozici: ˇnı {A} c0 {C} {C} c1 {B} {A} c0; c1 {B} • Pravidlo pro vetvenı: ˇ ´ {A ∧ b} c0 {B} {A ∧ ¬b} c1 {B} {A} if b then c0 else c1 {B}
  • 298. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´ • Pravidlo pro sekvenc ´ kompozici: ˇnı {A} c0 {C} {C} c1 {B} {A} c0; c1 {B} • Pravidlo pro vetvenı: ˇ ´ {A ∧ b} c0 {B} {A ∧ ¬b} c1 {B} {A} if b then c0 else c1 {B} • Pravidlo pro cyklus: {A ∧ b} c {A} {A} while b do c {A ∧ ¬b}
  • 299. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´ • Pravidlo pro sekvenc ´ kompozici: ˇnı {A} c0 {C} {C} c1 {B} {A} c0; c1 {B} • Pravidlo pro vetvenı: ˇ ´ {A ∧ b} c0 {B} {A ∧ ¬b} c1 {B} {A} if b then c0 else c1 {B} • Pravidlo pro cyklus: {A ∧ b} c {A} {A} while b do c {A ∧ ¬b} • Pravidlo dusledku: ˚ |= (A ⇒ A ) {A } c {B } |= (B ⇒ B) {A} c {B}
  • 300. 56 Hoareuv odvozovacı system pro tvrzenı o c ´ stec ´ korektnosti ˚ ´ ´ ´ ˇa ˇne • Axiom pro skip: {A} skip {A} • Axiom pro prirazenı: {B[a/X]} X := a {B} ˇˇ ´ • Pravidlo pro sekvenc ´ kompozici: ˇnı {A} c0 {C} {C} c1 {B} {A} c0; c1 {B} • Pravidlo pro vetvenı: ˇ ´ {A ∧ b} c0 {B} {A ∧ ¬b} c1 {B} {A} if b then c0 else c1 {B} • Pravidlo pro cyklus: {A ∧ b} c {A} {A} while b do c {A ∧ ¬b} • Pravidlo dusledku: ˚ |= (A ⇒ A ) {A } c {B } |= (B ⇒ B) {A} c {B}
  • 301. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´
  • 302. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´
  • 303. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´ Pr´klad: ˇı {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
  • 304. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´ Pr´klad: ˇı {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5} |= (X=5 ∧ X=5) ⇒ X=5 {X=5} Y := X − 2 {X=5} |= X=5 ⇒ X=5 • {X=5 ∧ X=5} Y := X − 2 {X=5}
  • 305. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´ Pr´klad: ˇı {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5} |= (X=5 ∧ X=5) ⇒ X=5 {X=5} Y := X − 2 {X=5} |= X=5 ⇒ X=5 • {X=5 ∧ X=5} Y := X − 2 {X=5} |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5 {Y + 5 = 5} X := Y + 5 {X = 5} |= X=5 ⇒ X=5 • {X=5 ∧ ¬X=5} X := Y + 5 {X=5}
  • 306. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´ Pr´klad: ˇı {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5} |= (X=5 ∧ X=5) ⇒ X=5 {X=5} Y := X − 2 {X=5} |= X=5 ⇒ X=5 • {X=5 ∧ X=5} Y := X − 2 {X=5} |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5 {Y + 5 = 5} X := Y + 5 {X = 5} |= X=5 ⇒ X=5 • {X=5 ∧ ¬X=5} X := Y + 5 {X=5} {X=5 ∧ X=5} Y := X − 2 {X=5} {X=5 ∧ ¬X=5} X := Y + 5 {X=5} • {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
  • 307. 57 • Tvrzenı {A} c {B} je dokazatelne, psano ´ ´ ´ {A} c {B}, je-li odvoditelne v Hoarove odvozovacım ´ ˇ ´ systemu. ´ • Tvrzenı A pro ktere platı |= {A ∧ b} c {A} se nazyva invariant cyklu while b do c. ´ ´ ´ ´ ´ Pr´klad: ˇı {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5} |= (X=5 ∧ X=5) ⇒ X=5 {X=5} Y := X − 2 {X=5} |= X=5 ⇒ X=5 • {X=5 ∧ X=5} Y := X − 2 {X=5} |= (X=5 ∧ ¬X=5) ⇒ Y + 5 = 5 {Y + 5 = 5} X := Y + 5 {X = 5} |= X=5 ⇒ X=5 • {X=5 ∧ ¬X=5} X := Y + 5 {X=5} {X=5 ∧ X=5} Y := X − 2 {X=5} {X=5 ∧ ¬X=5} X := Y + 5 {X=5} • {X=5} if X = 5 then Y := X − 2 else X := Y + 5 {X=5}
  • 308. 58 Pr´klad: ˇı {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}
  • 309. 58 Pr´klad: ˇı {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i} {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i} {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i} • α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
  • 310. 58 Pr´klad: ˇı {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i} {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i} {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i} • α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i) {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} • β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0}
  • 311. 58 Pr´klad: ˇı {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i} {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i} {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i} • α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i) {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} • β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0} |= (X+Y=i ∧ Z=j) ⇒ Z−(X+Y) = j−i β |= (Z−(X+Y) = j−i ∧ ¬X<0) ⇒ Z−(X+Y) = j−i • γ ≡ {X+Y = i ∧ Z=j} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i}
  • 312. 58 Pr´klad: ˇı {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i} {Z−(X+1+Y−1) = j−i} X := X+1 {Z−(X+Y−1) = j−i} {Z−(X+Y−1) = j−i} Y := Y−1 {Z−(X+Y) = j−i} • α ≡ {Z−(X+1+Y−1) = j−i} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} |= (Z−(X+Y) = j−i ∧ X<0) ⇒ (Z−(X+1+Y−1) = j−i) α |= (Z−(X+Y) = j−i) ⇒ (Z−(X+Y) = j−i) {Z−(X+Y) = j−i ∧ X<0} X := X+1; Y := Y−1 {Z−(X+Y) = j−i} • β ≡ {Z−(X+Y) = j−i} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i ∧ ¬X<0} |= (X+Y=i ∧ Z=j) ⇒ Z−(X+Y) = j−i β |= (Z−(X+Y) = j−i ∧ ¬X<0) ⇒ Z−(X+Y) = j−i • γ ≡ {X+Y = i ∧ Z=j} while X<0 do X := X+1; Y := Y−1 {Z−(X+Y) = j−i} γ {Z−(X+Y) = j−i} Z := Z−(X+Y) {Z = j−i} • {X+Y=i ∧ Z=j} while X<0 do (X := X+1; Y := Y−1); Z := Z−(X+Y) {Z = j−i}
  • 314. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ
  • 315. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ Veta 10 (o korektnosti). Jestlize ˇ ˇ {A} c {B}, pak |= {A} c {B}.
  • 316. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ Veta 10 (o korektnosti). Jestlize ˇ ˇ {A} c {B}, pak |= {A} c {B}. Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}. ˚ ´ ´ˇ ´
  • 317. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ Veta 10 (o korektnosti). Jestlize ˇ ˇ {A} c {B}, pak |= {A} c {B}. Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}. ˚ ´ ´ˇ ´ Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene: ´ ˇı ´ ˇ ´ ˇ • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne. ˇ ´ ˇ ´
  • 318. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ Veta 10 (o korektnosti). Jestlize ˇ ˇ {A} c {B}, pak |= {A} c {B}. Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}. ˚ ´ ´ˇ ´ Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene: ´ ˇı ´ ˇ ´ ˇ • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne. ˇ ´ ˇ ´ • Axiom pro X := a. Pak je koren tvaru {B[a/X]} X := a {B}. Necht’ I ∈ I a σ ∈ Σ. Podle ˇ lematu 9 platı σ |= B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B. Jelikoz σ[A[[a]]σ/X] = C [[X := a]]σ, ´ I ˇ dostavame ´ ´ σ |=I B[a/X] ⇒ C [[X := a]]σ |=I B, tedy |= {B[a/X]} X := a {B}.
  • 319. 59 Korektnost Hoareova odvozovacıho systemu ´ ´ Lema 9. Necht’ I ∈ I , X ∈ Var, a0, a1 ∈ Aexpv, a ∈ Aexp a B ∈ Assn. Pak pro kazde σ ∈ Σ ˇ ´ platı: ´ • E [[a0[a1/X]]]Iσ = E [[a0]]Iσ[E [[a1]]Iσ/X] • σ |=I B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B Dukaz. Indukcı ke strukture a0, resp. B. ˚ ´ ˇ Veta 10 (o korektnosti). Jestlize ˇ ˇ {A} c {B}, pak |= {A} c {B}. Dukaz. Indukcı k vysce odvozovacıho stromu pro {A} c {B}. ˚ ´ ´ˇ ´ Uvaz´me, jake pravidlo bylo pouzito pro odvozenı korene: ´ ˇı ´ ˇ ´ ˇ • Axiom pro skip. Pak je koren tvaru {A} skip {A}. Toto tvrzenı je zjevne platne. ˇ ´ ˇ ´ • Axiom pro X := a. Pak je koren tvaru {B[a/X]} X := a {B}. Necht’ I ∈ I a σ ∈ Σ. Podle ˇ lematu 9 platı σ |= B[a/X] ⇐⇒ σ[A[[a]]σ/X] |=I B. Jelikoz σ[A[[a]]σ/X] = C [[X := a]]σ, ´ I ˇ dostavame ´ ´ σ |=I B[a/X] ⇒ C [[X := a]]σ |=I B, tedy |= {B[a/X]} X := a {B}.
  • 320. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I
  • 321. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I • Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B} ˇ ´ ˇ ´ ´ ´ a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ˇ ´ ´ ˇ ´ ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I ˇ ´ ´ ˇı ˇ B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem ´ ˇı ˇ I |= {A} if b then c0 else c1 {B} (uzitım lematu 8). ˇ ´
  • 322. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I • Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B} ˇ ´ ˇ ´ ´ ´ a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ˇ ´ ´ ˇ ´ ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I ˇ ´ ´ ˇı ˇ B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem ´ ˇı ˇ I |= {A} if b then c0 else c1 {B} (uzitım lematu 8). ˇ ´ • Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery ˇ ´ ´ ´ ´ je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze ´ ´ ˇ ´ ˇ σ |=I A ⇒ C⊥[[while b do c]]σ |=I A ∧ ¬b Mejme tedy σ a I takove, ze σ |=I A. Oznac ˇ ´ ˇ ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0 ˇ ´ S∞ i (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde ˇ ˇ ˇı ´ ˇ ˇ ´ j ∈ N0 platı ´ D(j) ≡ ∀σ, σ ∈ Σ, ∀I ∈ I : ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A) ⇒ σ |=I A ∧ ¬b
  • 323. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I • Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B} ˇ ´ ˇ ´ ´ ´ a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ˇ ´ ´ ˇ ´ ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I ˇ ´ ´ ˇı ˇ B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem ´ ˇı ˇ I |= {A} if b then c0 else c1 {B} (uzitım lematu 8). ˇ ´ • Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery ˇ ´ ´ ´ ´ je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze ´ ´ ˇ ´ ˇ σ |=I A ⇒ C⊥[[while b do c]]σ |=I A ∧ ¬b Mejme tedy σ a I takove, ze σ |=I A. Oznac ˇ ´ ˇ ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0 ˇ ´ S∞ i (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde ˇ ˇ ˇı ´ ˇ ˇ ´ j ∈ N0 platı ´ D(j) ≡ ∀σ, σ ∈ Σ, ∀I ∈ I : ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A) ⇒ σ |=I A ∧ ¬b Indukcı vzhledem k j. ´
  • 324. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I • Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B} ˇ ´ ˇ ´ ´ ´ a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ˇ ´ ´ ˇ ´ ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I ˇ ´ ´ ˇı ˇ B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem ´ ˇı ˇ I |= {A} if b then c0 else c1 {B} (uzitım lematu 8). ˇ ´ • Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery ˇ ´ ´ ´ ´ je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze ´ ´ ˇ ´ ˇ σ |=I A ⇒ C⊥[[while b do c]]σ |=I A ∧ ¬b Mejme tedy σ a I takove, ze σ |=I A. Oznac ˇ ´ ˇ ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0 ˇ ´ S∞ i (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde ˇ ˇ ˇı ´ ˇ ˇ ´ j ∈ N0 platı ´ D(j) ≡ ∀σ, σ ∈ Σ, ∀I ∈ I : ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A) ⇒ σ |=I A ∧ ¬b Indukcı vzhledem k j. ´ j = 0. Jelikoz Γ 0(∅) = ∅, neplatı antecedent dokazovane implikace. ˇ ´ ´
  • 325. 60 • Pravidlo pro sekvenc ´ kompozici. Pak je koren tvaru {A} c0; c1 {B} a ma naslednıky {A} c0 {C} ˇnı ˇ ´ ´ ´ a {C} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ze ˇ ´ ´ ˇ ´ ˇ σ |=I A. Platı C⊥[[c0]]σ |=I C (nebot’ |= {A} c0 {C}) a C⊥[[c1]](C⊥[[c0]]σ) |=I B, protoze |= {C} c1 {B} ´ ˇ a C⊥[[c0]]σ |= C. Tedy |= {A} c0; c1 {B}. I • Pravidlo pro vetvenı. Pak koren {A} if b then c0 else c1 {B} ma naslednıky {A ∧ b} c0 {B} ˇ ´ ˇ ´ ´ ´ a {A ∧ ¬b} c1 {B}, coz jsou podle I.P. platna tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Predpokladejme, ˇ ´ ´ ˇ ´ ze σ |=I A. Dale bud’ σ |=I b, nebo σ |=I ¬b. V prvem pr´pade σ |=I A ∧ b, tedy C⊥[[c0]]σ |=I ˇ ´ ´ ˇı ˇ B, nebot’ |= {A ∧ b} c0 {B}. V druhem pr´pade σ |= A ∧ ¬b, tedy C⊥[[c1]]σ |=I B. Celkem ´ ˇı ˇ I |= {A} if b then c0 else c1 {B} (uzitım lematu 8). ˇ ´ • Pravidlo pro cyklus. Pak koren {A} while b do c {A ∧ ¬b} ma naslednıka {A ∧ b} c {A}, ktery ˇ ´ ´ ´ ´ je podle I.P. platnym tvrzenım. Necht’ I ∈ I a σ ∈ Σ. Potrebujeme ukazat, ze ´ ´ ˇ ´ ˇ σ |=I A ⇒ C⊥[[while b do c]]σ |=I A ∧ ¬b Mejme tedy σ a I takove, ze σ |=I A. Oznac ˇ ´ ˇ ˇme σ = C⊥[[while b do c]]σ. Pokud σ = ⊥, jsme hotovi. Jinak σ = C [[while b do c]]σ (podle definice C⊥), proto (σ, σ ) ∈ Γ j(∅) pro nejake j ∈ N0 ˇ ´ S∞ i (jelikoz C [[while b do c]] = i=0 Γ (∅)). K tomu, ze σ |=I A ∧ ¬b, stac´ ukazat, ze pro kazde ˇ ˇ ˇı ´ ˇ ˇ ´ j ∈ N0 platı ´ D(j) ≡ ∀σ, σ ∈ Σ, ∀I ∈ I : ((σ, σ ) ∈ Γ j(∅) ∧ σ |=I A) ⇒ σ |=I A ∧ ¬b Indukcı vzhledem k j. ´ j = 0. Jelikoz Γ 0(∅) = ∅, neplatı antecedent dokazovane implikace. ˇ ´ ´
  • 326. 61 Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy ˇnı ˇ ´ ˇ ´ ´ˇ ˇ ´ (σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti: j+1 I ˇ ˇ
  • 327. 61 Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy ˇnı ˇ ´ ˇ ´ ´ˇ ˇ ´ (σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti: j+1 I ˇ ˇ ∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b. ˇ ´ Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı ´ ´ ˇ ˇ ´ σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı. ´ ´ ´ ´
  • 328. 61 Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy ˇnı ˇ ´ ˇ ´ ´ˇ ˇ ´ (σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti: j+1 I ˇ ˇ ∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b. ˇ ´ Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı ´ ´ ˇ ˇ ´ σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı. ´ ´ ´ ´ ∗ B[[b]]σ = false a σ = σ. Platı σ |=I ¬b a tedy σ |=I A ∧ ¬b, coz bylo dokazat. ´ ˇ ´
  • 329. 61 Indukc ´ krok: Predpokladejme, ze D(j) platı. Dokazeme, ze platı D(j + 1). Necht’ tedy ˇnı ˇ ´ ˇ ´ ´ˇ ˇ ´ (σ, σ ) ∈ Γ (∅) a σ |= A. Podle definice Γ jsou dve moznosti: j+1 I ˇ ˇ ∗ B[[b]]σ = true a (σ, σ ) ∈ Γ j(∅) ◦ C [[c]]. Pak σ |=I b (uzitım lematu 8), tedy σ |=I A ∧ b. ˇ ´ Dale existuje σ takove, ze (σ, σ ) ∈ C [[c]] a (σ , σ ) ∈ Γ j(∅). Jelikoz |= {A ∧ b} c {A}, platı ´ ´ ˇ ˇ ´ σ |=I A. Nynı podle D(j) dostavame σ |=I A ∧ ¬b, tedy D(j + 1) platı. ´ ´ ´ ´ ∗ B[[b]]σ = false a σ = σ. Platı σ |=I ¬b a tedy σ |=I A ∧ ¬b, coz bylo dokazat. ´ ˇ ´ • Pravidlo dusledku. Pak koren {A} c {B} ma naslednıky |= (A ⇒ A ), {A } c {B } a |= (B ⇒ B). ˚ ˇ ´ ´ ´ Podle I.P. je {A } c {B } platne tvrzenı. Necht’ I ∈ I a σ ∈ Σ. Jestlize σ |=I A, platı take σ |=I A , ´ ´ ˇ ´ ´ proto C⊥[[c]]σ |= B a tudız i C⊥[[c]]σ |= B. I ´ˇ I
  • 331. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´
  • 332. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´
  • 333. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´ • Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I, ˇı ´ ´ ˇovana wpI[[c, B]], je definovana takto: oznac ´ ´ wpI[[c, B]] = {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}.
  • 334. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´ • Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I, ˇı ´ ´ ˇovana wpI[[c, B]], je definovana takto: oznac ´ ´ wpI[[c, B]] = {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}. • Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}. ˇenı
  • 335. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´ • Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I, ˇı ´ ´ ˇovana wpI[[c, B]], je definovana takto: oznac ´ ´ wpI[[c, B]] = {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}. • Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}. ˇenı • Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı ´ ˇ ˇı ´ ´ ˇ ´ ´ AI = wpI[[c, B]].
  • 336. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´ • Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I, ˇı ´ ´ ˇovana wpI[[c, B]], je definovana takto: oznac ´ ´ wpI[[c, B]] = {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}. • Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}. ˇenı • Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı ´ ˇ ˇı ´ ´ ˇ ´ ´ AI = wpI[[c, B]]. • Platı |=I {A} c {B} ´ ⇐⇒ AI ⊆ wpI[[c, B]].
  • 337. 62 Nejslabs´ vstupnı podmınka ˇı ´ ´ • Chceme-li odvodit tvrzenı {A} c0; c1 {B}, lze to podle pravidla pro sekvenc ´ kompozici provest ´ ˇnı ´ tak, ze pro vhodne zvolene C ∈ Assn odvodıme tvrzenı {A} c0 {C} a {C} c1 {B}. ˇ ˇ ´ ´ ´ • Dokazeme, ze takove C existuje pro libovolne A, B, c0, c1; tımto C bude tzv. nejslabs´ vstupnı ´ˇ ˇ ´ ´ ´ ˇı ´ podmınka pro c1 a B (vyjadrena v Assn). ´ ´ ˇ ´ • Necht’ c ∈ Com, B ∈ Assn a I ∈ I . Nejslabs´ vstupnı podmınka pro B vzhledem k c a I, ˇı ´ ´ ˇovana wpI[[c, B]], je definovana takto: oznac ´ ´ wpI[[c, B]] = {σ ∈ Σ⊥ | C⊥[[c]]σ |=I B}. • Zavedeme znac ´ AI = {σ ∈ Σ⊥ | σ |=I A}. ˇenı • Dane A ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c, pokud pro kazde I ∈ I platı ´ ˇ ˇı ´ ´ ˇ ´ ´ AI = wpI[[c, B]]. • Platı |=I {A} c {B} ´ ⇐⇒ AI ⊆ wpI[[c, B]]. • Predpokladejme, ze A0 ∈ Assn vyjadruje nejslabs´ vstupnı podmınku pro B a c. Pak vyse ˇ ´ ˇ ˇ ˇı ´ ´ ´ˇ uvedenou ekvivalenci lze prepsat na |=I {A} c {B} ⇐⇒ AI ⊆ AI ˇ 0 ⇐⇒ |=I (A ⇒ A0), coz platı pro libovolne I, tedy |= {A} c {B} ⇐⇒ |= (A ⇒ A0) (odtud pr´vlastek „nejslabs´“). ˇ ´ ´ ˇı ˇı
  • 338. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı
  • 339. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´
  • 340. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI .
  • 341. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI . • wpI[[while true do skip, true]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´
  • 342. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI . • wpI[[while true do skip, true]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[while true do skip, false]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´
  • 343. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI . • wpI[[while true do skip, true]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[while true do skip, false]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[X := 2; Y := 4, X = 3]] = {⊥}.
  • 344. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI . • wpI[[while true do skip, true]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[while true do skip, false]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[X := 2; Y := 4, X = 3]] = {⊥}. • wpI[[X := X + 1; Y := Y − 1, X = 3 ∧ Y = 6]] = {⊥} ∪ {σ ∈ Σ | σ(X) = 2 ∧ σ(Y) = 7}. Vyjadritelne jako X = 2 ∧ Y = 7. ´ ˇ ´
  • 345. 63 Nejslabs´ vstupnı podmınka – pr´klady ˇı ´ ´ ˇı • wpI[[skip, false]] = {⊥}. Vyjadritelne jako false. ´ ˇ ´ • Obecne wpI[[skip, B]] ˇ = BI . • wpI[[while true do skip, true]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[while true do skip, false]] = Σ⊥. Vyjadritelne jako true. ´ ˇ ´ • wpI[[X := 2; Y := 4, X = 3]] = {⊥}. • wpI[[X := X + 1; Y := Y − 1, X = 3 ∧ Y = 6]] = {⊥} ∪ {σ ∈ Σ | σ(X) = 2 ∧ σ(Y) = 7}. Vyjadritelne jako X = 2 ∧ Y = 7. ´ ˇ ´ • wpI[[X := Y, i = X]] = {⊥} ∪ {σ ∈ Σ | σ(Y) = I(i)}. Vyjadritelne jako Y = i. ´ ˇ ´
  • 346. 64 Godeluv predikat β ¨ ˚ ´ • Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem ´ ´ ´ ´ ´ ´ ˇı ˇ β(a, b, i, x) ⇐⇒ x = a mod(1 + b(1 + i))
  • 347. 64 Godeluv predikat β ¨ ˚ ´ • Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem ´ ´ ´ ´ ´ ´ ˇı ˇ β(a, b, i, x) ⇐⇒ x = a mod(1 + b(1 + i)) ˇna ´ ´ ´ ˇı ˇ • Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje ˇ ˇ β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)). ´ ˇ ˇ ´ ´
  • 348. 64 Godeluv predikat β ¨ ˚ ´ • Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem ´ ´ ´ ´ ´ ´ ˇı ˇ β(a, b, i, x) ⇐⇒ x = a mod(1 + b(1 + i)) ˇna ´ ´ ´ ˇı ˇ • Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje ˇ ˇ β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)). ´ ˇ ˇ ´ ´ • Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana ˇ ´ ´ ˇ ´ ´ ´ predpisem Sa,b(i) = a mod(1 + b(1 + i)). ˇ
  • 349. 64 Godeluv predikat β ¨ ˚ ´ • Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem ´ ´ ´ ´ ´ ´ ˇı ˇ β(a, b, i, x) ⇐⇒ x = a mod(1 + b(1 + i)) ˇna ´ ´ ´ ˇı ˇ • Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje ˇ ˇ β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)). ´ ˇ ˇ ´ ´ • Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana ˇ ´ ´ ˇ ´ ´ ´ predpisem Sa,b(i) = a mod(1 + b(1 + i)). ˇ • Predikat β je vyjadritelny v Assn, nebot’ x = a mod b lze napsat jako ´ ´ ˇ ´ a≥0 ∧ b≥0 ∧ ∃k : (k ≥ 0 ∧ k∗b≤a ∧ (k + 1) ∗ b > a ∧ x = a − (k ∗ b))
  • 350. 64 Godeluv predikat β ¨ ˚ ´ • Definujeme 4-arnı predikat β na nezapornych celych c´slech predpisem ´ ´ ´ ´ ´ ´ ˇı ˇ β(a, b, i, x) ⇐⇒ x = a mod(1 + b(1 + i)) ˇna ´ ´ ´ ˇı ˇ • Bud’ S nekonec ´ posloupnost nezapornych celych c´sel, a, b ∈ N0. Rekneme, ze S splnuje ˇ ˇ β (pro dane a a b), jestlize pro kazde i ∈ N0 platı β(a, b, i, S (i)). ´ ˇ ˇ ´ ´ • Pro kazde a, b ∈ N0 existuje jedina posloupnost splnujıcı β; tou je posloupnost Sa,b dana ˇ ´ ´ ˇ ´ ´ ´ predpisem Sa,b(i) = a mod(1 + b(1 + i)). ˇ • Predikat β je vyjadritelny v Assn, nebot’ x = a mod b lze napsat jako ´ ´ ˇ ´ a≥0 ∧ b≥0 ∧ ∃k : (k ≥ 0 ∧ k∗b≤a ∧ (k + 1) ∗ b > a ∧ x = a − (k ∗ b)) Veta 11. Pro kazdou konec ˇ ˇ ˇnou posloupnost n0, · · · , nk nezapornych celych c´sel existujı n, m ∈ ´ ´ ´ ˇı ´ N0 takova, ze nj = Sn,m(j) pro kazde 0 ≤ j ≤ k. To znamena, ze pro kazde 0 ≤ j ≤ k platı ´ ˇ ˇ ´ ´ ˇ ˇ ´ ´ β(n, m, j, x) ⇐⇒ x = nj. Dukaz. (osnova) ˚
  • 351. 65 • Necht’ m = (max{k, n0, · · · , nk})! ˇı C´sla pi = 1 + m(1 + i), 0≤i≤k jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k. ´ ˇ ´ ˇ ´
  • 352. 65 • Necht’ m = (max{k, n0, · · · , nk})! ˇı C´sla pi = 1 + m(1 + i), 0≤i≤k jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k. ´ ˇ ´ ˇ ´ • Dale pro kazde 0 ≤ i ≤ k definujeme ´ ˇ ´ ci = p0 · . . . · pk/pi. Nynı pro kazde 0 ≤ i ≤ k existuje presne jedno di, 0 ≤ di ≤ pi, takove, ze (ci · di) mod pi = 1 ´ ˇ ´ ˇ ˇ ´ ˇ
  • 353. 65 • Necht’ m = (max{k, n0, · · · , nk})! ˇı C´sla pi = 1 + m(1 + i), 0≤i≤k jsou navzajem nesoudelna a ni < pi pro kazde 0 ≤ i ≤ k. ´ ˇ ´ ˇ ´ • Dale pro kazde 0 ≤ i ≤ k definujeme ´ ˇ ´ ci = p0 · . . . · pk/pi. Nynı pro kazde 0 ≤ i ≤ k existuje presne jedno di, 0 ≤ di ≤ pi, takove, ze (ci · di) mod pi = 1 ´ ˇ ´ ˇ ˇ ´ ˇ • Definujeme k n = i=0 ci · di · ni. Pro kazde 0 ≤ i ≤ k platı ni = n mod pi, coz je tvrzenı vety. ˇ ´ ´ ˇ ´ ˇ
  • 354. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı
  • 355. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı • Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak ´ ˇı ˇ ˇ ´ ´ ˇı „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0 ´ ´ ´ ´ ˇ ´ ´ ´ ˇı ´ ´ a 1).
  • 356. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı • Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak ´ ˇı ˇ ˇ ´ ´ ˇı „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0 ´ ´ ´ ´ ˇ ´ ´ ´ ˇı ´ ´ a 1). • Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem ´ ´ ´ ´ ´ ˇı ˇ F(x, y) ⇐⇒ x≥0 ∧ ∃z : (x = 2 ∗ z ⇒ y = z) ∧ (x = 2 ∗ z + 1 ⇒ y = −z)
  • 357. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı • Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak ´ ˇı ˇ ˇ ´ ´ ˇı „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0 ´ ´ ´ ´ ˇ ´ ´ ´ ˇı ´ ´ a 1). • Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem ´ ´ ´ ´ ´ ˇı ˇ F(x, y) ⇐⇒ x≥0 ∧ ∃z : (x = 2 ∗ z ⇒ y = z) ∧ (x = 2 ∗ z + 1 ⇒ y = −z) • Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem ´ ´ ´ ´ ´ ˇı ´ ˇ ´ ˇ β±(n, m, j, y) ⇐⇒ ∃x : β(n, m, j, x) ∧ F(x, y)
  • 358. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı • Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak ´ ˇı ˇ ˇ ´ ´ ˇı „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0 ´ ´ ´ ´ ˇ ´ ´ ´ ˇı ´ ´ a 1). • Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem ´ ´ ´ ´ ´ ˇı ˇ F(x, y) ⇐⇒ x≥0 ∧ ∃z : (x = 2 ∗ z ⇒ y = z) ∧ (x = 2 ∗ z + 1 ⇒ y = −z) • Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem ´ ´ ´ ´ ´ ˇı ´ ˇ ´ ˇ β±(n, m, j, y) ⇐⇒ ∃x : β(n, m, j, x) ∧ F(x, y) • Analogicky jako pro β definujeme posloupnost splnujıcı β± a posloupnost Sn,m, ktera je jedinou ˇ ´ ´ ± ´ ± posloupnostı splnujıcı β (pro dane n, m ∈ N0). ´ ˇ ´ ´ ´
  • 359. 66 ± Rozs´reny predikat β ˇ ıˇ ´ ´ • Cılem je vytvorit prostredek pro kodovanı konec ´ ch posloupnostı hodnot promennych jazyka ´ ˇ ˇ ´ ´ ´ ˇny ´ ˇ ´ IMP, tj. konec ´ ch posloupnostı celych c´sel. ˇny ´ ´ ˇı • Cela c´sla lze seradit do posloupnosti 0, 0, 1, −1, 2, −2, 3, −3, · · ·. Kazde cele c´slo je pak ´ ˇı ˇ ˇ ´ ´ ˇı „kodovano“ pozicı v teto posloupnosti, coz je nezaporne cele c´slo (0 ma dokonce dva kody, 0 ´ ´ ´ ´ ˇ ´ ´ ´ ˇı ´ ´ a 1). • Definujeme binarnı predikat F(x, y) („x je kodem y“) na celych c´slech predpisem ´ ´ ´ ´ ´ ˇı ˇ F(x, y) ⇐⇒ x≥0 ∧ ∃z : (x = 2 ∗ z ⇒ y = z) ∧ (x = 2 ∗ z + 1 ⇒ y = −z) • Nynı lze definovat 4-arnı predikat β± na celych c´slech (vyjadritelny v Assn) predpisem ´ ´ ´ ´ ´ ˇı ´ ˇ ´ ˇ β±(n, m, j, y) ⇐⇒ ∃x : β(n, m, j, x) ∧ F(x, y) • Analogicky jako pro β definujeme posloupnost splnujıcı β± a posloupnost Sn,m, ktera je jedinou ˇ ´ ´ ± ´ ± posloupnostı splnujıcı β (pro dane n, m ∈ N0). ´ ˇ ´ ´ ´ Veta 12. Pro kazdou konec ˇ ˇ ˇnou posloupnost n0, · · · , nk celych c´sel existujı n, m ∈ N0 takova, ze ´ ˇı ´ ´ ˇ ± nj = Sn,m(j) pro kazde 0 ≤ j ≤ k. To znamena, ze pro kazde 0 ≤ j ≤ k platı ˇ ´ ´ ˇ ˇ ´ ´ β±(n, m, j, x) ⇐⇒ x = nj.
  • 360. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ?
  • 361. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ? • „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X! ´
  • 362. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ? • „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X! ´ Y = X!
  • 363. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ? • „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X! ´ Y = X! ∃S . S (0) = 1 ∧ ∀l . 1 ≤ l ≤ X ⇒ (S (l) = S (l − 1) ∗ l) ∧ Y = S (X)
  • 364. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ? • „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X! ´ Y = X! ∃S . S (0) = 1 ∧ ∀l . 1 ≤ l ≤ X ⇒ (S (l) = S (l − 1) ∗ l) ∧ Y = S (X) ∃S . S (0) = 1 ∧ ∀l . 1 ≤ l ≤ X ⇒ (∀u. ∀v. u = S (l) ∧ v = S (l − 1) ⇒ u = v ∗ l) ∧ Y = S (X)
  • 365. 67 ± Pr´klad uzitı predikatu β ˇı ˇ ´ ´ • Lze v Assn vyjadrit X ≥ 0 ´ ˇ ∧ Y = X! ? • „Zakodujeme“ posloupnost 1, 1, 2, 6, 24, · · · , X! ´ Y = X! ∃S . S (0) = 1 ∧ ∀l . 1 ≤ l ≤ X ⇒ (S (l) = S (l − 1) ∗ l) ∧ Y = S (X) ∃S . S (0) = 1 ∧ ∀l . 1 ≤ l ≤ X ⇒ (∀u. ∀v. u = S (l) ∧ v = S (l − 1) ⇒ u = v ∗ l) ∧ Y = S (X) ∃n .∃m . β±(n, m, 0, 1) ∧ ∀l . 1 ≤ l ≤ X ⇒ (∀u. ∀v. β±(n, m, l, u) ∧ β±(n, m, l − 1, v) ⇒ u = v ∗ l) ∧ β±(n, m, X, Y)
  • 366. 68 Vyjadritelnost nejslabs´ vstupnı podmınky v Assn ´ ˇ ˇı ´ ´ Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı ˇ ˇ ´ ´ ˇ ˇ ´ ´ A[[c, B]]I = wpI[[c, B]].
  • 367. 68 Vyjadritelnost nejslabs´ vstupnı podmınky v Assn ´ ˇ ˇı ´ ´ Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı ˇ ˇ ´ ´ ˇ ˇ ´ ´ A[[c, B]]I = wpI[[c, B]]. Dukaz. Je dobre si znovu uvedomit, ze ˚ ´ ˇ ˇ A[[c, B]]I = wpI[[c, B]] ⇐⇒ ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B).
  • 368. 68 Vyjadritelnost nejslabs´ vstupnı podmınky v Assn ´ ˇ ˇı ´ ´ Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı ˇ ˇ ´ ´ ˇ ˇ ´ ´ A[[c, B]]I = wpI[[c, B]]. Dukaz. Je dobre si znovu uvedomit, ze ˚ ´ ˇ ˇ A[[c, B]]I = wpI[[c, B]] ⇐⇒ ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B). Dukaz je veden indukcı ke strukture c. ˚ ´ ˇ
  • 369. 68 Vyjadritelnost nejslabs´ vstupnı podmınky v Assn ´ ˇ ˇı ´ ´ Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı ˇ ˇ ´ ´ ˇ ˇ ´ ´ A[[c, B]]I = wpI[[c, B]]. Dukaz. Je dobre si znovu uvedomit, ze ˚ ´ ˇ ˇ A[[c, B]]I = wpI[[c, B]] ⇐⇒ ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B). Dukaz je veden indukcı ke strukture c. ˚ ´ ˇ • c ≡ skip. Stac´ polozit A[[skip, B]] = B. Pro kazde I ∈ I a σ ∈ Σ platı ˇı ˇ ˇ ´ ´ σ ∈ wpI[[skip, B]] ⇐⇒ C⊥[[skip]]σ |=I B ⇐⇒ σ |=I B ⇐⇒ σ |=I A[[skip, B]].
  • 370. 68 Vyjadritelnost nejslabs´ vstupnı podmınky v Assn ´ ˇ ˇı ´ ´ Veta 13. Pro kazde c ∈ Com a B ∈ Assn existuje A[[c, B]] ∈ Assn takove, ze pro kazde I ∈ I platı ˇ ˇ ´ ´ ˇ ˇ ´ ´ A[[c, B]]I = wpI[[c, B]]. Dukaz. Je dobre si znovu uvedomit, ze ˚ ´ ˇ ˇ A[[c, B]]I = wpI[[c, B]] ⇐⇒ ∀σ ∈ Σ : (σ |=I A[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B). Dukaz je veden indukcı ke strukture c. ˚ ´ ˇ • c ≡ skip. Stac´ polozit A[[skip, B]] = B. Pro kazde I ∈ I a σ ∈ Σ platı ˇı ˇ ˇ ´ ´ σ ∈ wpI[[skip, B]] ⇐⇒ C⊥[[skip]]σ |=I B ⇐⇒ σ |=I B ⇐⇒ σ |=I A[[skip, B]]. • c ≡ X := a. Definujeme A[[X := a, B]] = B[a/X]. Pak pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[X := a, B]] ⇐⇒ σ[A[[a]]σ/X] |=I B
  • 371. 69 ⇐⇒ σ |= B[a/X] (uzitım lematu 9) I ˇ ´ ⇐⇒ σ |=I A[[X := a, B]].
  • 372. 69 ⇐⇒ σ |= B[a/X] (uzitım lematu 9) I ˇ ´ ⇐⇒ σ |=I A[[X := a, B]]. • c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[c0; c1, B]] ⇐⇒ C⊥[[c0; c1]]σ |=I B ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.) ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.) ⇐⇒ σ |=I A[[c0; c1, B]].
  • 373. 69 ⇐⇒ σ |= B[a/X] (uzitım lematu 9) I ˇ ´ ⇐⇒ σ |=I A[[X := a, B]]. • c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[c0; c1, B]] ⇐⇒ C⊥[[c0; c1]]σ |=I B ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.) ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.) ⇐⇒ σ |=I A[[c0; c1, B]]. • c ≡ if b then c0 else c1. Definujeme A[[if b then c0 else c1, B]] = (b∧A[[c0, B]])∨(¬b∧A[[c1, B]]). Pak pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B ⇐⇒ (B[[b]] = true ∧ C⊥[[c0]]σ |=I B) ∨ (B[[b]] = false ∧ C⊥[[c1]]σ |=I B) ⇐⇒ (σ |=I b ∧ σ |=I A[[c0, B]]) ∨ (σ |=I ¬b ∧ σ |=I A[[c1, B]]) podle I.P. ⇐⇒ σ |=I (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]) ⇐⇒ σ |=I A[[c, B]].
  • 374. 69 ⇐⇒ σ |= B[a/X] (uzitım lematu 9) I ˇ ´ ⇐⇒ σ |=I A[[X := a, B]]. • c ≡ c0; c1. Definujeme A[[c0; c1, B]] = A[[c0, A[[c1, B]]]]. Pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[c0; c1, B]] ⇐⇒ C⊥[[c0; c1]]σ |=I B ⇐⇒ C [[c0]]σ |=I A[[c1, B]] (podle I.P.) ⇐⇒ σ |=I A[[c0, A[[c1, B]]]] (podle I.P.) ⇐⇒ σ |=I A[[c0; c1, B]]. • c ≡ if b then c0 else c1. Definujeme A[[if b then c0 else c1, B]] = (b∧A[[c0, B]])∨(¬b∧A[[c1, B]]). Pak pro kazde I ∈ I a σ ∈ Σ platı ˇ ´ ´ σ ∈ wpI[[c, B]] ⇐⇒ C⊥[[c]]σ |=I B ⇐⇒ (B[[b]] = true ∧ C⊥[[c0]]σ |=I B) ∨ (B[[b]] = false ∧ C⊥[[c1]]σ |=I B) ⇐⇒ (σ |=I b ∧ σ |=I A[[c0, B]]) ∨ (σ |=I ¬b ∧ σ |=I A[[c1, B]]) podle I.P. ⇐⇒ σ |=I (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]) ⇐⇒ σ |=I A[[c, B]]. • c ≡ while b do c0. Platı σ ∈ wpI[[while b do c0, B]] ⇐⇒ ´
  • 375. 70 ∀k ∀σ0, · · · .σk ∈ Σ : (σ = σ0 ∧ ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1)) ⇒ (σk |=I b ∨ B)(1)
  • 376. 70 ∀k ∀σ0, · · · .σk ∈ Σ : (σ = σ0 ∧ ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1)) ⇒ (σk |=I b ∨ B)(1) Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı: ˇı ´ˇ ´ ´ ˇ ˇ ˇ ´ ´ ´ ´ ´ Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto ´ ˇ ˇ ˇ ´ ´ ´ ´ X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi). ´ ´ ˇ ´ ´ Pro kazde I ∈ I platı ˇ ´ ´ σ |=I A ⇐⇒ |=I A[s/X] (*) coz lze snadno ukazat strukturalnı indukcı. ˇ ´ ´ ´ ´
  • 377. 70 ∀k ∀σ0, · · · .σk ∈ Σ : (σ = σ0 ∧ ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1)) ⇒ (σk |=I b ∨ B)(1) Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı: ˇı ´ˇ ´ ´ ˇ ˇ ˇ ´ ´ ´ ´ ´ Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto ´ ˇ ˇ ˇ ´ ´ ´ ´ X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi). ´ ´ ˇ ´ ´ Pro kazde I ∈ I platı ˇ ´ ´ σ |=I A ⇐⇒ |=I A[s/X] (*) coz lze snadno ukazat strukturalnı indukcı. Necht’ X1, · · · , Xl jsou vsechny promenne, ktere se ˇ ´ ´ ´ ´ ˇ ˇ ´ ´ vyskytujı v c a B. Nynı lze (1) prepsat na ´ ´ ˇ ∀k ∀s0, · · · .sk ∈ Z : (σ |=I X = s0 ∧ ∀i(0 ≤ i < k) : (|=I b[si/X] ∧ |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X])) ⇒ |=I (b ∨ B)[sk/X] (2)
  • 378. 70 ∀k ∀σ0, · · · .σk ∈ Σ : (σ = σ0 ∧ ∀i(0 ≤ i < k) : (σi |=I b ∧ C [[c0]]σi = σi+1)) ⇒ (σk |=I b ∨ B)(1) Stac´ tedy vyse uvedene tvrzenı „prelozit“ do Assn. K tomu vyuzijeme nasledujıcı pozorovanı: ˇı ´ˇ ´ ´ ˇ ˇ ˇ ´ ´ ´ ´ ´ Bud’ A ∈ Assn takove, ze vsechny promenne vyskytujıcı se v A jsou mezi X1, · · · , Xl (mısto ´ ˇ ˇ ˇ ´ ´ ´ ´ X1, · · · , Xl budeme psat take X). Pro kazde σ ∈ Σ lze nynı definovat l-tici s, kde s(i) = σ(Xi). ´ ´ ˇ ´ ´ Pro kazde I ∈ I platı ˇ ´ ´ σ |=I A ⇐⇒ |=I A[s/X] (*) coz lze snadno ukazat strukturalnı indukcı. Necht’ X1, · · · , Xl jsou vsechny promenne, ktere se ˇ ´ ´ ´ ´ ˇ ˇ ´ ´ vyskytujı v c a B. Nynı lze (1) prepsat na ´ ´ ˇ ∀k ∀s0, · · · .sk ∈ Z : (σ |=I X = s0 ∧ ∀i(0 ≤ i < k) : (|=I b[si/X] ∧ |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X])) ⇒ |=I (b ∨ B)[sk/X] (2) Ukazeme, ze (1) a (2) jsou ekvivalentnı. K tomu je (zejmena) treba dokazat, ze pokud σi resp. ´ˇ ˇ ´ ´ ˇ ´ ˇ σi+1 majı na X hodnoty si resp. si+1 a jinde jsou stejne, platı ´ ´ ´ C [[c0]]σi = σi+1 ⇐⇒ |=I (A[[c0, X = si+1]] ∧ ¬A[[c0, false]])[si/X] pro kazde I ∈ I . Snadno se vidı, ze ˇ ´ ´ ˇ
  • 379. 71 C [[c0]]σi = σi+1 ⇐⇒ I σi ∈ wp [[c0, X = si+1]] ∧ C [[c0]]σi je definovano. ´ Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave ´ ´ ´ ˇ kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). ˇ ´ ˇ ˇı ˇ ´
  • 380. 71 C [[c0]]σi = σi+1 ⇐⇒ I σi ∈ wp [[c0, X = si+1]] ∧ C [[c0]]σi je definovano. ´ Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave ´ ´ ´ ˇ kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli ˇ ´ ˇ ˇı ˇ ´ (2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“ ´ ´ ´ ´ ´ jednotliva si jako dvojice nezapornych celych c´sel: ´ ´ ´ ´ ˇı ∀k, n0, m0, · · · , nk, mk ≥ 0 : Vl ( j=0 β±(n0, m0, j, Xj) ∧ Vl ± ∀i(0 ≤ i < k) : ((∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X]))) Vl ± ⇒ (∀x0. · · · , xl : j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X]) (3)
  • 381. 71 C [[c0]]σi = σi+1 ⇐⇒ I σi ∈ wp [[c0, X = si+1]] ∧ C [[c0]]σi je definovano. ´ Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave ´ ´ ´ ˇ kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli ˇ ´ ˇ ˇı ˇ ´ (2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“ ´ ´ ´ ´ ´ jednotliva si jako dvojice nezapornych celych c´sel: ´ ´ ´ ´ ˇı ∀k, n0, m0, · · · , nk, mk ≥ 0 : Vl ( j=0 β±(n0, m0, j, Xj) ∧ Vl ± ∀i(0 ≤ i < k) : ((∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X]))) Vl ± ⇒ (∀x0. · · · , xl : j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X]) (3) Zbyva zakodovat posloupnost n0, m0, · · · , nk, mk do jedine dvojice c´sel. Zıskane tvrzenı bude ´ ´ ´ ´ ˇı ´ ´ ´ kvantifikovano takto: ´ ∀k, n, m ≥ 0 :
  • 382. 71 C [[c0]]σi = σi+1 ⇐⇒ I σi ∈ wp [[c0, X = si+1]] ∧ C [[c0]]σi je definovano. ´ Podle I.P. σi ∈ wpI[[c0, X = si+1]] ⇐⇒ σi |=I A[[c0, X = si+1]]. Dale C [[c0]]σi je definovano prave ´ ´ ´ ˇ kdyz σi |=I ¬A[[c0, false]]). Nynı jiz stac´ aplikovat (*) a dostaneme tvar pouzity v (2). Formuli ˇ ´ ˇ ˇı ˇ ´ (2) lze nynı transformovat na vyraz jazyka Assn pomocı predikatu β±. Nejprve „zakodujeme“ ´ ´ ´ ´ ´ jednotliva si jako dvojice nezapornych celych c´sel: ´ ´ ´ ´ ˇı ∀k, n0, m0, · · · , nk, mk ≥ 0 : Vl ( j=0 β±(n0, m0, j, Xj) ∧ Vl ± ∀i(0 ≤ i < k) : ((∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) ∧ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) ⇒ (A[[c0, X = y]] ∧ ¬A[[c0, false]])[x/X]))) Vl ± ⇒ (∀x0. · · · , xl : j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X]) (3) Zbyva zakodovat posloupnost n0, m0, · · · , nk, mk do jedine dvojice c´sel. Zıskane tvrzenı bude ´ ´ ´ ´ ˇı ´ ´ ´ kvantifikovano takto: ´ ∀k, n, m ≥ 0 : Dale provedeme tato nahrazenı: ´ ´ Vl ± j=0 β (n0 , m0 , j, Xj ) nahradıme vyrazem ´ ´
  • 383. Vl 72 ± ± ± ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒ j=0 β (p, q, j, Xj)
  • 384. Vl 72 ± ± ± ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒ j=0 β (p, q, j, Xj ) Vl ± ∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem ´ ´ ∀p, q : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ b[x/X]))
  • 385. Vl 72 ± ± ± ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒ j=0 β (p, q, j, Xj ) Vl ± ∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem ´ ´ ∀p, q : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ b[x/X])) Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme ´ vyrazem ´ ∀p, q, u, v : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧ β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj)))
  • 386. Vl 72 ± ± ± ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒ j=0 β (p, q, j, Xj ) Vl ± ∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem ´ ´ ∀p, q : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ b[x/X])) Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme ´ vyrazem ´ ∀p, q, u, v : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧ β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj))) Vl ± ∀x0. · · · , xl : j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X] nahradıme vyrazem´ ´ ∀p, q : (β±(n, m, 2 ∗ k, p) ∧ β±(n, m, 2 ∗ k + 1, q) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ (b ∨ B)[x/X].
  • 387. Vl 72 ± ± ± ∀p, q : (β (n, m, 0, p) ∧ β (n, m, 1, q)) ⇒ j=0 β (p, q, j, Xj ) Vl ± ∀x0, · · · , xl : j=0 β (ni , mi , j, xj ) ⇒ b[x/X]) nahradıme vyrazem ´ ´ ∀p, q : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q)) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ b[x/X])) Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(ni, mi, j, xj) ∧ β±(ni+1, mi+1, j, yj)) nahradıme ´ vyrazem ´ ∀p, q, u, v : (β±(n, m, 2 ∗ i, p) ∧ β±(n, m, 2 ∗ i + 1, q) ∧ β±(n, m, 2 ∗ i + 2, u) ∧ β±(n, m, 2 ∗ i + 3, v)) ⇒ Vl (∀x0, · · · , xl, y0, · · · , yl : ( j=0 β±(p, q, j, xj) ∧ β±(u, v, j, yj))) Vl ± ∀x0. · · · , xl : j=0 β (nk , mk , j, xj ) ⇒ (b ∨ B)[x/X] nahradıme vyrazem´ ´ ∀p, q : (β±(n, m, 2 ∗ k, p) ∧ β±(n, m, 2 ∗ k + 1, q) ⇒ Vl ± (∀x0, · · · , xl : j=0 β (p, q, j, xj ) ⇒ (b ∨ B)[x/X]. Zıskana formule jiz patr´ do Assn. ´ ´ ˇ ˇı
  • 389. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´
  • 390. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ
  • 391. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto ´ ´ {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku). ˇ ´ ˚
  • 392. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto ´ ´ {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku). ˇ ´ ˚ • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla ´ ˇ ´ ˇˇ ´ dusledku dostavame {A[[X := a, B]]} X := a {B}. ˚ ´ ´
  • 393. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto ´ ´ {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku). ˇ ´ ˚ • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla ´ ˇ ´ ˇˇ ´ dusledku dostavame {A[[X := a, B]]} X := a {B}. ˚ ´ ´ • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´ ´ ˇ ˇı vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0 ´ ´ ˇ ˇı ´ ´ a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro sekvenc ´ kompozici ˇnı {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take ´ {A[[c0; c1, B]]} c0; c1 {B} uzitım ˇ ´ pravidla dusledku. ˚
  • 394. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto ´ ´ {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku). ˇ ´ ˚ • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla ´ ˇ ´ ˇˇ ´ dusledku dostavame {A[[X := a, B]]} X := a {B}. ˚ ´ ´ • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´ ´ ˇ ˇı vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0 ´ ´ ˇ ˇı ´ ´ a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro sekvenc ´ kompozici ˇnı {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take ´ {A[[c0; c1, B]]} c0; c1 {B} uzitım ˇ ´ pravidla dusledku. ˚ • c ≡ if b then c0 else c1. Pak A[[c, B]] je ekvivalentnı (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]), kde ´ A[[c0, B]] resp. A[[c1, B]] vyjadruje nejslabs´ vstupnı podmınku pro c0 resp. c1 a B. Podle I.P. ˇ ˇı ´ ´ {A[[c0, B]]} c0 {B} a {A[[c1, B]]} c1 {B}. Jelikoz |= (A[[c, B]] ∧ b) ⇒ A[[c0, B]], uzitım pravidla ˇ ˇ ´ dusledku dostavame ˚ ´ ´ {A[[c, B]] ∧ b} c0 {B}. Podobne ˇ {A[[c, B]] ∧ ¬b} c1 {B}, muzeme tedy ˚ˇ pouz´t pravidlo pro vetvenı c´mz obdrz´me {A[[c, B]]} c {B}. ˇı ˇ ´ ˇı ˇ ˇı
  • 395. 73 ´ Uplnost Hoareova odvozovacıho systemu ´ ´ Lema 14. Necht’ c ∈ Com a B ∈ Assn. Dale necht’ A[[c, B]] ∈ Assn vyjadruje nejslabs´ vstupnı ´ ˇ ˇı ´ podmınku pro c a B. Pak {A[[c, B]]} c {B}. ´ Dukaz. Indukcı ke strukture c (vyuzijeme poznatku z dukazu vety 13). ˚ ´ ˇ ˇ ˚ ˚ ˇ • c ≡ skip. A[[skip, B]] je ekvivalentnı B, zejmena tedy |= A[[skip, B]] ⇒ B. Proto ´ ´ {A[[skip, B]]} skip {B} (uzitım axiomu pro skip a pravidla dusledku). ˇ ´ ˚ • c ≡ X := a. Pak A[[X := a, B]] je ekvivalentnı B[a/X]. Uzitım axiomu pro prirazenı a pravidla ´ ˇ ´ ˇˇ ´ dusledku dostavame {A[[X := a, B]]} X := a {B}. ˚ ´ ´ • c ≡ c0; c1. Pak A[[c0; c1, B]] je ekvivalentnı A[[c0, A[[c1, B]]]], kde A[[c1, B]] vyjadruje nejslabs´ ´ ˇ ˇı vstupnı podmınku pro c1 a B, a A[[c0, A[[c1, B]]]] vyjadruje nejslabs´ vstupnı podmınku pro c0 ´ ´ ˇ ˇı ´ ´ a A[[c1, B]]. Podle I.P. {A[[c1, B]]} c1 {B} a {A[[c0, A[[c1, B]]]]} c0 {A[[c1, B]]}. Podle pravidla pro sekvenc ´ kompozici ˇnı {A[[c0, A[[c1, B]]]]} c0; c1 {B}, proto take ´ {A[[c0; c1, B]]} c0; c1 {B} uzitım ˇ ´ pravidla dusledku. ˚ • c ≡ if b then c0 else c1. Pak A[[c, B]] je ekvivalentnı (b ∧ A[[c0, B]]) ∨ (¬b ∧ A[[c1, B]]), kde ´ A[[c0, B]] resp. A[[c1, B]] vyjadruje nejslabs´ vstupnı podmınku pro c0 resp. c1 a B. Podle I.P. ˇ ˇı ´ ´ {A[[c0, B]]} c0 {B} a {A[[c1, B]]} c1 {B}. Jelikoz |= (A[[c, B]] ∧ b) ⇒ A[[c0, B]], uzitım pravidla ˇ ˇ ´ dusledku dostavame ˚ ´ ´ {A[[c, B]] ∧ b} c0 {B}. Podobne ˇ {A[[c, B]] ∧ ¬b} c1 {B}, muzeme tedy ˚ˇ pouz´t pravidlo pro vetvenı c´mz obdrz´me {A[[c, B]]} c {B}. ˇı ˇ ´ ˇı ˇ ˇı
  • 396. 74 • c ≡ while b do c0. Dokazeme, ze ´ˇ ˇ a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}, b) |= (A[[c, B]] ∧ ¬b) ⇒ B. Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P. ˇ ˇı ´ ´ {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto ´ {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame ˇ ´ ˚ ´ ´ ´ {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}. ´ ˚ ˇne
  • 397. 74 • c ≡ while b do c0. Dokazeme, ze ´ˇ ˇ a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}, b) |= (A[[c, B]] ∧ ¬b) ⇒ B. Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P. ˇ ˇı ´ ´ {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto ´ {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame ˇ ´ ˚ ´ ´ ´ {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}. ´ ˚ ˇne ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj. ˇ ´ C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı: ˇnı ´ ´ ˇ ´ C⊥[[c]] = C⊥[[if b then c0; c else skip]] To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy ´ ˇ |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}.
  • 398. 74 • c ≡ while b do c0. Dokazeme, ze ´ˇ ˇ a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}, b) |= (A[[c, B]] ∧ ¬b) ⇒ B. Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P. ˇ ˇı ´ ´ {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto ´ {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame ˇ ´ ˚ ´ ´ ´ {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}. ´ ˚ ˇne ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj. ˇ ´ C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı: ˇnı ´ ´ ˇ ´ C⊥[[c]] = C⊥[[if b then c0; c else skip]] To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy ´ ˇ |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}. ad b) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ ¬b, pak σ |=I A[[c, B]] a σ |=I ¬b. Jelikoz ˇ ˇ C⊥[[c]] = C⊥[[if b then c0; c else skip]], dostavame C⊥[[c]]σ = σ, proto σ |=I B. Tedy |= (A[[c, B]] ∧ ¬b) ⇒ B. ´ ´
  • 399. 74 • c ≡ while b do c0. Dokazeme, ze ´ˇ ˇ a) |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}, b) |= (A[[c, B]] ∧ ¬b) ⇒ B. Vyjadruje-li A[[c0, A[[c, B]]]] nejslabs´ vstupnı podmınku pro c0 a A[[c, B]], pak podle I.P. ˇ ˇı ´ ´ {A[[c0, A[[c, B]]]]} c0 {A[[c, B]]}. Podle a) pak platı |= (A[[c, B]] ∧ b) ⇒ A[[c0, A[[c, B]]]], proto ´ {A[[c, B]] ∧ b} c0 {A[[c, B]]} uzitım pravidla dusledku. Dale podle pravidla pro while dostavame ˇ ´ ˚ ´ ´ ´ {A[[c, B]]} c {A[[c, B]] ∧ ¬b} a pomocı b) a pravidla dusledku konec ˇ {A[[c, B]]} c {B}. ´ ˚ ˇne ad a) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ b, platı σ |=I A[[c, B]] a σ |=I b, tj. ˇ ´ C⊥[[c]]σ |=I B a σ |=I b. Denotac ´ semantika byla definovana tak, ze platı: ˇnı ´ ´ ˇ ´ C⊥[[c]] = C⊥[[if b then c0; c else skip]] To znamena, ze C⊥[[c0; c]]σ |=I B, tedy C⊥[[c]](C⊥[[c0]]σ) |=I B. Proto C⊥[[c0]]σ |=I A[[c, B]], tedy ´ ˇ |= {A[[c, B]] ∧ b} c0 {A[[c, B]]}. ad b) Necht’ σ ∈ Σ a I ∈ I . Jestlize σ |=I A[[c, B]] ∧ ¬b, pak σ |=I A[[c, B]] a σ |=I ¬b. Jelikoz ˇ ˇ C⊥[[c]] = C⊥[[if b then c0; c else skip]], dostavame C⊥[[c]]σ = σ, proto σ |=I B. Tedy |= (A[[c, B]] ∧ ¬b) ⇒ B. ´ ´
  • 400. 75 Veta 15 (o uplnosti). Jestlize |= {A} c {B}, pak ˇ ´ ˇ {A} c {B}.
  • 401. 75 Veta 15 (o uplnosti). Jestlize |= {A} c {B}, pak ˇ ´ ˇ {A} c {B}. Dukaz. Predpokladejme, ze |= {A} c {B}. Podle vety 13 existuje A[[c, B]] ∈ Assn, ktere vyjadruje ˚ ˇ ´ ˇ ˇ ´ ˇ nejslabs´ vstupnı podmınku pro c a B. Platı tedy |= (A ⇒ A[[c, B]]). Podle lematu 14 platı ˇı ´ ´ ´ ´ {A[[c, B]]} c {B} a tedy {A} c {B} uzitım pravidla dusledku. ˇ ´ ˚
  • 402. 76 Ekvivalence axiomaticke a denotac ´ semantiky ´ ˇnı ´ • Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci ´ ´ ˇ ´ ˚ ´ na pr´kazech: ˇı c0 c1 ⇐⇒ ∀A, B ∈ Assn : (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B})
  • 403. 76 Ekvivalence axiomaticke a denotac ´ semantiky ´ ˇnı ´ • Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci ´ ´ ˇ ´ ˚ ´ na pr´kazech: ˇı c0 c1 ⇐⇒ ∀A, B ∈ Assn : (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B}) Veta 16. Pro kazde c0, c1 ∈ Com platı: ˇ ˇ ´ ´ C [[c0]] = C [[c1]] ⇐⇒ c0 c1
  • 404. 76 Ekvivalence axiomaticke a denotac ´ semantiky ´ ˇnı ´ • Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci ´ ´ ˇ ´ ˚ ´ na pr´kazech: ˇı c0 c1 ⇐⇒ ∀A, B ∈ Assn : (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B}) Veta 16. Pro kazde c0, c1 ∈ Com platı: ˇ ˇ ´ ´ C [[c0]] = C [[c1]] ⇐⇒ c0 c1 Dukaz. ˚ „⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı ´ ˇ ˇ ´ I I C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B
  • 405. 76 Ekvivalence axiomaticke a denotac ´ semantiky ´ ˇnı ´ • Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci ´ ´ ˇ ´ ˚ ´ na pr´kazech: ˇı c0 c1 ⇐⇒ ∀A, B ∈ Assn : (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B}) Veta 16. Pro kazde c0, c1 ∈ Com platı: ˇ ˇ ´ ´ C [[c0]] = C [[c1]] ⇐⇒ c0 c1 Dukaz. ˚ „⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı ´ ˇ ˇ ´ I I C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B „⇐“ Ukazeme, ze pokud C [[c0]] = C [[c1]], pak existuje σ ∈ Σ a A, B ∈ Assn takove, ze ´ˇ ˇ ´ ˇ |= {A} c0 {B} ⇐⇒ |= {A} c1 {B}
  • 406. 76 Ekvivalence axiomaticke a denotac ´ semantiky ´ ˇnı ´ • Axiomaticka semantika prirozenym zpusobem definuje semantickou ekvivalenci ´ ´ ˇ ´ ˚ ´ na pr´kazech: ˇı c0 c1 ⇐⇒ ∀A, B ∈ Assn : (|= {A} c0 {B} ⇐⇒ |= {A} c1 {B}) Veta 16. Pro kazde c0, c1 ∈ Com platı: ˇ ˇ ´ ´ C [[c0]] = C [[c1]] ⇐⇒ c0 c1 Dukaz. ˚ „⇒“ Bud’te σ ∈ Σ a I ∈ I takove, ze σ |=I A. Jelikoz C⊥[[c0]]σ = C⊥[[c1]]σ, platı ´ ˇ ˇ ´ I I C⊥[[c0]]σ |= B ⇐⇒ C⊥[[c1]]σ |= B „⇐“ Ukazeme, ze pokud C [[c0]] = C [[c1]], pak existuje σ ∈ Σ a A, B ∈ Assn takove, ze ´ˇ ˇ ´ ˇ |= {A} c0 {B} ⇐⇒ |= {A} c1 {B} Jestlize C [[c0]] = C [[c1]], existuje σ ∈ Σ takove, ze C⊥[[c0]]σ = C⊥[[c1]]σ. Necht’ X je mnozina vsech ˇ ´ ˇ ˇ ˇ promennych, ktere se vyskytujı v c0 a c1. Definujeme ˇ ´ ´ ´ ^ A ≡ Y = nY Y ∈X ˇ ´ ´ ˇme σ0 = C⊥[[c0]]σ a σ1 = C⊥[[c1]]σ. Rozlis´me kde nY je hodnota promenne Y ve stavu σ. Dale oznac ˇı tri moznosti: ˇ ˇ
  • 407. 77 • σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme ˇ ´ ˇ B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B} ˇ ´ ´ (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ). ´
  • 408. 77 • σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme ˇ ´ ˇ B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B} ˇ ´ ´ (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ). ´ • σ0 = ⊥. Pak σ1 = ⊥. Proto |= {A} c0 {false}, zatımco |= {A} c1 {false}. ´
  • 409. 77 • σ0 = ⊥ = σ1. Jelikoz σ0 = σ1, existuje X ∈ X takove, ze σ0(X) = σ1(X). Definujeme ˇ ´ ˇ B ≡ X=m, kde m je hodnota promenne X ve stavu σ0. Pak |= {A} c0 {B}, zatımco |= {A} c1 {B} ˇ ´ ´ (nebot’ σ |=I {A} c1 {B} pro libovolne I ∈ I ). ´ • σ0 = ⊥. Pak σ1 = ⊥. Proto |= {A} c0 {false}, zatımco |= {A} c1 {false}. ´ • σ1 = ⊥. Podobne. ˇ
  • 410. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´
  • 411. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne
  • 412. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´
  • 413. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´ • Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı. ´ ´ ˇ ˇne ´ ´
  • 414. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´ • Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı. ´ ´ ˇ ˇne ´ ´ • Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu ˇ ´ ˇı ´ ´ ´ ˇı ˇı (programu), c´mz vznikne oznac ˇı ˇ ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı ´ ˇı ´ ˇ ´ z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost ˇnı ´ ˇ ˇujı ´ ´ daneho oznac ´ ˇkovanı. ´
  • 415. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´ • Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı. ´ ´ ˇ ˇne ´ ´ • Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu ˇ ´ ˇı ´ ´ ´ ˇı ˇı (programu), c´mz vznikne oznac ˇı ˇ ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı ´ ˇı ´ ˇ ´ z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost ˇnı ´ ˇ ˇujı ´ ´ daneho oznac ´ ˇkovanı. ´ • Oznac ˇkovane pr´kazy ACom ´ ˇı c ::= skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c ¯ kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac ¯ ˇkovany pr´kaz ktery nenı prirazenım. ´ ˇı ´ ´ ˇˇ ´
  • 416. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´ • Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı. ´ ´ ˇ ˇne ´ ´ • Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu ˇ ´ ˇı ´ ´ ´ ˇı ˇı (programu), c´mz vznikne oznac ˇı ˇ ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı ´ ˇı ´ ˇ ´ z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost ˇnı ´ ˇ ˇujı ´ ´ daneho oznac ´ ˇkovanı. ´ • Oznac ˇkovane pr´kazy ACom ´ ˇı c ::= skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c ¯ kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac ¯ ˇkovany pr´kaz ktery nenı prirazenım. ´ ˇı ´ ´ ˇˇ ´ • Oznacˇkovane tvrzenı o c ´ stec ´ korektnosti je trojice tvaru {A} c {B}, kde A, B ∈ Assn a ´ ´ ˇa ˇne c ∈ ACom. Toto tvrzenı je platne, je-li platne tvrzenı {A} c {B} kde c ∈ Com vznikne z c ´ ´ ´ ´ vynechanım vsech prvku Assn. ´ ´ ˇ ˚
  • 417. 78 Oznac ˇkovane pr´kazy ´ ˇı • Platnost tvrzenı {A} c {B} o c ´ stec ´ korektnosti lze (efektivne) redukovat na platnost tvrzenı ´ ˇa ˇne ˇ ´ A ⇒ A[[c, B]], kde A[[c, B]] vyjadruje nejslabs´ vstupnı podmınku pro c a B. ˇ ˇı ´ ´ • Pokud bychom meli k dispozici program, ktery rozhoduje platnost tvrzenı z Assn, bylo by mozne ˇ ´ ´ ˇ ´ algoritmicky overit i platnost tvrzenı o c ´ stec ´ korektnosti. ˇˇ ´ ˇa ˇne • Takovy program z principielnıch duvodu neexistuje; existujı ale „dokazovac vet“ (theorem ´ ´ ˚ ˚ ´ ˇe ˇ provers), ktere umoznujı efektivne dokazat platnost urc ´ ch podtr´d platnych tvrzenı Assn. ´ ˇˇ ´ ˇ ´ ˇity ˇı ´ ´ • Tyto nastroje mohou byt velmi uzitec ´ , pokud se kombinujı s lidskou inteligencı. ´ ´ ˇ ˇne ´ ´ • Myslenka: mısto konstrukce nejslabs´ vstupnı podmınky doplnıme prvky Assn pr´mo do pr´kazu ˇ ´ ˇı ´ ´ ´ ˇı ˇı (programu), c´mz vznikne oznac ˇı ˇ ˇkovany pr´kaz. Pak algoritmicky sestavıme mnozinu tvrzenı ´ ˇı ´ ˇ ´ z Assn (tzv. verifikac ´ch podmınek), jejichz platnost je postac ´cı podmınkou pro korektnost ˇnı ´ ˇ ˇujı ´ ´ daneho oznac ´ ˇkovanı. ´ • Oznac ˇkovane pr´kazy ACom ´ ˇı c ::= skip | X := a | c0 ; X := a | c0 ; {D}c | if b then c0 else c1 | while b do {D}c ¯ kde X ∈ Var, a ∈ Aexp, b ∈ Bexp, D ∈ Assn a c je oznac ¯ ˇkovany pr´kaz ktery nenı prirazenım. ´ ˇı ´ ´ ˇˇ ´ • Oznacˇkovane tvrzenı o c ´ stec ´ korektnosti je trojice tvaru {A} c {B}, kde A, B ∈ Assn a ´ ´ ˇa ˇne c ∈ ACom. Toto tvrzenı je platne, je-li platne tvrzenı {A} c {B} kde c ∈ Com vznikne z c ´ ´ ´ ´ vynechanım vsech prvku Assn. ´ ´ ˇ ˚
  • 418. 79 Verifikac ´ podmınky ˇnı ´ • Oznac ˇkovany while-cyklus ´ {A} while b do {D}c {B} (*) obsahuje D ∈ Assn, ktere by melo byt invariantem, coz znamena ze {D ∧ b} c {D} je platne ´ ˇ ´ ˇ ´ ˇ ´ tvrzenı. Pokud uz vıme, ze D je invariant, stac´ pro platnost (*) dokazat platnost tvrzenı A ⇒ D ´ ˇ ´ ˇ ˇı ´ ´ a D ∧ ¬b ⇒ B.
  • 419. 79 Verifikac ´ podmınky ˇnı ´ • Oznac ˇkovany while-cyklus ´ {A} while b do {D}c {B} (*) obsahuje D ∈ Assn, ktere by melo byt invariantem, coz znamena ze {D ∧ b} c {D} je platne ´ ˇ ´ ˇ ´ ˇ ´ tvrzenı. Pokud uz vıme, ze D je invariant, stac´ pro platnost (*) dokazat platnost tvrzenı A ⇒ D ´ ˇ ´ ˇ ˇı ´ ´ a D ∧ ¬b ⇒ B. ˇ ˇnı ´ ˇkovane tvrzenı {A} c {B}, psano V ({A} c {B}), je • Mnozina verifikac ´ch podmınek pro oznac ´ ´ ´ definovana induktivne takto: ´ ˇ V ({A} skip {B}) = {A ⇒ B} V ({A} X := a {B}) = {A ⇒ B[a/X]} V ({A} c0 ; X := a {B}) = V ({A} c0 {B[a/X]}) V ({A} c0 ; {D}c {B}) ¯ = V ({A} c0 {D}) ∪ V ({D} c1 {B}) kde c nenı prirazenı ¯ ´ ˇˇ ´ V ({A} if b then c0 else c1 {B}) = V ({A ∧ b} c0 {B}) ∪ V ({A ∧ ¬b} c1 {B}) V ({A} while b do {D}c {B}) = V ({D ∧ b} c {D}) ∪ {A ⇒ D} ∪ {D ∧ ¬b ⇒ B}
  • 420. 80 Veta 17. Necht’ {A} c {B} je oznac ˇ ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky ´ ´ ˇa ˇne ˇ ˇ V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne. ´ ´ ´
  • 421. 80 Veta 17. Necht’ {A} c {B} je oznac ˇ ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky ´ ´ ˇa ˇne ˇ ˇ V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne. ´ ´ ´ Dukaz. Indukcı ke strukture c. ˚ ´ ˇ Pr´klad: ˇı • {true} while false do {false} skip {true}
  • 422. 80 Veta 17. Necht’ {A} c {B} je oznac ˇ ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky ´ ´ ˇa ˇne ˇ ˇ V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne. ´ ´ ´ Dukaz. Indukcı ke strukture c. ˚ ´ ˇ Pr´klad: ˇı • {true} while false do {false} skip {true} • Toto oznac ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne. ´ ´ ˇa ˇne ´
  • 423. 80 Veta 17. Necht’ {A} c {B} je oznac ˇ ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky ´ ´ ˇa ˇne ˇ ˇ V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne. ´ ´ ´ Dukaz. Indukcı ke strukture c. ˚ ´ ˇ Pr´klad: ˇı • {true} while false do {false} skip {true} • Toto oznac ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne. ´ ´ ˇa ˇne ´ • V ({true} while false do {false} skip {true}) = V ({false ∧ false} skip {false}) ∪ {true ⇒ false} ∪ {(false ∧ ¬false) ⇒ true}
  • 424. 80 Veta 17. Necht’ {A} c {B} je oznac ˇ ˇkovane tvrzenı o c ´ stec ´ korektnosti. Jestlize vsechny prvky ´ ´ ˇa ˇne ˇ ˇ V ({A} c {B}) jsou platna tvrzenı, je i {A} c {B} platne. ´ ´ ´ Dukaz. Indukcı ke strukture c. ˚ ´ ˇ Pr´klad: ˇı • {true} while false do {false} skip {true} • Toto oznac ˇkovane tvrzenı o c ´ stec ´ korektnosti je platne. ´ ´ ˇa ˇne ´ • V ({true} while false do {false} skip {true}) = V ({false ∧ false} skip {false}) ∪ {true ⇒ false} ∪ {(false ∧ ¬false) ⇒ true} • true ⇒ false ∈ V ({true} while false do {false} skip {true}) platne nenı; platnost prvku ´ ´ ˚ V ({A} c {B}) je tedy pouze postac ´cı, nikoliv nutna podmınka platnosti {A} c {B}. ˇujı ´ ´ ´
  • 425. 81 Operac ´ semantika paralelnıch programu ˇnı ´ ´ ˚ • Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany ˇ ıˇı ´ ´ ´ ˇı ´ rovnicı ´ c ::= skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1
  • 426. 81 Operac ´ semantika paralelnıch programu ˇnı ´ ´ ˚ • Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany ˇ ıˇı ´ ´ ´ ˇı ´ rovnicı ´ c ::= skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1 • SOS semantiku II. typu rozs´r´me o pravidla ´ ˇ ıˇı c0, σ → c0, σ c1, σ → c1, σ c0 c1, σ → c0 c1, σ c0 c1, σ → c0 c1, σ
  • 427. 81 Operac ´ semantika paralelnıch programu ˇnı ´ ´ ˚ • Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany ˇ ıˇı ´ ´ ´ ˇı ´ rovnicı ´ c ::= skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1 • SOS semantiku II. typu rozs´r´me o pravidla ´ ˇ ıˇı c0, σ → c0, σ c1, σ → c1, σ c0 c1, σ → c0 c1, σ c0 c1, σ → c0 c1, σ • Podle stavajıcıch pravidel napr. ´ ´ ´ ˇ (X := 1 X := 2); X := 3, σ → (skip X := 2); X := 3, σ[1/X] → (skip skip); X := 3, σ[2/X] Z konfigurace (skip skip); X := 3, σ[2/X] nenı mozne odvodit zadny prechod, ac ´ ˇ ´ ˇ´ ´ ˇ ˇkoliv pr´kaz ˇı X := 3 je v teto konfiguraci proveditelny (podle intuitivnıho chapanı vyznamu „;“ a „ “). ´ ´ ´ ´ ´ ´ ´
  • 428. 81 Operac ´ semantika paralelnıch programu ˇnı ´ ´ ˚ • Syntaxi jazyka IMP rozs´r´me o paralelnı operator ; paralelnı pr´kazy PCom jsou definovany ˇ ıˇı ´ ´ ´ ˇı ´ rovnicı ´ c ::= skip | X := a | c0;c1 | if b then c0 else c1 | while b do c | c0 c1 • SOS semantiku II. typu rozs´r´me o pravidla ´ ˇ ıˇı c0, σ → c0, σ c1, σ → c1, σ c0 c1, σ → c0 c1, σ c0 c1, σ → c0 c1, σ • Podle stavajıcıch pravidel napr. ´ ´ ´ ˇ (X := 1 X := 2); X := 3, σ → (skip X := 2); X := 3, σ[1/X] → (skip skip); X := 3, σ[2/X] Z konfigurace (skip skip); X := 3, σ[2/X] nenı mozne odvodit zadny prechod, ac ´ ˇ ´ ˇ´ ´ ˇ ˇkoliv pr´kaz ˇı X := 3 je v teto konfiguraci proveditelny (podle intuitivnıho chapanı vyznamu „;“ a „ “). ´ ´ ´ ´ ´ ´ ´
  • 429. 82 • Zavedeme predikat IsSkip predpisem ´ ˇ IsSkip(skip) = true IsSkip(X := a) = false IsSkip(c0; c1) = IsSkip(c0) ∧ IsSkip(c1) IsSkip(if b then c0 else c1) = false IsSkip(while b do c) = false IsSkip(c0 c1) = IsSkip(c0) ∧ IsSkip(c1)
  • 430. 82 • Zavedeme predikat IsSkip predpisem ´ ˇ IsSkip(skip) = true IsSkip(X := a) = false IsSkip(c0; c1) = IsSkip(c0) ∧ IsSkip(c1) IsSkip(if b then c0 else c1) = false IsSkip(while b do c) = false IsSkip(c0 c1) = IsSkip(c0) ∧ IsSkip(c1) • Pravidlo skip; c, σ → c, σ nahradıme pravidlem ´ IsSkip(c0) c0; c1, σ → c1, σ
  • 431. 82 • Zavedeme predikat IsSkip predpisem ´ ˇ IsSkip(skip) = true IsSkip(X := a) = false IsSkip(c0; c1) = IsSkip(c0) ∧ IsSkip(c1) IsSkip(if b then c0 else c1) = false IsSkip(while b do c) = false IsSkip(c0 c1) = IsSkip(c0) ∧ IsSkip(c1) • Pravidlo skip; c, σ → c, σ nahradıme pravidlem ´ IsSkip(c0) c0; c1, σ → c1, σ • Nynı je jiz odvoditelny prechod (skip skip); X := 3, σ[2/X] → X := 3, σ[2/X] ´ ˇ ´ ˇ
  • 432. 82 • Zavedeme predikat IsSkip predpisem ´ ˇ IsSkip(skip) = true IsSkip(X := a) = false IsSkip(c0; c1) = IsSkip(c0) ∧ IsSkip(c1) IsSkip(if b then c0 else c1) = false IsSkip(while b do c) = false IsSkip(c0 c1) = IsSkip(c0) ∧ IsSkip(c1) • Pravidlo skip; c, σ → c, σ nahradıme pravidlem ´ IsSkip(c0) c0; c1, σ → c1, σ • Nynı je jiz odvoditelny prechod (skip skip); X := 3, σ[2/X] → X := 3, σ[2/X] ´ ˇ ´ ˇ • Paralelnı programy mohou byt nedeterministicke. ´ ´ ´
  • 433. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚
  • 434. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´
  • 435. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´
  • 436. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´
  • 437. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´ V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem ´ ´ ´ ´ ´ (bisimulac ´ ekvivalence apod.) ˇnı
  • 438. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´ V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem ´ ´ ´ ´ ´ (bisimulac ´ ekvivalence apod.) ˇnı • Overenı platnosti formule vhodne logiky. ˇˇ ´ ´
  • 439. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´ V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem ´ ´ ´ ´ ´ (bisimulac ´ ekvivalence apod.) ˇnı • Overenı platnosti formule vhodne logiky. ˇˇ ´ ´ „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky. ˇı ˇ ˇ ´ ´ ´ ´ ´
  • 440. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´ V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem ´ ´ ´ ´ ´ (bisimulac ´ ekvivalence apod.) ˇnı • Overenı platnosti formule vhodne logiky. ˇˇ ´ ´ „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky. ˇı ˇ ˇ ´ ´ ´ ´ ´ temporalnı logiky lze klasifikovat z mnoha hledisek, napr. ´ ´ ˇ ∗ „state-based“ × „action-based“ ∗ „linear-time“ × „branching-time“
  • 441. 83 Verifikace paralelnıch a neukonc ´ ch programu ´ ˇeny ˚ • Overenı semanticke ekvivalence. ˇˇ ´ ´ ´ Specifikace i skutec ´ implementace se popıse ve vhodnem „vyss´m“ jazyce (CCS, Petriho ˇna ´ˇ ´ ˇ ˇı sıte, apod.) s dobre definovanou operac ´ semantikou. ´ˇ ˇ ˇnı ´ Dokaze se, ze specifikace a implementace jsou ekvivalentnı. ´ˇ ˇ ´ V tomto kontextu je formalizace pojmu semanticke ekvivalence netrivialnı problem ´ ´ ´ ´ ´ (bisimulac ´ ekvivalence apod.) ˇnı • Overenı platnosti formule vhodne logiky. ˇˇ ´ ´ „Vhodnou“ logikou je v tomto pr´pade obvykle nejaky typ modalnı (temporalnı) logiky. ˇı ˇ ˇ ´ ´ ´ ´ ´ temporalnı logiky lze klasifikovat z mnoha hledisek, napr. ´ ´ ˇ ∗ „state-based“ × „action-based“ ∗ „linear-time“ × „branching-time“ • Z praktickeho hlediska je hlavnı omezujıcı faktor velikost mnoziny konfiguracı. ´ ´ ´ ´ ˇ ´
  • 443. 84 „Obecna“ definice LTL ´ Syntaxe LTL • Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku. ˇetna ˇ ´ ´ ˚ ϕ ::= true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  • 444. 84 „Obecna“ definice LTL ´ Syntaxe LTL • Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku. ˇetna ˇ ´ ´ ˚ ϕ ::= true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 Dale definujeme F ϕ ≡ true U ϕ ´ a G ϕ ≡ ¬F ¬ϕ • Bud’ ϕ LTL formule. At(ϕ) oznac ˇuje mnozinu vsech atomickych vyroku, ktere se vyskytujı ve ϕ; ˇ ˇ ´ ´ ˚ ´ ´ charakteristicka abeceda formule ϕ je mnozina Σϕ = 2At(ϕ); ´ ˇ Σω oznac ϕ ˇuje mnozinu vsech nekonec ´ ch slov nad abecedou Σϕ; ˇ ˇ ˇny necht’ w ∈ Σω. Symbol w(i) oznac ϕ ˇuje i-ty znak slova w; symbol wi oznac ´ ˇuje i-ty sufix slova ´ w pro kazde i ∈ N0. ˇ ´
  • 445. 84 „Obecna“ definice LTL ´ Syntaxe LTL • Bud’ At = {p, q, r, . . .} spoc ´ mnozina atomickych vyroku. ˇetna ˇ ´ ´ ˚ ϕ ::= true | p | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 Dale definujeme F ϕ ≡ true U ϕ ´ a G ϕ ≡ ¬F ¬ϕ • Bud’ ϕ LTL formule. At(ϕ) oznac ˇuje mnozinu vsech atomickych vyroku, ktere se vyskytujı ve ϕ; ˇ ˇ ´ ´ ˚ ´ ´ charakteristicka abeceda formule ϕ je mnozina Σϕ = 2At(ϕ); ´ ˇ Σω oznac ϕ ˇuje mnozinu vsech nekonec ´ ch slov nad abecedou Σϕ; ˇ ˇ ˇny necht’ w ∈ Σω. Symbol w(i) oznac ϕ ˇuje i-ty znak slova w; symbol wi oznac ´ ˇuje i-ty sufix slova ´ w pro kazde i ∈ N0. ˇ ´ Pr´klad: ˇı • ϕ = (p ∨ q) U (p ∧ q) • At(ϕ) = {p, q} • Σϕ = {∅, {p}, {q}, {p, q}} • je-li w = ∅ {p} ∅ {q} {q} {p, q} · · ·, platı w(2) = ∅, w(3) = {q}, w2 = ∅ {q} {q} {p, q} · · · ´
  • 446. 85 Semantika LTL ´ • Bud’ ϕ LTL formule. Platnost ϕ pro dane w ∈ Σω je definovana indukcı ke strukture ϕ: ´ ϕ ´ ´ ˇ w |= true w |= p ⇐⇒ p ∈ w(0) w |= ¬ϕ ⇐⇒ w |= ϕ w |= ϕ1 ∧ ϕ2 ⇐⇒ w |= ϕ1 ∧ w |= ϕ2 w |= Xϕ ⇐⇒ w1 |= ϕ w |= ϕ1 U ϕ2 ⇐⇒ ∃j : wj |= ϕ2 ∧ ∀i < j : wi |= ϕ1
  • 447. 85 Semantika LTL ´ • Bud’ ϕ LTL formule. Platnost ϕ pro dane w ∈ Σω je definovana indukcı ke strukture ϕ: ´ ϕ ´ ´ ˇ w |= true w |= p ⇐⇒ p ∈ w(0) w |= ¬ϕ ⇐⇒ w |= ϕ w |= ϕ1 ∧ ϕ2 ⇐⇒ w |= ϕ1 ∧ w |= ϕ2 w |= Xϕ ⇐⇒ w1 |= ϕ w |= ϕ1 U ϕ2 ⇐⇒ ∃j : wj |= ϕ2 ∧ ∀i < j : wi |= ϕ1 • Charakteristicky jazyk LTL formule ϕ je mnozina nekonec ´ ch slov Lϕ = {w ∈ Σω | w |= ϕ} ´ ˇ ˇny ϕ
  • 448. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚
  • 449. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2
  • 450. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 kde A ∈ Assn. • Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı ˇ ˇna ´ α = c0, σ0 c1, σ1 c2, σ2 c3, σ3 · · ·, kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0. ˇ ´
  • 451. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 kde A ∈ Assn. • Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı ˇ ˇna ´ α = c0, σ0 c1, σ1 c2, σ2 c3, σ3 · · ·, kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0. ˇ ´ • Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli ˇ ´ ˇ ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}. ϕ ϕ ϕ
  • 452. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 kde A ∈ Assn. • Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı ˇ ˇna ´ α = c0, σ0 c1, σ1 c2, σ2 c3, σ3 · · ·, kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0. ˇ ´ • Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli ˇ ´ ˇ ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}. ϕ ϕ ϕ • Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ. ˇ ˇ ˇ ´ ˇ ϕ
  • 453. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 kde A ∈ Assn. • Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı ˇ ˇna ´ α = c0, σ0 c1, σ1 c2, σ2 c3, σ3 · · ·, kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0. ˇ ´ • Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli ˇ ´ ˇ ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}. ϕ ϕ ϕ • Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ. ˇ ˇ ˇ ´ ˇ ϕ • Konfigurace c, σ splnuje LTL formuli ϕ pri interpretaci I, psano c, σ |=I ϕ, jestlize pro kazdy ˇ ˇ ´ ˇ ˇ ´ beh α zac´najıcı v c, σ platı α |=I ϕ. ˇ ˇı ´ ´ ´
  • 454. 86 LTL jako jazyk vlastnostı paralelnıch a neukonc ´ ch ´ ´ ˇeny programu ˚ • Uvaz´me „instanci“ LTL logiky, kde At = Assn, tj. ´ ˇı ϕ ::= true | A | ¬ϕ | ϕ1∧ϕ2 | X ϕ | ϕ1 U ϕ2 kde A ∈ Assn. • Necht’ c ∈ PCom a σ ∈ Σ. Beh programu c ze stavu σ je nekonec ´ posloupnost konfiguracı ˇ ˇna ´ α = c0, σ0 c1, σ1 c2, σ2 c3, σ3 · · ·, kde c0 = c, σ0 = σ a ci, σi → ci+1, σi+1 pro kazde i ∈ N0. ˇ ´ • Bud’ ϕ LTL formule, I interpretace a α beh. Charakteristicke slovo behu α vzhledem k formuli ˇ ´ ˇ ϕ a interpretaci I je slovo αI ∈ Σω, kde αI (i) = {A ∈ Assn(ϕ) | σi |=I A}. ϕ ϕ ϕ • Beh α splnuje LTL formuli ϕ pri interpretaci I, psano α |=I ϕ, jestlize αI |= ϕ. ˇ ˇ ˇ ´ ˇ ϕ • Konfigurace c, σ splnuje LTL formuli ϕ pri interpretaci I, psano c, σ |=I ϕ, jestlize pro kazdy ˇ ˇ ´ ˇ ˇ ´ beh α zac´najıcı v c, σ platı α |=I ϕ. ˇ ˇı ´ ´ ´ • Mnozina vlastnostı behu vyjadritelnych v LTL je uzavrena na negaci. Mnozina vlastnostı ˇ ´ ˇ ˚ ´ ˇ ´ ˇ ´ ˇ ´ konfiguracı vyjadritelnych v LTL na negaci uzavrena nenı (v dusledku „vestavene“ univerzalnı ´ ´ ˇ ´ ˇ ´ ´ ˚ ˇ ´ ´ ´ kvantifikace pres behy)! ˇ ˇ
  • 455. 87 Pr´klady: ˇı • c ≡ while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I. ˇ ´
  • 456. 87 Pr´klady: ˇı • c ≡ while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I. ˇ ´ • c ≡ X := 2. Pak c, σ |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh ˇ ´ ˇ´ ´ ˇ zac´najıcı v c, σ . ˇı ´ ´
  • 457. 87 Pr´klady: ˇı • c ≡ while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I. ˇ ´ • c ≡ X := 2. Pak c, σ |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh ˇ ´ ˇ´ ´ ˇ zac´najıcı v c, σ . ˇı ´ ´ • c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı ˇ ´ ˇ ´ c, σ |=I (X = 2) ⇒ G (X = 2)
  • 458. 87 Pr´klady: ˇı • c ≡ while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I. ˇ ´ • c ≡ X := 2. Pak c, σ |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh ˇ ´ ˇ´ ´ ˇ zac´najıcı v c, σ . ˇı ´ ´ • c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı ˇ ´ ˇ ´ c, σ |=I (X = 2) ⇒ G (X = 2) • c ≡ X := 2 X := 3 while tt do skip. Uvazme stav σ kde σ(X) = 2. Pak c, σ |=I ˇ F (X = 3) a c, σ |= G (X = 3) pro kazde I. I ˇ ´
  • 459. 87 Pr´klady: ˇı • c ≡ while tt do X := X + 1. Pak c, σ |=I F (X > 5) pro kazde σ a I. ˇ ´ • c ≡ X := 2. Pak c, σ |=I G (X = 3) pro kazde σ a I, nebot’ neexistuje zadny beh ˇ ´ ˇ´ ´ ˇ zac´najıcı v c, σ . ˇı ´ ´ • c ≡ X := 2 while tt do skip. Pak c, σ |=I G (X = 3) pro kazde σ a I. Napr. ale platı ˇ ´ ˇ ´ c, σ |=I (X = 2) ⇒ G (X = 2) • c ≡ X := 2 X := 3 while tt do skip. Uvazme stav σ kde σ(X) = 2. Pak c, σ |=I ˇ F (X = 3) a c, σ |= G (X = 3) pro kazde I. I ˇ ´ Problem: ´ Jak efektivne overit, zda c, σ |=I ϕ ? ˇ ˇˇ
  • 460. 88 ω-regularnı jazyky a Buchiho automaty ´ ´ ¨
  • 461. 88 ω-regularnı jazyky a Buchiho automaty ´ ´ ¨ • Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde ¨ ˇ Q je konec ´ mnozina stavu; ˇna ˇ ˚ Σ je konec ´ abeceda; ˇna a δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q); ˇ ´ ´ ´ q0 ∈ Q je poc ´ tec ´ stav; ˇa ˇnı F ⊆ Q je mnozina koncovych stavu. ˇ ´ ˚
  • 462. 88 ω-regularnı jazyky a Buchiho automaty ´ ´ ¨ • Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde ¨ ˇ Q je konec ´ mnozina stavu; ˇna ˇ ˚ Σ je konec ´ abeceda; ˇna a δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q); ˇ ´ ´ ´ q0 ∈ Q je poc ´ tec ´ stav; ˇa ˇnı F ⊆ Q je mnozina koncovych stavu. ˇ ´ ˚ • Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova, ´ ˇet ˇ ˇna ˚ ´ w(i) ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery ˇ ˇ ´ ´ ˇet ´ ´ ˇ ˇ ˇ ´ koncovy stav vyskytuje ∞-krat. ´ ´
  • 463. 88 ω-regularnı jazyky a Buchiho automaty ´ ´ ¨ • Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde ¨ ˇ Q je konec ´ mnozina stavu; ˇna ˇ ˚ Σ je konec ´ abeceda; ˇna a δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q); ˇ ´ ´ ´ q0 ∈ Q je poc ´ tec ´ stav; ˇa ˇnı F ⊆ Q je mnozina koncovych stavu. ˇ ´ ˚ • Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova, ´ ˇet ˇ ˇna ˚ ´ w(i) ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery ˇ ˇ ´ ´ ˇet ´ ´ ˇ ˇ ˇ ´ koncovy stav vyskytuje ∞-krat. ´ ´ • Automat A akceptuje jazyk L(A) ⊆ Σω slozeny ze slov, pro ktera existuje akceptujıcı vypoc ˇ ´ ´ ´ ´ ´ ˇet.
  • 464. 88 ω-regularnı jazyky a Buchiho automaty ´ ´ ¨ • Buchiho automat je petice A = (Q, Σ, δ, q0, F), kde ¨ ˇ Q je konec ´ mnozina stavu; ˇna ˇ ˚ Σ je konec ´ abeceda; ˇna a δ ⊆ Q×Σ×Q je prechodova relace (mısto (p, a, q) ∈ δ budeme psat p → q); ˇ ´ ´ ´ q0 ∈ Q je poc ´ tec ´ stav; ˇa ˇnı F ⊆ Q je mnozina koncovych stavu. ˇ ´ ˚ • Vypoc automatu A na slove w ∈ Σω je nekonec ´ posloupnost stavu p0 p1 p2 · · · takova, ´ ˇet ˇ ˇna ˚ ´ w(i) ze p0 = q0 a pi → pi+1 pro kazde i ∈ N0. Vypoc je akceptujıcı, jestlize se v nem nektery ˇ ˇ ´ ´ ˇet ´ ´ ˇ ˇ ˇ ´ koncovy stav vyskytuje ∞-krat. ´ ´ • Automat A akceptuje jazyk L(A) ⊆ Σω slozeny ze slov, pro ktera existuje akceptujıcı vypoc ˇ ´ ´ ´ ´ ´ ˇet. • Bud’ Σ konec ´ abeceda. L ⊆ Σω je ω-regularnı. pokud existuje Buchiho automat A takovy, ˇna ´ ´ ¨ ´ ze L(A) = L. ˇ
  • 465. 89 Pr´klad: Uvazme nasledujıcı Buchiho automat A: ˇı ˇ ´ ´ ´ ¨ 1 0,1 1 Pak L(A) obsahuje prave ta nekonec ´ slova nad abecedou 0, 1, ve kterych se 0 vyskytuje ´ ˇ ˇna ´ konec ˇ -krat. ˇne ´
  • 466. 90 Vlastnosti Buchiho automatu a ω-regularnıch jazyku ¨ ˚ ´ ´ ˚
  • 467. 90 Vlastnosti Buchiho automatu a ω-regularnıch jazyku ¨ ˚ ´ ´ ˚ Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take ˇ ´ ´ ´ ω-regularnı jazyky. ´ ´
  • 468. 90 Vlastnosti Buchiho automatu a ω-regularnıch jazyku ¨ ˚ ´ ´ ˚ Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take ˇ ´ ´ ´ ω-regularnı jazyky. ´ ´ Dukaz. Necht’ L1 = L(A1) a L2 = L(A2), kde A1 = (Q1, Σ, δ1, q1, F1) a A2 = (Q2, Σ, δ2, q2, F2). ˚ Bez ujmy na obecnosti muzeme predpokladat, ze Q1 ∩ Q2 = ∅. Zrejme L1 ∪ L2 = L(A∪), kde ´ ˚ˇ ˇ ´ ˇ ˇ ˇ ∪ a a A = (Q1 ∪ Q2 ∪ {q0}, Σ, δ1 ∪ δ2 ∪ {(q0, a, q) | q1 → q ∨ q2 → q}, q0, F1 ∪ F 2 ) kde q0 ∈ Q1 ∪ Q2.
  • 469. 90 Vlastnosti Buchiho automatu a ω-regularnıch jazyku ¨ ˚ ´ ´ ˚ Veta 18. Necht’ L1, L2 jsou ω-regularnı jazyky nad abecedou Σ. Pak L1 ∪ L2 a L1 ∩ L2 jsou take ˇ ´ ´ ´ ω-regularnı jazyky. ´ ´ Dukaz. Necht’ L1 = L(A1) a L2 = L(A2), kde A1 = (Q1, Σ, δ1, q1, F1) a A2 = (Q2, Σ, δ2, q2, F2). ˚ Bez ujmy na obecnosti muzeme predpokladat, ze Q1 ∩ Q2 = ∅. Zrejme L1 ∪ L2 = L(A∪), kde ´ ˚ˇ ˇ ´ ˇ ˇ ˇ ∪ a a A = (Q1 ∪ Q2 ∪ {q0}, Σ, δ1 ∪ δ2 ∪ {(q0, a, q) | q1 → q ∨ q2 → q}, q0, F1 ∪ F 2 ) kde q0 ∈ Q1 ∪ Q2. Dale L1 ∩ L2 = L(A∩), kde ´ ∩ ∩ A = (Q1×Q2 × {1, 2}, Σ, δ , (q1, q2, 1), F1×Q2×{1}) a δ∩ je urc ˇena predpisem ˇ a a a • (p, q, 1) → (p , q , 1), jestlize p → p , q → q a p ∈ F1; ˇ a a a • (p, q, 1) → (p , q , 2), jestlize p → p , q → q a p ∈ F1; ˇ a a a • (p, q, 2) → (p , q , 2), jestlize p → p , q → q a q ∈ F2; ˇ a a a • (p, q, 2) → (p , q , 1), jestlize p → p , q → q a q ∈ F2. ˇ
  • 470. 91 Veta 19. Necht’ A je Buchiho automat. Problem, zda L(A) = ∅ je rozhodnutelny (v polynomialnım ˇ ¨ ´ ´ ´ ´ c ˇase).
  • 471. 91 Veta 19. Necht’ A je Buchiho automat. Problem, zda L(A) = ∅ je rozhodnutelny (v polynomialnım ˇ ¨ ´ ´ ´ ´ c ˇase). Dukaz. Necht’ A = (Q, Σ, δ, q0, F). Stac´ si uvedomit, ze L(A) = ∅ prave kdyz existuje f ∈ F ˚ ˇı ˇ ˇ ´ ˇ ˇ takovy, ze f je v (grafu) automatu A dosazitelny z q0 a existuje cesta z f do f delky alespon ´ ˇ ˇ ´ ´ ˇ 1. Oba tyto (grafove) problemy jsou snadno rozhodnutelne v polynomialnım c ´ ´ ´ ´ ´ ˇase (dokonce v nedeterministickem logaritmickem prostoru). ´ ´
  • 472. 92 Vztah LTL a Buchiho automatu ¨ ˚ Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat ˇ ´ ´ ¨ Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ. ´
  • 473. 92 Vztah LTL a Buchiho automatu ¨ ˚ Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat ˇ ´ ´ ¨ Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ. ´ Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou ˇı ˇ Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem ´ ¨ {m} {c}, {m,c} 0, {c}, {m}, {m,c} 0, {m} 0, {c}, {m}, {m,c}
  • 474. 92 Vztah LTL a Buchiho automatu ¨ ˚ Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat ˇ ´ ´ ¨ Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ. ´ Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou ˇı ˇ Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem ´ ¨ {m} {c}, {m,c} 0, {c}, {m}, {m,c} 0, {m} 0, {c}, {m}, {m,c} Overovanı platnosti LTL formulı ˇˇ ´ ´ ´ • Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗ ´ ˇ ˇ ´ ´ c , σ }, ma konec ˇ mnoho konfiguracı. ´ ˇne ´
  • 475. 92 Vztah LTL a Buchiho automatu ¨ ˚ Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat ˇ ´ ´ ¨ Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ. ´ Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou ˇı ˇ Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem ´ ¨ {m} {c}, {m,c} 0, {c}, {m}, {m,c} 0, {m} 0, {c}, {m}, {m,c} Overovanı platnosti LTL formulı ˇˇ ´ ´ ´ • Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗ ´ ˇ ˇ ´ ´ c , σ }, ma konec ˇ mnoho konfiguracı. ´ ˇne ´ • Necht’ ϕ je LTL formule a I interpretace. Definujeme Buchiho automat A = (S, Σϕ, δ, c, σ , S), ¨ M kde c , σ → c , σ prave kdyz M = {A ∈ Assn(ϕ) | σ |=I ϕ}. ´ ˇ ˇ
  • 476. 92 Vztah LTL a Buchiho automatu ¨ ˚ Veta 20. Bud’ ϕ LTL formule. Jazyk Lϕ je ω-regularnı a lze algoritmicky sestrojit Buchiho automat ˇ ´ ´ ¨ Aϕ velikosti O (2|ϕ|), ktery akceptuje Lϕ. ´ Pr´klad: Uvazme formuli ϕ = F (m ∧ G ¬c). Pak jazyk Lϕ (nad abecedou ˇı ˇ Σϕ = {∅, {m}, {c}, {m, c}}) je akceptovan Buchiho automatem ´ ¨ {m} {c}, {m,c} 0, {c}, {m}, {m,c} 0, {m} 0, {c}, {m}, {m,c} Overovanı platnosti LTL formulı ˇˇ ´ ´ ´ • Bud’ c ∈ PCom a σ ∈ Σ takove, ze prechodovy system (S, {τ}, →), kde S = { c , σ | c, σ →∗ ´ ˇ ˇ ´ ´ c , σ }, ma konec ˇ mnoho konfiguracı. ´ ˇne ´ • Necht’ ϕ je LTL formule a I interpretace. Definujeme Buchiho automat A = (S, Σϕ, δ, c, σ , S), ¨ M kde c , σ → c , σ prave kdyz M = {A ∈ Assn(ϕ) | σ |=I ϕ}. ´ ˇ ˇ • Platı c, σ |=I ϕ prave kdyz L(A) ∩ L(A¬ϕ) = ∅. ´ ´ ˇ ˇ
  • 477. 93 Pr´klad: ˇı • Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde σ(X) = 2.
  • 478. 93 Pr´klad: ˇı • Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde σ(X) = 2. • Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı ˇı ´ w, σ → if tt then (X := 1; X := 2; w) else skip, σ → X := 1; X := 2; w, σ → skip; X := 2; w, σ[1/X] → X := 2; w, σ[1/X] → skip; w, σ → w, σ Automat A tedy vypada nasledovne: ´ ´ ˇ {X=2} {X=2} {X=2} {X=1} {X=1} {X=2}
  • 479. 93 Pr´klad: ˇı • Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde σ(X) = 2. • Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı ˇı ´ w, σ → if tt then (X := 1; X := 2; w) else skip, σ → X := 1; X := 2; w, σ → skip; X := 2; w, σ[1/X] → X := 2; w, σ[1/X] → skip; w, σ → w, σ Automat A tedy vypada nasledovne: ´ ´ ˇ {X=2} {X=2} {X=2} {X=1} {X=1} {X=2} • Dale ¬ϕ ≡ F (X=1∧ G (¬(X=2)), lze tedy pouz´t (mırne modifikovany) automat z predchozıho ´ ˇı ´ ˇ ´ ˇ ´ pr´kladu. ˇı
  • 480. 93 Pr´klad: ˇı • Necht’ c ≡ while tt do (X := 1; X := 2), ϕ ≡ G (X=1 ⇒ F (X=2), I ∈ I a σ ∈ Σ kde σ(X) = 2. • Oznac´me-li w ≡ while tt do (X := 1; X := 2), platı ˇı ´ w, σ → if tt then (X := 1; X := 2; w) else skip, σ → X := 1; X := 2; w, σ → skip; X := 2; w, σ[1/X] → X := 2; w, σ[1/X] → skip; w, σ → w, σ Automat A tedy vypada nasledovne: ´ ´ ˇ {X=2} {X=2} {X=2} {X=1} {X=1} {X=2} • Dale ¬ϕ ≡ F (X=1∧ G (¬(X=2)), lze tedy pouz´t (mırne modifikovany) automat z predchozıho ´ ˇı ´ ˇ ´ ˇ ´ pr´kladu. ˇı • Nynı stac´ sestrojit automat A∩ z dukazu vety 18 a overit, zda L(A∩) = ∅ (coz lze rovnez ´ ˇı ˚ ˇ ˇˇ ˇ ˇˇ provest algoritmicky podle vety 19). ´ ˇ