Darò una risposta parziale, spero che altri riempiranno gli spazi vuoti.
In digitato -calculi, si può dare un tipo di rappresentazioni abituali di dati ( N una t per la Chiesa (unari) numeri interi, S t r per le stringhe binarie, B o o l per Booleans) e mi chiedo qual è la complessità delle funzioni / problemi rappresentabili / decidibili con termini digitati. Conosco una risposta precisa solo in alcuni casi, e nel caso tipicamente tipato dipende dalla convenzione utilizzata nella definizione di "rappresentabile / decidibile". Comunque, non conosco nessun caso in cui vi sia un limite superiore doppiamente esponenziale.λNatStrBool
Innanzitutto, un breve riepilogo sul Lambda Cube. I suoi 8 calcoli sono ottenuti abilitando o disabilitando i seguenti 3 tipi di dipendenze in cima al calcolo tipizzato semplicemente (STLC):λ
- polimorfismo : i termini possono dipendere dai tipi;
- tipi dipendenti : i tipi possono dipendere dai termini;
- ordine superiore : i tipi possono dipendere dai tipi.
(La dipendenza dei termini dai termini è sempre lì).
L'aggiunta di polimorfismo rendimenti Sistema F. Qui, è possibile digitare i numeri interi chiesa con e similmente per stringhe binarie e booleani. Girard ha dimostrato che i termini del Sistema F di tipo N a t → N a t rappresentano esattamente le funzioni numeriche la cui totalità è dimostrabile nell'aritmetica di Peano del secondo ordine. È praticamente la matematica di tutti i giorni (anche se senza alcuna forma di scelta), quindi la classe è enorme, la funzione Ackermann è una sorta di minuscolo microbo, per non parlare della funzione 2 2N a t : = ∀X. ( X→ X) → X→ XN a t → N a t . Non conosco alcuna funzione numerica "naturale" che non può essere rappresentata nel Sistema F. Gli esempi di solito sono costruiti dalla diagonalizzazione, o codificando la consistenza della PA del secondo ordine, o altri trucchi autoreferenziali (come decidere l'uguaglianzaβall'interno del Sistema F stessa). Naturalmente nel Sistema F è possibile convertire tra numeri interi unariNate la loro rappresentazione binariaStr, quindi verificare ad esempio se il primo bit è 1, quindi la classe di problemi decidibili (in base al tipoStr r→Bool) è ugualmente enorme.22nβN a tS t rS t r → B o o l
Gli altri 3 calcoli del Cubo Lambda che includono il polimorfismo sono quindi almeno espressivi come il Sistema F. Questi includono il Sistema F ω (polimorfismo + ordine superiore), che può esprimere esattamente le funzioni complessivamente dimostrabili in ordine superiore PA, e il calcolo di Costruzioni (CoC), che è il calcolo più espressivo del cubo (tutte le dipendenze sono abilitate). Non conosco una caratterizzazione dell'espressività del CoC in termini di teorie aritmetiche o teorie fisse, ma deve essere piuttosto spaventoso :-)ω
Sono molto più ignorante per quanto riguarda i calcoli ottenuti semplicemente abilitando tipi dipendenti (essenzialmente teoria dei tipi di Martin-Löf senza uguaglianza e numeri naturali), tipi di ordine superiore o entrambi. In questi calcoli, i tipi sono potenti ma i termini non possono accedere a questo potere, quindi non so cosa ottieni. Computazionalmente, non penso che tu abbia molta più espressività rispetto ai tipi semplici, ma potrei sbagliarmi.
Quindi siamo rimasti con l'STLC. Per quanto ne so, questo è l'unico calcolo del Cubo con limiti superiori di complessità interessanti (cioè non mostruosamente grandi). C'è una domanda senza risposta al riguardo su TCS.SE, e in effetti la situazione è un po 'sottile.
Innanzitutto, se aggiusti un atomo e definisci N a t : = ( X → X ) → X → X , c'è il risultato di Schwichtenberg (so che c'è una traduzione inglese di quel documento da qualche parte sul web ma non riesco a trovarlo ora) che ti dice che le funzioni di tipo N a t → N a t sono esattamente i polinomi estesi (con if-then-else). Se si consente un certo "gioco", ovvero si consente di istanziare il parametro X a piacimento e si considerano i termini di tipo N a t [XN a t : = (X→ X) → X→ XN a t → N a tX con A arbitrario, molto di più può essere rappresentato. Ad esempio, qualsiasi torre di esponenziali (quindi puoi andare ben oltre doppiamente esponenziale) così come la funzione precedente, ma ancora nessuna sottrazione (se consideri le funzioni binarie e provi a digitarle con N a t [ A ] → N a t [ A ′ ] → N a t ). Quindi la classe di funzioni numeriche rappresentabile nell'STLC è un po 'strana, è un sottoinsieme rigoroso delle funzioni elementari ma non corrisponde a qualcosa di ben noto.N a t [A]→ N a tUNN a t [A]→ N a t [ A'] → N a t
In evidente contraddizione con quanto sopra, c'è questo articolo di Mairson che mostra come codificare la funzione di transizione di una macchina di Turing arbitraria , da cui si ottiene un termine di tipo N a t [ A ] → B o o l (per qualche tipo A a seconda di M ) che, dato un intero di Chiesa n come input, simula l'esecuzione di M a partire da una configurazione iniziale fissa per un numero di passaggi della forma
2 2 ⋮ 2 n ,MN a t [A]→ B o o lUNMnM
22⋮2n,
con l'altezza della torre fissa. Questo
non mostra che ogni problema elementare sia risolvibile dallo STLC, perché nello STLC non c'è modo di convertire una stringa binaria (di tipo
) che rappresenta l'input di
M nel tipo usato per rappresentare le configurazioni di
M in La codifica di Mairson. Quindi la codifica è in qualche modo "non uniforme": è possibile simulare esecuzioni elementalmente lunghe da un input fisso, usando un termine distinto per ciascun input, ma non esiste un termine che gestisca input arbitrari.
S t rMM
In effetti, lo STLC è estremamente debole in ciò che può decidere "uniformemente". Chiamiamo la classe di lingue decidibile con termini tipizzati di tipo S t r [ A ] → B o o l per alcuni A (come sopra, si consente "slack" arbitrario nella digitazione). Per quanto ne so, manca una precisa caratterizzazione di C S T. Tuttavia, sappiamo che C S T ⊊ L I N T I M ECSTS t r [A]→ B o o lUNCSTCST⊊ L I N T I M E(tempo lineare deterministico). Sia il contenimento che il fatto che sia rigoroso possono essere dimostrati da argomenti semantici molto accurati (usando la semantica denotazionale standard dell'STLC nella categoria di insiemi finiti). Il primo è stato mostrato di recente da Terui . Quest'ultimo è essenzialmente una riformulazione dei vecchi risultati di Statman. Un esempio di problema in è MAJORITY (data una stringa binaria, indica se contiene rigorosamente più 1s che 0s).L I N T I M E ∖ CST
(Molto) Successivamente aggiuntivo: ho scoperto che la classe chiamo sopra in realtà non ha una precisa caratterizzazione, peraltro estremamente semplice. In questo bellissimo documento del 1996 , Hillebrand e Kanellakis lo dimostrano, tra l'altro, cheCST
Teorema. (le lingue normali su { 0 , 1 } ).CST= R E G{ 0 , 1 }
(Questo è il Teorema 3.4 nel loro documento).
Lo trovo doppiamente sorprendente: sono sorpreso dal risultato stesso (non mi è mai venuto in mente che potesse corrispondere a qualcosa di così "pulito") e da quanto poco conosciuto. È anche divertente che la prova di Terui del limite superiore di L I N T I M E utilizzi gli stessi metodi impiegati da Hillebrand e Kanellakis (interpretando il λ -calculus tipicamente tipizzato nella categoria di insiemi finiti). In altre parole, Terui (e me stesso) avrebbe potuto facilmente riscoprire questo risultato se non fosse per il fatto che in qualche modo eravamo contenti che C S T fosse una classe "strana" :-)CSTL I N T I M EλCST
(Per inciso, ho condiviso la mia sorpresa in questa risposta a una domanda MO sui "teoremi sconosciuti").