Algoritmo per determinare l'uguaglianza delle funzioni sul calcolo lambda semplicemente digitato?


10

Sappiamo che l'uguaglianza beta dei termini lambda semplicemente digitati è decidibile. Dato M, N: σ → τ, è decidibile se per tutti X: σ, MX NX?β


Semplicemente Lambda Calculus / STLC wikipedia. dal momento che non è completo di Turing, esiste un altro modello base di calcolo a cui equivale? potrebbe anche essere utile studiare l'algoritmo di rilevamento dell'arresto, che secondo Wikipedia è decidibile per STLC ...
vzn

3
@Marzio: In realtà, penso che il problema qui sia il modo in cui viene formulata la domanda, il che è abbastanza impreciso. Una volta formulata correttamente, questa è una domanda a livello di ricerca. Una formulazione migliore sarebbe: sappiamo che l'uguaglianza beta dei termini lambda semplicemente tipizzati è decidibile. Dato , è decidibile se per tutti X : σ , M X β N X ? La risposta è generalmente negativa (quindi non esiste un algoritmo come quello ricercato da Viclib). Anche se forse previsto, questo non è ovvio a priori ed è una conseguenza di un paio di articoli degli anni '90. M,N:στX:σMXβNX
Damiano Mazza

@DamianoMazza: ok, in effetti non ho votato per chiuderlo ... Eliminerò il mio commento, lascerò il tuo e aspetterò il commento / modifica dell'OP.
Marzio De Biasi,

@DamianoMazza e Marzio, non ne so abbastanza per fare una domanda così formale. Vorrei averlo fatto, però, ma questo non è qualcosa che imparo nella mia scuola. In effetti, persino cercare su Google "uguaglianza beta", cosa che in realtà ho provato prima di porre la domanda, mi dà così pochi risultati che è quasi come se questo termine non esistesse. Quindi non ho nemmeno idea di dove impari e leggi tutto ciò. Ragazzi, mi indichereste gentilmente il posto giusto per iniziare a studiare da solo l'argomento? Domanda aggiornata.
MaiaVictor

1
@Viclib: la beta-equivalenza è un concetto tecnico, ho evitato di menzionarlo nella mia risposta. All'incirca, due termini sono beta-equivalenti quando producono lo stesso risultato. Quindi dicendo per tutte le X significa che M e N calcolano la stessa funzione. Per quanto riguarda i suggerimenti per conoscere il lambda-calcolo (tipizzato o non tipizzato), penso che gli appunti di Peter Selinger e gli appunti di Sørensen e Urzyczyn su Curry-Howard siano ottimi punti di partenza. MXβNXXMN
Damiano Mazza,

Risposte:


13

Come ho detto nel mio commento, la risposta in generale è no.

Il punto importante da capire (lo dico per Viclib, che sembra apprendere su queste cose) è che avere un linguaggio di programmazione / set di macchine in cui tutti i programmi / calcoli terminano in nessun modo implica che la parità di funzioni (cioè se due programmi / macchine calcolano la stessa funzione) è decidibile. Un semplice esempio: prendi il set di macchine Turing con clock polinomiale. Per definizione, tutte queste macchine terminano su tutti gli input. Ora, data qualsiasi macchina di Turing di qualsiasi tipo , esiste una macchina di Turing M 0 che, data in input la stringa x , simula | x | passi del calcolo di M su un input fisso (diciamo, la stringa vuota) e accetta se MMM0x|x|MMtermina al massimo passaggi o rifiuta diversamente. Se N è una macchina di Turing che rifiuta sempre immediatamente, M 0 e N sono entrambi (ovviamente) con clock polinomiale, e tuttavia se potessimo decidere se M 0 e N calcolano la stessa funzione (o, in questo caso, decidiamo la stessa lingua ), saremmo in grado di decidere se M (che, ricordiamo, è una macchina di Turing arbitraria) termina sulla stringa vuota.|x|NM0NM0NM

Nel caso del semplice -calculus (STLC), funziona un argomento simile, tranne per il fatto che misurare il potere espressivo dell'STLC non è così banale come nel caso precedente. Quando ho scritto il mio commento, avevo in mente un paio di articoli di Hillebrand, Kanellakis e Mairson dei primi anni '90, che mostrano che, usando tipi più complessi rispetto al solito tipo di numeri interi della Chiesa, si potrebbe codificare nello STLC sufficientemente complesso calcoli per il funzionamento dell'argomento sopra. In realtà, vedo ora che il materiale necessario è già nella dimostrazione semplificata di Mairson del teorema di Statman:λ

Harry G. Mairson, una semplice dimostrazione di un teorema di Statman. Theoretical Computer Science, 103 (2): 387-394, 1992. (Disponibile online qui ).

In tale documento, Mairson dimostra che, data una qualsiasi macchina di Turing , v'è un tipo semplice σ e λ -termine δ M : σ σ codificante la funzione di transizione di M . (Questo non è ovvio a priori, se si ha in mente il potere espressivo estremamente scarso della STLC sugli interi della Chiesa. In effetti, la codifica di Mairson non è immediata). Da questo, non è difficile costruire un termineMσλδM:σσM

tM:nun't[σ]Bool

nun't[σ]σtMn_1_Mn0_tM0_M


Probabilmente è anche possibile usare la codifica delle funzioni polinomiali multi-variabile in STLC e quindi fare appello al teorema di Matiyasevich .
cody

Quindi STLC non è completo, ma è abbastanza potente da codificare la funzione di transizione di una macchina Turing !? Quindi una macchina di Turing potrebbe essere definita come un nastro più un programma STLC che opera su di esso?
MaiaVictor

2
@Viclib: Pensaci: simulare un passaggio di una macchina Turing arbitraria non richiede molta potenza computazionale. Fondamentalmente, hai solo bisogno di tipi di dati finiti (con if-then-else), liste (con le operazioni di base: contro, coda, ecc.) E coppie ordinate. (In effetti, la Extended Church-Turing Thesis afferma che una tale bassa complessità è comune a ogni modello di macchina ragionevole). Ciò che manca alla STLC è la capacità di eseguire transizioni TM "ad libitum", indipendentemente dall'input: può solo iterarle un numero di volte uguale a una torre di esponenziali nella dimensione dell'input (vedi il documento di Mairson).
Damiano Mazza,

1
@cody: grazie, non conoscevo quel documento. Credo che tu abbia ragione.
Damiano Mazza,
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.