Presentazione. Teoria della Concorrenza Modulo di Semantica. Approcci alla semantica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Presentazione. Teoria della Concorrenza Modulo di Semantica. Approcci alla semantica"

Transcript

1 Presentazione Modulo di 6 crediti (48 ore), Teoria della Concorrenza Modulo di Semantica Pietro Di Gianantonio corso di laurea in informatica Argomento principale Semantica dei linguaggi di programmazione Vedremo i diversi metodi (3) utilizzati per descrivere in maniera formale i linguaggi di programmazione. Cominceremo con il considerare un linguaggio di programmazione semplicissimo, in seguito arricchito con nuovi costrutti. Alcuni argomenti si sovrappongo al corso di Metodi Formali. Propedeutico a: la restante parte del corso di Teoria della Concorrenza, il corso di Interpretazione Astratta (Comini), una qualsiasi trattazione formale e rigorosa dei programmi. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 1 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 2 / 142 Semantica dei linguaggi di programmazione Obiettivo: definire in maniera formale il comportamento dei programmi, e dei costrutti di programmazione. In contrapposizione alle definizioni informali, comunemente usate. Utile per: evitare ambiguità nella definizione di un linguaggio di programmazione: si mettono in evidenza i punti critici di un linguaggio di programmazione (es. ambiente statico dinamico, valutazione e passaggio dei parametri) fondamentale nella costruzione dei compilatori, ragionare sui singolo programmi (definire logiche, principi di ragionamento, sui programmi): provare che un certo programma soddisfa una certa proprietà, una specifica, che è corretto. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 3 / 142 Approcci alla semantica Semantica Operazionale. Descrivere come avviene l esecuzione del programma, in una semplice macchina formale. Parallelo con le macchine di Turing. Semantica Operazionale Strutturata (SOS). La macchina formale sostituita da regole, sintattiche, di riscrittura. Semantica Denotazionale. Il significato di un programma descritto da un oggetto matematico. Funzione parziale, elemento in un insieme ordinato. Un elemento di un insieme ordinato rappresenta il significato di un programma, di una parte del programma, di un costrutto della programmazione. Alternative, action semantics, semantica a giochi, categoriale. Semantica Assiomatica. Il significato di un programma espresso in termini di pre-condizioni e post-condizioni. Tante semantiche perché nessuna completamente soddisfacente. Ognuna descrive un aspetto del comportamento dei programmi, ha un P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 4 / 142

2 SOS pro SOS contra Semplice, sintattica, intuitiva. Piuttosto flessibile. Può facilmente gestire linguaggi di programmazione complessi. La struttura delle regole resta costante nei diversi linguaggi. La semantica dipende dalla sintassi, è formulata usando la sintassi. Difficile correlare programmi scritti in linguaggi differenti. La semantica non è composizionale (la semantica di un elemento dipende dalla semantica dei suoi componenti). Induce una nozione di equivalenza tra programmi difficile da verificare (ed utilizzare). P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 5 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 6 / 142 Obiettivi: Semantica denotazionale una semantica indipendente dalla sintassi, si possono confrontare programmi scritti in linguaggi differenti. una semantica composizionale (la semantica di un elemento dipende dalla semantica dei suoi componenti). più astratta, fornisce strumenti per il ragionamento sui programmi. Caratteristica principale: descrivere il comportamento di un programma attraverso un oggetto matematico. non terminazione, Diverse caratteristiche dei linguaggi di programmazione store (memoria, linguaggi imperativi) environment, (ambiente) non determinismo, concorrenza, funzioni di ordine superiore (linguaggi funzionali), eccezioni,... Al crescere della ricchezza del linguaggi cresce (rapidamente) la complessità della semantica denotazionale. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 7 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 8 / 142

3 Semantica assiomatica Libro di testo Descrizione indiretta di un programma, mediante un insieme di asserzioni: {Pre} p {Post} Fornisce immediatamente una logica per ragionare sui programmi. Complementare alle altre semantiche. Glynn Winskel: The Formal Semantics of Programming Languages. An introduction. Un classico, presentazione semplice, completa, con pochi fronzoli, e poche considerazioni generali. Tre copie in biblioteca. Presentiamo buona parte del libro, saltando le dimostrazioni. Argomenti aggiuntivi. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 9 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 10 / 142 Propedeuticità Un semplice linguaggio imperativo: IMP Categorie sintattiche: Alcuni argomenti della logica: calcolo dei predicati, costruzione insiemistiche: prodotto, somma disgiunta, spazio di funzione, insiemi delle parti, grammatiche (libere dal contesto), definizione induttive e principio di induzione, dualità: linguaggio e modello, (sintassi e semantica). Numeri interi (N): n, valori booleani (T), locazioni (Loc): X, Espressioni aritmetiche (AExp): a ::= n X a 0 + a 1 a 0 a 1 a 0 a 1 Espressioni booleane (BExp): b ::= true false a 0 = a 1 a 0 a 1 not b b 0 or b 1 b 0 and b 1 Comandi (Com): c ::= skip X := a c 0 ; c 1 if b then c 0 else c 1 while b do c Sintassi astratta e sintassi concreta P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 11 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 12 / 142

4 IMP Sintassi incompleta: non definiti la sintassi per le costanti intere, le locazioni. Poco interessanti, ortogonali alla nostra trattazione. Linguaggio minimale capace di calcolare tutte le funzioni computabili (Turing-completo), se le locazioni possono memorizzare interi arbitrariamente grandi. Manca: le variabili (l ambiente, (environment)), definizioni di procedure, funzioni, definizioni ricorsive. Semantica operazionale per IMP Un insieme di regole per descrivere il comportamento di espressive aritmetiche, booleane, comandi. All espressioni aritmetiche si associano asserzioni, giudizi (judgments) a, σ n dove σ : Loc N, stato (memoria, store). Giudizi derivati attraverso regole in deduzione naturale, Regole guidate dalla sintassi (stuctured operational semantics). Alle espressioni base si associano assiomi: n, σ n X, σ σ(x ) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 13 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 14 / 142 Alle espressioni composte regole di derivazione: a 0, σ n 0 a 1, σ n 1 a 0 + a 1, σ n... IMP: regole SOS n 0 + n 1 = n Valutare un espressione aritmetica è banale, quindi: regole banali. Ad ogni espressione associata una, o più regole determinate dal suo connettivo principale. Regole sottintendono un algoritmo di valutazione (deterministico). Regole assumono che un preesistente meccanismo di rappresentazione dei numeri e di calcolo delle operazione aritmetiche. Si astrae dal problema di eseguire le operazioni.. Assiomi Espressione booleane: regole SOS a 0, σ n a 1, σ n a 0 = a 1, σ true a 0, σ n a 1, σ m a 0 = a 1, σ false b 0, σ t 0 b 1, σ t 1 b 0 and b 1, σ t n m dove t true se t 0 true e t 1 true. Altrimenti t false. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 15 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 16 / 142

5 Esercizi Comandi Dare regole alternative per in connettivo and. Attraverso le regole posso definire in maniera esplicite per le operazione aritmetiche. Senza demandare alle side condition. Semplificazione: rappresentiamo i naturali e non gli interi n ::= 0 Sn Regole per l addizione, prodotto, confronto. Dove n : 0 = 2 n e n : 1 = 2 n + 1 n ::= 0 n : 0 n : 1 L esecuzione di un comando ha l effetto di modificare la memoria, store: c, σ σ Per rappresentare lo store modificato si usa la notazione σ[m/x ] σ[m/x ](X ) = m σ[m/x ](Y ) = σ(y ) se X Y In un approccio completamente operazionale lo stato dovrebbe essere un oggetto sintattico: grammatica per definire gli stati, insieme di regole che ne definiscono il comportamento. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 17 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 18 / 142 skip, σ σ a, σ n X := a, σ σ[n/x ] Comandi, regole c 0, σ σ c 1, σ σ c 0 ; c 1, σ σ b, σ true c 0, σ σ if b then c 0 else c 1, σ σ... b, σ true c, σ σ while b do c, σ σ while b do c, σ σ P. Di Gianantonio (Udine) semantica dei linguaggi... di programmazione 19 / 142 Equivalenze Dalla semantica, una nozione di equivalenza tra espressioni, comandi. se per ogni coppia di store σ, σ : Più nozione di equivalenza: c 0 c 1 c 0, σ σ se e solo se c 1, σ σ c 0 c 1 Se i comandi c 0 e c 1, formulati nella sintassi astratta, sono uguali. σ 0 = σ 1 se σ 0 e σ 1 sono la stessa funzione Loc N P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 20 / 142

6 Esercizi Determinismo Codificare in Haskell le regole della semantica operazionale. Posto: w while b do c dimostrare che: w if b then c; w else skip e w if b then w else skip Le regole sono deterministiche: Formulazione forte: Per ogni c, σ esiste al più un σ ed una singola dimostrazione di: c, σ σ Formulazione debole: Per ogni c, σ esiste al più un σ per cui valga c, σ σ P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 21 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 22 / 142 Big-step, small-step SOS Formulazione alternativa: descrive un passo di computazione. Nuove regole per il while c, σ c, σ b, σ true while b do c, σ c; while b do c, σ Seconda regole per il while... Vengono usate entrambe le formulazioni: Per alcuni linguaggi è più semplice fornire la big-step semantics. Più astratta. Nei linguaggi per la concorrenza è fondamentale considerare la small-step semantics. Contiene informazioni aggiuntive sui passi di computazione, e sull ordine di esecuzione. può essere non banale dimostrare l equivalenza tra le due formulazioni. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 23 / 142 In matematica e informatica molte definizione induttive: numeri naturali, grammatiche derivazioni, dimostrazioni Insiemi di costruttori: Induzione P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 24 / 142

7 Induzione Semantica denotazionale per IMP Sulle strutture induttive: definizione per ricorsione, dimostrazioni per induzione. Rafforzamenti, estensioni: induzione generalizzata, insiemi ben fondati. Definiti, N = {..., 2, 1, 0, 1, 2,...}, l insieme dei numeri interi. T = {true, false}, l insieme dei valori booleani. Σ = Loc N, l insieme dei possibili stati (configurazioni della memoria,dello store), a ogni categoria sintattica si associa una funzione di interpretazione: A : AExp (Σ N) un espressione aritmetica rappresenta una funzione da stato a numero intero. B : BExp (Σ T ) C : Com (Σ Σ) un comando rappresenta una funzione parziale, da stato in stato. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 25 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 26 / 142 Semantica delle espressioni (aritmetiche, booleane) Le funzioni di interpretazione vengono definite per induzione sulla grammatica (sulla struttura del termine). A n (σ) = n A X (σ) = σ(x ) A a o + a 1 (σ) = (A a o (σ)) + (A a 1 (σ)) Comandi rappresentano funzioni parziali. Semantica dei comandi Nelle definizioni, rappresento le funzioni parziali attraverso il loro grafi (l insieme di coppie argomento, valore ). C skip = {(σ, σ) σ Σ} C X := a = {(σ, σ[n/x ]) σ Σ, A a (σ) = n} C c 0 ; c 1 = C c 1 C c 0... B a o a 1 (σ) = (A a o (σ)) (A a 1 (σ)) C if b then c 0 else c 1 = {(σ, σ ) C c 0 B b (σ) = true} {(σ, σ ) C c 1 B b (σ) = false} Ogni elemento, ogni operatore, viene interpretato con il suo corrispondente semantico. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 27 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 28 / 142

8 Il caso difficile: il costruttore while C while b do c = C if b then c; while b do c else skip = {(σ, σ) σ Σ, B b (σ) = false} {(σ, σ ) (C while b do c C c ) B b (σ) = true} Definizione ricorsiva. Esistenza delle soluzione: riduco il problema ad un problema di punto fisso, considero l operatore: Γ(R) = {(σ, σ) σ Σ, B b (σ) = false} {(σ, σ ) (R C c ) B b (σ) = true} Γ trasforma una relazione tra Σ e Σ in un altra relazione. Γ : Rel(Σ, Σ) Rel(Σ, Σ) Definisco C while b do c come minimo punto fisso per Γ. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 29 / 142 Idea di fondo Posto Ω while true do skip Definisco C while b do c Come limite delle sue approssimazioni: C Ω C if b then c; Ω else skip C if b then c; (if b then c; Ω else skip) else skip P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 30 / 142 Teoremi di punto fisso (su ordini) Forniscono soluzione al problema precedente. teorema di Knaster-Tarski: in un reticolo completo, ogni funzione monotona ha un minimo (e un massimo) punto fisso, (importante in matematica) in un ordine parziale completo ogni funzione monotona e continua ha un minimo punto fisso. (fondamentale nella semantica denotazionale) (si indeboliscono le proprietà dell ordine, si rafforzano le proprietà della funzione). in uno spazio metrico completo, ogni funzione contrattiva ha un unico punto fisso, (usata in analisi) Strutture ordinate Un ordine parziale (P, ) è formato da un insieme P e una relazione binaria su P t.c. per ogni p, q, r P p p, (riflessiva) p q e q r allora p r, p q e q p allora p = q, Dato sottoinsieme X di P, (transitiva) (antisimmetrica) X ha un maggiorante (upper bound) se esiste p P t.c per ogni q X, q p. l estremo superiore di X, X se esiste, è un maggiorante più piccolo di tutti gli altri, q X, q X, inoltre per ogni p se q X. q p allora X p l estremo superiore è unico (dimostrare per esercizio). P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 31 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 32 / 142

9 Reticoli Teorema di Knaster-Tarski Definizione Un reticolo (lattice) è un ordine parziale in cui ogni coppia di elementi ha un estremo superiore, ed estremo inferiore. Possiamo scrivere {p, q} come p q. Segue che in un reticolo ogni insieme finito ha insieme superiore. Un reticolo completo è un ordine parziale in cui ogni sottoinsieme ha estremo superiore. Esercizio. Mostrare che in un reticolo completo ogni sottoinsieme ha anche estremo inferiore. Definizione Una funzione f : P Q tra ordini complete è monotona se rispetta l ordine. Se p 1 p 2 allora f (p 1 ) f (p 2 ) Teorema (Knaster-Tarski) Ogni funzione monotona f su un reticolo completo P possiede un minimo (massimo) punto fisso. Si mostra che {p f (p) p} è un punto fisso per f (ossia {p f (p) p} = f ( {p f (p) p}) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 33 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 34 / 142 Relazioni Relazioni Le funzioni parziali non formano un reticolo. Le relazioni sono un estensione delle funzioni parziali e formano un reticolo. Funzioni e funzioni parziali possono essere viste come casi particolari di relazioni. Definizione Una relazione tra X e Y è caratterizzata da un sottoinsieme di X Y. Una funzione parziale f : X Y è un relazione tale che x X, y, y Y. (x, y) f (x, y ) f y = y una funzione totale è una funzione parziale tale che x y(x, y) f Definizione (Composizione) Data due relazione R tra X e Y e S tra Y e Z definiamo S R come (x, z) S R y. (x, y) R (y, z) S Notare l inversione nell ordine. Nel caso che le relazioni siano funzione, questa composizione coincide con la composizione di funzioni. (x, y) f si scrive anche y = f (x) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 35 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 36 / 142

10 Applicazione alla semantica Strutture per la semantica denotazionale l insieme di relazioni su Σ Σ forma un reticolo completo, l operatore: è monotono, Γ(R) = {(σ, σ) B b (σ) = false} {(σ, σ ) (R C c ) B b (σ) = true} il teorema di Knaster-Tarski prova l esistenza un punto fisso per l operatore Γ (soluzione delle definizione ricorsiva della semantica). La definizione ricorsiva possiede più soluzioni, la soluzione minima è quella che descrive correttamente il comportamento del programma.. È preferibile usare funzioni parziali e non relazioni. La soluzione precedente non prova che il punto fisso sia una funzione parziale, potrebbe essere una relazione generica. In IMP la semantica di un comando : Σ Σ. Lo spazio delle funzioni parziali forma un ordine, f g quando le seguenti condizioni equivalenti sono soddisfatte: g è più definita di f, x.f (x) f (x) = g(x) come insieme di coppie (argomento, risultato) f g questo spazio non è un reticolo. È necessario usare un secondo teorema di punto fisso. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 37 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 38 / 142 Definizione Ordini parziali completi Nuovo teorema di punto fisso In un ordine parziale P, una catena è una sequenza di elementi p 1 p 2 p 3,..., ciascuno maggiore del precedente. Un ordine parziale completo (CPO) P è un ordine parziale in cui ogni catena possiede un estremo superiore. Un ordine parziale completo con bottom è un ordine parziale completo contenente un elemento minimo. CPO sono le strutture tipiche i cui interpretare programmi. Un esempio di CPO le funzioni parziali da N in N. Definizione (Continuità) Una funzione f : D E tra CPO è continua se preserva l estremo superiore delle catene. Per ogni catena p 1, p 2, p 3,..., i N f (p i) = f ( i N p i). P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 39 / 142 Teorema Ogni funzione continua su un CPO con bottom f : D D possiede un minimo punto fisso. Proof. Il minimo punto fisso è l estremo superiore della catena, f ( ), f (f ( )), f 3 ( ),.... Completare per esercizio. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 40 / 142

11 Definizione per approssimazioni del while Applicando il teorema precedente, la funzione C while b do c è il limite della seguente catena di funzioni parziali: C C if b then (c; ) C if b then (c; if b then (c; )) C if b then (c; if b then (c; if b then (c; )))... dove indichiamo con un programma sempre divergente. con if b then c si indica il comando if b then c else skip zucchero sintattico, arricchisce il linguaggio senza aggiunge nuove definizioni semantiche. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 41 / 142 Una categoria per la semantica denotazionale Astraendo dall esempio precedente: si interpretano i linguaggi di programmazione (tipi di dato, classi di elementi) utilizzando: 1 ordini parziali completi (CPO) ordine: l information order rappresenta l assenza di informazioni, il programma che diverge sempre, completi per dare soluzione alle equazioni ricorsive, di punto fisso. 2 funzioni tra CPO che sono monotone continue: preservano l estremo superiore di catene crescenti. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 42 / 142 Esempi di CPO N con l ordine piatto: n m n = m (ordine completo per catene). N = N { }, n m (n = m n = ), l insieme dei naturali con, T = {true, false}, T O = {, } con, il CPO con due elementi. N N con l ordine puntale: f g sse per ogni n, f (n) g(n), isomorfo a N N (con l ordine visto in precedenza) si internalizza la divergenza: f (n) = indica che f (n) non termina, si evitano le funzioni parziali Nat { }, i numeri naturali con l ordine lineare. streams di valori booleani: stringhe parziali, arbitrariamente lunghe. Significato intuitivo. Monotonia e continuità Consideriamo un programma con tipo funzionale F : (N N) N La sua semantica F : (N N ) N è una funzione: monotona, perciò se F (f ) 3 allora F (g) 3 per ogni funzione g più definita di f. Preserva l information order. Continua perciò se F (f ) = 3 allora F genera 3 dopo aver valutato f su di un numero finito di valori, ossia, esiste un funzione parziale g, definita su di un numero finito di elementi tale che g f e F (g) = 3 Finitarietà: per ottenere una parte finita di informazione sul risultato è sufficiente esaminare una parte finita di informazione dell argomento. Esercizio: mostrare che la composizione preserva la continuità P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 43 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 44 / 142

12 Lambda (λ) notazione In matematica definisco le funzioni mediante equazioni nella forma: f (x) = sin(x) + cos(x). Con la λ notazione scrivo direttamente: λx. sin(x) + cos(x), oppure λx R. sin(x) + cos(x) oppure f = λx. sin(x) + cos(x) In Haskell: \ x -> (sin x ) + (cos x) Vantaggi: name less functions, posso definire una funzione senza darle un nome, definizione funzioni più sintetica, funzioni assimilate agli altri elementi, concettualmente più chiara: sin(x)dx diventa λx. sin(x) oppure sin. Costruttori di CPO Per dare semantica a linguaggi complessi si associa a tipi: CPO opportunamente strutturati programmi e sottoespressioni di programmi: elementi di CPO, funzioni su CPO nel fare questo costruiamo CPO complessi a partire ad CPO, usiamo funzioni e operatori standard su questi costruzioni. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 45 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 46 / 142 CPO discreti Lifting CPO senza bottom Ad un insieme di valori D, (es. N l insieme dei numeri interi, B) associo il CPO D con ordine piatto d 1 d 2 sse d 1 = d 2. Dal punto di vista informativo, elementi inconfrontabili: informazioni diverse, tutte completamente definite, nessuna più definita dell altra. Insieme di valori tutti completamente definiti. Definizione D = D { } con relazione d ordine: d 1 d 2 sse d 1 = oppure (d 1, d 2 D d 1 d 2 ) Dal CPO D, costruisco il CPO D delle computazioni, eventualmente divergenti, che generano elementi di D. Funzioni associate: : D D, dato un valore d, costruisce la computazione d che restituisce l elemento d. da una funzione f : D E definita su valori (E CPO con bottom), si deriva la funzione (stretta) f : D E definita su computazioni. Notazione. (λx.e) (d) si scrive anche let x d. e. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 47 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 48 / 142

13 Osservazioni si usa approccio ispirato dalla teoria delle categorie: per ogni costruttore si definisce le funzioni che lo caratterizzano. ingredienti base per la costruzione di altre funzioni continue i costruttori di CPO hanno una costruzione corrispondente in Haskell in teoria delle categorie l operazione di Lifting definisce una monade, corrispondente Haskell: la monade Maybe corrispondenza non perfetta: in Haskell posso definire test :: Maybe a -> Bool test Nothing = True test (Just _) = False P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 49 / 142 Prodotto Definizione D E l insieme delle coppie con la relazione d ordine puntuale: d 1, e 1 d 2, e 2 sse d 1 d 2 e e 1 e 2 Si generalizza al prodotto finito. Costruisce i CPO associati a coppie, record, vettori. Funzioni associate: proiezioni π 1 : (D E) D, π 1 ( d, e ) = d, da una coppia di funzioni f : C D, g : C E si deriva la funzione f, g : C (D E) f, g (c) = f (c), g(c) (restituisce coppie di elementi). π 2 : (D E) E Definiscono un isomorfismo tra (C D) (C E) e C (D E) Dato da... P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 50 / 142 Proprietà ed esercizi Mostrare che le definizioni sono ben date: l ordine D E è un CPO, le funzioni π i, f, g sono continue. Costruire O O(= O 2 ), O 3. A quali ordini sono isomorfi? Costruire (T ) 2 Proposizione Una funzione f : (C D) E è continua sse è continua in ciascuno degli argomenti. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 51 / 142 Spazio di funzioni Definizione [D E] l insieme funzioni continue da D in E con l ordine puntuale f g sse per ogni d D, f (d) g(d). Costruisco CPO per linguaggi funzionali. Mostrare che [D E] è un CPO. Funzioni associate. applicazione app : ([D E] D) E app( f, d ) = f (d) currying da (Haskell Curry), una funzione f : (D E) F induce una funzione curry(f ) : D [E F ] curry(f )(d)(e) = f ( d, e ) Definiscono un isomorfismo tra C [D E] e (C D) E), dato da... P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 52 / 142

14 Proprietà ed esercizi Mostrare che l operatore di punto fisso Y : [D D] D è continuo. Mostrare che [T D] è isomorfo a D 2. Disegnare i CPO: [0 T ], [N T ], [0 T ], [N T ]. Definizione D + E = { 1, d d D} { 2, e e E} con ordine: 1, d 1, d sse d d 2, e 2, e sse e e 1, d incomparabile con 2, e Mostrare che D + E è un CPO. CPO associati ai variant type. Somma disgiunta inserzioni: in 1 : D (D + E), in 1 (d) = 1, d, in 2 : E (D + E) dalle funzioni f : D C, g : E C si deriva la funzione [f, g] : (D + E) C [f, g]( 1, d ) = f (d), [f, g]( 2, e ) = g(e), Definiscono un isomorfismo tra (D C) (E C) e [D + E] C P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 53 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 54 / 142 Esercizi e proprietà Metalinguaggio Funzioni su CPO possono essere costruite da un linguaggio facente uso di: Definire la somma n-aria (di n CPO). Posso ridurre la somma n-aria ad applicazioni ripetute della somma binaria? Definire, tramite funzioni e costruttori standard, la semantica dell if then else Definire, tramite funzioni e costruttori standard, la semantica delle funzioni booleane. variabili con tipo un dominio: x 1 : D 1,..., x i : D i costanti: true, false, 1, 0, 1,... funzioni base:, π i, app, in i, fix costruttori: ( ),,, curry( ), [, ], applicazione, lambda astrazione, composizione di funzioni. Esempi: π 2, π 1 λx. f (gx) λx. f (π 1 x)(π 2 x) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 55 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 56 / 142

15 Metalinguaggio Linguaggi funzionali Proposizione Ogni espressione del metalinguaggio di tipo E e con solo le variabili x 1 : D 1,..., x i : D i, denota un elemento nel CPO [(D 1... D i ) E], ossia una funzione continua. Proof. Per induzione sulla struttura dell espressione e, si definisce il significato di e e da qui la continuità. Metalinguaggi permette di definire oggetti matematici, con una sintassi simile alla definizione di programmi Haskell. Metalinguaggi e Haskell definiscono oggetti di natura diversa. Semantica (operazionale e denotazionale) di un semplice linguaggio funzionali con due differenti meccanismi di valutazione Tipi: call-by-value (eager) come: Standard ML, OCaml. call-by-name (lazy) come Haskell, Miranda. τ ::= int τ 1 τ 2 τ 1 τ 2 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 57 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 58 / 142 t ::= x n t 1 op t 2 (t 1, t 2 ) fst t snd t λx.t (t 1 t 2 ) if t 0 then t 1 else t 2 let x t 1 in t 2 rec x.t Espressioni Non tutte le espressioni hanno senso, esempio (1 3), ((λx.x + 1)(2, 3)) Controllo di tipo: determina le espressioni corrette, si deriva t : τ ogni variabile ha associato un unico tipo, regole induzione sulla struttura del termine ogni costrutto sintattico ha una regola del tipo: x : τ 1 t 1 : τ 1 t 2 : τ 2 let x t 1 in t 2 : τ 2 proprietà: ogni espressione ha tipo unico, Type checking nessun polimorfismo: sistema di tipi e semantica denotazionale più semplice, P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 59 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 60 / 142

16 Semantica operazionale Call-by-value, Big-step reduction Mediante un sistema di regole descrivo come un termine riduce. Due alternative: big-step reduction: t c (t c) descrive il valore c generato dalla computazione di t più vicina alla semantica denotazionale, meno semplice da definire. small-step reduction t 1 t 2 descrive come un passo di computazione trasforma il termine t 1 nel termine t 2. Nelle semantiche small step per linguaggi funzionali, spesso, un passo di computazione è definito come una sostituzione termine per variabile. Questo non è un passo di computazione elementare. Per ogni tipo, un insieme dei valori: risultati della computazione, termini che non posso essere ridotti ulteriormente. int (tipi ground), le costanti numeriche... 1, 0, 1, 2... τ 1 τ 2, le coppie (v 1, v 2 ), con v i valore. Riduzione eager, elementi completamente definiti. τ 1 τ 2, le λ-astrazioni λx.t, con t non necessariamente un valore. Sono possibili definizione alternative: λx.v con v termine non riducibile, esempi x + 3, (x 1) Per definizione valori sono termini chiusi: posso valutare solo termini chiusi; questa restrizione semplifica le definizioni. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 61 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 62 / 142 Regole di riduzione: per induzione su struttura termine Regole di riduzione... t 0 m t 1 n t 0 + t 1 o o = m + n t 0 0 t 1 c if t 0 then t 1 else t 2 c t 0 n t 2 c if t 0 then t 1 else t 2 c t 1 c 1 t 2 c 2 (t 1, t 2 ) (c 1, c 2 ) t (c 1, c 2 ) fst t c 1 n 0 t 1 λx.t 1 t 2 v 2 t 1 [v 2/x] c (t 1 t 2 ) c t 1 c 1 t 2 [c 1 /x] c let x t 1 in t 2 c rec x.λy.t λy.t[rec x.λy.t / x] P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 63 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 64 / 142

17 Proprietà della riduzione Domini per la semantica denotazionale riduzione deterministica, ogni termine riduce al più ad un valore, esiste al più una regola applicabile; le riduzioni preservano il tipo: subject reduction. rec derivazioni infinite corrispondono a computazioni infinite. Esempio: ((rec x N N. λy. (x 1)) 2) Esercizio: ((rec f.λx. if x then 0 else (f (x 1)) + 2) 2) Si distingue tra: domini per interpretare valori; domini per interpretare computazioni. Domini per valori: per induzione sul struttura del tipo. V int = N V τ1 τ 2 = V τ1 V τ2 V τ1 τ 2 = [V τ1 (V τ2 ) ] Domini per le computazioni: (V τ ) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 65 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 66 / 142 Ambiente Definizioni per induzione sul termine L interpretazione di un termine aperto dipende da come interpretiamo le variabili (dall ambiente). Nei linguaggi call-by-value, le variabili denotano valori. Env, l insieme delle funzioni da variabili nei domini per le computazioni x = λρ. ρ(x) n = λρ. n t 1 op t 2 = λρ. t 1 ρ op t 2 ρ ρ : Var τ T V τ (t 1, t 2 ) = λρ. let v 1 t 1 ρ. let v 2 t 2 ρ. (v 1, v 2 ) che rispettano i tipi x : τ implica ρ(x) V τ. L interpretazione di un termine t : τ, t : Env (V τ ) (fst t) = λρ. let v t ρ. π 1 (v) λx.t = λρ. λv : V σ. t (ρ[v/x]) (t 1 t 2 ) = λρ. let v 1 t 1 ρ. let v 2 t 2 ρ. v 1 (v 2 ) rec x.λy. t = λρ. Fix(λv 1 : V σ τ. λv 2 : V σ. t ρ[v 1 /x, v 2 /y]) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 67 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 68 / 142

18 Proprietà della semantica denotazionale Confronto tra semantiche substitution lemma Se s ρ = v allora t[s/x] ρ = t ρ[v/x] Si dimostra per induzione sulla struttura del termine t per ogni valore c, c Correttezza della semantica operazionale Proposizione Per ogni termine t, e valore c, t c implica t = c Si dimostra per induzione sulla derivazione di t c. Le regole della semantica operazionale rispettano quella denotazionale. L implicazione opposta non è valida, perché esistono valori diversi con la stessa semantica denotazionale. c = c ma c c P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 69 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 70 / 142 Confronto tra semantiche Call-by-name, Big-step reduction Vale una relazione più debole: Proposizione Per ogni termine t, e valore c, t = c implica l esistenza di c tale che t c. Se t è diversa da allora le computazioni su t terminano. Dimostrazione non ovvia; usa tecniche sofisticate, logical relations. Corollario Per ogni t : int e valore intero n Differenti insiemi di valori, sui vari tipi. int (tipi ground), le costanti numeriche... 1, 0, 1, 2... τ 1 τ 2, le coppie (t 1, t 2 ), con t i chiusi, non necessariamente valori. Riduzione lazy? Definendo valori in questo modo posso gestire liste infinite, indipendentemente dal meccanismo di riduzione. τ 1 τ 2, le λ-astrazioni λx.t, con t chiuso non necessariamente un valore. t n sse t = n P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 71 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 72 / 142

19 Regole di riduzione Principali differenze Differenze rispetto alla semantica call-by-name: t 1 λx.t 1 t 1 [t 2/x] c (t 1 t 2 ) c t 2 [t 1 /x] c let x t 1 in t 2 c t[rec x.t / x] c rec x.t c Manca la regola per le coppie valutazione degli argomenti call-by-name, per uniformità, valutazione call-by-name anche per il costrutto let, la ricorsione applicabile tutti gli elementi, il diverso insieme di valori per il tipo coppia forza regole diverse. Proprietà preservate: riduzione deterministica, ogni termine riduce al più ad un valore, esiste al più una regola applicabile; le riduzioni preservano il tipo; (subject reduction). P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 73 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 74 / 142 Domini per la semantica denotazionale Domini per valori: V int = N V τ1 τ 2 = (V τ1 ) (V τ2 ) V τ1 τ 2 = [(V τ1 ) (V τ2 ) ] Domini per le computazioni. (V τ ) Appunto: nei linguaggi call-by-name è possibile semplificare i domini non distinguendo domini per valori e per espressioni. Ambiente. Nei linguaggi call-by-name, le variabili denotano computazioni. Env, l insieme delle funzioni da variabili nei domini per le computazioni ρ : Var (V τ ) τ tipo che rispettano i tipi. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 75 / 142 Definizioni per induzione sul termine Insiemistica e categoriale x = λρ. ρ(x) = π x n = λρ. n = n 1 t 1 op t 2 = λρ. t 1 ρ op t 2 ρ = op t 1, t 2 (t 1, t 2 ) = λρ. ( t 1 ρ, t 2 ρ) = t 1, t 2 (fst t) = λρ. let v t ρ. π 1 (v) fst = ((π 1 ) ) λx.t = λρ. λv : (V σ ). t (ρ[v/x]) = curry( t (in y f y )) y Var (t 1 t 2 ) = λρ. let v t 1 ρ. v( t 2 ρ) = app (id) t 1, t 2 rec x.t = λρ. Fix(λv : (V σ ) t (ρ[v/x])) = Fix curry( t (in y f y )) dove f x = π 1 e f y = π y π 2 se x y y Var P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 76 / 142

20 Proprietà della semantica denotazionale substitution lemma Se s ρ = v allora t[s/x] ρ = t ρ[v/x] Si dimostra per induzione sulla struttura del termine t per ogni valore c, c Confronto tra semantiche: correttezza e adeguatezza Proposizione (Correttezza) Per ogni termine t, e valore c, Proposizione (Adeguatezza) Per ogni termine t, e valore c, t c implica t = c t = c implica l esistenza di c tale che t c. Corollario Per ogni t : int e valore intero n P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 77 / 142 t n sse t = n P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 78 / 142 Uguaglianza osservazionale e full-abstraction Tipi somma Due termini t 1, t 2 sono uguali per la semantica operazionale, t 1 t 2, se: per ogni contesto C[ ] Possiamo arricchire il linguaggi funzionale con tipi somma Per il teorema di adeguatezza: C[t 1 ] C[t 2 ] Costruttori e distruttori τ ::=... τ 1 + τ 2 t 1 = t 2 implica t 1 t 2 t ::=... inl(t) inr(t) case t of inl(x 1 ).t 1, inr(x 2 ).t 2 L implicazione contraria (full abstraction) è vera solo per poche semantiche denotazionali. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 79 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 80 / 142

21 Semantica denotazionale di Haskell Core (Kernel) Language Estendiamo le semantiche operazionale e denotazionale del linguaggio funzionale lazy sino a comprendere buona parte di Haskell. Punti critici. Definizioni di tipi (non ricorsive). Definizioni ricorsive per pattern matching. Definizioni ricorsive di tipi. Polimorfismo Nel definire la semantica di un linguaggio, o la sua implementazione e utile considerare i core Language: linguaggio semplice, insieme ridotto di costruttori primitive, sottoinsieme ridotto del linguaggio principale, linguaggio principale può essere (facilmente) tradotto nel linguaggio core, approccio modulare all implementazione, alla semantica Dal punto di vista teorico i linguaggi core risaltano: i meccanismi fondamentali della computazione, similitudini: differenze tra linguaggi. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 81 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 82 / 142 System FC Lambda calcolo tipato : applicazione e λ-astrazione; Core Language per Haskell tipi di dato algebrici (ricorsivi): un insieme di funzioni basi, costruttori e distruttori; tipi polimorfi equivalenze tra tipi: operatori di coercizione. Definizione di tipi (non ricorsive) Ad ogni tipo definito associamo un dominio. Ad ogni costruttore una funzione. data TypeId = Const1 TypeExp11... TypeExp1M Const2 TypeExp21... TypeExp2N... Dominio di valori: V TId = ((V TExp11 )... (V TExp1M ) ) + ((V TExp21 )... (V TExp2N ) ) +... Const1 ρ = λv 1 : (V TExp11 )... λv N : (V TExp1N ). in i (v 1,..., v N ) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 83 / 142 Distruttore costrutto case. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 84 / 142

22 Tipi di dato, Costruttori e distruttori Pattern matching data Nat = O S Nat La definizione genera due funzioni costruttori di tipo: O :: Nat S :: Nat -> Nat una funzione distruttore di tipo case. Definizioni per pattern matching ridotte a uso di funzioni case su argomenti singoli Esempio: add x O = x add x (S y) = S (add x y) viene tradotta nel core language in: let add = rec add. \ x y -> case y of O -> x S y1 -> S (add x y1) in P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 85 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 86 / 142 La definizione and True True = True and x False = False and False x = False diventa: Pattern con più argomenti let and = \x y -> case x of True -> case y of True -> True False -> False False -> False Il costrutto case rende esplicito rende esplicito l ordine di valutazione degli argomenti. Pattern matching porta a definizione più compatte leggibili eleganti. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 87 / 142 La definizione : leq O x = True leq (S x) O = False leq (S x) (S y) = leq x y Tradotta in: Pattern matching: altro esempio let leq = rec leq. \ x \ y -> case x of O -> True S x1 -> case y of O -> False S y1 -> leq x1 y1 in... Più complesso definire funzioni mutuamente ricorsive: si definisce ricorsivamente un enupla di funzioni, un elemento in un tipo prodotto. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 88 / 142

23 Tipi di dati ricorsivi Tipi di dati ricorsivi Necessario definire soluzioni di equazione. data Nat = O S Nat LazyNat = 1 + (LazyNat) data ListNat = Empty Cons Nat ListNat ListLazyNat = 1 + (LazyNat) (ListLazyNat) È sufficiente trovare CPO che soddisfino l equazione a meno di isomorfismi, ossia la parte sinistra e destra dell equazione sono isomorfe tra loro. In Haskell posso definire tipi ricorsivi a cui non è banale associare un CPO data FunBool = Fun [FunBool -> Bool] FunBool = (Funbool T ) data Untyped = Abst [Untyped -> Untyped] Un = (Un Un ) Esistono diverse tecniche per la soluzione di equazioni di dominio. Tutte richiedo un arricchimento della teoria dei CPO. Presenteremo quella basata sugli Information System P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 89 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 90 / 142 Information System Information System: definizione Diversa presentazione di un CPO e dei suoi elementi. Un elemento di un CPO è descritto come un sottoinsieme di informazioni elementari consistenti tra di loro. Un sistema di informazioni elementari (Information System) è dato da: un insieme A di token (informazioni elementari), Con f (A), un predicato di consistenza, Con definisce gli insiemi finiti di token consistenti. una relazione di entailment (implicazione) (Con A) X a indica che le informazioni contenute in X implicano l informazione a Esempi: N, B, 1, 1, B, [B B ], [B [B B ]] Un information system A, Con, deve soddisfare le seguenti condizioni: 1 Con(X ) e Y X implica Con(Y ), 2 per ogni a A si ha Con({a}), 3 X a implica Con(X {a}) e X, 4 Con(X ) e a X implica X a, 5 Con(X ), Con(Y ), X Y e Y a implica X a dove X Y indica b Y.X b P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 91 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 92 / 142

24 Da Information System a CPO Il CPO A associato all information system A = (A, Con, ) è formato da quei sottoinsieme x di A tali che: 1 Con(x), x è consistente, ossia: per ogni Y f x, Con(X ), 2 x è Chiuro per la relazione di entailment, ossia: per ogni Y f x, Y a implica a x L ordine su A è l information order x y se e solo se x y A è un CPO con elemento minimo. Definizione alternativa: Definisco il CPO A aggiungendo la condizione x, diverso da vuoto. Winskel usa questa seconda definizione. A = ( A ) A può CPO senza elemento minimo. A genera il CPO delle computazioni, A il CPO dei valori. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 93 / 142 Considerazioni Information system differenti possono indurre lo stesso CPO. Esistono CPO non definibili attraverso information system La classe dei CPO definibili da information system prende il nome di domini di Scott (Dana Scott). Consistently complete, ω-algebraic CPO. Esistono varianti degli information system senza la relazione di entailment, e in cui la relazione di coerenza è binaria. Questi danno luogo agli spazi coerenti. La corrispondenza Domini di Scott, Information System è un esempio si Stone Dualità, gli elementi di uno spazio posso essere descritti dalle loro proprietà. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 94 / 142 Costruzioni sugli Information System: Lifting L information system vuoto: O = (, { }, ) O = { } Dato l information system: A = (A, Con, ) definiamo A = (A, Con, ) come: A = A { } Con (X ) sse Con(Y ). (X = in l Y X = (in l Y {in r })) X a sse a = in r (Y b). a = in l b (X = in l Y X = in l Y {in r } Si ha: P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 95 / 142 Dati: A = (A, Con A, A ) e B = (B, Con B, B ) definiamo A B = (A B, Con A B, A B ) come: Con A B (in l X in r Y ) sse Con A (X ) e Con B (Y ) (in l X in r Y ) A B (in l a) sse X A a (in l X in r Y ) A B (in r b) sse Y B b Si ha: A B = A B Prodotto P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 96 / 142

25 Somma Spazio di funzioni Dati gli information system A = (A, Con A, A ) e B = (B, Con B, B ) definiamo A + B = (A B, Con A+B, A+B ) come Con A B (X ) sse X = in l Y Con A (Y ) o X = in r Y Con B (Y ) (in l X ) A+B (in l a) sse X A a (in r Y ) AB (in r b) sse Y B b Si ha: A + B = somma coalescente di A, B Dati A = (A, Con A, A ) e B = (B, Con B, B ) definiamo A B = (C, Con C, C ) come: C = {(X, b) X Con A, b B} Con C ({(X 1, b 1 ),..., (X n, b n )}) sse I {1,..., n}. Con A ( i I X i) Con B ({b i i I }) {(X 1, b 1 ),... (X n, b n )} C (X, b) sse {b i (X A X i)} B b Proposizione: A B = [ A B ] P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 97 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 98 / 142 Spazio di funzioni strette Un ordine sugli IS Definiamo una relazione d ordine,, sugli IS come: Lo spazio delle funzioni (continue) strette [C D] ossia le funzioni f t.c. f ( ) = viene descritto dal IS che ripete la costruzione precedente modificando solo la definizione del primo punto: C = {(X, b) X Con A, X, b B} Proposizione: A B = [ A B ] sse A B (A, Con A, A ) (B, Con B, B ) Con A (X ) sse X A Con B (X ) X A a sse (X {a}) A X B a Proposizione L insieme degli IS con forma un CPO con, l elemento minimo è, il sup di una catena A 0 A 1 A 2... con A = (A i, Con i, i ) si ottiene attraverso l operazione unione i ω A i = ( i ω A i, i ω C i, i ω i ) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 99 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 100 / 142

26 Continuità Linguaggio con tipi ricorsivi Tipi: τ ::= 1 τ 1 τ 2 τ 1 τ 2 τ 1 + τ 2 X µx.τ Proposizione I costruttori di IS, +,,, sono continui rispetto a. Corollario Ogni costruttore composizione dei costruttori base ammette punto fisso. Espressioni t ::= x () (t 1, t 2 ) fst t snd t λx.t (t 1 t 2 ) inl(t) inr(t) case t of inl(x 1 ).t 1, inr(x 2 ).t 2 abs (t) rep (t) rec f.λx.t Un unico tipo base: Nat definito per ricorsione di tipo. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 101 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 102 / 142 ogni variabile ha associato un unico tipo, x τ x; regole induzione sulla struttura del termine, ogni costrutto sintattico ha una regola di tipo; nuove regole: unit: () : 1 Type checking abstraction: t : τ[µx.τ/x ] abs (t) : µx.τ representation: t : µx.τ rep (t) : τ[µx.τ/x ] type conversion, type casting esplicito; necessarie assicurare l unicità del tipo; utili se il CPO associato a µx.τ è isomorfo a quello associato a τ[µx.τ/x ], P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 103 / 142 Semantica Operazionale: insieme di valori A causa dei tipi ricorsivi deve essere definito in mediante un insieme regole induttive, e non per induzione sulla struttura del tipo c : C τ[µx.τ/x ] abs (c) : C µx.τ P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 104 / 142

27 Nuove regole per i tipi ricorsivi. t c abs (t) abs (c) t abs (c) rep (t) c Regole di riduzione P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 105 / 142 Semantica Denotazionale Mediante information system Associazione tipi information system fatta mediante: un ambiente di tipo (type environment); un insieme di definizioni, per induzione sulla struttura di tipo; V 1 χ = O V τ 1 τ 2 χ = V τ 1 χ V τ 2 χ V τ 1 τ 2 χ = [V τ 1 χ V τ 2 χ ] V X χ = χ(x ) V µx.τ χ = µi.v τ χ[i /X ] Nota: V τ definisce il CPO delle computazioni associate a τ. Per semplificare non definiamo due information system (delle computazioni e quello dei valori), ma identifichiamo i valori come gli elementi di V τ diversi da. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 106 / 142 Semantica Denotazionale Linguaggio con tipi ricorsivi In questo senso la definizione V τ 1 τ 2 χ = V τ 1 χ V τ 2 χ è inesatta, necessario definire il prodotto coalescente. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 107 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 108 / 142

28 Semantica denotazionale linguaggi imperativi IMP linguaggio ridotto semantica denotazionale semplice, banale. Linguaggi più complessi portano a semantiche più complesse. Presentiamo una rassegna delle tecniche idea usate nella semantica di linguaggi realistici. Problemi e soluzioni 1 Input/Output. Allo store si aggiunge la lista dei valori di input e output 2 Comandi che generano errori. Il valore errore come risultato di una computazione. 3 Espressioni che modificano lo stato, che non terminano. Semantica delle espressione più complessa, simile a quella dei comandi. 4 Due variabili posso denotare la stessa locazione. Si separi il concetto di store da quello di environment. 5 Identificatori che denotato costanti, funzioni. Si allarga il codominio dell environment. 6 Espressioni a sinistra dell assegnazione. Due tipi di valutazione. 7 Comandi che non passano il controllo al comando successivo: Eccezioni, goto, generazione di errore. Continuazioni. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 109 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 110 / 142 Estensioni del linguaggio IMP Espressioni (Exp) su un insieme di tipi più ricco di valori (si omettono i tipi) e ::=... read e(e) Lettura dall input, chiamata di funzione. Comandi (Com): c ::=... output e e 1 := e 2 e 1 (e 2 ) begin d; c end genera un valore in uscita, assegnazione più complessa, chiamata di procedure, blocco con dichiarazione Dichiarazioni (Dec) d ::= const I = e var I = e proc I (I 1 ); c fun I (I 1 ); e d 1 ; d 2 dichiarazione di costanti, variabili, procedure, funzioni, composizione di dichiarazioni. Per semplificare la presentazione, omettiamo dichiarazioni e controlli di tipo. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 111 / 142 Bisogna distinguere tra diversi valori: Domini per la semantica valori denotabili, Dv, sono denotati da un identificatore. Tipicamente: interi, reali, booleani, vettori, locazioni Loc, procedure, funzioni. valori esprimibili, Ev, che sono rappresentati dalle espressioni. Un sovrainsieme dei valori denotabili, spesso coincide. valori memorizzabili Sv che possono essere inseriti in memoria. procedure e funzioni non rientrano in questa categoria. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 112 / 142

29 Domini per gli identificatori Domini per l Input-Output L environment Env definisce l associazione identificatore valore Env = Ide (Dv + {unbound}) Lo store, memoria, definisce l associazione locazione valore Store = Loc (Sv + {unused}) La semantica delle variabili definita in due passi. Stato: memoria più input: Risposta di un programma: Σ = Store BasicValue Answer = ({error} + {stop} + BasicValue Answer) definizione ricorsiva, la soluzione massima considera programmi non terminanti. P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 113 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 114 / 142 Continuazioni CPS: Continuation Passing Style Semantica del linguaggio IMP mediante continuazioni. Σ, stato C : Com Σ (Σ Answer) Answer Answer, il risultato dell esecuzione (non necessariamente il nuovo stato). (Σ Answer) la continuazione, il comportamento della restante parte del programma. Semantica per continuazioni: stesse idee del CPS, tecnica di programmazione per linguaggi funzionali. La funzione: showtree:: (Show a) => Tree a -> String showtree (Leaf x) = show x showtree (Branch l r) = "<" ++ showtree l ++ " " ++ showtree r ++ ">" In CPS diventa: showstree :: (show a) => Tree a -> String -> String showstree (Leaf x) s = (show x) : s showstree (Branch l r) s= < : showstree l ( : showstree r ( > : s)) P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 115 / 142 P. Di Gianantonio (Udine) semantica dei linguaggi di programmazione 116 / 142

Overview. Analisi e verifica mediante interpretazione astratta modulo di semantica denotationale. Libro di testo. Propedeuticità

Overview. Analisi e verifica mediante interpretazione astratta modulo di semantica denotationale. Libro di testo. Propedeuticità Overview Analisi e verifica mediante interpretazione astratta modulo di semantica denotationale Pietro Di Gianantonio corso di laurea in informatica Modulo di 3 crediti (24 ore), Presenta la Semantica

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

Fondamenti dei linguaggi di programmazione

Fondamenti dei linguaggi di programmazione Fondamenti dei linguaggi di programmazione Aniello Murano Università degli Studi di Napoli Federico II 1 Riassunto delle lezioni precedenti Prima Lezione: Introduzione e motivazioni del corso; Sintassi

Dettagli

Elementi di semantica operazionale

Elementi di semantica operazionale Elementi di semantica operazionale 1 Contenuti sintassi astratta e domini sintattici un frammento di linguaggio imperativo semantica operazionale domini semantici: valori e stato relazioni di transizione

Dettagli

Presentazione. Semantica e Concorrenza Modulo di Semantica

Presentazione. Semantica e Concorrenza Modulo di Semantica Presentazione Modulo di 6 crediti (48 ore), Semantica e Concorrenza Modulo di Semantica Pietro Di Gianantonio corso di laurea in informatica Semantica dei linguaggi di programmazione Definire in maniera

Dettagli

Interpretazione astratta

Interpretazione astratta Interpretazione astratta By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents Interpretazione astratta... 2 Idea generale... 2 Esempio di semantica... 2 Semantica concreta... 2 Semantica

Dettagli

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica dei programmi La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica operazionale: associa ad ogni programma la sequenza delle sue

Dettagli

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

Dettagli

Semantica Assiomatica

Semantica Assiomatica Semantica Assiomatica Anche nella semantica assiomatica, così come in quella operazionale, il significato associato ad un comando C viene definito specificando la transizione tra stati (a partire, cioè,

Dettagli

Descrizione di un algoritmo

Descrizione di un algoritmo Descrizione di un algoritmo Un algoritmo descrive due tipi fondamentali di oper: calcoli ottenibili tramite le oper primitive su tipi di dato (valutazione di espressioni) che consistono nella modifica

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE Andrea Bobbio Anno Accademico 2000-2001 Algebra Booleana 2 Calcolatore come rete logica Il calcolatore può essere visto come una rete logica

Dettagli

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.

Dettagli

Introduzione Ordini parziali e Reticoli Punti fissi

Introduzione Ordini parziali e Reticoli Punti fissi Introduzione Ordini parziali e Reticoli Punti fissi By Giulia Costantini (819048) & Giuseppe Maggiore (819050) Table of Contents ORDINE PARZIALE... 3 Insieme parzialmente ordinato... 3 Diagramma di Hasse...

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio Il Concetto Intuitivo di Calcolatore Fondamenti di Informatica A Ingegneria Gestionale Università degli Studi di Brescia Docente: Prof. Alfonso Gerevini I Problemi e la loro Soluzione Problema: classe

Dettagli

10. Insiemi non misurabili secondo Lebesgue.

10. Insiemi non misurabili secondo Lebesgue. 10. Insiemi non misurabili secondo Lebesgue. Lo scopo principale di questo capitolo è quello di far vedere che esistono sottoinsiemi di R h che non sono misurabili secondo Lebesgue. La costruzione di insiemi

Dettagli

Semantica e Concorrenza Modulo di Semantica

Semantica e Concorrenza Modulo di Semantica Semantica e Concorrenza Modulo di Semantica Pietro Di Gianantonio corso di laurea in informatica Presentazione Modulo di 6 crediti (48 ore), Semantica dei linguaggi di programmazione Definire in maniera

Dettagli

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe

Dettagli

Modellazione di sistema

Modellazione di sistema Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Modellazione di sistema E. TINELLI Contenuti Approcci di analisi Linguaggi di specifica Modelli di

Dettagli

Punti Fissi. Mappe tra insiemi parz. ordinati. Siano (P, P ) e (Q, Q ) due insiemi parzialmente ordinati. Una funzione ϕ da P a Q si dice:

Punti Fissi. Mappe tra insiemi parz. ordinati. Siano (P, P ) e (Q, Q ) due insiemi parzialmente ordinati. Una funzione ϕ da P a Q si dice: Punti Fissi Mappe tra insiemi parz. ordinati Siano (P, P ) e (Q, Q ) due insiemi parzialmente ordinati. Una funzione ϕ da P a Q si dice: monotona (preserva l ordine) se p 1 P p 2 ϕ(p 1 ) Q ϕ(p 2 ) embedding

Dettagli

1. PRIME PROPRIETÀ 2

1. PRIME PROPRIETÀ 2 RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,

Dettagli

(anno accademico 2008-09)

(anno accademico 2008-09) Calcolo relazionale Prof Alberto Belussi Prof. Alberto Belussi (anno accademico 2008-09) Calcolo relazionale E un linguaggio di interrogazione o e dichiarativo: at specifica le proprietà del risultato

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Linguaggi. Claudio Sacerdoti Coen 11/04/2011. 18: Semantica della logica del prim ordine. <sacerdot@cs.unibo.it> Universitá di Bologna

Linguaggi. Claudio Sacerdoti Coen 11/04/2011. 18: Semantica della logica del prim ordine. <sacerdot@cs.unibo.it> Universitá di Bologna Linguaggi 18: Semantica della logica del prim ordine Universitá di Bologna 11/04/2011 Outline Semantica della logica del prim ordine 1 Semantica della logica del prim ordine Semantica

Dettagli

Lezioni di Matematica 1 - I modulo

Lezioni di Matematica 1 - I modulo Lezioni di Matematica 1 - I modulo Luciano Battaia 16 ottobre 2008 Luciano Battaia - http://www.batmath.it Matematica 1 - I modulo. Lezione del 16/10/2008 1 / 13 L introduzione dei numeri reali si può

Dettagli

Calcolatori: Algebra Booleana e Reti Logiche

Calcolatori: Algebra Booleana e Reti Logiche Calcolatori: Algebra Booleana e Reti Logiche 1 Algebra Booleana e Variabili Logiche I fondamenti dell Algebra Booleana (o Algebra di Boole) furono delineati dal matematico George Boole, in un lavoro pubblicato

Dettagli

Capitolo 7: Teoria generale della calcolabilitá

Capitolo 7: Teoria generale della calcolabilitá Capitolo 7: Teoria generale della calcolabilitá 1 Differenti nozioni di calcolabilitá (che seguono da differenti modelli di calcolo) portano a definire la stessa classe di funzioni. Le tecniche di simulazione

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

Matematica generale CTF

Matematica generale CTF Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio Test (o analisi dinamica) Verifica parte IIA Rif. Ghezzi et al. 6.3-6.3.3 Consiste nell osservare il comportamento del sistema in un certo numero di condizioni significative Non può (in generale) essere

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Per lo svolgimento del corso risulta particolarmente utile considerare l insieme

Per lo svolgimento del corso risulta particolarmente utile considerare l insieme 1. L insieme R. Per lo svolgimento del corso risulta particolarmente utile considerare l insieme R = R {, + }, detto anche retta reale estesa, che si ottiene aggiungendo all insieme dei numeri reali R

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

x u v(p(x, fx) q(u, v)), e poi

x u v(p(x, fx) q(u, v)), e poi 0.1. Skolemizzazione. Ogni enunciato F (o insieme di enunciati Γ) è equisoddisfacibile ad un enunciato universale (o insieme di enunciati universali) in un linguaggio estensione del linguaggio di F (di

Dettagli

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

Matematica 1 - Corso di Laurea in Ingegneria Meccanica Matematica 1 - Corso di Laurea in Ingegneria Meccanica Esercitazione su massimi e minimi vincolati 9 dicembre 005 Esercizio 1. Considerare l insieme C = {(x,y) R : (x + y ) = x } e dire se è una curva

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento

Dettagli

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Organizzazione degli archivi

Organizzazione degli archivi COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

I metodi formali nel processo di sviluppo del software

I metodi formali nel processo di sviluppo del software I metodi formali nel processo di sviluppo del software I metodi formali consentono di creare una specifica più completa, uniforme e non ambigua di quelle prodotte usando i metodi convenzionali ed orientati

Dettagli

G. Pareschi ALGEBRE DI BOOLE. 1. Algebre di Boole

G. Pareschi ALGEBRE DI BOOLE. 1. Algebre di Boole G. Pareschi ALGEBRE DI BOOLE 1. Algebre di Boole Nel file precedente abbiamo incontrato la definizione di algebra di Boole come reticolo: un algebra di Boole e un reticolo limitato, complementato e distributivo.

Dettagli

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) Un insieme è una collezione di oggetti. Il concetto di insieme è un concetto primitivo. Deve esistere un criterio chiaro, preciso, non ambiguo, inequivocabile,

Dettagli

Idee guida. Finite State Machine (1) Un automa a stati finiti è definito da una 5- pla: FSM = <Q,,, q0, F>, dove: Finite State Machine (2)

Idee guida. Finite State Machine (1) Un automa a stati finiti è definito da una 5- pla: FSM = <Q,,, q0, F>, dove: Finite State Machine (2) Idee guida ASM = FSM con stati generalizzati Le ASM rappresentano la forma matematica di Macchine Astratte che estendono la nozione di Finite State Machine Ground Model (descrizioni formali) Raffinamenti

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi) Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Meccanica (A-K) 3. (testo di riferimento: Bellini-Guidi) Ing. Agnese Pinto 1 di 28 Linguaggi di programmazione Un programma è un algoritmo

Dettagli

Gli algoritmi: definizioni e proprietà

Gli algoritmi: definizioni e proprietà Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Gli algoritmi: definizioni e proprietà La presente dispensa e da

Dettagli

Ricapitoliamo. Ricapitoliamo

Ricapitoliamo. Ricapitoliamo Ricapitoliamo Finora ci siamo concentrati sui processi computazionali e sul ruolo che giocano le procedure nella progettazione dei programmi In particolare, abbiamo visto: Come usare dati primitivi (numeri)

Dettagli

Calcolo Relazionale Basi di dati e sistemi informativi 1. Calcolo Relazionale. Angelo Montanari

Calcolo Relazionale Basi di dati e sistemi informativi 1. Calcolo Relazionale. Angelo Montanari Calcolo Relazionale Basi di dati e sistemi informativi 1 Calcolo Relazionale Angelo Montanari Dipartimento di Matematica e Informatica Università di Udine Calcolo Relazionale Basi di dati e sistemi informativi

Dettagli

Elementi di Algebra Relazionale

Elementi di Algebra Relazionale Note dalle lezioni di INFORMATICA (per gli allievi della classe quinta - indirizzo MERCURIO) Elementi di Algebra Relazionale prof. Stefano D.L.Campanozzi I.T.C. Giulio Cesare Bari - a.s. 2008-2009 1 Introduzione

Dettagli

Testi di Esercizi e Quesiti 1

Testi di Esercizi e Quesiti 1 Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Ottimizazione vincolata

Ottimizazione vincolata Ottimizazione vincolata Ricordiamo alcuni risultati provati nella scheda sulla Teoria di Dini per una funzione F : R N+M R M di classe C 1 con (x 0, y 0 ) F 1 (a), a = (a 1,, a M ), punto in cui vale l

Dettagli

Reti sequenziali sincrone

Reti sequenziali sincrone Reti sequenziali sincrone Un approccio strutturato (7.1-7.3, 7.5-7.6) Modelli di reti sincrone Analisi di reti sincrone Descrizioni e sintesi di reti sequenziali sincrone Sintesi con flip-flop D, DE, T

Dettagli

Definizione di nuovi tipi

Definizione di nuovi tipi Definizione di nuovi tipi Un tipo è un insieme di valori. Per definire un nuovo tipo occorre specificare: 1 un nome per il tipo 2 come costruire i valori del tipo, cioè quali sono i costruttori del tipo.

Dettagli

Alcune nozioni di base di Logica Matematica

Alcune nozioni di base di Logica Matematica Alcune nozioni di base di Logica Matematica Ad uso del corsi di Programmazione I e II Nicola Galesi Dipartimento di Informatica Sapienza Universitá Roma November 1, 2007 Questa é una breve raccolta di

Dettagli

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO Linguaggi di programmazione classificati in base alle loro caratteristiche fondamentali. Linguaggio macchina, binario e fortemente legato all architettura. Linguaggi

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli

Algebra e Logica Matematica. Calcolo delle proposizioni Logica del primo ordine

Algebra e Logica Matematica. Calcolo delle proposizioni Logica del primo ordine Università di Bergamo Anno accademico 2006 2007 Ingegneria Informatica Foglio Algebra e Logica Matematica Calcolo delle proposizioni Logica del primo ordine Esercizio.. Costruire le tavole di verità per

Dettagli

Introduzione agli Abstract Data Type (ADT)

Introduzione agli Abstract Data Type (ADT) Introduzione agli Abstract Data Type (ADT) La nozione di tipo di dato astratto Sappiamo già che quando si affrontano problemi complessi è necessario procedere in due fasi: Specifica dell algoritmo Implementazione

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso Università Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Definizione di nuovi tipi in C

Definizione di nuovi tipi in C Definizione di nuovi tipi in C typedef Ancora sui tipi di dato Ogni elaboratore è intrinsecamente capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

CONCETTO DI LIMITE DI UNA FUNZIONE REALE

CONCETTO DI LIMITE DI UNA FUNZIONE REALE CONCETTO DI LIMITE DI UNA FUNZIONE REALE Il limite di una funzione è uno dei concetti fondamentali dell'analisi matematica. Tramite questo concetto viene formalizzata la nozione di funzione continua e

Dettagli

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente. Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito

Dettagli

Tipi di Dato Ricorsivi

Tipi di Dato Ricorsivi Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi

Dettagli

LE FUNZIONI A DUE VARIABILI

LE FUNZIONI A DUE VARIABILI Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre

Dettagli

CONTINUITÀ E DERIVABILITÀ Esercizi proposti. 1. Determinare lim M(sinx) (M(t) denota la mantissa di t)

CONTINUITÀ E DERIVABILITÀ Esercizi proposti. 1. Determinare lim M(sinx) (M(t) denota la mantissa di t) CONTINUITÀ E DERIVABILITÀ Esercizi proposti 1. Determinare lim M(sin) (M(t) denota la mantissa di t) kπ/ al variare di k in Z. Ove tale limite non esista, discutere l esistenza dei limiti laterali. Identificare

Dettagli

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice. Convalida: attività volta ad assicurare che il SW sia conforme ai requisiti dell utente. Verifica: attività volta ad assicurare che il SW sia conforme alle specifiche dell analista. Goal: determinare malfunzionamenti/anomalie/errori

Dettagli

Note del corso di Calcolabilità e Linguaggi Formali - Lezione 6

Note del corso di Calcolabilità e Linguaggi Formali - Lezione 6 Note del corso di Calcolabilità e Linguaggi Formali - Lezione 6 Alberto Carraro 30 novembre DAIS, Universitá Ca Foscari Venezia http://www.dsi.unive.it/~acarraro 1 Funzioni Turing-calcolabili Finora abbiamo

Dettagli

Introduzione ai Metodi Formali

Introduzione ai Metodi Formali Intruzione ai Meti Formali Sistemi software anche molto complessi regolano la vita quotidiana, anche in situazioni life-critical (e.g. avionica) e business-critical (e.g. operazioni bancarie). Esempi di

Dettagli

Progettazione di Basi di Dati

Progettazione di Basi di Dati Progettazione di Basi di Dati Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan Entità-Relazione Progettazione Logica 2 E il modo attraverso il quale i dati sono rappresentati : fa riferimento al modello

Dettagli

Studente: SANTORO MC. Matricola : 528

Studente: SANTORO MC. Matricola : 528 CORSO di LAUREA in INFORMATICA Corso di CALCOLO NUMERICO a.a. 2004-05 Studente: SANTORO MC. Matricola : 528 PROGETTO PER L ESAME 1. Sviluppare una versione dell algoritmo di Gauss per sistemi con matrice

Dettagli

f: AxB f(x)=y, f={<x,y> per ogni x in A esiste unica y in B f(x)=y} f={<1,2>, <2,3>, <3,3>} : {1,2,3} {1,2,3} f(1)=2, f(2)=3, f(3)=3

f: AxB f(x)=y, f={<x,y> per ogni x in A esiste unica y in B f(x)=y} f={<1,2>, <2,3>, <3,3>} : {1,2,3} {1,2,3} f(1)=2, f(2)=3, f(3)=3 Insieme delle parti di A : Funzione : insieme i cui elementi sono TUTTI i sottoinsiemi di A f: AxB f(x)=y, f={ per ogni x in A esiste unica y in B f(x)=y} f={, , } : {1,2,3} {1,2,3}

Dettagli

Algebra Di Boole. Definiamo ora che esiste un segnale avente valore opposto di quello assunto dalla variabile X.

Algebra Di Boole. Definiamo ora che esiste un segnale avente valore opposto di quello assunto dalla variabile X. Algebra Di Boole L algebra di Boole è un ramo della matematica basato sul calcolo logico a due valori di verità (vero, falso). Con alcune leggi particolari consente di operare su proposizioni allo stesso

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione

Dettagli

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Concetti importanti da (ri)vedere Programmazione imperativa Strutture di

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

Introduzione all Information Retrieval

Introduzione all Information Retrieval Introduzione all Information Retrieval Argomenti della lezione Definizione di Information Retrieval. Information Retrieval vs Data Retrieval. Indicizzazione di collezioni e ricerca. Modelli per Information

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Esempio - Controllo di un ascensore

Esempio - Controllo di un ascensore Costruiamo un modello ground a partire dai requisiti. Dimostriamo le proprietà di correttezza desiderate n ascensori m piani che soddisfano i seguenti requisiti: 1. Ogni ascensore ha per ogni piano un

Dettagli