SW wykład 12 - Slajd11: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mengel (dyskusja | edycje)
Nie podano opisu zmian
 
Tarlecki (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 2: Linia 2:


[[Grafika:sw1210.png|frame|center|]]
[[Grafika:sw1210.png|frame|center|]]
Przypomnijmy, że na poprzednim wykładzie (wykład 11, slajdy 5, 6)
wprowadziliśmy pewne uogólnienie naszego języka TINY zastępując w nim
liczby całkowite z odpowiednimi predykatami i operacjami
arytmetycznymi dowolnym pierwotnym typem danych określonym jako
algebra nad dowolną sygnaturą. Wszelkie pojęcia semantyczne
wprowadzone dla języka TINY przenoszą się w sposób oczywisty na takie
jego uogólnienie. Dotyczy to także pojęcia całkowitej poprawności
instrukcji języka względem warunków wstępnego i końcowego zadanych
formułami pierwszego rzędu.
Zastanówmy się jeszcze, jak system dowodzenia dla stwierdzeń
całkowitej poprawności można stosować dla takiego uogólnienia języka
TINY na dowolny pierwotny typ danych. Problemem jest reguła dla
instrukcji pętli, której na ogół nie da się nawet sformułować dla
dowolnego pierwotnego typu danych. Dlatego też wymagać tu będziemy, by
pierwotny typ danych "definiował" predykaty i operacje arytmetyczne
wykorzystywane w podstawowej wersji języka TINY. Dla dowolnej
sygnatury wprowadzamy zatem jej rozszerzenie o odpowiednie predykaty,
stałe i operacje arytmetyczne, rozważamy dowolną algebrę nad tak
rozszerzoną sygnaturą, i rozpatrujemy uogólnienie języka TINY tylko
dla takich pierwotnych typów danych.
Niestety, jak łatwo się przekonać, reguła dla instrukcji pętli w tak
uogólnionym języku nie musi być poprawna: może pozwolić na "dowód"
nieprawdziwych stwierdzeń całkowitej poprawności instrukcji. Problem w
tym, że z powyższej konstrukcji nie wynika, że zasada indukcji może
być stosowana dla wartości pierwotnego typu danych interpretowanych
jako liczby naturalne (określeniu tych wartości służy predykat
<math>nat</math>).

Aktualna wersja na dzień 22:08, 16 paź 2006

<<powrót do strony wykładu

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

Przypomnijmy, że na poprzednim wykładzie (wykład 11, slajdy 5, 6) wprowadziliśmy pewne uogólnienie naszego języka TINY zastępując w nim liczby całkowite z odpowiednimi predykatami i operacjami arytmetycznymi dowolnym pierwotnym typem danych określonym jako algebra nad dowolną sygnaturą. Wszelkie pojęcia semantyczne wprowadzone dla języka TINY przenoszą się w sposób oczywisty na takie jego uogólnienie. Dotyczy to także pojęcia całkowitej poprawności instrukcji języka względem warunków wstępnego i końcowego zadanych formułami pierwszego rzędu.

Zastanówmy się jeszcze, jak system dowodzenia dla stwierdzeń całkowitej poprawności można stosować dla takiego uogólnienia języka TINY na dowolny pierwotny typ danych. Problemem jest reguła dla instrukcji pętli, której na ogół nie da się nawet sformułować dla dowolnego pierwotnego typu danych. Dlatego też wymagać tu będziemy, by pierwotny typ danych "definiował" predykaty i operacje arytmetyczne wykorzystywane w podstawowej wersji języka TINY. Dla dowolnej sygnatury wprowadzamy zatem jej rozszerzenie o odpowiednie predykaty, stałe i operacje arytmetyczne, rozważamy dowolną algebrę nad tak rozszerzoną sygnaturą, i rozpatrujemy uogólnienie języka TINY tylko dla takich pierwotnych typów danych.

Niestety, jak łatwo się przekonać, reguła dla instrukcji pętli w tak uogólnionym języku nie musi być poprawna: może pozwolić na "dowód" nieprawdziwych stwierdzeń całkowitej poprawności instrukcji. Problem w tym, że z powyższej konstrukcji nie wynika, że zasada indukcji może być stosowana dla wartości pierwotnego typu danych interpretowanych jako liczby naturalne (określeniu tych wartości służy predykat nat).