Qualcuno può indicarmi il riferimento per la non definibilità del modulo di continuità funzionale in PCF?
Andrej Bauer ha scritto un post sul blog molto bello esplorando alcuni dei problemi in modo più dettagliato, ma riassumerò solo un po 'del suo post per dare un po' di contesto a questa domanda. Il Baire spazio è l'insieme di sequenze di numeri naturali, o equivalentemente l'insieme delle funzioni da naturali a naturali . Per questa domanda, limiteremo la nostra attenzione solo ai flussi calcolabili.
Ora, una funzione è continua se per ogni , il valore di dipende solo da un numero finito degli elementi di , ed è calcolabile in modo continuo se possiamo effettivamente calcolare un valore superiore legato a quanti elementi di sono necessari. In alcuni modelli di calcolo, in realtà è possibile scrivere un programma che assume una funzione calcolabile sullo spazio Baire e un elemento dello spazio Baire, e restituisce il limite superiore sul numero di elementi del flusso.
Un trucco per implementare questo è utilizzare l'archiviazione locale per registrare l'indice massimo nel flusso visto:
let modulus f xs =
let r = ref 0 in
let ys = fun i -> (r := max i !r; xs i) in
f ys;
!r
Naturalmente, l' ys
argomento non è più un programma puramente funzionale. Il mio interesse per questo programma deriva dal fatto che si avvale solo di un negozio locale ed è quindi estremamente puro. Lavoro su (tra le altre cose) programmazione imperativa di ordine superiore e sto progettando teorie di tipo che potrebbero classificarlo come pura funzione.
Ci sono anche altri esempi pratici, che coinvolgono cose come la memoizzazione e il pool di connessioni, ma trovo che questo sia un esempio particolarmente bello.