È possibile seguire le seguenti misure per ridurre le espressioni lambda:
- Completamente parentesi l'espressione per evitare errori e rendere più evidente la posizione in cui si verifica l'applicazione dell'applicazione.
- Trova un'applicazione di funzione, cioè trova un'occorrenza del modello
(λX. e1) e2
dove X
può essere un qualsiasi identificatore valido e e1
e e2
possono essere espressioni valide.
- applicare la funzione sostituendo
(λx. e1) e2
con e1'
dove e1'
è il risultato di sostituire ogni occorrenza libera di x
in e1
con e2
.
- Ripetere 2 e 3 finché il motivo non si verifica più. Si noti che questo può portare ad un ciclo infinito di espressioni non normalizzare, così si dovrebbe smettere dopo 1000 iterazioni o giù di lì ;-)
Così, per il tuo esempio ci iniziare con l'espressione
((λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))) (λf. (λx. (f x)))
Qui la sottoespressione (λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))
si adatta al nostro modello con X = m
, e1 = (λn. (λa. (λb. (m ((n a) b)) b))))
e e2 = (λf. (λx. x))
. Così, dopo la sostituzione otteniamo (λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b)))
, che rende tutta la nostra espressione:
(λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))) (λf. (λx. (f x)))
Ora possiamo applicare il modello per l'intera espressione con X = n
, e1 = (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))
e e2 = (λf. (λx. (f x)))
. Così, dopo aver sostituito otteniamo:
(λa. (λb. ((λf. (λx. x)) (((λf. (λx. (f x))) a) b)) b))
Ora ((λf. (λx. (f x))) a)
si adatta il nostro modello di e diventa (λx. (a x))
, che porta a:
(λa. (λb. ((λf. (λx. x)) ((λx. (a x)) b)) b))
Questa volta siamo in grado di applicare il modello a ((λx. (a x)) b)
, che si riduce a (a b)
, portando a :
(λa. (λb. ((λf. (λx. x)) (a b)) b))
Ora applicare il modello a ((λf. (λx. x)) (a b))
, che si riduce a (λx. x)
e ottieni:
(λa. (λb. b))
Ora che abbiamo finito.
Penso che tu abbia l'idea giusta. Una domanda: associare lambda da sinistra a destra o da destra a sinistra? Nel tuo esempio, ad esempio, li stai associando da destra a sinistra. – danben
Inoltre, che cos'è (λ f x. X)? È una specie di abbreviazione di (λ f λx. X)? – danben
@danben: l'applicazione della funzione è lasciata associativa e l'astrazione è giusta associativa. Quanto sopra è astrazione se sono corretto? ! E sì, è una stenografia. –