Logica della Programmazione e Teoria dei Tipi L’inferenza di tipo per il λ-calcolo Simona Ronchi Della Rocca Il sistema di assegnazione di tipo per il λ-calcolo, corrispondente alla logica intuizionista minimale I tipi sono definiti dalla seguente grammatica: σ ::= α | σ → σ dove α è una variabile di tipo. Si useranno α, β, γ, per le variabili di tipo, e σ, τ, ρ per i tipi. Un contesto Γ è un insieme finito di assegnazioni x : σ, dove ogni variabile x occorre una volta sola. I termini del λ-calcolo sono definiti dalla seguente grammatica: M ::= x | λx.M | M M dove x è una variabile. Il sistema di assegnazione di tipo è definito dalle seguenti regole: (V ar) Γ, x : σ ` x : σ Γ, x : σ ` M : τ (→ I) Γ ` λx.M : σ → τ Γ`M :σ→τ Γ`N :σ (→ E) Γ ` MN : τ Il tipo principale La logica proposizionale possiede la seguente proprietà: se esiste una derivazione logica con una data struttura, allora ne esiste una minima, cioè dove le formule della derivazione hanno il minimo numero di simboli (modulo nomi delle variabili logiche). Inoltre le derivazioni di una data struttura sono chiuse per sostituzione di variabili logiche con formule. Per semplicità, consideriamo l’isomorfismo di Curry-Howard senza cambiare i simboli, cioè consideriamo la logica intuizionista dove → indica l’implicazione, e dove le formule hanno esattamente la stessa sintassi dei tipi. Ad esempio, consideriamo la seguente struttura di derivazione: (V ar) ` (→ I) ` che corrisponde all’insieme di tutte le derivazioni: (V ar) σ`σ (→ I) `σ→σ 1 per ogni possibile formula σ. La minima derivazione con questa struttura sarà allora: (V ar) α`α (→ I) `α→α dove α è una variabile, e ogni derivazione con questa struttura si ottiene sostituendo ad α una formula. Poichè un termine che può essere tipato corrisponde ad una derivazione nella logica intuizionista minimale, questo corrisponde alla seguente proprietà: Proprietà di tipo principale Γ ` M : σ è una derivazione principale per M se e solo se per ogni Γ0 , σ 0 , Γ0 ` M : σ 0 implica che esiste una sostituzione S tale che S(Γ) ⊆ Γ0 e S(σ) = σ 0 . Tale proprietà è decidibile. Algoritmo P Definiamo l’algoritmo P , che, applicato ad un termine M , restituisce una tripla < B, σ, E >, dove B è un contesto, σ è un tipo ed E è un insieme finito di equazioni tra tipi: P (x) = < {x : α}, α, ∅ > P (λx.M ) = let P (M ) =< B, σ, E > in if B = B 0 ∪ {x : τ } then < B 0 , τ → σ, E > else < B, α → σ, E > dove α è una variabile nuova P (M N ) = let P (M ) =< B1 , σ1 , E1 >, P (N ) =< B2 , σ2 , E2 >, V (P (M )) ∩ V (P (N )) = ∅ let E = E1 ∪ E2 ∪ {σ1 = σ2 → α} ∪ {σ = τ | ∃x.x : σ ∈ B1 end x : τ ∈ B2 } dove α è una variabile nuova in < B1 ∪ B2 , α, E1 ∪ E2 ∪ E > dove V (P (M )) denota l’insieme delle variabili di tipo che occorrono in P (M ). L’algoritmo P ci permette di ricostruire la derivazione principale di un termine, se questa esiste. Infatti vale il seguente teorema: Teorema 1. (correttezza) Sia P (M ) =< B, σ, E >. Per ogni sostituzione S che unifica l’insieme di equazioni E, S(B) ` M : S(σ). 2. (completezza) Sia Γ ` M : τ e P (M ) =< B, σ, E >. Allora esiste una sostituzione S che unifica E, tale che S(B) ⊆ Γ e S(σ) = τ. Dimostrazione 1. (correttezza) Per induzione sulla definizione di P (M ). 2. (completezza) Per induzione sulla derivazione che dimostra Γ ` M : τ . 2