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.
fonte
Respostas:
Sim, é a mesma coisa.
Currying é um conceito do calcculus. É uma transformação entre A × B → C e A → ( B → Cλ A × B → C . 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 → ( B → C) UMA B UMA B λ
Há uma categoria de conjuntos numerados. Um conjunto numerado é um par onde A é um conjunto e ν A : N → A é uma exceção parcial , ou seja, um mapa de números para A( A , vUMA) UMA νUMA: N → A UMA , 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νUMA( n ) = x n x 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 ) n k
Um morfismo de conjuntos numerados é um mapa realizado , o que significa que existe n ∈ N tal que f ( ν A ( k ) ) = ν B ( φf: ( A , vUMA) → ( B , νB) n ∈ N para todos os k no domínio de ν Uma . Isso parece complicado, mas tudo o que diz é que φ nf( νUMA( k ) ) = νB( φn( k ) ) k νUMA φn faz para codificar o que faz para elementos. É a maneira matemática de dizer que "programa de φ n implementa a função de f ".f ϕn f
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.λ
fonte