Sistema dei Tipi Flashcards
Regole di inferenza F1: applicazione MN
Γ⊢M:A→B Γ⊢N:A
Γ⊢MN:B
Applicando una “funzione” di tipo A → B ad un “argomento” del giusto tipo A, si ottiene un “risultato” di tipo B.
Regole di inferenza F1: costanti
Γ⊢k:K
Regole di inferenza F1: variabili
Γ1 (x:A),Γ 2⊢x:A
Regole di inferenza F1: lambda astrazioni
Γ( x : A )⊢ M : B
Γ ⊢ fn x : A.M : A → B
Consente di assegnare un tipo
freccia A → B a termini della forma λ x : A . M (chiamati lambda-astrazioni) in
un contesto Γ
Cosa vuol dire “astrarre su un tipo”?
Nel sistema F1 (prim’ordine) i termini vengono tipati in un contesto dei tipi: il judgement
x : int ⊢x+ 1 : int asserisce che x+ 1 è un termine legale di tipo int nel contesto che assegna il tipo int alla variabile x.
In un sistema dei tipi del second’ordine
le variabili agiscono da segnaposto non solo per i termini, ma anche per i tipi.
E dunque possibile scrivere un tipo come X → int in cui la variabile X segna il
posto per un tipo arbitrario.
Regole di inferenza F2: Λ X .M
Γ ⊢ M : A
Γ ⊢ Λ X . M : ∀X . A
(se X not∈ free(Γ))
Regole di inferenza F2: MB
Γ ⊢ M : ∀ X . A
Γ ⊢ M B : [B/X] A
Regole di inferenza Funτ: x
Γ1, x : σ, Γ2 ⊢ x : σ
Regole di inferenza Funτ: M se (σ > σ’)
Γ ⊢ M : σ
Γ ⊢ M : σ’
(σ > σ’)
Regole di inferenza Funτ: M se X not∈ free (Γ)
Γ ⊢ M : σ
Γ ⊢ M : ∀X . σ
(X not ∈ free (Γ))
Regole di inferenza Funτ: let x = M in N
Γ ⊢ M : σ ___ Γ, x : σ ⊢ N : σ
Γ ⊢ let x = M in N : σ
Regole di inferenza Funτ: fn x ⇒ M
_Γ, x : τ ⊢ M : τ _
Γ ⊢fn x ⇒ M : τ → τ
Regole di inferenza Funτ: MN
Γ ⊢ M : τ→ τ ___Γ ⊢ N : τ
Γ ⊢ MN : τ