SW wykład 11 - Slajd5: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 2: | Linia 2: | ||
[[Grafika:sw1104.png|frame|center|]] | [[Grafika:sw1104.png|frame|center|]] | ||
Zapomnijmy więc na chwilę, że nasz język TINY był definiowany dla | |||
bardzo konkretnego typu danych: liczb całkowitych z zadaną listą | |||
operacji arytmetycznych i predykatów. Uogólnijmy to, przyjmując, że | |||
będziemy teraz pracować z dowolnym wbudowanym pierwotnym typem | |||
danych. To znaczy, definicję języka zacznijmy od podania sygnatury | |||
tego pierwotnego typu danych, która określa pewien zbiór nazw operacji | |||
i nazw predykatów (z ich arnością --- tzn., podając liczbę ich | |||
argumentów). Następnie ustalamy pewną algebrę nad tą sygnaturą: zbiór | |||
wartości (nośnik algebry) i dla każdej nazwy operacji, funkcję na tym | |||
zbiorze, a dla każdej nazwy predykatu, relację na tym zbiorze (o | |||
odpowiedniej, zgodnej z podaną w sygnaturze, liczbie argumentów). | |||
Algebra ta interpretuje semantycznie nasz pierwotny typ danych języka; | |||
nazywać ją będziemy algebrą pierwotnego typu danych. | |||
Całą definicję języka i dalszą analizę łatwo uogólnić dalej, | |||
dopuszczając tu bardziej realistyczny przypadek sygnatur i algebr | |||
wielorodzajowych, gdzie zbiór danych jest podzielony na wiele rodzajów | |||
nazwanych w sygnaturze, a arność operacji i predykatów określa nie | |||
tylko liczbę, ale i rodzaj ich poszczególnych argumentów (plus rodzaj | |||
wyniku dla operacji). Nie będziemy tu dalej analizować tego | |||
"wielorodzajowego" uogólnienia. |
Aktualna wersja na dzień 17:11, 10 paź 2006
Poprawność systemu dowodzenia Hoare'a Dowód Dowód, c.d. Problem z pełnością Uogólnienie TINY TINY Ekspresywność Relatywna pełność logiki Hoare'a Rozszerzenia Ograniczenia

Zapomnijmy więc na chwilę, że nasz język TINY był definiowany dla bardzo konkretnego typu danych: liczb całkowitych z zadaną listą operacji arytmetycznych i predykatów. Uogólnijmy to, przyjmując, że będziemy teraz pracować z dowolnym wbudowanym pierwotnym typem danych. To znaczy, definicję języka zacznijmy od podania sygnatury tego pierwotnego typu danych, która określa pewien zbiór nazw operacji i nazw predykatów (z ich arnością --- tzn., podając liczbę ich argumentów). Następnie ustalamy pewną algebrę nad tą sygnaturą: zbiór wartości (nośnik algebry) i dla każdej nazwy operacji, funkcję na tym zbiorze, a dla każdej nazwy predykatu, relację na tym zbiorze (o odpowiedniej, zgodnej z podaną w sygnaturze, liczbie argumentów). Algebra ta interpretuje semantycznie nasz pierwotny typ danych języka; nazywać ją będziemy algebrą pierwotnego typu danych.
Całą definicję języka i dalszą analizę łatwo uogólnić dalej, dopuszczając tu bardziej realistyczny przypadek sygnatur i algebr wielorodzajowych, gdzie zbiór danych jest podzielony na wiele rodzajów nazwanych w sygnaturze, a arność operacji i predykatów określa nie tylko liczbę, ale i rodzaj ich poszczególnych argumentów (plus rodzaj wyniku dla operacji). Nie będziemy tu dalej analizować tego "wielorodzajowego" uogólnienia.