Mostrare che il termine seguente è tipabile utilizzando le regole (di tipo) per la determinazione del relativo tipo :
if ((λx. λy. x+y z) k) then (z , k) else (k , z)
Alcuni suggerimenti per la soluzione:
Nella valutazione lazy di un’espressione della forma:
let x = N
consiste nel rimandare la valutazione di N fino a quando non è richiesto il valore di x.
Esempio: Si consideri il termine
let x= N in 1
con N espresso in figura.
Perchè calcolare N se il risultato sarà comunque 1?
Va notato che, adottando la valutazione lazy, non sempre si risparmia “tempo di calcolo”. Lo si risparmia nel caso dell’esempio precedente, ma lo si triplica per let x = N in (x + x + x).
Come nel caso eager, esistono termini la cui valutazione può produrre valori di base (numeri), coppie di valori o funzioni.
Per tener conto della diversa natura dei valori prodotti dalla valutazione dei termini, consideriamo anche in questo caso il concetto di “tipi” per le espressioni, indicati con τ, e definiti come segue:
τ ::= int| τ1 * τ2 | τ1 → τ2
dove
Assumendo che a ciascuna variabile x di Var sia associato un unico tipo, dato da type(x), la sintassi dei termini è resa in figura.
Nella valutazione lazy (come nel caso della valutazione eager) un termine t è tipabile, cioè
t : τ
se corrisponde a un tipo (int, τ1*τ2, τ1→τ2), secondo le seguenti regole (di tipo):
Le variabili libere dei termini si calcolano con le regole introdotte per eager, ad eccezione del termine rec che ha la regola:
Si noti che viene valutato un solo elemento della coppia e non entrambi come invece avveniva nella eager
Si noti come la sostituzione nel Let e nelle funzioni viene fatta senza richiedere la valutazione del termine da sostituire, dunque l’idea è quella di passare oggetti non ancora valutati.
Verificare se esiste la forma canonica lazy del seguente termine:
(rec f. λx. (f x) 5)
Soluzione: Nella lezione precedente, abbiamo mostrato che non esiste una forma canonica eager del termine. Con una valutazione analoga è possibile dimostrare che non ne esiste una lazy.
Verificare se esiste la forma canonica (e se si quale) eager e lazy del seguente termine:
fst(5+5, (rec f. λx. (f x) 5))
Soluzione:
1. Breve Presentazione del corso
2. Semantica Operazionale del linguaggio imperativo IMP
4. Esercitazione sulla semantica operazionale di IMP e sulle tecniche di prova
5. Definizione Induttiva di Domini
6. Ordinamenti parziali completi, funzioni continue e minimi punti fissi
7. Semantica denotazionale di IMP
8. Semantica denotazionale del comando while di IMP
9. Equivalenza delle semantiche operazionale e denotazionale di Aexp e Bexp di IMP
10. Esercitazione sulle semantiche operazionale e denotazionale di IMP
11. Equivalenza delle semantiche operazionale e denotazionale dei comandi di IMP
12. Esercitazione in aula (sulla prima metà del corso)
13. Linguaggi con Tipi di Ordine Superiori
14. Valutazione Lazy
15. Nondeterminismo e Parallelismo (Concorrenza)
16. Esercitazione in aula sui tipi e sul non-determinismo
17. Communicating Sequential Processes (CSP)
18. Calculus of Communicating Systems (CCS)