Czy ktoś może wskazać mi odniesienie do niezdefiniowalności modułu ciągłości funkcjonalnej w PCF? \ newcommand {\ bool} {\ mathsf {bool}}
Andrej Bauer napisał bardzo fajny post na blogu , w którym szczegółowo omawia niektóre problemy, ale streszczę tylko trochę jego postu, aby nadać kontekst temu pytaniu. Baire'a przestrzeń jest zbiorem sekwencji liczb naturalnych lub równoważnie zbiór funkcji z Naturals do kasowniki . W przypadku tego pytania ograniczymy naszą uwagę tylko do strumieni, które są obliczalne.N → N
Teraz funkcja jest ciągła, jeśli dla każdego wartość zależy tylko od skończonej liczby elementów i jest obliczalna ciągła, jeśli faktycznie możemy obliczyć górną zależy od tego, ile elementów jest potrzebnych. W niektórych modelach obliczeń faktycznie można napisać program który przyjmuje funkcję obliczeniową w przestrzeni Baire i element przestrzeni Baire, i zwraca górną granicę liczby elementów strumienia.
Jednym ze sposobów na wdrożenie tego jest użycie pamięci lokalnej do zarejestrowania maksymalnego indeksu w widzianym strumieniu:
let modulus f xs =
let r = ref 0 in
let ys = fun i -> (r := max i !r; xs i) in
f ys;
!r
Oczywiście ys
argument nie jest już programem czysto funkcjonalnym. Moje zainteresowanie tym programem wynika z faktu, że korzysta on tylko z lokalnego sklepu i dlatego jest wyjątkowo czysty. Pracuję nad (między innymi) programowaniem imperatywnym wyższego rzędu i projektuję teorie typów, które mogłyby zaklasyfikować to jako funkcję czystą.
Są też bardziej praktyczne przykłady, takie jak zapamiętywanie i łączenie połączeń, ale uważam to za szczególnie piękny przykład.