SW wykład 12 - Slajd8
Zadanie programistyczne Przykład Problemy z logiką Hoare'a Poprawność całkowita Poprawność całkowita, c.d. Poprawność całkowita, c.d. Reguła dla pętli Poprawność systemu dowodzenia dla Tiny Pełność systemu dowodzenia dla Tiny Przykład Uogólnienie Poprawność i pełność Relacje dobrze ufundowane Dowodzenie poprawności całkowitej Przykład Przykład Kolejny problem Binarne warunki końcowe Warunki poprawności Reguły dowodzenia Reguły dowodzenia, c.d. Przykład Logika algorytmiczna System dowodzenia

Poprawność systemu dowodzenia stwierdzeń o całkowitej poprawności instrukcji języka TINY względem warunków wstępnego i końcowego można łatwo pokazać przez indukcję po strukturze dowodu. Przypadki reguł innych niż reguła dla instrukcji pętli są łatwe i w gruncie rzeczy bardzo podobne do dowodu dla odpowiednich przypadków w dowodzie poprawności systemu dowodzenia logiki Hoare'a (dla stwierdzeń częściowej poprawności) --- patrz wykład 11, slajd 2. Przypadek dla instrukcji przypisania wykorzystuje fakt, że każde podwyrażenie w formule można zastąpić zmienną o wartości równej wartości tego podwyrażenia --- a dalej dowód jest łatwy. Przypadek dla instrukcji pustej jest oczywisty. Przypadek dla instrukcji złożonej wymaga argumentacji podobnej, jak dla częściowej poprawności, ale korzystającej z monotoniczności przeciwobrazu (równie oczywistej jak monotoniczność obrazu). Poprawność reguły dla instrukcji warunkowej znów przebiega jak dla poprawności częściowej. Podobnie przypadek dla reguły wynikania (choć znów korzystamy z monotoniczności przeciwobrazu).
Zajmijmy się więc przypadkiem dla instrukcji pętli. Załóżmy, że zachodzą wszystkie trzy przesłanki tej reguły. Rozpatrzymy dowolny stan początkowy, spełniający niezmiennik przy dowolnej naturalnej wartości licznika . Przez prostą indukcję indukcję względem wartości tej zmiennej w stanie początkowym (ta wartość to liczba naturalna, wykorzystujemy najbardziej standardową zasadę indukcji), korzystając z warunków wyrażonych przesłankami reguły, łatwo pokazać, że wartością znaczenia instrukcji pętli w tym stanie początkowym jest pewien stan końcowy, spełniający niezmiennik pętli z licznikiem zastąpionym stałą zero. To już prawie koniec dowodu: rozpatrzmy bowiem dowolny stan początkowy spełniający podany w konkluzji reguły warunek początkowy. Z definicji semantyki kwantyfikatora egzystencjalnego, istnieje stan różniący się od tego stanu początkowego co najwyżej wartością zmiennej , który spełnia niezmiennik pętli przy pewnej naturalnej wartości tej zmiennej. Na mocy poprzedniego argumentu, wartość znaczenia instrukcji pętli w tym stanie jest określona i jest stanem końcowym spełniającym niezmiennik ze stałą zero wstawioną za zmienną . Ale: zmienna w ogóle nie występuje w samej instrukcji pętli (jest to nowa zmienna); jej wartość w stanie początkowym nie może wpływać na przebieg obliczeń instrukcji pętli. Zatem także dla naszego stanu początkowego, znaczenie instrukcji pętli jest określone i daje stan końcowy także spełniający niezmiennik ze stałą zero wstawioną za zmienną (bo różniący się od wskazanego powyżej stanu końcowego co najwyżej wartością zmiennej , która w tym ostatnim warunku nie występuje).
To kończy dowód dla tego przypadku i dowód poprawności całego systemu podanych reguł dowodzenia całkowitej poprawności instrukcji języka TINY względem warunków początkowego i końcowego.