C'è una differenza tra $ \ lambda xy.xy $ e $ \ lambda x. \ Lambda y.xy $?
-
16-10-2019 - |
Domanda
Attualmente sto imparando il lambda calcolo e chiedevo sui seguenti due diversi tipi di scrittura un termine lambda.
- $ \ lambda xy.xy $
- $ \ lambda x. \ Lambda y.xy $
C'è qualche differenza di significato o il modo in cui si applica la riduzione di beta, o sono questi solo due modi per esprimere la stessa cosa?
In particolare questa definizione della creazione coppia di fatto mi chiedo:
coppia = $ \ lambda xy. \ Lambda p.pxy $
Soluzione
Questi sono solo differenze di notazioni. $ ?xyz.t $ è l'abbreviazione di $ ?x.?y.?z.t $. Niente magia qui.
In effetti, $ \ mbox {} = coppia ?xyp.pxy $, ma si tende a sottolineare che $ \ mbox {} coppia \, t \, u $ è una funzione di $ ?p.ptu $ cambiando il modo in cui si scrive il definizione. Ma in realtà è lo stesso.
Altri suggerimenti
Il primo è l'abbreviazione per il secondo. Si tratta di una convenzione sintattica comune per le espressioni accorciarsi.
D'altra parte, se si dispone di tuple nella lingua, poi c'è una differenza tra
- $ \ lambda x. \ Lambda y.xy $ e
- $ \ lambda (x, y) $ .xy.
Nel primo caso posso fornire un'unica argomento della funzione, e passare la funzione risultante intorno ad altre funzioni. In quest'ultimo caso, entrambi gli argomenti devono essere alimentati contemporaneamente. V'è, naturalmente, una funzione che può essere applicato per convertire 1 in 2 e viceversa. Questo processo è noto come (dis) accattivarsi .
La definizione di $ \ text {} $ coppia si parla è una codifica della nozione di coppie nel $ \ lambda, $ -calcolo piuttosto che le coppie come un tipo di dati primitivi (come ho accennato sopra).
Trasformare una funzione che accetta più argomenti a una catena di funzioni con singoli argomenti è chiamato currying . Le due funzioni sono essenzialmente le stesse.