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
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 ´ ˇ ˇ ˚
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.
˚ ˚ ´ ´ ´
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
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
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, σ
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, σ → σ.
´
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}
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
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.
´ ´ ´ ´ ´ ´
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´“).
ˇ ´ ´ ˇı ˇı
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.
ˇ ´ ˚
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)
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 ϕ ?
ˇ ˇˇ
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 ´
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).
´ ˇ