ESERCIZI TYPED LAMBDA CALCULUS

Esercizio 1



Fornire le definizioni di lambda-calcolo tipato a' la Church e a' la Curry. Fornire inoltre una proprieta' che li distingue.

  • Soluzione.


    Esercizio 2

    Descrivere la differenza tra lambda calcolo tipato 'a la Church e 'a la Curry. Nel lambda calcolo tipato semplice 'a la Curry qual e' il senso di avere variabili di tipo e del lemma di sostituzione?
    Esercizio 3
    Dare una derivazione formale nel sistema di assegnamento di tipi alla Curry per il seguente giudizio:

    |--  \xy.yx :  a --> (a-->b) --> b


    Esercizio 3.5
    Dimostrare formalmente che il seguente giudizio e' valido

    z: b-->a |- \xy.x(zy) : (a-->c) --> (b-->c)


    Esercizio 4

    Dato un termine M, qual e' la relazione che sussiste tra tutti i giudizi    B |-- M : T   ?
    Esercizio 5


    Quale teorema del lambda calcolo tipato puo' essere parafrasato ne seguente modo?
    "Le informazioni fornite dai tipi nei programmi possono essere ignorate a tempo di esecuzione."

  • Soluzione.


    Esercizio 6

    Dimostrare che se un lambda-termine tipato e' derivabile, allora lo e' ogni sua istanza.
    Ricordiamo che una istanza di Gamma |- M : sigma e' S(Gamma) |- S(M) : S(sigma), dove S sostituisce tipi a variabili di tipo.
    Esercizio 7

    Nel contesto del lambda-calcolo tipato fornire la definizione di Controllo del tipo (Type Checking) e di Ricostruzione del tipo (Type Inference).


    Esercizio 8


    Eseguire il "principal typing algorithm" sul termine \x.\y.x
    Qual'e' invece il tipo principale dell'operatore di punto fisso \f.((\x.f(xx))(\x.f(xx))) ?

  • Soluzione.


    Esercizio 9

    Volendo estendere il lambda-calcolo a' la Curry con i record ed i record types, descrivere come estendere la sintassi dei termini, dei tipi e le typing rules.
    Come si introduce in questo contesto la nozione di sottotipo?

    Esercizio 10

    Dire se c'e' un errore nella seguente proposizione e qual e'.
    Dato un lambda termine M tipabile, sia < P,pi > la principal pair di M. Allora se nel sistema di inferenza di tipi a' la Curry riusciamo a derivare B |- M : tau abbiamo che esiste una sostituzione di tipi S tale che B = S(P) e tau = S(pi).

  • Aiutone.


    Esercizio 11

    Fornire una derivazione nel sistema di tipi a' la Curry per il termine

    \bc.((\y.c)(bc))


  • Soluzione.

    Esercizio 12

    Fornire una derivazione nel sistema di tipi a' la Curry per il termine

    \b.((\y.c)(bc))


  • Soluzione.


    Esercizio 13

    Perche' il termine (\x.x)((\y.yy)(\y.yy)) non e' tipabile nel sistema dei tipi semplici a' la Curry?

    Esercizio 14

    Fornire la coppia principale (Principal Pair) nel sistema di tipi a' la Curry per il lambda termine y(\x.x) . Motivare la risposta.

    Esercizio 14.5
    Perche' possiamo affermare con sicurezza che
    (a-->(b-->b)) --> (a-->(b-->b))
    e' un tipo per \xy.(xy), senza dover andare a trovare una derivazione per
    empty |- \xy.(xy) : (a-->(b-->b)) --> (a-->(b-->b))
    nel sistema di tipi di Curry?
    Esercizio 15
    Dimostrare che se Gamma |-Church M : alpha allora Gamma |-Curry Erase(M) : alpha.

  • Soluzione.


    Esercizio 16

    Qual e' il Principal Pair della funzione che presa una funzione ed un suo argomento applica il secondo alla prima? (cioe' il Principal Pair del lambda termine \fx.fx)

  • Soluzione.


    Esercizio 17
    Se intendiamo introdurre nel lambda-calcolo anche delle costanti esplicite per numeri ed operatori numerici, cosa occorre estendere oltre la definizione di lambda-termine?
    Esercizio 18

    Nel lambda-calcolo tipato a' la Curry ogni termine e' fortemente normalizzabile. Come e' possibile allora estendere il calcolo in modo da poter definire funzioni ricorsive che non terminano?
    Esercizio 19

    Fornire l'assioma e le regole che definiscono la strategia Leftmost-Outermost per l'estensione data nei test del lambda calcolo tipato a' la Curry.



    Esercizio 20


    Esercizio 21

    Aggiungere al lambda calcolo tipato a' la Curry le costanti e le regole di riduzione che descrivano il tipo di dato lista-di-interi.


    Esercizio 22

    Cosa si intende per Polimorfismo? Cosa si intende per polimorfismo implicito? E per Subtyping Polymorphism?


    Esercizio 23
    Definire il lambda-calcolo tipato a' la Church e l'algoritmo di Type Checking.


    Esercizio 24
    Supponiamo di voler estendere il lambda-calcolo tipato a' la Curry LC+ anche con termini che rappresentino liste (in modo esplicito, non tramite una codifica).
    Fornire i tipi, gli assiomi e le regole di inferenza da aggiungere al type system.

  • Soluzione.


    Esercizio 25
    In che modo possiamo affermare con sicurezza che
    (c→c)→((c→c)→(b→b)) → (b→b)
    e' un tipo per \xy.(yx), senza dover andare a trovare una derivazione per
    ∅ |- \xy.(yx) : (c→c)→((c→c)→(b→b)) → (b→b)
    nel sistema di tipi di Curry?

  • Soluzione.


    Esercizio 26
    Descrivere il Principal Pair Algorithm fornendone una succinta giustificazione.


    Esercizio 27

    Dimostrare intuitivamente (ma non troppo...) che
    (b→c) → ((b→c)→ b) → c
    
    e' il tipo principale di λxy.x(yx)
  • Soluzione.