SW wykład 2 - Slajd24: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arturas (dyskusja | edycje)
Nie podano opisu zmian
Tarlecki (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
{{Szablon:Semantyka i weryfikacja programów/Wykład 2}}
{{Szablon:Semantyka i weryfikacja programów/Wykład 2}}
[[Grafika:sw0223.png|frame|center|]]
[[Grafika:sw0223.png|frame|center|]]
Oczywiście, podana uprzednio definicja relacji przejścia nie jest
jedyną zgodną z naszymi (nieprecyzyjnymi przecież) intuicjami o
obliczeniach instrukcji w języku TINY. Na przykład, reguły dla
konfiguracji zawierających instrukcje warunkowe, przyjmują niejako, że
wyliczenia warunku (wyrażenia logicznego) i sprawdzenia otrzymanej
wartości logicznej odpowiadają jednemu krokowi obliczenia. Można
semantykę napisać inaczej, na przykład rozbijając ten krok na dwa
(obliczenie wartości wyrażenia logicznego w jednym kroku, sprawdzenie,
czy jest to prawda, czy fałsz, w drugim). Można też, jak wspominaliśmy
wcześniej, podać prawdziwie operacyjną semantykę także dla wyrażeń
arytmetycznych i logicznych a następnie wykorzystać ją tu,
wprowadzając obliczenia wartości wyrażeń logicznych jako część
obliczeń semantyki operacyjnej instrukcji.
Kolejna możliwość, opisana na slajdzie, zawiera decyzję, że wyliczenia
wartości wyrażeń i sprawdzenie ich wartości nie zajmują żadnego kroku
obliczeń; relacja przejścia zawiera wówczas od razu kroki
odpowiadające obliczaniu odpowiedniej gałęzi instrukcji warunkowej.
Podobne rozważania można snuć dla instrukcji pętli, podając
odpowiednie modyfikacje definicji relacji przejścia. Dochodzi tu
jeszcze jedna oczywista możliwość: rozwinięcie w jednym kroku pętli do
odpowiadającej jej instrukcji warunkowej (ponownie tę pętlę
zawierającej w jednej z gałęzi).
Formalnie każda w tych możliwości prowadzi do innej semantyki
operacyjnej instrukcji języka TINY. Na przykład, różne będą własności
instrukcji związane z długością ich obliczeń. Można jednak łatwo
sprawdzić, że przy każdym z naszkicowanych wyżej wariantów semantyki
operacyjnej dla instrukcji języka TINY, obliczenia rozpoczynające się
od tej samej konfiguracji prowadzą do tych samych konfiguracji
końcowych.

Wersja z 11:08, 22 sie 2006

<<powrót do strony wykładu

Składnia Składnia konkretna Składnia abstrakcyjna Przyjmowane założenia Przykład wiodący Kategorie składniowe Kategorie składniowe, c.d. Uwagi Indukcja strukturalna Definicje indukcyjne Kategorie semantyczne Wartościowanie zmiennych Semantyka wyrażeń Semantyka wyrażeń logicznych Semantyka instrukcji Prosty fakt Dowód Przezroczystość odwołań Semantyka operacyjna Obliczenia Semantyka operacyjna Tiny Własności Własności, c.d. Warianty definicji

Oczywiście, podana uprzednio definicja relacji przejścia nie jest jedyną zgodną z naszymi (nieprecyzyjnymi przecież) intuicjami o obliczeniach instrukcji w języku TINY. Na przykład, reguły dla konfiguracji zawierających instrukcje warunkowe, przyjmują niejako, że wyliczenia warunku (wyrażenia logicznego) i sprawdzenia otrzymanej wartości logicznej odpowiadają jednemu krokowi obliczenia. Można semantykę napisać inaczej, na przykład rozbijając ten krok na dwa (obliczenie wartości wyrażenia logicznego w jednym kroku, sprawdzenie, czy jest to prawda, czy fałsz, w drugim). Można też, jak wspominaliśmy wcześniej, podać prawdziwie operacyjną semantykę także dla wyrażeń arytmetycznych i logicznych a następnie wykorzystać ją tu, wprowadzając obliczenia wartości wyrażeń logicznych jako część obliczeń semantyki operacyjnej instrukcji.

Kolejna możliwość, opisana na slajdzie, zawiera decyzję, że wyliczenia wartości wyrażeń i sprawdzenie ich wartości nie zajmują żadnego kroku obliczeń; relacja przejścia zawiera wówczas od razu kroki odpowiadające obliczaniu odpowiedniej gałęzi instrukcji warunkowej. Podobne rozważania można snuć dla instrukcji pętli, podając odpowiednie modyfikacje definicji relacji przejścia. Dochodzi tu jeszcze jedna oczywista możliwość: rozwinięcie w jednym kroku pętli do odpowiadającej jej instrukcji warunkowej (ponownie tę pętlę zawierającej w jednej z gałęzi).

Formalnie każda w tych możliwości prowadzi do innej semantyki operacyjnej instrukcji języka TINY. Na przykład, różne będą własności instrukcji związane z długością ich obliczeń. Można jednak łatwo sprawdzić, że przy każdym z naszkicowanych wyżej wariantów semantyki operacyjnej dla instrukcji języka TINY, obliczenia rozpoczynające się od tej samej konfiguracji prowadzą do tych samych konfiguracji końcowych.