Sei sulla pagina 1di 25

Lambda calcolo del Secondo Ordine

Alessio Marchetti

Alessio Marchetti Lambda calcolo 1/25


Il λ-calcolo

I λ-termini sono parole sull’alfabeto costituito da variabili


x0 , x1 , . . . , dall’astrattore λ e dalle parentesi (, ).

Definiamo induttivamente il loro insieme Λ come:


• xi ∈ Λ per tutte le variabili xi .
• t ∈ Λ ⇒ (λxi .t) ∈ Λ per tutte le variabili xi .
• t, u ∈ Λ ⇒ (tu) ∈ Λ.

Alessio Marchetti Lambda calcolo 2/25


Semplificare la notazione

L’astrazione si associa a destra:

λx1 · · · xn .t = λx1 . · · · λxn .t = (λx1 .(λx2 . · · · (λxn .(t)) · · · )

L’applicazione si associa a sinistra:

t1 · · · tn = (· · · (t1 ) · · · tn )

Un sottotermine di t è un qualunque termine u utilizzato nella


costruzione induttiva di t.
Esempio: xy è un sottotermine di λx.xyz.

Alessio Marchetti Lambda calcolo 3/25


Riduzione

Un termine t si converte a un termine t 0 se sono nella forma

t = (λx.u)v t 0 = u[v /x]

dove l’espressione u[v /x] indica la sostituzione di v nella variabile


u. Si dice che t 0 è una conversione di t.

Un termine u si riduce a un termine u 0 se esiste una successione di


passi u = u1 = · · · = un = u 0 in cui ogni ui+1 è ottenuto
sostituendo un sottotermine di ui con una sua conversione. In
questo caso si scrive u u0.

Alessio Marchetti Lambda calcolo 4/25


Esempio di Riduzione

(λx.xx)(λy .y )z (λy .y )(λy .y )z (λy .y )z z.

z non può essere ulteriormente ridotto, si dice che è in forma


normale.

Ω = (λx.xx)(λx.xx) (λx.xx)(λx.xx) ···


Ω non ha una forma normale.

Alessio Marchetti Lambda calcolo 5/25


I numeri naturali

Si possono rappresentare i numeri naturali con termini del tipo

n̄ = λs.λz. s(s(· · · (s (z)) · · · )).


| {z }
n ripetizioni

n̄ è il funzionale che compone n volte la funzione data in input.

3̄fx f (f (f (x))) = f 3 x

Questi numerali sono in forma normale.

Alessio Marchetti Lambda calcolo 6/25


Funzioni rappresentabili

Un lambda termine E rappresenta un una funzione parziale


f : N → N ∪ {⊥} se per ogni intero n

E n̄ m

se e solo se f (n) = m.

Alessio Marchetti Lambda calcolo 7/25


Alcuni esempi

A = λp.λq.λf .λx.(pf )(qfx)

A3̄2̄ λf .λx.(3̄f )(2̄fx) λf .λx.f 3 (f 2 x) = 5̄.

M = λp.λq.λf .λx.q(pf )x

M 3̄2̄ λf .λx.2̄(3̄f )x λf .λx.(3̄f )(3̄f )x λf .λx.f 3 f 3 x = 6̄.

E = λp.λq.λf .λx.qpfx

E 3̄2̄ λf .λx.2̄3̄fx λf .λx.3̄3̄fx λf .λx.3̄3 fx = 9̄.

Alessio Marchetti Lambda calcolo 8/25


Due riduzioni “patologiche”

Un termine che non diventa più semplice:

ω3 ω3 = (λx.xxx)(λx.xxx) (λx.xxx)(λx.xxx)(λx.xxx) ···

Un termine normalizzante ma non fortemente normalizzante:

(λx.y )(ω3 ω3 ) y

(λx.y )(ω3 ω3 ) (λx.y )(ω3 ω3 ω3 ) ···

Alessio Marchetti Lambda calcolo 9/25


Lambda calcolo tipato semplice (1)

Idea: aggiungere vincoli sul come applicare un termine ad un altro.

Si definiscono induttivamente i tipi come:


• I tipi variabile U1 , U2 , . . . sono tipi.
• Se U e V sono tipi (U → V ) è un tipo.

Per comodità → si associa a destra:

U1 → U2 → · · · → Un = (U1 → (U2 → (· · · → (Un ) · · · ))).

Alessio Marchetti Lambda calcolo 10/25


Lambda calcolo tipato semplice (2)

I termini si definiscono come:


• Le variabili di tipo U sono x1 , x2 , . . . per ogni tipo U.
• Se x è una variabile di tipo U e t è un termine di tipo V ,
allora λx.t è un termine di tipo U → V .
• Se f è un termine di tipo U → V e t è un termine di tipo U,
allora ft è un termine di tipo V .

Per indicare che un termine t è di tipo U si scrive anche t U .

Alessio Marchetti Lambda calcolo 11/25


Numerali

Sia U un tipo. Si definiscono i numerali come i termini

n̄ = λs U→U .λz U . s(s(· · · (s (z)) · · · )).


| {z }
n ripetizioni

La definizione è uguale alla precedente, ma con le variabili tipate.

Alessio Marchetti Lambda calcolo 12/25


Funzioni rappresentabili

Sia I il tipo (U → U) → (U → U). Somma e moltiplicazione come


definite prima si possono tipare:

A = λp I .λq I .λf U→U .λx U .(pf )(qfx)

M = λp I .λq I .λf U→U .λx U .q(pf )x

L’esponenziazione, che era stata precedente definita come

E = λp.λq.λf .λx.qpfx

non si può tipare. Le funzioni rappresentabili in questo calcolo


sono esattamente le funzioni polinomiali a tratti.

Alessio Marchetti Lambda calcolo 13/25


Lambda calcolo del Secondo Ordine (1)

Si definiscono induttivamente i tipi come:


• I tipi variabile U1 , U2 , . . . sono tipi.
• Se U e V sono tipi (U → V ) è un tipo.
• Se X è un tipo variabile e U è un tipo, allora (ΠX .U) è un
tipo.

Alessio Marchetti Lambda calcolo 14/25


Lambda calcolo del Secondo Ordine (2)

I termini si definiscono come:


• Le variabili di tipo U sono x1 , x2 , . . . per ogni tipo U.
• Se x è una variabile di tipo U e t è un termine di tipo V ,
allora λx.t è un termine di tipo U → V .
• Se f è un termine di tipo U → V e t è un termine di tipo U,
allora ft è un termine di tipo V .
• Se t è un termine di tipo ΠX .U e V è un tipo, allora tV è un
termine di tipo U[V /X ].
• Se t è un termine di tipo U e X è una variabile tipo che non
compare libera nei tipi delle variabili libere di t, allora ΛX .t è
un termine di tipo ΠX .U.

Alessio Marchetti Lambda calcolo 15/25


Numerali

Definiamo il tipo intero

N = ΠX .(X → X ) → (X → X ).

I numerali hanno la forma

n̄ = ΛX .λf X →X .λx X .f n x.

Alessio Marchetti Lambda calcolo 16/25


L’esponenziale

In questo caso si può definire l’esponenziale:

E = λp N .λq N ΛX .λf X →X .λx X .q(X → X )(pX )fx.

E 2̄3̄ ΛX .λf X →X .λx X .3̄(X → X )(2̄X )f


ΛX .λf X →X .λx X .(λg (X →X )→(X →X ) .λy X →X .g 3 y )(2̄X )fx
ΛX .λf X →X .λx X .(2̄X )3 fx
ΛX .λf X →X .λx X .(λg X →X .λy X .g 2 y )3 fx
ΛX .λf X →X .λx X .(λg X →X .λy X .g 2 y )2 f 2 x
ΛX .λf X →X .λx X .(λg X →X .λy X .g 2 y )f 4 x
ΛX .λf X →X .λx X .f 8 x 8̄

Alessio Marchetti Lambda calcolo 17/25


Normalizzazione forte

Un calcolo è fortemente normalizzante quando tutti i suoi termini


sono fortemente normalizzanti, ovvero ogni percorso di riduzione
porta a una forma normale.

Il lambda calcolo tipato semplice e tipato al secondo ordine sono


fortemente normalizzanti.

Alessio Marchetti Lambda calcolo 18/25


Normalizzazione forte per il tipato semplice

Definiamo la riducibilità:
• I riducibili di tipo variabile U sono i termini di tipo U
fortemente normalizzanti.
• I riducibili di tipo U → V , per U, V tipi qualunque, sono i
termini f di tipo U → V tali che per ogni t riducibile di tipo
U, ft è riducibile di tipo V .

Alessio Marchetti Lambda calcolo 19/25


Proprietà dei riducibili

1. I riducibili sono fortemente normalizzanti.


2. Se t è riducibile e t u, allora anche u è riducibile.
3. Sia t una variabile oppure un termine nella forma uv . Se ogni
riduzione di t in uno step porta a un termine riducibile, allora
t è riducibile.

Si dimostra per induzione sulla complessità dei termini che tutti i


termini sono riducibili.

Alessio Marchetti Lambda calcolo 20/25


Un tentativo di riadattamento

Si vuole provare a estendere il concetto di riducibilità anche per i


termini del secondo ordine.

“Un termine t di tipo ΠX .U è riducibile se per ogni tipo V , tV è


riducibile di tipo U[V /X ].”

Definizione impredicativa: per esempio V = ΠX .U.

Alessio Marchetti Lambda calcolo 21/25


Candidati di riducibilità

Un candidato di riducibilità per un tipo U è un insieme R per cui


valgono:
1. Se t ∈ R, allora t è fortemente normalizzante.
2. Se t ∈ R e t u, allora u ∈ R.
3. Sia t un termine di tipo U che sia una variabile oppure
un’applicazione nella forma uv o uU. Se ogni conversione in
un passo di t porta a un termine in R, allora t ∈ R.

Alessio Marchetti Lambda calcolo 22/25


Riducibilità parametrica

Sia T un tipo con variabili tipo libere in X .


Siano U dei tipi e R rispettivi candidati.

Definiamo i riducibili parametrici REDT [R/X ] di tipo T [U/X ]


come:
• Se T = Xi , allora REDT [R/X ] = Ri .
• Se T = V → W , allora f ∈ REDT [R/X ] se per ogni
t ∈ REDV [R/X ], vale che ft ∈ REDW [R/X ].
• Se T = ΠY .V , allora t ∈ REDT [R/X ] se per ogni tipo W e
per ogni candidato S per W vale che
tW ∈ REDV [W /Y ] [R/X , S/Y ].

I riducibili parametrici sono candidati di riducibilità.

Alessio Marchetti Lambda calcolo 23/25


Normalizzazione per il secondo ordine

A questo punto si possono definire i riducibili di tipo T come i


termini in REDT [SN /X ], dove gli Xi sono i tipi delle variabili tipo
libere di T e gli SN i sono i termini fortemente normalizzanti di
tipo Xi .

Si dimostra poi che tutti i termini sono riducibili, e quindi


fortemente normalizzanti.

Alessio Marchetti Lambda calcolo 24/25


Cosa ci si perde?

Le funzioni rappresentabili sono esattamente quelle


dimostrabilmente totali nell’artimetica del secondo ordine.

Alessio Marchetti Lambda calcolo 25/25