mapa Aleksandrii

Transkrypt

mapa Aleksandrii
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii
2. Jowisz
Wykład 4. POPRAWNOŚĆ, str. 1
O poprawności
Które z tych odpowiedzi są poprawne?
1. Euklides z Aleksandrii
2. 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 Aleksandrii
2. 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 Aleksandrii
2. 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 Aleksandrii
2. 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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 (fizyczna) 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
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 wartość 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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
y
x=x+y;
1
−5
x
−4
y
−5
−10
110
x
100
y
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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
y
x=x+y;
1
−5
x
−4
y
−5
−10
110
x
100
y
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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
y
x=x+y;
1
−5
x
−4
y
−5
−10
110
x
100
y
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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
y
x=x+y;
1
−5
x
−4
y
−5
−10
110
x
100
y
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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
1
−10
y
x=x+y;
−5
x
−4
y
−5
110
x
100
y
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 wartość zmienia się, zależnie od chwilowej wartości zmiennych:
• wyrażenia, np. x+y
x
1
−10
y
−5
110
x+y
−4
100
• formuły rzędu 0 czyli wyrażenia o wartościach logicznych, np. x+y>0
x
1
−10
y
−5
110
x+y>0
fałsz
prawda
• instrukcje, np. x = x+y;
x
y
x=x+y;
1
−5
x
−4
y
−5
−10
110
x
100
y
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 < y 2
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 < y 2
x
1
−10
∀y∈R x < y 2
fałsz
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 < y 2
x
1
−10
∀y∈R x < y 2
fałsz
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 < y 2
x
1
−10
∀y∈R x < y 2
fałsz
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. program
while (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. program
while (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. program
while (x==x) x=0; albo
• zatrzymać się z wynikiem niepoprawnym — niespełniającym kryterium
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. program
while (x==x) x=0; albo
• zatrzymać się z wynikiem niepoprawnym — niespełniającym kryterium albo
• zatrzymać się z wynikiem poprawnym — spełniającym kryterium.
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
M
Program while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawny
względem asercji n ­ 0 & s = 1 i s = n! .
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
M
Program while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawny
względem asercji n ­ 0 & s = 1 i s = n! .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercji
prawda i fałsz.
Wykład 4. POPRAWNOŚĆ, str. 6
Poprawność programów
DEFINICJA:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
K przeprowadza stan s w jakiś stan s′ spełniający asercję Q.
Przykład:
M
Program while(n>0){ s=s*n; n=n-1; } jest całkowicie poprawny
względem asercji n ­ 0 & s = 1 i s = n! .
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercji
prawda i fałsz.
Program while(x==x)x=0; jest całkowicie poprawny względem asercji
fałsz i prawda.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję 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:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, bo się pętli), to (nieistniejący) stan s′ spełnia asercję fałsz.
Wykład 4. POPRAWNOŚĆ, str. 7
Poprawność programów
DEFINICJA:
M
Program K jest częściowo poprawny względem asercji P i Q wtedy i tylko wtedy, gdy dla dowolnego stanu s zmiennych programu spełniającego
asercję P ,
jeśli K przeprowadza stan s w s′ ,
to stan s′ spełnia asercję Q.
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz, ponieważ:
jeśli program while(x==x)x=0; przeprowadza stan s spełniający
asercję prawda (czyli każdy) w stan s′ (na pewno nie przeprowadza, 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:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz.
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz.
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercji
prawda i fałsz.
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz.
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercji
prawda i fałsz.
TWIERDZENIE:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i
tylko wtedy, gdy
• K jest częściowo poprawny względem P i Q, oraz
• K daje wynik (zatrzymuje się) na każdym stanie zmiennych, dla
którego P jest prawdziwe.
Wykład 4. POPRAWNOŚĆ, str. 8
Poprawność programów
Przykład:
M
Program while(x==x)x=0; jest częściowo poprawny względem asercji
prawda i fałsz.
Program while(x==x)x=0; nie jest całkowicie poprawny względem asercji
prawda i fałsz.
TWIERDZENIE:
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i
tylko wtedy, gdy
• K jest częściowo poprawny względem P i Q, oraz
• K daje wynik (zatrzymuje się) na każdym stanie zmiennych, dla
którego P jest prawdziwe.
Zwykle zależy nam na dowodzie całkowitej poprawności; w tym celu dowodzimy częściową poprawność i zatrzymywanie.
Wykład 4. POPRAWNOŚĆ, str. 9
Poprawność programów
Logika Hoare’a dla częściowej poprawności
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łanka1
przesłanka2
···
przesłankan
wniosek
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łanka1
przesłanka2
···
przesłankan
wniosek
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łanka1
przesłanka2
···
przesłankan
wniosek
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łanka1
przesłanka2
···
przesłankan
wniosek
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 w
ję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łanka1
przesłanka2
···
przesłankan
wniosek
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 w
języku programowania, oraz jedną uniwersalną regułę konsekwencji.
Wykład 4. POPRAWNOŚĆ, str. 11
Poprawność programów
Logika Hoare’a dla częściowej poprawności
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 else L /∗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 else L /∗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 else L /∗Q ∗/
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
(reg. uproszcz. instr. warunkowej)
/∗ P & W ∗/ K /∗Q∗/
P & ¬W ⇒ Q
/∗P ∗/ if (W ) K /∗Q∗/
(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 else L /∗Q ∗/
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
(reg. uproszcz. instr. warunkowej)
/∗ P & W ∗/ K /∗Q∗/
P & ¬W ⇒ Q
/∗P ∗/ if (W ) K /∗Q∗/
(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.
P (w)
?
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.
P (w)
?
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.
Przykład:
M
• /∗ n/5 = 2 ∗/ n = n/5; /∗ n = 2 ∗/
P (w)
?
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”:
P (w)
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
?
x=w;
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.
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;
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”:
P (w)
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
?
x=w;
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.
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 ∗/
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”:
P (w)
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
?
x=w;
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.
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
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”:
P (w)
(aksj. przypisania)
/∗P (w)∗/ x=w; /∗P (x)∗/
?
x=w;
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.
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).
P (x)
?
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 warunkiem, ż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 warunkiem, ż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 warunkiem, ż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
P &W
?
K
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 warunkiem, ż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 .
P
?
W | ¬W
P &W
?
K
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 warunkiem, ż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 .
P
?
W | ¬W
P &W
?
K
P
?
Przykład:
M • Ponieważ
/∗ n ¬ 1000 & n < 1000 ∗/ n = n+1; /∗ n ¬ 1000 ∗/
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 warunkiem, ż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 .
P
?
W | ¬W
P &W
?
K
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują 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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
′
P
?
K
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowuje częściową poprawność.
P
′
P
?
K
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
P
′
P
?
K
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
P
′
P
?
K
Q′
?
Przykład:
M • Ponieważ
/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
P
′
P
?
K
Q′
?
Przykład:
M • Ponieważ
/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/
oraz n = 0 ⇒ n ¬ 1000
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
P
′
P
?
K
Q′
?
Przykład:
M • Ponieważ
/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/
oraz n = 0 ⇒ n ¬ 1000
i n ¬ 1000 & ¬n < 1000 ⇒ n = 1000
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 K
wzmocnienie przed-warunku oraz osłabienie po-warunku
zachowują częściową poprawność.
P
′
P
?
K
Q′
?
Przykład:
M • Ponieważ
/∗ n ¬ 1000 ∗/ while (n<1000) n = n+1; /∗ n ¬ 1000 & ¬n < 1000 ∗/
oraz n = 0 ⇒ n ¬ 1000
i n ¬ 1000 & ¬n < 1000 ⇒ n = 1000
to /∗ n = 0 ∗/ while (n<1000) n = n+1; /∗ n = 1000 ∗/ .
Q
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:
M
1 /∗ 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:
M
1 /∗ 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:
M
1 /∗ 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:
M
1 /∗ 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 =
— z reg. konsekwencji zastos. do
n ­ 0 ⇒ 0 = 0 ¬ n & 0 = 0,
i(i+1)
2
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 =
— z aksj. przypisania
i(i+1)
2
∗/ s=s+i; /∗ 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 =
— z aksj. przypisania
6
i(i+1)
2
∗/ s=s+i; /∗ 0 ¬ i ¬ n & s =
/∗ 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
i(i+1)
2
∗/
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s + i =
— z aksj. przypisania
i(i+1)
2
∗/ s=s+i; /∗ 0 ¬ i ¬ n & s =
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=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)
∗/
2
(i+1)(i+1+1)
2
∗/
— z reg. następstwa zastosowanej do 6 i 5
i(i+1)
2
∗/
Wykład 4. POPRAWNOŚĆ, str. 17
Poprawność programów
Przykład:
M5 /∗ 0 ¬ i ¬ n & s + i =
— z aksj. przypisania
i(i+1)
2
∗/ s=s+i; /∗ 0 ¬ i ¬ n & s =
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=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s = i(i+1)
∗/
2
(i+1)(i+1+1)
2
i(i+1)
2
∗/
∗/
— z reg. następstwa zastosowanej do 6 i 5
8
/∗ 0 ¬ i ¬ n & s =
i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s =
i(i+1)
2
& i < n ∗/
i(i+1)
2
∗/
— z reg. konsek. zastos. do 7 oraz
0 ¬ i ¬ n & s = i(i+1)
&i<n ⇒ 0¬i+1¬n&s+i+1=
2
(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; s=s+i;
/∗ 0 ¬ i ¬ n & s =
i(i+1)
2
& i < n ∗/
i(i+1)
2
∗/
Wykład 4. POPRAWNOŚĆ, str. 18
Poprawność programów
Przykład:
M8 /∗ 0 ¬ i ¬ n & s =
i=i+1; s=s+i;
/∗ 0 ¬ i ¬ n & s =
9
i(i+1)
2
& i < n ∗/
i(i+1)
2
∗/
/∗ 0 ¬ i ¬ n & s = i(i+1)
∗/
2
while (i<n) { i=i+1; s=s+i; }
& ¬i < n ∗/
/∗ 0 ¬ i ¬ n & s = i(i+1)
2
— 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; s=s+i;
/∗ 0 ¬ i ¬ n & s =
9
i(i+1)
2
& i < n ∗/
i(i+1)
2
∗/
∗/
/∗ 0 ¬ i ¬ n & s = i(i+1)
2
while (i<n) { i=i+1; s=s+i; }
/∗ 0 ¬ i ¬ n & s = i(i+1)
& ¬i < n ∗/
2
— 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)
& ¬i < n ⇒ s =
2
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 =
10 /∗ 0 ¬ i ¬ n & s =
i(i+1)
2
∗/
while (i<n) { i=i+1; s=s+i; }
/∗ s = n(n+1)
∗/
2
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 =
10 /∗ 0 ¬ i ¬ n & s =
i(i+1)
2
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 =
10 /∗ 0 ¬ i ¬ n & s =
i(i+1)
2
∗/
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ść
n(n + 1)
s=
(o ile się zatrzymuje).
2
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)
M
Program K jest częściowo poprawny względem asercji
P i Q wtedy i tylko
wtedy, gdy ∀s P (s) & K(s) istnieje =⇒ Q(K(s))
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)
M
Program K jest częściowo poprawny względem asercji
P i Q wtedy i tylko
wtedy, gdy ∀s P (s) & K(s) istnieje =⇒ Q(K(s))
DEFINICJA: (przypomnienie)
M
Program K jestcałkowicie poprawny względem asercji
P i Q wtedy i tylko
wtedy, gdy ∀s P (s) =⇒ K(s) istnieje & Q(K(s))
Wykład 4. POPRAWNOŚĆ, str. 20
Poprawność
DEFINICJA: (przypomnienie)
M
Program K jest częściowo poprawny względem asercji
P i Q wtedy i tylko
wtedy, gdy ∀s P (s) & K(s) istnieje =⇒ Q(K(s))
DEFINICJA: (przypomnienie)
M
Program K jestcałkowicie poprawny względem asercji
P i Q wtedy i tylko
wtedy, gdy ∀s P (s) =⇒ K(s) istnieje & Q(K(s))
TWIERDZENIE: (przypomnienie)
M
Program K jest całkowicie poprawny względem asercji P i Q wtedy i
tylko 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ącego
niezmiennik.
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ącego
niezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)
M
// n ­ 2
p=2; q=n; x=n+n;
Licznik pętli: q − p + 1 .
// 1 < p ¬ q + 1 & x = p · q
Maleje, bo
while (p<=q && x!=n) {
albo q maleje, albo p rośnie.
if (n<x) { q=q-1; x=x-p; }
Jeśli spełniony jest niezmiennik,
else { p=p+1; x=x+q; }
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ącego
niezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)
M
// n ­ 2
p=2; q=n; x=n+n;
Licznik pętli: q − p + 1 .
// 1 < p ¬ q + 1 & x = p · q
Maleje, bo
while (p<=q && x!=n) {
albo q maleje, albo p rośnie.
if (n<x) { q=q-1; x=x-p; }
Jeśli spełniony jest niezmiennik,
else { p=p+1; x=x+q; }
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ącego
niezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)
M
// n ­ 2
p=2; q=n; x=n+n;
Licznik pętli: q − p + 1 .
// 1 < p ¬ q + 1 & x = p · q
Maleje, bo
while (p<=q && x!=n) {
albo q maleje, albo p rośnie.
if (n<x) { q=q-1; x=x-p; }
Jeśli spełniony jest niezmiennik,
else { p=p+1; x=x+q; }
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ącego
niezmiennik.
Przykład: (sprawdzanie, czy n jest liczbą pierwszą)
M
// n ­ 2
p=2; q=n; x=n+n;
Licznik pętli: q − p + 1 .
// 1 < p ¬ q + 1 & x = p · q
Maleje, bo
while (p<=q && x!=n) {
albo q maleje, albo p rośnie.
if (n<x) { q=q-1; x=x-p; }
Jeśli spełniony jest niezmiennik,
else { p=p+1; x=x+q; }
to q − p + 1 ­ 0 .
}

Podobne dokumenty