Le funzioni che hanno digitato il calcolo lambda non possono essere calcolate


12

Voglio solo conoscere alcuni esempi delle funzioni che possono essere calcolate dal calcolo lambda non tipizzato ma non dai calcoli lambda digitati.

Dato che sono un principiante, una certa reiterazione delle informazioni di base sarebbe apprezzata.

Grazie.

Modifica: con i calcoli lambda digitati, avevo intenzione di conoscere il sistema F e il calcolo lambda tipizzato semplicemente. Per funzione intendo qualsiasi funzione calcolabile di Turing.


Esistono molte discipline di battitura per -calculi e la risposta alla tua richiesta dipende in parte dalla scelta della disciplina di battitura che hai in mente. Dipende anche da cosa intendi per funzione. Un esempio di differenza sarebbe che discipline di tipizzazione come il Sistema F possono solo digitare programmi di normalizzazione, mentre il non tipizzato -calculus contiene termini non normalizzanti. λλλ
Martin Berger,

Stavo pensando al Sistema F e al semplice calcolo lambda tipizzato. Per funzione intendo la funzione calcolabile turing.
Timothy Zacchari,

Risposte:


15

Un buon esempio è dato dalla godelizzazione: nel calcolo lambda, l'unica cosa che puoi fare con una funzione è applicarla. Di conseguenza, non è possibile scrivere una funzione chiusa di tipo , che accetta un argomento di funzione e restituisce un codice Godel.(NN)N

Aggiungere questo come assioma all'aritmetica di Heyting è di solito chiamato "tesi costruttiva della Chiesa", ed è un assioma fortemente anti-classico. Vale a dire, è coerente aggiungerlo all'HA, ma non all'aritmetica di Peano! (Fondamentalmente, è un fatto classico che ogni macchina di Turing si ferma o no, e non esiste una funzione calcolabile che possa testimoniare questo fatto.)


Non capisco come questo sia coerente con una teoria estensiva: prendere feg estensivamente uguali, ma con implementazioni diverse e quindi codici godel diversi. La tua funzione restituisce lo stesso numero per f e g?
cody

3
Non è coerente con l'estensione! Tuttavia, in HA e sono connettivi logici, non funzioni / record. Quindi devono essere realizzabili ma i loro realizzatori non devono essere estensivi. Andrej Bauer è un esperto di queste cose, quindi se fai una domanda avrai sicuramente una buona risposta.
Neel Krishnaswami,

11

La risposta più semplice è data dal fatto che i calcoli lambda digitati corrispondono alle logiche (calcolo lambda semplicemente digitato -> logica predicata; sistema f -> logica del secondo ordine) e le logiche coerenti non possono dimostrare la propria coerenza.

Quindi diciamo che hai numeri naturali (o una codifica della Chiesa di numeri naturali) nel tuo calcolo lambda digitato. È possibile eseguire una numerazione Gödel che assegna ogni termine nel Sistema F a un numero naturale univoco. Quindi, esiste una funzione che accetta qualsiasi numero naturale (che corrisponde a un termine ben digitato nel Sistema F) ad un altro numero naturale (che corrisponde alla forma normale di quel termine F di sistema ben digitato) e fa qualcos'altro per qualsiasi numero naturale che non corrisponde a un termine ben digitato nel Sistema F (diciamo, restituisce zero). La funzione è calcolabile, quindi può essere calcolata dal calcolo lambda non tipizzato ma non dal calcolo lambda tipizzato (poiché quest'ultimo equivarrebbe a una prova della coerenza della logica del secondo ordine infff logica del secondo ordine, che implicherebbe che la logica del secondo ordine è incoerente).

Avvertenza 1: se la logica del secondo ordine è incoerente, potrebbe essere possibile scrivere nel Sistema F ... e / o potrebbe non essere possibile scrivere nel calcolo lambda non tipizzato: è possibile scrivere qualcosa, ma potrebbe non termina sempre, che è un criterio per "calcolabile".fff

Avvertenza 2: a volte per "calcolo lambda semplicemente digitato" si intende "calcolo lambda semplicemente digitato con un operatore a virgola fissa o funzioni ricorsive". Questo sarebbe più o meno PCF , che può calcolare qualsiasi funzione calcolabile, proprio come il calcolo lambda non tipizzato.


10

Il non tipizzato -calculus possiede una ricorsione generale nella forma del combinatoreSemplicemente digitato -calculus no. Pertanto, qualsiasi funzione che richiede la ricorsione generale è un candidato, ad esempio la funzione di Ackermann. (Sto saltando alcuni dettagli sulla precisione con cui rappresentiamo i numeri naturali in ciascun sistema, ma essenzialmente qualsiasi approccio ragionevole farà.)Y λλYλ

Ovviamente, puoi sempre estendere il -calculus semplicemente digitato per abbinare il potere di , ma poi stai cambiando le regole del gioco.YλY


Per qualche ragione avevo in testa che potevi fare Ackermann in System F ...
Rob Simmons,

@Rob, a quanto ho capito, Andrej non dice che non è così.
Kaveh,

1
Suppongo di aver detto che la funzione di Ackermann può essere programmata nel non- tiped -calculus (perché ogni funzione calcolabile può), ma non nel semplice -calculus tipizzato. Non ho parlato di System F.λλλ
Andrej Bauer l'

Oh, giusto, ero solo stupido. (Poiché la domanda era piuttosto ambigua tra parlare di System F e parlare di STLC, ho scelto il sistema più forte e ho dimenticato la domanda più semplice.)
Rob Simmons,

La funzione di Ackermann in -calculus è . Secondo un inferenziatore di tipo che ho costruito questo semestre, ha un tipo semplice: , che è atroce, ma forse corretto. Il problema con STS non è Ackermann - è, ad esempio, la simulazione di una macchina Turing. Semplicemente non puoi farlo senza il combinatoreλλm.m(λfn.nf(f1_)) suc(((((fe)fe)h)((((fe)fe)h) Yhg)g)(((bc)ab)(bc)ac)d)dY
Francisco Mota,

6

Il calcolo lambda tipicamente semplice è in realtà sorprendentemente debole. Ad esempio, non è in grado di riconoscere la lingua normale . Tuttavia, non ho mai trovato una precisa caratterizzazione dell'insieme delle lingue che STLC possa riconoscere.a


5
Penso che ciò che è calcolabile dipende dai tipi che stai guardando. Quando si rappresentano i naturali sul tipo , dove è un tipo di base e si considera l'uguaglianza come beta-uguaglianza, le funzioni definibili sono i polinomi estesi (polinomi + if-then- altro). IIRC, Schwichtenberg lo ha dimostrato, anche se non ho mai letto il suo documento originale (in tedesco). (Penso che il nome della carta, tradotto, sia "Definable Functions in Typed Lambda Calculi", 1976.)p(pp)ppp
Neel Krishnaswami,

2
@ Neel. Una traduzione leggermente migliore sarebbe Funzioni definibili nel -calculus con Tipiλ . Puoi scaricarlo qui , è lungo solo due pagine. Sa cosa succede ad altri tipi, con altre nozioni di uguaglianza o con altre codifiche di numeri naturali?
Martin Berger,

@Marting: grazie! Vivo in Germania ora, quindi questo è un buon incentivo extra per praticare il mio tedesco. :)
Neel Krishnaswami,

4

Una visione dei limiti dei calcoli fortemente normalizzanti che mi piace è l'angolo di calcolabilità. In un calcolo tipizzato fortemente normalizzante, come il calcolo lambda tipizzato semplicemente di base, Sistema F o Calcolo delle costruzioni, hai una prova che alla fine tutti i termini terminano.

Se questa dimostrazione è costruttiva, si ottiene un algoritmo fisso per valutare tutti i termini con un limite superiore garantito sul tempo di calcolo. Oppure puoi anche studiare la dimostrazione (non necessariamente costruttiva) ed estrarne un limite superiore - che è probabilmente enorme , perché quei calcoli sono espressivi.

Questo limite fornisce esempi "naturali" di funzioni che non possono essere digitati in questo calcolo lambda fisso: tutte le funzioni aritmetiche che sono asintoticamente superiori a questo limite.

Se ricordo bene, i termini digitati nel lambda-calcolo tipizzato in modo semplice possono essere valutati in torri di esponenziale O(2^(2^(...(2^n)..):; una funzione che cresce più velocemente di tutte queste torri non sarà espressibile in questi calcoli. Il sistema F corrisponde alla logica intuitiva del secondo ordine, quindi il potere di calcolo è semplicemente enorme. Per cogliere la forza della calcolabilità di teorie ancora più potenti, di solito ragioniamo in termini di teoria degli insiemi e teoria dei modelli (ad es. Quali ordinali possono essere costruiti) invece della teoria della calcolabilità.


0

Δ=λx.xxΔΔβ ΔΔΔAA=AA


λAAAA

Sì, hai ragione, ma ho pensato (forse mi sbaglio) che non era possibile avere un tale tipo nel lambda-calculus tipizzato semplicemente o nel Sistema F, che sono entrambi fortemente normalizzati.
Charles

ΔΔΔΔ

@Kaveh Perché avere un tipo Atale A \ident A \rightarrow Anon è strano? Mi sembra assurdo, cosa sto trascurando?
Martijn,

Probabilmente stai pensando in modo classico a insiemi e spazi funzionali su di essi. Pensa ad esempio a stringhe binarie finite e funzioni calcolabili su di esse.
Kaveh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.