Il teorema di smn è lo stesso concetto del curry?


12

Sto studiando il teorema di smn e il concetto mi ha ricordato il curry.

Dall'articolo di Wikipedia sul teorema di smn :

il teorema dice che per un dato linguaggio di programmazione e interi positivi m e n, esiste un algoritmo particolare che accetta come input il codice sorgente di un programma con m + n variabili libere, insieme a valori m. Questo algoritmo genera un codice sorgente che sostituisce efficacemente i valori per le prime m variabili libere, lasciando libere le altre variabili.

Da un articolo sul curry :

Intuitivamente, il curry dice "se aggiusti alcuni argomenti, ottieni una funzione degli argomenti rimanenti"

Mi sembra la stessa idea. L'unico motivo per cui non sono sicuro è che i materiali che ho incontrato su smn non menzionano il curry (e viceversa), quindi ho voluto consultarlo per essere sicuro di ottenerlo effettivamente.


Infatti. Alcune prove di computabilità hanno un sapore di agnello. Il teorema smn, molto approssimativamente, permette di fingere che gli indici delle funzioni ricorsive siano termini lambda, in modo che dato possiamo fabbricare l'informale e afferma che è primitivo ricorsivo. Anche la seconda dimostrazione del teorema di ricorsione (che sfrutta smn) è il combinatore a virgola fissa di Church sotto mentite spoglie, nascosto dietro gli usi di . Il punto chiave qui è che anche se l'enumerazione è definita enumerando, diciamo, TM (o Java, o ...) possiamo ancora far finta di avere lambda! g ( x ) = # λ y . ϕ i ( x , y ) g s ( ) ϕ iφio(-,-)g(X)=#λy.φio(X,y)gS()φio
chi

Bene, smn fa una dichiarazione esistenziale mentre l'esistenza di una funzione curry fornisce il "compilatore". Ma l'idea è la stessa.
Raffaello

Risposte:


15

Sì, è la stessa cosa.

Currying è un concetto di -calculus. È una trasformazione tra A × B C e A ( B C ) . Pensa a questo come "se abbiamo una funzione di due argomenti di tipo A e B , allora potremmo correggere il primo argomento (di tipo A ) e otterremo una funzione dell'argomento rimanente (di tipo B )". In effetti, questa trasformazione è un isomorfismo. Ciò è reso matematicamente preciso da modelli matematici di (tipizzato) λ -calculus, che sono categorie chiuse cartesiane .λUN×BCUN(BC)UNBUNBλ

Esiste una categoria di set numerati. Un set numerato è una coppia cui A è un set e ν A : NA è un'escrezione parziale , ovvero una mappa dai numeri su A , che può anche essere indefinita. Se ν A ( n ) = x allora diciamo che n è un codice di x . Nella teoria della computabilità ci sono molti esempi. Ogni volta che codifichiamo alcune informazioni con un numero otteniamo un set numerato. Ad esempio, esiste una numerazione standard(UN,νUN)UNνUN:NUNUNνUN(n)=XnX delle funzioni calcolabili parziali, in modo che φ n ( k ) sia il numero calcolato dalla funzione calcolabile parziale codificata da n quando applicato a k . (Il risultato potrebbe non essere definito.)φφn(K)nK

f:(UN,νUN)(B,νB)nNf(νUN(K))=νB(φn(K))KνUNφnfφnf

λ


PER(UN)νUN

1
Sì, le due categorie sono equivalenti e la terza versione equivalente è quella di insiemi modesti (cerca "insiemi e assiemi modesti").
Andrej Bauer,
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.