Dla potwierdzenia poprawności szukam użytecznego pojęcia równoważności programu dla systemów czystego typu (PTS) Barendregta; brakuje tego, dla wystarczającej liczby systemów określonego typu. Moim celem jest po prostu użycie tego pojęcia, a nie badanie go dla samego siebie.
Pojęcie to powinno być „ ekstensywne ” - w szczególności, aby udowodnić, że , powinno wystarczyć, aby udowodnić, że t 1 dla wszystkich wartości v odpowiedniego typu.
Równoważność denotacyjna
Równoważność denotacyjna z łatwością spełnia wszystkie właściwe lematy, ale semantyka denotacyjna dla arbitralnego PTS wydaje się dość trudna - już dla systemu F. wydawałoby się trudne.
Równoważność kontekstowa / obserwacyjna
Oczywistą alternatywą są wówczas różne formy równoważności kontekstowej (dwa terminy są równoważne, jeśli żaden kontekst gruntowy ich nie rozróżnia), ale jego definicja nie jest natychmiast użyteczna; różne lematy nie są łatwe do udowodnienia. Czy zostały udowodnione dla PTS? Alternatywnie, czy teoria byłaby „oczywistym rozszerzeniem”, czy też istnieje powód, by sądzić, że teoria byłaby znacząco inna?
EDYCJA: Nie powiedziałem tego, co jest trudne powyżej.
Prosta część: definicja
Określenie równoważności nie jest zbyt trudne, a definicja pojawia się w wielu artykułach (zaczynając przynajmniej od badań PCF Plotkina z 1975 r., Jeśli nie wcześniej - źródłem może być praca doktorska Morrisa z 1968 r.). We jeśli dla wszystkich kontekstów naziemnych C , C [ t 1 ] ≃ C [ t 2 ] - to znaczy, że C [ t 1 ] i C [ t 2 ] dają ten sam wynik. Masz kilka wyborów tutaj z wielu alternatyw: Na przykład, w języku, silnie normalizacji, jeśli masz rodzaj uziemienia Naturals, można powiedzieć, że konteksty ziemne są te, które Naturals powrotu, a następnie ≃ B oznacza, że i b oceniają na tę samą liczbę. W przypadku nieterminacji, dla rozsądnych języków wystarczy użyć „X terminates” jako obserwacji, ponieważ jeśli dwa programy są równoważne podczas obserwowania zakończenia, są one również równoważne podczas obserwowania wyniku.
Trudna część: dowody
Jednak dokumenty te często nie wyjaśniają, jak trudno jest faktycznie używać tej definicji. Wszystkie poniższe odnośniki pokazują, jak sobie z tym poradzić, ale potrzebna teoria jest trudniejsza niż się wydaje. Jak udowodnimy, że ? Czy faktycznie przeprowadzamy analizę przypadków i wprowadzamy konteksty? Nie chcesz tego robić.
Jak zauważa Martin Berger, zamiast tego chcesz użyć bisimulacji (jak to uczynił Pitts) lub logicznej relacji równoważności (którą Harper po prostu nazywa „logiczną równoważnością”).
Wreszcie, w jaki sposób udowodnisz ekstensywność, jak zdefiniowano powyżej?
Harper rozwiązuje te pytania na 10 stronach dla Systemu T, poprzez znaczną spryt i logiczne relacje. Pitts bierze więcej. Niektóre języki są jeszcze bardziej złożone.
Jak sobie z tym poradzić
Kusi mnie, by warunkowo przedstawić moje dowody oparte na domniemanej teorii równoważności PTS, ale rzeczywiste teorie wymagają nietrywialnych argumentów, więc nie jestem pewien, jak prawdopodobne byłoby takie przypuszczenie.
Jestem świadomy (choć nie szczegółowo) następujących prac:
- Andrew Pitts (na przykład w ATTAPL dla rozszerzonego Systemu F oraz w kilku artykułach, takich jak 58-stronicowa „Operacyjna teoria równoważności programu”).
- Praktyczne podstawy języków programowania (rozdziały 47–48), które są inspirowane Pittsem (ale twierdzi, że mają prostsze dowody).
- Logiczne badanie równoważności programu . Nie mogę znaleźć angielskiego streszczenia, ale wydaje się, że poświęca dużo wysiłku na efekty uboczne (referencje), co wydaje się ortogonalną komplikacją.