Simplificação do cálculo Lambda


8

Abaixo está a expressão lambda que estou achando difícil de reduzir, ou seja, não consigo entender como resolver esse problema.

(λmn.(λsz.ms(nsz)))(λsz.sz)(λsz.sz)

Eu estou perdido com isso.

se alguém pudesse me levar na direção certa, isso seria muito apreciado

Respostas:


15

Os termos do Lambda são simplificados pela regra de redução β :

(λx.M)NβM[x:=N]

Isso significa que, se você tiver um subtermo que se parece com (chamado redex ), poderá substituí-lo por , que é com substituído por . A substituição é frequentemente chamada contratual . Letras maiúsculas como e são usadas para indicar termos.(λx.M)NM[x:=N]MNxM[x:=N]MN

No seu caso, a primeira redução seria:

((λmn.(λsz.ms(nsz)))(λsz.sz)redex)(λsz.sz)β(λn.(λsz.(λsz.sz)s(nsz)))contractum(λsz.sz)
onde substituímos por . Observe que agora temos dentro de que não é muito conveniente (ainda permitido). É melhor renomear variáveis ​​associadas ( -conversion) para serem distintas, por exemplo, para:mλsz.szλszλszα

(λn.(λuv.(λsz.sz)u(nuv)))(λsz.sz)

Algumas notas:

  • A substituição se aplica apenas a variáveis livres . Variáveis ​​vinculadas permanecem sempre intactas.
  • Às vezes, a substituição não é diretamente possível. Por exemplo, você não pode substituir em porque está vinculado em . Você receberia que mudaria o significado do termo. Então, primeiro, você tem que mudar o nome da variável ligada em primeiro lugar, por exemplo, para e então você pode substituir com segurança para obter . O artigo da Wikipedia fornece uma definição formal de substituição e mostra quando é necessário renomear variáveis ​​vinculadas.x:=yλy.xyyλλy.yyλz.xzx:=yλz.yz
  • O Lambda se associa à direita, então é .λsz.szλs.(λz.sz)
  • O aplicativo é associado à esquerda, então é .xyz(xy)z

1

Uma maneira alternativa de expressar uma abstração e redução lambda. Os índices são usados ​​em vez de termos com letras com base na ordem de entrada. Abstrações são cercadas por [] 's

(λmn.(λsz.ms(nsz)))(λsz.sz)(λsz.sz)
m -> 1, n -> 2, s -> 3, z -> 4
(λmn.(λsz.ms(nsz))) = [1 3 (2 3 4)]
(λsz.sz) = [1 2]
[1 3 (2 3 4)][1 2][1 2]  
[[1 2] 2 (1 2 3)][1 2]   ;1 was replaced with [1 2], remaining terms decremented
[[1 2] 1 ([1 2] 1 2)]    ;1 was replaced with [1 2], remaining terms decremented
[1 ([1 2] 1 2)]          ;1 2 was replaced by 1 ([1 2] 1 2)]
[1 (1 2)]                ;1 2 was replaced by 1 2
(λmn.m(mn))

A notação acima é apenas uma maneira mais compacta e inequívoca de expressar abstrações lambda. As abstrações compostas são reduzidas para uma única forma normal automaticamente; a redução alfa não é necessária.

Índices positivos únicos são usados ​​para termos vinculados. Índices negativos são usados ​​para termos de eliminação. Os índices negativos são colocados por último em ordem decrescente de magnitude.

I = λx.x = [1]
K = λxy.x = [1 -2]
KI = λyx.x = [2 -1]
S = λxyz.xz(yz) = [1 3 (2 3)]

Aplicando S a K:

[1 3 (2 3)][1 -2]
[[1 -2] 2 (1 2)]  ;1 was replaced with [1 -2], remaining terms decremented
[[.2 -1] (1 2)]   ;reducing: 1 replaced by .2*, -2 decremented (in magnitude) 
[2 -2 -1]         ;(1 2) bound terms become kill terms due to -1.
[2 -1] = KI       ;-2 kill term is void due to surviving 2 term

* the . notation signifies the bound term is from the outer abstraction 
  and must be used to prevent decrementing and double replacement of the
  term until the substitution of all terms in the abstraction is complete.

[2 -1][anything] ;applying KI to anything
[1] = I          ;yeilds I, therefor SK[anything] = [1] = I

Aplicando K a K:

[1 -2][1 -2]
[[1 -2] -1]  ;kill terms are absorbed and also increase the magnitude of bound terms
[2 -3 -1]    ;applying this result to anything yields K.
[2 -3 -1][anything]
[2 -1]

11
Por favor, adicione um pouco de comentário / motivação.
vonbrand

11
Sua resposta não tem descrição e, portanto, parece algum tipo de quebra-cabeça de Soduko. Qual é a sua representação? Quais são as regras de redução?
Dave Clarke

3
Então faça isso na resposta; você pode editar clicando em, bem, "editar".
Raphael

Aqui está uma versão baseada na Web de um console de intérpretes para esta notação. Ele não mostra as etapas de redução, mas avalia corretamente tudo o que eu pude jogar nela. Estou interessado em obter feedback sobre isso.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.