Upload
ngodang
View
213
Download
0
Embed Size (px)
Citation preview
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii2. Jowisz
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii2. Jowisz
1 jest poprawną odpowiedzią na pytanie
„kto stworzył podwaliny klasycznej geometrii”
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii2. Jowisz
1 jest poprawną odpowiedzią na pytanie
„kto stworzył podwaliny klasycznej geometrii”
i jest niepoprawną odpowiedzią na pytanie
„ jaka jest najmasywniejsza planeta w naszym Ukł. Słonecznym?”
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii2. Jowisz
1 jest poprawną odpowiedzią na pytanie
„kto stworzył podwaliny klasycznej geometrii”
i jest niepoprawną odpowiedzią na pytanie
„ jaka jest najmasywniejsza planeta w naszym Ukł. Słonecznym?”
2 – na odwrót.
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii2. Jowisz
1 jest poprawną odpowiedzią na pytanie
„kto stworzył podwaliny klasycznej geometrii”
i jest niepoprawną odpowiedzią na pytanie
„ jaka jest najmasywniejsza planeta w naszym Ukł. Słonecznym?”
2 – na odwrót.
Poprawność nigdy nie jest absolutna.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Poprawność nigdy nie jest absolutna.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Poprawność nigdy nie jest absolutna.Poprawność zawsze zależy od przyjętych kryteriów.
Wykład 4. POPRAWNOŚĆ, str. 2
Poprawność programów
Czy ta mapa jest poprawna?
• niepoprawna mapa Podhala,• niepoprawna mapa Mazur,• niepoprawna mapa hipsometryczna (fizycz-na) Kaszub,
• poprawna mapa przeglądowa okolic Gdań-ska.
Poprawność nigdy nie jest absolutna.Poprawność zawsze zależy od przyjętych kryteriów.To dotyczy również poprawności programów.
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 3
Poprawność programów
Kryteria poprawności programu — asercje
W programie mamy do czynienia z następującymi napisami, których war-tość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x y x+y
1 −5 −4−10 110 100
• formuły rzędu 0 czyli wy-rażenia o wartościach logicz-nych, np. x+y>0
x y x+y>0
1 −5 fałsz−10 110 prawda
• instrukcje, np. x = x+y;
x y x=x+y;
1 −5x y
−4 −5
−10 110x y
100 110
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami;
– formuły z kwantyfikatorami też są asercjami
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami;
– formuły z kwantyfikatorami też są asercjami; np. ∀y∈R x < y2
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami;
– formuły z kwantyfikatorami też są asercjami; np. ∀y∈R x < y2
x ∀y∈R x < y2
1 fałsz−10 prawda
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami;
– formuły z kwantyfikatorami też są asercjami; np. ∀y∈R x < y2
x ∀y∈R x < y2
1 fałsz−10 prawda
Niezmienniki pętli są asercjami.
Wykład 4. POPRAWNOŚĆ, str. 4
Poprawność programów
Kryteria poprawności programu — asercje
W dyskusji o programie mamy jeszcze do czynienia z
• asercjami (inaczej: formułami rzędu 1) mającymi wartość logiczną,ale nie zawsze możliwą do wyliczenia przez program;
– formuły rzędu 0 są asercjami;
– formuły z kwantyfikatorami też są asercjami; np. ∀y∈R x < y2
x ∀y∈R x < y2
1 fałsz−10 prawda
Niezmienniki pętli są asercjami.
Asercje używane są do formułowania kryteriów poprawności programów.
Wykład 4. POPRAWNOŚĆ, str. 5
Poprawność programów
Załóżmy, że posiadamy jakieś kryterium poprawności wyników obliczeń(np. „program ma obliczać funkcję . . . ”).
Wykład 4. POPRAWNOŚĆ, str. 5
Poprawność programów
Załóżmy, że posiadamy jakieś kryterium poprawności wyników obliczeń(np. „program ma obliczać funkcję . . . ”).
Na danym stanie zmiennych s program K może
• nie zatrzymać się — wejść w nieskończone obliczenie; np. programwhile (x==x) x=0;
Wykład 4. POPRAWNOŚĆ, str. 5
Poprawność programów
Załóżmy, że posiadamy jakieś kryterium poprawności wyników obliczeń(np. „program ma obliczać funkcję . . . ”).
Na danym stanie zmiennych s program K może
• nie zatrzymać się — wejść w nieskończone obliczenie; np. programwhile (x==x) x=0;
Wykład 4. POPRAWNOŚĆ, str. 5
Poprawność programów
Załóżmy, że posiadamy jakieś kryterium poprawności wyników obliczeń(np. „program ma obliczać funkcję . . . ”).
Na danym stanie zmiennych s program K może
• nie zatrzymać się — wejść w nieskończone obliczenie; np. programwhile (x==x) x=0; albo
• zatrzymać się z wynikiem niepoprawnym — niespełniającym kry-terium
Wykład 4. POPRAWNOŚĆ, str. 5
Poprawność programów
Załóżmy, że posiadamy jakieś kryterium poprawności wyników obliczeń(np. „program ma obliczać funkcję . . . ”).
Na danym stanie zmiennych s program K może
• nie zatrzymać się — wejść w nieskończone obliczenie; np. programwhile (x==x) x=0; albo
• zatrzymać się z wynikiem niepoprawnym— niespełniającym kry-terium albo
• zatrzymać się z wynikiem poprawnym— spełniającym kryterium.
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
MProgram while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawnywzględem asercji n 0 & s = 1 i s = n! .
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
MProgram while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawnywzględem asercji n 0 & s = 1 i s = n! .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercjiprawda i fałsz .
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
MProgram while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawnywzględem asercji n 0 & s = 1 i s = n! .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercjiprawda i fałsz .
Program while(x==x)x=0; jest całkowicie poprawny względem asercjifałsz i prawda.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tyl-ko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającegoasercję P ,
jeśli K przeprowadza stan s w s′,to stan s′ spełnia asercję Q.
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz , ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniającyasercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowa-dza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz .
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz .
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercjiprawda i fałsz .
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercjiprawda i fałsz .
TWIERDZENIE:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy itylko wtedy, gdy
• K jest częściowo poprawny względem P i Q, oraz
• K daje wynik (zatrzymuje się) na każdym stanie zmiennych, dlaktórego P jest prawdziwe.
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
MProgram while(x==x)x=0; jest częściowo poprawny względem asercjiprawda i fałsz .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercjiprawda i fałsz .
TWIERDZENIE:
MProgram K jest całkowicie poprawny względem asercji P i Q wtedy itylko wtedy, gdy
• K jest częściowo poprawny względem P i Q, oraz
• K daje wynik (zatrzymuje się) na każdym stanie zmiennych, dlaktórego P jest prawdziwe.
Zwykle zależy nam na dowodzie całkowitej poprawności; w tym celu dowo-dzimy częściową poprawność i zatrzymywanie.
Wykład 4. POPRAWNOŚĆ, str. 9
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Dla dowolnych asercji P i Q oraz instrukcji K, zapis
/∗ P ∗/K /∗Q ∗/
czytamy: K jest częściowo poprawna wzgl. P i Q
Wykład 4. POPRAWNOŚĆ, str. 9
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Dla dowolnych asercji P i Q oraz instrukcji K, zapis
/∗ P ∗/K /∗Q ∗/
czytamy: K jest częściowo poprawna wzgl. P i Q
Przykład:
M/∗ n 0 ∗/i=0; while (i<n) { a[i]=0; i=i+1; }/∗ ∀i∈{0,1,2,...,n−1} a[i] = 0 ∗/
Wykład 4. POPRAWNOŚĆ, str. 9
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Dla dowolnych asercji P i Q oraz instrukcji K, zapis
/∗ P ∗/K /∗Q ∗/
czytamy: K jest częściowo poprawna wzgl. P i Q
Przykład:
M/∗ n 0 ∗/i=0; while (i<n) { a[i]=0; i=i+1; }/∗ ∀i∈{0,1,2,...,n−1} a[i] = 0 ∗/
— instrukcja i=0; while (i<n) { a[i]=0; i=i+1; }jest częściowo poprawna względem
n 0 i ∀i∈{0,1,2,...,n−1} a[i] = 0
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
C.A. R. Hoare (zdjęcie z Wikipedii)
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
— składa się z reguł wywodu postaci
(nazwa reguły)przesłanka1przesłanka2· · ·
przesłankanwniosek
C.A. R. Hoare (zdjęcie z Wikipedii)
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
— składa się z reguł wywodu postaci
(nazwa reguły)przesłanka1przesłanka2· · ·
przesłankanwniosek
C.A. R. Hoare (zdjęcie z Wikipedii)
(dla n = 0, czyli w braku przesłanek, regułę nazywamy aksjomatem).
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
— składa się z reguł wywodu postaci
(nazwa reguły)przesłanka1przesłanka2· · ·
przesłankanwniosek
C.A. R. Hoare (zdjęcie z Wikipedii)
(dla n = 0, czyli w braku przesłanek, regułę nazywamy aksjomatem).Jeśli dowiedzione są już wszystkie przesłanki, to reguła zezwala na dołą-czenie wniosku do tez dowiedzionych.
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
— składa się z reguł wywodu postaci
(nazwa reguły)przesłanka1przesłanka2· · ·
przesłankanwniosek
C.A. R. Hoare (zdjęcie z Wikipedii)
(dla n = 0, czyli w braku przesłanek, regułę nazywamy aksjomatem).Jeśli dowiedzione są już wszystkie przesłanki, to reguła zezwala na dołą-czenie wniosku do tez dowiedzionych.
Logika Hoare’a zawiera po jednej regule dla każdego rodzaju instrukcji wjęzyku programowania, oraz jedną uniwersalną regułę konsekwencji.
Wykład 4. POPRAWNOŚĆ, str. 10
Poprawność programów
Logika Hoare’a dla częściowej poprawności
— składa się z reguł wywodu postaci
(nazwa reguły)przesłanka1przesłanka2· · ·
przesłankanwniosek
C.A. R. Hoare (zdjęcie z Wikipedii)
(dla n = 0, czyli w braku przesłanek, regułę nazywamy aksjomatem).Jeśli dowiedzione są już wszystkie przesłanki, to reguła zezwala na dołą-czenie wniosku do tez dowiedzionych.
Logika Hoare’a zawiera po jednej regule dla każdego rodzaju instrukcji wjęzyku programowania, oraz jedną uniwersalną regułę konsekwencji.
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
(reg. pełnej instr. warunkowej)/∗ P &W ∗/K /∗Q∗//∗ P & ¬W ∗/L /∗Q∗/
/∗P ∗/ if (W)K elseL/∗Q ∗/
(reg. uproszcz. instr. warunkowej)/∗ P &W ∗/K /∗Q∗/P & ¬W ⇒ Q
/∗P ∗/ if (W)K /∗Q∗/
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
(reg. pełnej instr. warunkowej)/∗ P &W ∗/K /∗Q∗//∗ P & ¬W ∗/L /∗Q∗/
/∗P ∗/ if (W)K elseL/∗Q ∗/
(reg. uproszcz. instr. warunkowej)/∗ P &W ∗/K /∗Q∗/P & ¬W ⇒ Q
/∗P ∗/ if (W)K /∗Q∗/
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
(reg. pełnej instr. warunkowej)/∗ P &W ∗/K /∗Q∗//∗ P & ¬W ∗/L /∗Q∗/
/∗P ∗/ if (W)K elseL/∗Q ∗/
(reg. uproszcz. instr. warunkowej)/∗ P &W ∗/K /∗Q∗/P & ¬W ⇒ Q
/∗P ∗/ if (W)K /∗Q∗/
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
(reg. następstwa)/∗P ∗/K /∗Q∗//∗Q∗/L /∗R∗//∗P ∗/K L/∗R∗/
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
(reg. pełnej instr. warunkowej)/∗ P &W ∗/K /∗Q∗//∗ P & ¬W ∗/L /∗Q∗/
/∗P ∗/ if (W)K elseL/∗Q ∗/
(reg. uproszcz. instr. warunkowej)/∗ P &W ∗/K /∗Q∗/P & ¬W ⇒ Q
/∗P ∗/ if (W)K /∗Q∗/
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm. x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm. x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
???
P (x)
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm. x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm. x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm.x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Przykład:
M• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm.x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Przykład:
M• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/— jeśli n/5 = 2, to po przypisaniu n = n/5; będzie n = 2;
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm.x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Przykład:
M• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/— jeśli n/5 = 2, to po przypisaniu n = n/5; będzie n = 2;
• /∗ n = 2 ∗/ n = n/5; /∗ n = 0 ∗/
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm.x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Przykład:
M• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/— jeśli n/5 = 2, to po przypisaniu n = n/5; będzie n = 2;
• /∗ n = 2 ∗/ n = n/5; /∗ n = 0 ∗/— jeśli n = 2, to po przypisaniu n = n/5; będzie n = 0
Wykład 4. POPRAWNOŚĆ, str. 12
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Aksjomat przypisania — zastępowanie „pod prąd”:
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
To, co chcemy wiedzieć o wartości zm.x po wykonaniu komendy x=w;
musimy wiedzieć o wartości wyr.w przed wykonaniem tej komendy.
?
x=w;
?
P (w)
P (x)
Przykład:
M• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/— jeśli n/5 = 2, to po przypisaniu n = n/5; będzie n = 2;
• /∗ n = 2 ∗/ n = n/5; /∗ n = 0 ∗/— jeśli n = 2, to po przypisaniu n = n/5; będzie n = 0(więc nie n/5 = 2).
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
?�
�
�
�W | ¬W
?
K
-
?
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
?�
�
�
�W | ¬W
?
K
-
?
P &W
P
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
?�
�
�
�W | ¬W
?
K
-
?
P
P &W
P
P & ¬W
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
?�
�
�
�W | ¬W
?
K
-
?
P
P &W
P
P & ¬W
Przykład:
M • Ponieważ/∗ n ¬ 1000 & n < 1000 ∗/ n = n+1; /∗ n ¬ 1000 ∗/
Wykład 4. POPRAWNOŚĆ, str. 13
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła pętli z niezmiennikiem:
(reg. pętli)/∗ P &W ∗/K /∗P ∗/
/∗P ∗/ while (W)K /∗ P & ¬W ∗/
Jeśli komenda K zachowuje asercję P (pod warun-kiem, że na jej wejściu spełnione jest W ),to przez cały czas działania pętli spełnione będzie P ,a po jej zakończeniu spełnione będzie P & ¬W .
?�
�
�
�W | ¬W
?
K
-
?
P
P &W
P
P & ¬W
Przykład:
M • Ponieważ/∗ n ¬ 1000 & n < 1000 ∗/ n = n+1; /∗ n ¬ 1000 ∗/ ,to/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/ .
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P ′
Q′
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowuje częściową poprawność.
?
K
?
P
P ′
Q′
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P
P ′
Q′
Q
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P
P ′
Q′
Q
Przykład:
M • Ponieważ/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P
P ′
Q′
Q
Przykład:
M • Ponieważ/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/oraz n = 0 ⇒ n ¬ 1000
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P
P ′
Q′
Q
Przykład:
M • Ponieważ/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/oraz n = 0 ⇒ n ¬ 1000i n ¬ 1000 & ¬n < 1000 ⇒ n = 1000
Wykład 4. POPRAWNOŚĆ, str. 14
Poprawność programów
Logika Hoare’a dla częściowej poprawności
Reguła konsekwencji logicznej:
(reg. konsekwencji)P ⇒ P ′
/∗P ′∗/K /∗Q′∗/Q′ ⇒ Q
/∗P ∗/K /∗Q∗/
W stwierdzeniu częściowej poprawności komendy Kwzmocnienie przed-warunku oraz osłabienie po-warunkuzachowują częściową poprawność.
?
K
?
P
P ′
Q′
Q
Przykład:
M • Ponieważ/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/oraz n = 0 ⇒ n ¬ 1000i n ¬ 1000 & ¬n < 1000 ⇒ n = 1000
to /∗ n = 0 ∗/ while (n<1000) n = n+1; /∗ n = 1000 ∗/ .
Wykład 4. POPRAWNOŚĆ, str. 15
Poprawność programów
Proszę przyjrzeć się krytycznie
wszystkim regułom logiki Hoare’a.
Wykład 4. POPRAWNOŚĆ, str. 15
Poprawność programów
Proszę przyjrzeć się krytycznie
wszystkim regułom logiki Hoare’a.
W razie niejasności — pytać.
Wykład 4. POPRAWNOŚĆ, str. 16
Poprawność programów
Przykład:
M1 /∗ i = 0 ¬ n & 0 = 0 ∗/ s=0; /∗ i = 0 ¬ n & s = 0 ∗/— z aksj. przypisania
Wykład 4. POPRAWNOŚĆ, str. 16
Poprawność programów
Przykład:
M1 /∗ i = 0 ¬ n & 0 = 0 ∗/ s=0; /∗ i = 0 ¬ n & s = 0 ∗/— z aksj. przypisania
2 /∗ 0 = 0 ¬ n & 0 = 0 ∗/ i=0; /∗ i = 0 ¬ n & 0 = 0 ∗/— z aksj. przypisania
Wykład 4. POPRAWNOŚĆ, str. 16
Poprawność programów
Przykład:
M1 /∗ i = 0 ¬ n & 0 = 0 ∗/ s=0; /∗ i = 0 ¬ n & s = 0 ∗/— z aksj. przypisania
2 /∗ 0 = 0 ¬ n & 0 = 0 ∗/ i=0; /∗ i = 0 ¬ n & 0 = 0 ∗/— z aksj. przypisania
3 /∗ 0 = 0 ¬ n & 0 = 0 ∗/ i=0; s=0; /∗ i = 0 ¬ n & s = 0 ∗/
— z reg. następstwa zastosowanej do 2 i 1
Wykład 4. POPRAWNOŚĆ, str. 16
Poprawność programów
Przykład:
M1 /∗ i = 0 ¬ n & 0 = 0 ∗/ s=0; /∗ i = 0 ¬ n & s = 0 ∗/— z aksj. przypisania
2 /∗ 0 = 0 ¬ n & 0 = 0 ∗/ i=0; /∗ i = 0 ¬ n & 0 = 0 ∗/— z aksj. przypisania
3 /∗ 0 = 0 ¬ n & 0 = 0 ∗/ i=0; s=0; /∗ i = 0 ¬ n & s = 0 ∗/
— z reg. następstwa zastosowanej do 2 i 1
4 /∗ n 0 ∗/ i=0; s=0; /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/— z reg. konsekwencji zastos. don 0 ⇒ 0 = 0 ¬ n & 0 = 0,
3 oraz
i = 0 ¬ n & s = 0 ⇒ 0 ¬ i ¬ n & s = i(i+1)2
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/ s=s+i; /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/— z aksj. przypisania
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/ s=s+i; /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/— z aksj. przypisania
6 /∗ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2 ∗/i=i+1;
/∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/— z aksj. przypisania
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/ s=s+i; /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/— z aksj. przypisania
6 /∗ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2 ∗/i=i+1;
/∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/— z aksj. przypisania
7 /∗ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2 ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
— z reg. następstwa zastosowanej do 6 i 5
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/ s=s+i; /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/— z aksj. przypisania
6 /∗ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2 ∗/i=i+1;
/∗ 0 ¬ i ¬ n & s+ i = i(i+1)2 ∗/— z aksj. przypisania
7 /∗ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2 ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
— z reg. następstwa zastosowanej do 6 i 5
8 /∗ 0 ¬ i ¬ n & s = i(i+1)2 & i < n ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
— z reg. konsek. zastos. do 7 oraz
0 ¬ i ¬ n & s = i(i+1)2 & i < n ⇒ 0 ¬ i+ 1 ¬ n & s+ i+ 1 = (i+1)(i+1+1)2
Wykład 4. POPRAWNOŚĆ, str. 18
Poprawność programów
Przykład:
M8 /∗ 0 ¬ i ¬ n & s = i(i+1)2 & i < n ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
Wykład 4. POPRAWNOŚĆ, str. 18
Poprawność programów
Przykład:
M8 /∗ 0 ¬ i ¬ n & s = i(i+1)2 & i < n ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
9 /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/while (i<n) { i=i+1; s=s+i; }
/∗ 0 ¬ i ¬ n & s = i(i+1)2 & ¬i < n ∗/
— z reg. pętli zastosowanej do 8
Wykład 4. POPRAWNOŚĆ, str. 18
Poprawność programów
Przykład:
M8 /∗ 0 ¬ i ¬ n & s = i(i+1)2 & i < n ∗/i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/
9 /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/while (i<n) { i=i+1; s=s+i; }
/∗ 0 ¬ i ¬ n & s = i(i+1)2 & ¬i < n ∗/
— z reg. pętli zastosowanej do 8
10 /∗ 0 ¬ i ¬ n & s = i(i+1)2 ∗/while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2 ∗/
— z reg. konsek. zastos. do 9 oraz
0 ¬ i ¬ n & s = i(i+1)2 & ¬i < n ⇒ s = n(n+1)2
Wykład 4. POPRAWNOŚĆ, str. 19
Poprawność programów
Przykład:
M4 /∗ n 0 ∗/ i=0; s=0; /∗ 0 ¬ i ¬ n & s = i(i+1)
2∗/
Wykład 4. POPRAWNOŚĆ, str. 19
Poprawność programów
Przykład:
M4 /∗ n 0 ∗/ i=0; s=0; /∗ 0 ¬ i ¬ n & s = i(i+1)
2∗/
10 /∗ 0 ¬ i ¬ n & s = i(i+1)2∗/
while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2∗/
Wykład 4. POPRAWNOŚĆ, str. 19
Poprawność programów
Przykład:
M4 /∗ n 0 ∗/ i=0; s=0; /∗ 0 ¬ i ¬ n & s = i(i+1)
2∗/
10 /∗ 0 ¬ i ¬ n & s = i(i+1)2∗/
while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2∗/
11 /∗ n 0 ∗/i=0; s=0; while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2∗/
— z reg. następstwa zastosowanej do 4 i 10
Wykład 4. POPRAWNOŚĆ, str. 19
Poprawność programów
Przykład:
M4 /∗ n 0 ∗/ i=0; s=0; /∗ 0 ¬ i ¬ n & s = i(i+1)
2∗/
10 /∗ 0 ¬ i ¬ n & s = i(i+1)2∗/
while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2∗/
11 /∗ n 0 ∗/i=0; s=0; while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)2∗/
— z reg. następstwa zastosowanej do 4 i 10
Udowodniliśmy, że ten program wylicza wartość
s =n(n+ 1)
2(o ile się zatrzymuje).
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tylkowtedy, gdy ∀s
(
P (s) & K(s) istnieje =⇒ Q(K(s)))
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tylkowtedy, gdy ∀s
(
P (s) & K(s) istnieje =⇒ Q(K(s)))
DEFINICJA: (przypomnienie)MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tylkowtedy, gdy ∀s
(
P (s) =⇒ K(s) istnieje & Q(K(s)))
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)MProgram K jest częściowo poprawny względem asercji P i Q wtedy i tylkowtedy, gdy ∀s
(
P (s) & K(s) istnieje =⇒ Q(K(s)))
DEFINICJA: (przypomnienie)MProgram K jest całkowicie poprawny względem asercji P i Q wtedy i tylkowtedy, gdy ∀s
(
P (s) =⇒ K(s) istnieje & Q(K(s)))
TWIERDZENIE: (przypomnienie)MProgram K jest całkowicie poprawny względem asercji P i Q wtedy itylko wtedy, gdy
• K jest częściowo poprawny względem P i Q, oraz
• ∀s(
P (s) =⇒ K(s) istnieje)
.
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli,• jest niemniejsza od zera dla każdego stanu zmiennych spełniającegoniezmiennik.
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli,• jest niemniejsza od zera dla każdego stanu zmiennych spełniającegoniezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)M// n 2p=2; q=n; x=n+n;
// 1 < p ¬ q + 1 & x = p · qwhile (p<=q && x!=n) {if (n<x) { q=q-1; x=x-p; }else { p=p+1; x=x+q; }
}
Licznik pętli: q − p+ 1 .Maleje, boalbo q maleje, albo p rośnie.Jeśli spełniony jest niezmiennik,to q − p+ 1 0 .
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli,• jest niemniejsza od zera dla każdego stanu zmiennych spełniającegoniezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)M// n 2p=2; q=n; x=n+n;
// 1 < p ¬ q + 1 & x = p · qwhile (p<=q && x!=n) {if (n<x) { q=q-1; x=x-p; }else { p=p+1; x=x+q; }
}
Licznik pętli: q − p+ 1 .Maleje, boalbo q maleje, albo p rośnie.Jeśli spełniony jest niezmiennik,to q − p+ 1 0 .
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli,• jest niemniejsza od zera dla każdego stanu zmiennych spełniającegoniezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)M// n 2p=2; q=n; x=n+n;
// 1 < p ¬ q + 1 & x = p · qwhile (p<=q && x!=n) {if (n<x) { q=q-1; x=x-p; }else { p=p+1; x=x+q; }
}
Licznik pętli: q − p+ 1 .Maleje, boalbo q maleje, albo p rośnie.Jeśli spełniony jest niezmiennik,to q − p+ 1 0 .
Wykład 4. POPRAWNOŚĆ, str. 21
Własność stopu programu
Żeby udowodnić, że obliczenie pętli while zatrzymuje się, należy znaleźćlicznik pętli , czyli jakąś całkowitą wielkość zależną od zmiennych programu,taką która
• maleje za każdym obrotem pętli,• jest niemniejsza od zera dla każdego stanu zmiennych spełniającegoniezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)M// n 2p=2; q=n; x=n+n;
// 1 < p ¬ q + 1 & x = p · qwhile (p<=q && x!=n) {if (n<x) { q=q-1; x=x-p; }else { p=p+1; x=x+q; }
}
Licznik pętli: q − p+ 1 .Maleje, boalbo q maleje, albo p rośnie.Jeśli spełniony jest niezmiennik,to q − p+ 1 0 .