119
Wykład 4. POPRAWNOŚĆ, str.1 O poprawności Które z tych odpowiedzi są poprawne? 1. Euklides z Aleksandrii 2. Jowisz

Wykład4.POPRAWNOŚĆ,str.1 Opoprawności · while(x==x)x=0; albo ... MProgram Kjest całkowiciepoprawnywzględem asercji Pi Qwtedy i tyl-ko wtedy, gdy dla dowolnego stanu szmiennych

  • 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

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

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

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 .