Abaixo está a expressão lambda que estou achando difícil de reduzir, ou seja, não consigo entender como resolver esse problema.
Eu estou perdido com isso.
se alguém pudesse me levar na direção certa, isso seria muito apreciado
fonte
Abaixo está a expressão lambda que estou achando difícil de reduzir, ou seja, não consigo entender como resolver esse problema.
Eu estou perdido com isso.
se alguém pudesse me levar na direção certa, isso seria muito apreciado
Os termos do Lambda são simplificados pela regra de redução β :
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.
No seu caso, a primeira redução seria:
Algumas notas:
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]