Questo sito utilizza cookie di terze parti per inviarti pubblicità in linea con le tue preferenze. Se vuoi saperne di più clicca QUI 
Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie. OK

Una macchina di riduzione per il λ-calcolo con valutazione dei costi

L’obiettivo della tesi è quello di realizzare un valutatore per il lambda-calcolo e, implementare su di esso, un modello di costi per la beta -regola, in quanto essa non può essere considerata un’operazione primitiva. La macchina realizzata rappresenta un caso particolare della Macchina Universale per il LambdaDelta- calcolo proposta da Simona Ronchi della Rocca e Luca Paolini, poichè è possibile selezionare l’insieme dei valori di input e l’insieme dei valori di output da un sottoinsieme ristretto: in particolare, per i valori di input è possibile scegliere quelli che implementano la strategia di valutazione call-by- name e quelli che implementano la strategia di valutazione call-by-value, mentre per i valori output è possibile scegliere fra la forma normale e la forma normale di testa. Accanto ai valori di input e di output è possibile scegliere il tipo di valutazione Lazy o NotLazy. La macchina è stata implementata sulla base di un algoritmo proposto da Ugo Dal Lago e Simone Martini, i quali hanno realizzato una strategia di valutazione call-by-value Lazy; la novità proposta è stata quella di estendere tale algoritmo anche alle altre strategie di valutazione. Gli stessi Dal Lago e Martini hanno, inoltre, proposto un modello dei costi in termini di complessità temporale per la beta -regola e tale modello è stato implementato nella macchina realizzata. Oltre a tale misura è stato proposto un modello di costi in termini di spazio. L’applicativo realizzato può essere utile come strumento per lo studio della complessità computazionale implicita in un programma.

La tesi è stata strutturata in cinque capitoli:
Il primo capitolo introduce in labda-calcolo: dopo un’accenno alle note storiche, vengono definite la sintassi e le teorie principali di tale formalismo. Successivamente viene definito il LambdaDelta-calcolo, ponendo risalto al concetto di redesso. Il capitolo si conclude con un’introduzione alla notazione dei labda-termini basata sugli indici alla De Bruijn.
Il secondo capitolo è relativo alle macchine astratte: la prima macchina presentata é la Macchina Universale per il LabdaDelta-calcolo di cui vengono descritte nel dettaglio le regole. Successivamente vengono proposti due casi particolari di macchina universale: la SECD di Landin e la Macchina di Krivine. L’ultima parte del capitolo, infine, è dedicata alla Macchina di Turing e alla sua versione multinastro.
Il terzo capitolo descrive gli algoritmi e le strutture utilizzate per implementare un’istanza di Macchina Universale: la prima parte è dedicata alla descrizione dell’analisi dei costi; successivamente vengono descritte nel dettaglio le strutture utilizzate. Il capitolo si conclude con la descrizione dettagliata degli algoritmi e, per ciascuno di esso, viene fornito un esempio di esecuzione.
Il quarto capitolo tratta l’implementazione vera e propria degli algoritmi descritti nel terzo capitolo; in particolare, vengono descritti i moduli che compongono il progetto realizzato, ponendo risalto alle problematiche di gestione della stampa e dell’efficienza.
Il quinto capitolo, infine, descrive l’applicativo che realizza un’istanza della macchina proposta.

Mostra/Nascondi contenuto.
Capitolo 1 Il λ-Calcolo 1.1 Note storiche Nella logica matematica e nell’informatica, il λ-calcolo ` e un sistema for- male realizzato per studiare la definizione di funzioni, la loro applicazione e la ricorsione. Esso fu inventato da Alonzo Church [1] nel 1930 e, successiva- mente, venne usato da Kleene [2] per codificare le funzioni calcolabili come un linguaggio di programmazione astratto (esattamente come la macchina di Turing pu` o essere considerata come il primo esempio di calcolatore astratto). Il λ-calcolo ha una sintassi piuttosto semplice (con appena tre regole per la costruzione dei termini) e una semantica operazionale non complicata (con una sola operazione, la sostituzione) e, per tali ragioni esso pu` o essere usato per studiare le propriet` a computazionali dei programmi. Il primo contatto tra il λ-calcolo e i linguaggi di programmazione reali avvenneintornoaglianni1956-1960,quandoMcCarthysvilupp` oillinguaggio di programmazione LISP, ispirato al λ-calcolo e che, di fatto, rappresenta il primoesempiodilinguaggiodiprogrammazionefunzionale[6].Tuttavial’uso del λ-calcolo come un paradigma astratto per i linguaggi di programmazione 11

Laurea liv.II (specialistica)

Facoltà: Scienze Matematiche, Fisiche e Naturali

Autore: Leonardo Simone Contatta »

Composta da 165 pagine.

 

Questa tesi ha raggiunto 260 click dal 08/03/2011.

Disponibile in PDF, la consultazione è esclusivamente in formato digitale.