O teorema do smn é o mesmo conceito que o curry?

12

Estou estudando o teorema do smn e o conceito me lembrou de currying.

Do artigo da wikipedia sobre o teorema do smn :

o teorema diz que, para uma dada linguagem de programação e números inteiros positivos m e n, existe um algoritmo específico que aceita como entrada o código fonte de um programa com m + n variáveis ​​livres, juntamente com valores m. Este algoritmo gera código fonte que efetivamente substitui os valores das primeiras m variáveis ​​livres, deixando o restante das variáveis ​​livres.

De um artigo sobre curry :

Intuitivamente, o currying diz "se você corrigir alguns argumentos, terá uma função dos argumentos restantes"

Parece a mesma ideia para mim. A única razão pela qual não tenho certeza é que os materiais que encontrei no smn não mencionam curry (e vice-versa), então eu queria consultá-lo para garantir que realmente o recebesse.

emanek
fonte
De fato. Algumas provas de computabilidade têm um sabor lambdish. O teorema smn, de maneira bem aproximada, permite fingir que índices de funções recursivas são termos lambda, de modo que dados ϕi(,) , podemos elaborar o informal e de acordo com a reivindicação que g é recursivo primitivo. Até a segunda prova do teorema da recursão (que explora smn) é o combinador de pontos fixos da Igreja disfarçado, escondido atrás de s ( )g(x)=#λy.ϕi(x,y)gs()usos. O ponto principal aqui é que, mesmo que a enumeração seja definida enumerando, digamos, TMs (ou Java ou ...), ainda podemos fingir que temos lambdas! ϕi
chi
Bem, o smn faz uma declaração existencial enquanto a existência de uma função ao curry fornece o "compilador". Mas a ideia é a mesma.
Raphael

Respostas:

15

Sim, é a mesma coisa.

Currying é um conceito do calcculus. É uma transformação entre A × B C e A ( B CλA×BC . Pense nisso como "se tivermos uma função de dois argumentos dos tipos A e B , podemos corrigir o primeiro argumento (do tipo A ) e obteremos uma função do argumento restante (do tipo B )". De fato, essa transformação é um isomorfismo. Isso é feito matematicamente preciso por modelos matemáticos de λ- cálcio(digitado), que sãocategorias fechadas cartesianas.A(BC)ABABλ

Há uma categoria de conjuntos numerados. Um conjunto numerado é um par onde A é um conjunto e ν A : NA é uma exceção parcial , ou seja, um mapa de números para A(A,νA)AνA:NAA , que também pode ser indefinido. Se então dizemos que n é um código de x . Na teoria da computabilidade, existem muitos exemplos. Sempre que codificamos algumas informações com um número, obtemos um conjunto numerado. Por exemplo, existe uma numeração padrãoνA(n)=xnx de funções calculáveis parciais, de modo que φ n ( k ) é o número calculado pela função calculável parcial codificado por N quando aplicada a k . (O resultado pode ser indefinido.)φφn(k)nk

Um morfismo de conjuntos numerados é um mapa realizado , o que significa que existe n N tal que f ( ν A ( k ) ) = ν B ( φf:(A,νA)(B,νB)nN para todos os k no domínio de ν Uma . Isso parece complicado, mas tudo o que diz é que φ nf(νA(k))=νB(φn(k))kνAφnfaz para codificar o que faz para elementos. É a maneira matemática de dizer que "programa de φ n implementa a função de f ".fϕnf

Aqui está o argumento final: a categoria de conjuntos numerados é fechada cartesiana. Podemos, portanto, interpretar o calulus digitado nele e perguntar qual programa implementa a operação de curry. A resposta é: o programa dado pelo teorema smn.λ

Andrej Bauer
fonte
Interessante. Essa categoria está intimamente relacionada a ? v A parece induzir um PER. PER(UMA)νUMA
chi
1
Sim, as duas categorias são equivalentes e a terceira versão equivalente é a de conjuntos modestos (consulta "conjuntos e montagens modestos").
Andrej Bauer