Konstruktywna teoria typów z jej podstawową interpretacją w ramach korespondencji curry-howard składa się wyłącznie z całkowitych, obliczalnych funkcji. W literaturze niektórzy mówili o stosowaniu „teorii typów obliczeniowych” w celu przedstawienia nieterminacji w programach funkcjonalnych, ale w artykułach, na które się natknąłem, nie wydaje się to być główną motywacją dla teorii (na przykład Benton wspomina o niedeterminacji, kontynuacjach i wyjątkach, bez wchodzenia w szczegółowe informacje na temat nieterminacji), więc nie znalazłem jeszcze dokumentu, który dałby solidną interpretację nieterminacji przy użyciu obliczeniowej teorii typów.
W szczególności szukam sposobu, w którym biorąc pod uwagę typ reprezentujący prawdopodobnie niekończące się obliczenia typu , , powinno istnieć pewne pojęcie dowodów, że kończy typ tak, że podane i , że konstruuje termin .
Motywuję to tym, że w końcu chciałbym móc bardziej formalnie powiązać pojęcia w teorii złożoności obliczeniowej z konstruktywną teorią typów. W szczególności interesuje mnie, jaką moc jako formalne teorie zyskują typy konstruktywne dzięki dostępowi do wyroczni zatrzymującej, i aby to zrobić, oczywiście muszę mieć formalne pojęcie możliwego braku wypowiedzenia i dowody zaprzestania postępuj zgodnie z nim w ramach teorii typu.
źródło
Odpowiedzi:
Ponieważ jednym z głównych zastosowań teorii typów w formalizacjach było studiowanie języków programowania i ogólnie obliczeń, wiele myśli poświęcono sposobom przedstawiania programów, które prawdopodobnie nie kończą się.
Nie zrobię tutaj pełnej ankiety, ale postaram się wskazać główne kierunki różnych kierunków.
Podejście „relacyjne”: możesz zdefiniować swoje hipotetyczne programy tak, jak mówią relacje, które zawiera iff f, jest zdefiniowane dla x i f ( x ) = y . Zazwyczaj jest to, co dzieje się z Kleene T-orzecznika . Działa to równie dobrze w formalizacjach teorii typów, jak w logice klasycznej (choć oczywiście nie można udowodnić ∀ x ( ∃ y , F x y ) ∨ ( ¬ ∃ y , F x y ) ).fa x y fa x fa( x ) = y ∀ x ( ∃ y, F. x y ) ∨ ( ¬ ∃ y, F. x y )
Bardziej wyrafinowanym sposobem na to jest metoda „Bove-Capretta” (patrz Modelowanie rekurencji w teorii typów , która dla każdej funkcji rekurencyjnej definiuje „dostępny predykat”, który koduje fakt, że dane obliczenie jest skończone. Definicja funkcji przyjmuje dodatkowy argument, który jest dowodem na to, że dane dane wejściowe są dostępne. Aby zdefiniować funkcję bez tego dodatkowego predykatu, musisz udowodnić, że każda możliwa kombinacja danych wejściowych jest dostępna.
To koduje prawdopodobnie nieskończony strumień
Later
tokenów („tyknięć” obliczeń), który może kończyć się wynikiemNow a
. Brak wypowiedzenia jest równoznaczny z niepodobnością do programuloop = Późniejsza pętla i zakończenie mogą być zdefiniowane przez predykat indukcyjny w stosunku do
Delay A
:Myślę, że agda-istas mają wiele do powiedzenia na temat tego, co nazywają monadą stronniczości (patrz np. Danielsson ).
Podejście „częściowej teorii typów” : jest to nieco bardziej eksperymentalne (teoria jest wciąż opracowywana), ale istnieją pewne teorie typów, które są rozwijane, aby poradzić sobie z faktem, że istnieją zasadniczo dwa rodzaje funkcji, które chcemy napisz w teorii typów: warunki próbne i programy. Okazuje się, że trudno jest uzyskać rozsądną teorię tych rzeczy (i zachować spójność teorii), ale poważną próbę podjęli tutaj Casinghino i in. Oraz podobny wysiłek Kimmela i in .
Jestem pewien, że istnieją inne podejścia, o których nie wiem i byłbym szczęśliwy, gdyby ktoś chciał wypełnić tę listę.
Istnieją inne, dość owocne interakcje między teorią typów a teorią złożoności, zwykle pod parasolem ukrytej złożoności obliczeniowej .
źródło