Cóż, parametryczna relacja jest jednym z najważniejszych pomysłów wprowadzonych przez Johna Reynoldsa, więc nie powinno być zaskoczeniem, że wygląda jak magia. Oto bajka o tym, jak mógł ją wymyślić.
Załóżmy, że próbujesz sformalizować pogląd, że niektóre funkcje (tożsamość, mapa, składanie, odwracanie list) działają „tak samo na wielu typach”, tzn. Masz intuicyjne wyobrażenia o polimorfizmie parametrycznym i sformułowałeś pewne reguły do tworzenia takich map, tj. polimorficznego -calculus lub jego wczesnego wariantu. Zauważasz, że naiwna semantyka teoretyczna nie działa.λ
Na przykład patrzymy na typ
który powinien zawierać tylko mapę tożsamości, ale naiwna semantyka teoretyczna zestawu pozwala na niepożądane funkcje, takie jak
Aby wyeliminować tego rodzaju rzeczy, musimy nałożyć pewne dodatkowe warunki na funkcje. Na przykład, moglibyśmy wypróbować teorię domen: wyposażyć każdy zestaw w częściowy porządek i wymagać, aby wszystkie funkcje były monotoniczne. Ale to nie całkiem go ogranicza, ponieważ powyższa niepożądana funkcja jest stała lub identyczna, w zależności od , a są to mapy monotoniczne.∀ X: T y p e . X→ X,
λ X: T y p e . λ a : X. i f ( X= { 0 , 1 } ) t h e n 0 e l s e a .
X≤XX
Częściowy porządek ≤ jest relatywny, przechodni i antysymetryczny. Możemy spróbować zmienić strukturę, na przykład możemy spróbować zastosować ścisły porządek częściowy, porządek liniowy, relację równoważności lub po prostu relację symetryczną. Jednak w każdym przypadku wkradają się niechciane przykłady. Na przykład relacje symetryczne eliminują naszą niechcianą funkcję, ale pozwalają na inne funkcje uwarunkowane (ćwiczenie).
A potem zauważasz dwie rzeczy:
- Do chcieli przykłady nie są eliminowane, co stosunki użyć zamiast częściowych zamówień ≤ .
- Dla każdego konkretnego niechcianego przykładu, na który patrzysz, możesz znaleźć relację, która go eliminuje, ale nie ma jednej relacji, która eliminowałaby wszystkie z nich.
Zatem masz genialną myśl, że pożądanymi funkcjami są te, które zachowują wszystkie relacje , i rodzi się model relacyjny.
\X:Type. \a:X. if X = {(0,0), (1,0), (0,1), (1,1)} then 0 else a
Odpowiedź na twoje pytanie znajduje się w bajce Reynoldsa (część 1). Pozwól, że spróbuję to dla ciebie zinterpretować.
W języku lub formalizmie, w którym typy są traktowane jako abstrakcje , zmienna typu może oznaczać dowolne pojęcie abstrakcyjne. Nie zakładamy, że typy są generowane za pomocą jakiejś składni terminów typu lub jakiegoś stałego zbioru operatorów typów, lub że możemy przetestować dwa typy pod kątem równości itp. W takim języku, jeśli funkcja obejmuje zmienną typu, wówczas jedyna rzeczą, którą funkcja może zrobić z wartościami tego typu, jest tasowanie wokół podanych wartości. Nie może wymyślić nowych wartości tego typu, ponieważ nie „wie”, co to za typ! To intuicyjna koncepcja parametryczności .
źródło
Ponadto kuszące jest identyfikowanie funkcji o tym samym zachowaniu ekstensywnym, co prowadzi do relacji równoważności. Relacja jest częściowa, jeśli wykluczymy funkcje „niezdefiniowane”, czyli funkcje, które „zapętlają” się w przypadku niektórych dobrze sformułowanych danych wejściowych.
Modele PER są uogólnieniem tego.
Innym sposobem na zobaczenie tych modeli jest (bardzo) specjalny przypadek prostego zestawu modeli teorii typów homotopii . W tych ramach typy są interpretowane jako (uogólnienie), zestawy ze relacjami oraz relacje między tymi relacjami itp. Na najniższym poziomie mamy po prostu modele PER.
Wreszcie, w dziedzinie matematyki konstruktywnej pojawiły się pokrewne pojęcia, w szczególności Teoria zbiorów biskupa obejmuje opisanie zbioru poprzez podanie zarówno elementów, jak i wyraźnej relacji równości, która musi być równoważna. Naturalne jest oczekiwanie, że niektóre zasady matematyki konstruktywnej wkroczą do teorii typów.
źródło