Presentazione. Semantica e Concorrenza Modulo di Semantica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Presentazione. Semantica e Concorrenza Modulo di Semantica"

Transcript

1 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 formale e rigorosa il comportamento dei programmi. Vedremo 3 diversi approcci, metodi, alla semantica. Metodi applicati ad una serie linguaggi di programmazione via via più complessi. Alcuni argomenti si sovrappongo al corso di Metodi Formali. Propedeutico a: Modulo sulla Concorrenza (Lenisa), Interpretazione Astratta (Comini), una qualsiasi trattazione formale e rigorosa dei programmi. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 1 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 2 / 149 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) utile nella costruzione di 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 / 149 Approcci alla semantica Semantica Operazionale. Descrivere come avviene l esecuzione del programma, non su un vero calcalalatore, troppo complesso, su una semplice macchina formale (nello stile della macchine di Turing). Semantica Operazionale Strutturata (SOS). La macchina formale costituita da un sistema di riscrittura: sistema di regole, sintattiche, di riscrittura. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 4 / 149

2 Approcci alla semantica SOS pro 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 diverso obiettivo. Semplice, sintattica, intuitiva. Piuttosto flessibile. Può facilmente gestire linguaggi di programmazione complessi. La struttura delle regole resta costante nei diversi linguaggi. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 5 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 6 / 149 SOS contra Semantica denotazionale 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). Obiettivi: 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. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 7 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 8 / 149

3 Diverse caratteristiche dei linguaggi di programmazione Semantica assiomatica non terminazione, store (memoria, linguaggi imperativi) environment, (ambiente) non determinismo, concorrenza, funzioni di ordine superiore (linguaggi funzionali), eccezioni,... Descrizione indiretta di un programma, mediante un insieme di asserzioni: {Pre} p {Post} Fornisce immediatamente una logica per ragionare sui programmi. Complementare, e giustificata, dalle altre semantiche. Al crescere della ricchezza del linguaggi cresce (rapidamente) la complessità della semantica denotazionale. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 9 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 10 / 149 Libro di testo Propedeuticità 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. 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). P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 11 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 12 / 149

4 Un semplice linguaggio imperativo: IMP Categorie sintattiche: 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, più semplice della sintassi concreta 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. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 13 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 14 / 149 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 15 / 149 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. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 16 / 149

5 Espressione booleane: regole SOS Esercizi Assiomi... a 0, σ n a 1, σ n a 0 = a 1, σ true 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... a 0, σ n a 1, σ m a 0 = a 1, σ false n m n ::= 0 Sn Regole per l addizione, prodotto, confronto. b 0, σ t 0 b 1, σ t 1 b 0 and b 1, σ t dove t true se t 0 true e t 1 true. Altrimenti t false. Dove n : 0 = 2 n e n : 1 = 2 n + 1 n ::= 0 n : 0 n : 1 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 17 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 18 / 149 Comandi 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 19 / 149 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 20 /

6 Equivalenze Dalla semantica, una nozione di equivalenza tra espressioni, comandi. Esercizi c 0 c 1 se per ogni coppia di store σ, σ : c 0, σ σ se e solo se c 1, σ σ Più nozione di equivalenza: Codificare in Haskell le regole della semantica operazionale. Posto: w while b do c dimostrare che: w if b then c; w else skip c 0 c 1 Se i comandi c 0 e c 1, formulati nella sintassi astratta, sono uguali. e w if b then w else skip σ 0 = σ 1 se σ 0 e σ 1 sono la stessa funzione Loc N P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 21 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 22 / 149 Le regole sono deterministiche: Determinismo 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 23 / 149 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 24 / 149

7 In matematica e informatica molte definizione induttive: numeri naturali, liste, grammatiche, derivazioni, dimostrazioni Insiemi di costruttori: zero, successore; lista vuota, concantenazione; costrutti della grammatica; assiomi, regol di derivazione. Induzione Sulle strutture induttive: definizioni per ricorsione, dimostrazioni per induzione. Rafforzamenti, estensioni: induzione generalizzata, n. ( m < n. P(m)) P(n) allora n. P(n) insiemi ben fondati. Induzione P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 25 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 26 / 149 Semantica denotazionale per IMP Funzioni di interpretazione Associo a espressioni di IMP oggetti matematici (funzioni (parziali)) in maniera composizionale. Elementi basi della costruzione: 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). Notare la differenza tra N e N. 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. Riprendo le idee della semantica operazionale ma le esprimo in maniera differente. Uso la doppia parentesi per racchiudere gli elementi della sintassi P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 27 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 28 / 149

8 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 (σ)) B a o a 1 (σ) = (A a o (σ)) (A a 1 (σ)) Ogni elemento, ogni operatore, viene interpretato con il suo corrispondente semantico. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 29 / 149 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 if b then c 0 else c 1 = C c 0 ; c 1 = C c 1 C c 0 {(σ, σ ) C c 0 B b (σ) = true} {(σ, σ ) C c 1 B b (σ) = false} P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 30 / 149 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 31 / 149 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 32 / 149

9 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 33 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 34 / 149 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 è 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 35 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 36 / 149

10 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 37 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 38 / 149 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 39 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 40 / 149

11 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 41 / 149 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 42 / 149 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 43 / 149 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 44 / 149

12 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 45 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 46 / 149 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 47 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 48 / 149

13 CPO senza bottom CPO discreti 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 ) Lifting 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 49 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 50 / 149 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 51 / 149 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 52 / 149

14 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 53 / 149 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 54 / 149 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 55 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 56 / 149

15 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 57 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 58 / 149 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à. Semantica (operazionale e denotazionale) di due semplici linguaggi funzionali con due differenti meccanismi di valutazione call-by-value (eager) come: Standard ML, OCaml. call-by-name (lazy) come Haskell, Miranda. Metalinguaggi permette di definire oggetti matematici, con una sintassi simile alla definizione di programmi Haskell. Metalinguaggi e Haskell definiscono oggetti di natura diversa. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 59 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 60 / 149

16 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 : τ tipi: τ ::= int τ 1 τ 2 τ 1 τ 2 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 Type checking P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 61 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 62 / 149 Nessun polimorfismo Semantica operazionale Mediante un sistema di regole descrivo come un termine riduce. Due alternative: ogni variabile ha associato un unico tipo, proprietà: ogni espressione ha tipo unico, nessun polimorfismo: sistema di tipi e semantica denotazionale più semplice, 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. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 63 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 64 / 149

17 Call-by-value, Big-step reduction Per ogni tipo, un insieme dei valori o forme canoniche: 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 necessaria mente 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 65 / Regole di riduzione: per induzione su struttura termine 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 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 66 / 149 Regole di riduzione Proprietà della riduzione 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] 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 f N N. λy. (f 1)) 2) Esercizio: ((rec f.λx. if x then 0 else (f (x 1)) + 2) 2) P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 67 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 68 / 149

18 Domini per la semantica denotazionale 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 τ ) Ambiente 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 ρ : Var τ T che rispettano i tipi x : τ implica ρ(x) V τ. L interpretazione di un termine t : τ, V τ t : Env (V τ ) P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 69 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 70 / 149 Definizioni per induzione sul termine Proprietà della semantica denotazionale x = λρ. ρ(x) n = λρ. n t 1 op t 2 = λρ. t 1 ρ op t 2 ρ (t 1, t 2 ) = λρ. let v 1 t 1 ρ. let v 2 t 2 ρ. (v 1, v 2 ) (fst t) = λρ. let v t ρ. π 1 (v) 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 λ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 71 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 72 / 149

19 Correttezza della semantica operazionale Proposizione Per ogni termine t, e valore c, Confronto tra semantiche 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 Vale una relazione più debole: Proposizione Per ogni termine t, e valore c, Confronto tra semantiche 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 t n sse t = n P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 73 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 74 / 149 Call-by-name, Big-step reduction Regole di riduzione 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. 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 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 75 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 76 / 149

20 valutazione degli argomenti call-by-name, Principali differenze 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 77 / 149 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 78 / 149 t : Env (V τ ) Definizioni per induzione sul termine Insiemistica e categoriale Proprietà della semantica denotazionale 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 79 / 149 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 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 80 / 149

21 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 t n sse t = n P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 81 / 149 Uguaglianza osservazionale e full-abstraction Due termini t 1, t 2 sono uguali per la semantica operazionale, t 1 t 2, se: per ogni contesto C[ ] Per il teorema di adeguatezza: C[t 1 ] C[t 2 ] t 1 = t 2 implica t 1 t 2 L implicazione contraria (full abstraction) è vera solo per poche semantiche denotazionali. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 82 / 149 Tipi somma Semantica denotazionale di Haskell Possiamo arricchire il linguaggi funzionale con tipi somma τ ::=... τ 1 + τ 2 Costruttori e distruttori t ::=... inl(t) inr(t) case t of inl(x 1 ).t 1, inr(x 2 ).t 2 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 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 83 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 84 / 149

22 Core (Kernel) Language Core Language per Haskell 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. System FC Lambda calcolo tipato : applicazione e λ-astrazione; tipi di dato algebrici (ricorsivi): un insieme di funzioni basi, costruttori e distruttori; tipi polimorfi equivalenze tra tipi: operatori di coercizione. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 85 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 86 / 149 Definizione di tipi (non ricorsive) Ad ogni tipo definito associamo un tipo Fun. Ad ogni costruttore una funzione. data TypeId = Const1 TypeExp11... TypeExp1M Const2 TypeExp21... TypeExp2N... Dominio di valori: V TId = ((V TExp11 )... (V TExp1M ) ) + (TExp21)... (V TExp2N ) ) +... data Nat = O S Nat Tipi di dato, Costruttori e distruttori La definizione genera due funzioni costruttori di tipo: O :: Nat S :: Nat -> Nat una funzione distruttore di tipo case. Const1 ρ = λv 1 : (V TExp11 )... λv N : (V TExp1N ). in i v 1,..., v N Distruttore costrutto case. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 87 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 88 / 149

23 Pattern matching 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 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 89 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 90 / 149 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 91 / 149 Necessario definire soluzioni di equazione. data Nat = O S Nat LazyNat = 1 + (LazyNat) data ListNat = Empty Cons Nat ListNat ListLazyNat = 1 + (LazyNat) (ListLazyNat) Tipi di dato ricorsivi È sufficiente trovare CPO che soddisfino l equazione a meno di isomorfismi, ossia la parte sinistra e destra dell equazione sono isomorfe tra loro. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 92 / 149

24 Tipi di dato ricorsivi Information System 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 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 ]] P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 93 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 94 / 149 Information System: definizione 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 95 / 149 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(Y ), 2 x è chiuso 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 96 / 149

25 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 97 / 149 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 98 / 149 A = A e A = A Prodotto Prodotto coalescente 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 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 (Z) sse Con A (π 1 Z) e Con B (π 2 Z) Z A B c sse π 1 Z A π 1 c π 2 Z A π 2 c Si ha: A B = A B P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 99 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 100 / 149

26 Somma 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 A + B = 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} Spazio di funzioni 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 101 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 102 / 149 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 ] = [ 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 i = (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 103 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 104 / 149

27 Continuità Linguaggio eager 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 105 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 106 / 149 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 107 / 149 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 108 / 149

28 Nuove regole per termini nei 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 109 / 149 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 τ 1 τ 2 χ = (V τ 1 χ V τ 2 χ ) V X χ = χ(x ) V µx.τ χ = µi.v τ χ[i /X ] Nota: V τ definisce il CPO delle computazioni associate a τ, e V τ definisce il CPO dei valori associate a τ, Per semplificare non definiamo due information system (delle computazioni P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 110 / 149 e quello dei valori), Semantica Denotazionale Linguaggio lazy con tipi ricorsivi Tipi: τ ::= 0 τ 1 τ 2 τ 1 τ 2 τ 1 + τ 2 X µx.τ Le equazioni vanno riformulate per adattarsi ai domini definiti in termini di information systems. abs e rep sono rappresentati dalla funzione identità. Valgono le usuali proprietà di correttezza e adeguatezza. 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 x.t 0 non contiene nessun valore, termine divergente, nessuna regola di riduzione. P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 111 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 112 / 149

29 Semantica Operazionale Semantica Denotazionale Vale ancora la regola eager. Mentre, sono valori: c : C τ[µx.τ/x ] abs (c) : C µx.τ (t 1, t 2 ), inl(t), inr(t) Valgono le regole eager per termini in tipi ricorsivi: t c abs (t) abs (c) t abs (c) rep (t) c V 0 χ = O V τ 1 τ 2 χ = (V τ 1 χ V τ 2 χ ) V τ 1 + τ 2 χ = (V τ 1 χ ) + (V τ 2 χ ) V τ 1 τ 2 χ = (V τ 1 χ V τ 2 χ ) V X χ = χ(x ) V µx.τ χ = µi.v τ χ[i /X ] P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 113 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 114 / 149 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 separa 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 115 / 149 P. Di Gianantonio (Udine) Semantica dei linguaggi di programmazione 116 / 149

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

Presentazione. Teoria della Concorrenza Modulo di Semantica. Approcci alla semantica 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

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

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare

Dettagli

Tecniche di prova per induzione

Tecniche di prova per induzione Aniello Murano Tecniche di prova per induzione 3 Lezione n. Parole chiave: Induzione Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Riassunto delle lezioni precedenti

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,

Dettagli

Semantiche dei linguaggi di programmazione

Semantiche dei linguaggi di programmazione Semantiche dei linguaggi di programmazione By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents La semantica del linguaggio... 1 Tipi di semantica... 1 Esempio di semantica operazionale...

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Tripla di Hoare soddisfatta A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a.

Dettagli

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

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 11 Linguaggio di Programmazione Imperativo: Sintassi e Semantica Concetto di Tripla di Hoare Soddisfatta pag. 1 Introduzione Dall inizio del corso ad ora abbiamo introdotto,

Dettagli

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco: connettivi

Dettagli

Semantica operazionale e denotazionale

Semantica operazionale e denotazionale Semantica operazionale e denotazionale Abbiamo definito la semantica di tre linguaggi di programmazione in termini operazionali, cioé in termini di sequenze di computazione Abbiamo assegnato un algoritmo

Dettagli

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14

INTRODUZIONE ALLA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2013/14 INTRODUZIONE ALLA LOGICA DI HOARE Corso di Logica per la Programmazione A.A. 2013/14 INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico sempre più ricco:

Dettagli

Valutazione Lazy. Prefazione alla lezione

Valutazione Lazy. Prefazione alla lezione Valutazione Lazy Aniello Murano Università degli Studi di Napoli Federico II 1 Prefazione alla lezione Nella lezione precedente abbiamo introdotto i linguaggi (funzionali) con tipi di ordine superiore.

Dettagli

interpretazione astratta

interpretazione astratta interpretazione astratta Cosimo Laneve interpretazione astratta una tecnica utilizzata da 30 anni (Patrick e Radhia Cousot nel 1977) per trattare in modo sistematico astrazioni e approssimazioni nata per

Dettagli

Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale

Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: Semantica spesso data in modo informale LOGICA DI HOARE INTRODUZIONE Linguaggi di programmazione: sintassi e semantica Sintassi fornita con strumenti formali: es. grammatica in BNF Semantica spesso data in modo informale di stile operazionale

Dettagli

Interpreti, compilatori e semantica operazionale

Interpreti, compilatori e semantica operazionale Interpreti, compilatori e semantica operazionale 1 Linguaggi di programmazione Come si comprendono le caratteristiche di un linguaggio di programmazione? Molte risposte diverse manuali, documentazione

Dettagli

Contenuti. Elementi di semantica denotazionale ed operazionale. Sintassi astratta. Sintassi e semantica. ! sintassi astratta e domini sintattici

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

Dettagli

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

Dettagli

1 Il Paradigma Imperativo

1 Il Paradigma Imperativo 1 Il Paradigma Imperativo 1.1 Imp : un semplice linguaggio imperativo Abbiamo visto in Fun un meccanismo eager per la valutazione dei parametri di una funzione ed un meccanismo lazy. Una situazione analoga

Dettagli

Semantica Operazionale del linguaggio imperativo IMP

Semantica Operazionale del linguaggio imperativo IMP Aniello Murano Semantica Operazionale del linguaggio imperativo IMP 2 Lezione n. Parole chiave: Sem. Operazionale Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Introduzione

Dettagli

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella

LA LOGICA DI HOARE. Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella LA LOGICA DI HOARE Corso di Logica per la Programmazione A.A. 2010/11 Andrea Corradini, Paolo Mancarella INTRODUZIONE Dall inizio del corso ad ora abbiamo introdotto, un po alla volta, un linguaggio logico

Dettagli

Ordini parziali e reticoli. Semantica di punto fisso. Agostino Cortesi

Ordini parziali e reticoli. Semantica di punto fisso. Agostino Cortesi Ordini parziali e reticoli Semantica di punto fisso Agostino Cortesi Insiemi parzialmente ordinati nell analisi statica, ordini parziali e reticoli giocano un ruolo fondamentale dato un insieme S, un ordine

Dettagli

Sistemi di tipo e analisi statica

Sistemi di tipo e analisi statica Sistemi di tipo 1 Sistemi di tipo e analisi statica le tecniche di analisi statica approssimano (a tempo di compilazione) il comportamento di un programma (a tempo di esecuzione) con l obiettivo di scoprire

Dettagli

In questo esempio, il tipo a -> a indica che la funzione fn x => x è polimorfa, ed è dunque corretto applicarla ad argomenti di tipo diverso:

In questo esempio, il tipo a -> a indica che la funzione fn x => x è polimorfa, ed è dunque corretto applicarla ad argomenti di tipo diverso: 1 Polimorfismo in ML In ML i termini di cui si compone un programma possono non contenere alcuna informazione sui tipi. Ad esempio, sono legali in ML tanto il termine fn x : int => x quanto fn x => x.

Dettagli

Esercitazioni per il corso di Logica Matematica

Esercitazioni per il corso di Logica Matematica Esercitazioni per il corso di Logica Matematica Luca Motto Ros 27 febbraio 2005 Nota importante. Queste pagine contengono appunti personali dell esercitatore e sono messe a disposizione nel caso possano

Dettagli

Verifica di programmi

Verifica di programmi Verifica di programmi Informalmente, un programma è corretto se l output prodotto è quello atteso rispetto all input. La correttezza dei programmi può essere espressa mediante formule per la correttezza

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale pag. 1 Tripla di Hoare Soddisfatta: richiamo Data la tripla di

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 Linguaggi e Complessità : Lezione 1 Corso Fondamenti di Informatica 2 Marco Schaerf, 2009-2010 Linguaggi e Complessità : Lezione 1 1 Logica proposizionale Linguaggio matematico

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 12 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione

Dettagli

Pattern matching e tipi di dato strutturati

Pattern matching e tipi di dato strutturati Capitolo 3 Pattern matching e tipi di dato strutturati Per il momento abbiamo considerato un linguaggio funzionale (denominato SimpleCaml ) i cui unici tipi di dato sono interi, float, booleani e funzioni.

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 13 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale pag. 1 Tripla di Hoare Soddisfatta: richiamo Data una Tripla

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 15 Sistema di Dimostrazioni per le Triple di Hoare Comando Vuoto, Assegnamento, Sequenza, Condizionale A. Corradini e F. Bonchi Dip.to Informatica Logica per la Programmazione

Dettagli

Fondamenti dell informatica

Fondamenti dell informatica Fondamenti dell informatica Funzioni ricorsive e linguaggi funzionali Rosario Culmone rosario.culmone@unicam.it 16/4/2008 UNICAM - p. 1/21 Funzioni ricorsive Metodo di definizione di algoritmi introdotto

Dettagli

Silvia Crafa

Silvia Crafa Introduzione ai Sistemi di Tipi Silvia Crafa silvia@dsi.unive.it Come nascono i tipi in informatica Cos è un tipo? Perché servono i tipi nei linguaggi di programmazione? Vediamo come nascono i tipi partendo

Dettagli

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it Ruolo del parser Ruolo dell analisi sintattica Ruolo del parser Metodologie

Dettagli

Type Assignment System

Type Assignment System Type Assignment System Descrizione formale del sistema di tipi. Univ. di Udine Descrizione formale del sistema di tipi. (Univ. di Udine) Type Assignment System 1 / 46 Analisi semantica Terza fase del compilatore

Dettagli

Espressioni aritmetiche

Espressioni aritmetiche Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:

Dettagli

Analisi semantica. Type Assignment System

Analisi semantica. Type Assignment System Analisi semantica Type Assignment System Descrizione formale del sistema di tipi. Univ. di Udine Terza fase del compilatore Controllo statico sul codice (albero sintattico) estrarre informazioni eseguire

Dettagli

Esercizi di Logica Matematica (parte 2)

Esercizi di Logica Matematica (parte 2) Luca Costabile Esercizio 317 Esercizi di Logica Matematica (parte 2) Dimostro per induzione sulla costruzione del termine : - Supponiamo che sia una variabile :, - Supponiamo che sia una variabile diversa

Dettagli

Intelligenza Artificiale. Logica proposizionale: calcolo simbolico

Intelligenza Artificiale. Logica proposizionale: calcolo simbolico Intelligenza Artificiale Logica proposizionale: calcolo simbolico Marco Piastra Logica formale (Parte 2) - 1 Parte 2 Calcolo logico Assiomi Derivazioni Derivazioni e conseguenza logica Completezza Logica

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare

Dettagli

Linguaggi. Claudio Sacerdoti Coen 04/03/ : La struttura dei numeri naturali. Universitá di Bologna

Linguaggi. Claudio Sacerdoti Coen 04/03/ : La struttura dei numeri naturali. Universitá di Bologna Linguaggi 8: Universitá di Bologna 04/03/2011 Outline 1 I numeri naturali Wikipedia: L espressione numeri naturali spesso viene usata sia per la sequenza di numeri interi positivi

Dettagli

Elementi di teoria degli insiemi

Elementi di teoria degli insiemi ppendice Elementi di teoria degli insiemi.1 Introduzione Comincia qui l esposizione di alcuni concetti primitivi, molto semplici da un punto di vista intuitivo, ma a volte difficili da definire con grande

Dettagli

1 I Tipi nei Linguaggi Funzionali

1 I Tipi nei Linguaggi Funzionali 1 I Tipi nei Linguaggi Funzionali Nel capitolo precedente abbiamo affrontato il problema della correttezza dei programmi dal punto di vista delle specifiche di ingresso/uscita. In particolare, abbiamo

Dettagli

Seconda lezione. Dipartimento di Matematica Università di Salerno

Seconda lezione. Dipartimento di Matematica Università di Salerno Algebra della Logica Seconda lezione Dipartimento di Matematica Università di Salerno http://logica.dmi.unisa.it/lucaspada Scuola AILA 2017 Palazzo Feltrinelli, Gargnano, 20 26 agosto 2017. Completezza

Dettagli

Logica proposizionale

Logica proposizionale Logica proposizionale Proposizione: frase compiuta che è sempre o vera o falsa. Connettivi Posti in ordine di precedenza: not, and, or, implica, doppia implicazione Sintassi Le proposizioni sono costituite

Dettagli

LOGICA MATEMATICA PER INFORMATICA (A.A. 12/13)

LOGICA MATEMATICA PER INFORMATICA (A.A. 12/13) LOGICA MATEMATICA PER INFORMATICA (A.A. 12/13) DISPENSA N. 4 Sommario. Dimostriamo il Teorema di Completezza per il Calcolo dei Predicati del I ordine. 1. Teorema di Completezza Dimostriamo il Teorema

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei

Dettagli

Linguaggi di programmazione. Paradigmi di programmazione

Linguaggi di programmazione. Paradigmi di programmazione Linguaggi di programmazione Paradigmi di programmazione Linguaggi: un po di storia Albori: Macchine a programma memorizzato, Programmi come dati Linguaggio Macchina Assemblatore FORTRAN (calcolo scientifico)

Dettagli

Linguaggi. Claudio Sacerdoti Coen 29,?/10/ : La struttura dei numeri naturali. Universitá di Bologna

Linguaggi. Claudio Sacerdoti Coen 29,?/10/ : La struttura dei numeri naturali. Universitá di Bologna Linguaggi 5: La struttura dei numeri naturali Universitá di Bologna 29,?/10/2014 Outline La struttura dei numeri naturali 1 La struttura dei numeri naturali I numeri naturali La

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione!paradigmi linguistici, costrutti!semantica!implementazione, strutture a tempo di esecuzione 1 Linguaggi di programmazione e astrazione! i linguaggi di programmazione ad alto

Dettagli

Appunti del corso Fondamenti di Analisi e Didattica

Appunti del corso Fondamenti di Analisi e Didattica Appunti del corso Fondamenti di Analisi e Didattica (PAS 2013-2014, Classe A049, docente prof. L. Chierchia) redatti da: A. Damiani, V. Pantanetti, R. Caruso, M. L. Conciatore, C. De Maggi, E. Becce e

Dettagli

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come

Problemi e algoritmi. Il che cosa ed il come. Il che cosa ed il come. Il che cosa e il come Problemi e algoritmi Il che cosa e il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come effettuare un calcolo

Dettagli

Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP

Informatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 LEZIONE 9: Introduzione ai linguaggi funzionali Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 Lezione 9 - Modulo 1 Introduzione ai linguaggi funzionali Linguaggi

Dettagli

Corso: Fondamenti di Linguaggi di Programmazione

Corso: Fondamenti di Linguaggi di Programmazione Corso: Fondamenti di Linguaggi di Programmazione Paola Giannini Chiusure e Binding statico e dinamico Paola Giannini, a.a. 2017/2018 FONDAMENTI LINGUAGGI Binding statico e dinamico 1 / 8 Stack e Sostituzione

Dettagli

Sistemi Deduttivi. Marco Piastra. Intelligenza Artificiale I. Intelligenza Artificiale I - A.A Sistemi Deduttivi[1]

Sistemi Deduttivi. Marco Piastra. Intelligenza Artificiale I. Intelligenza Artificiale I - A.A Sistemi Deduttivi[1] Intelligenza Artificiale I Sistemi Deduttivi Marco Piastra Intelligenza Artificiale I - A.A. 2010- Sistemi Deduttivi[1] Calcolo simbolico? Una fbf è conseguenza logica di un insieme di fbf sse qualsiasi

Dettagli

LOGICA MATEMATICA PER INFORMATICA

LOGICA MATEMATICA PER INFORMATICA LOGICA MATEMATICA PER INFORMATICA A.A. 10/11, DISPENSA N. 2 Sommario. Assiomi dell identità, modelli normali. Forma normale negativa, forma normale prenessa, forma normale di Skolem. 1. L identità Esistono

Dettagli

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04)

Problemi e algoritmi. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05 (da U. de' Liguoro - Alg. & Spe. 03/04) Problemi e algoritmi Il che cosa e il come Il che cosa ed il come Problema: descrive che cosa si deve calcolare Specifica (di un algoritmo): descrive che cosa calcola un algoritmo Algoritmo: descrive come

Dettagli

Type Assignment System

Type Assignment System Type Assignment System Descrizione formale del sistema di tipi Descrizione formale del sistema di tipi Type Assignment System 1 / 43 Analisi semantica Terza fase del compilatore Controllo statico sul codice

Dettagli

Linguaggi di Programmazione avanzati Linguaggi funzionali

Linguaggi di Programmazione avanzati Linguaggi funzionali Linguaggi di Programmazione avanzati Linguaggi funzionali Simone Martini Dipartimento di Scienze dell Informazione Università di Bologna Italy A.a. 2005-2006 1 / 95 Il paradigma funzionale puro Un lambda-calcolo

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

DAI NUMERI NATURALI AI NUMERI RAZIONALI

DAI NUMERI NATURALI AI NUMERI RAZIONALI DAI NUMERI NATURALI AI NUMERI RAZIONALI 1. L insieme dei numeri naturali Nel sistema assiomatico ZF, l Assioma dell infinito stabilisce che: Esiste un insieme A, i cui elementi sono insiemi e tale che

Dettagli

Introduzione alla Programmazione Funzionale

Introduzione alla Programmazione Funzionale Introduzione alla Programmazione Funzionale April 27, 2017 Paradigmi di Programmazione Programmi sviluppabili usando diversi paradigmi Imperativo: computazione come modifica di stato Funzionale: computazione

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di

Dettagli

Capitolo 1: Concetti matematici di base

Capitolo 1: Concetti matematici di base Capitolo 1: Concetti matematici di base 1 Insiemi x A x é elemento dell insieme A. B A B é un sottoinsieme di A. B A B é un sottoinsieme proprio di A. A costituito da n elementi A = n é la sua cardinalitá.

Dettagli

Informatica

Informatica Informatica 2019-01-18 Nota: Scrivete su tutti i fogli nome e matricola. Esercizio 1. Si enuncino, senza dimostrarli, i risultati relativi al determinismo e alla totalità della semantica delle espressioni

Dettagli

ALGEBRA I: ASSIOMI DI PEANO E PROPRIETÀ DEI NUMERI NATURALI

ALGEBRA I: ASSIOMI DI PEANO E PROPRIETÀ DEI NUMERI NATURALI ALGEBRA I: ASSIOMI DI PEANO E PROPRIETÀ DEI NUMERI NATURALI 1. GLI ASSIOMI DI PEANO Come puro esercizio di stile voglio offrire una derivazione delle proprietà elementari dei numeri naturali e delle operazioni

Dettagli

ESERCIZI DI LOGICA MATEMATICA A.A Alessandro Combi

ESERCIZI DI LOGICA MATEMATICA A.A Alessandro Combi ESERCIZI DI LOGICA MATEMATICA A.A. 2015-16 Alessandro Combi Esercizio 1.7 Per ogni formula A, dimostrare che ρ(a) = min{n A F n } Soluzione: Chiamo rank(a) = min{n A F n }. Bisogna provare che rank segue

Dettagli

La programmazione nel linguaggio JavaScript. Il programma

La programmazione nel linguaggio JavaScript. Il programma Il programma Nei linguaggi di programmazione il programma è una funzione che ha come argomento i dati digitati in input e opportunamente convertiti. la descrizione della funzione (ovvero il programma)

Dettagli

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi Istruzioni variabili e tipi Sottoprogrammi Strutture di controllo Ricorsione 1 2 Obiettivo Ciclo di sviluppo di programmi Risoluzione

Dettagli

Esercizi di programmazione ricorsiva. Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B)

Esercizi di programmazione ricorsiva. Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B) Esercizi di programmazione ricorsiva Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B) Corso di Laurea in Informatica Università di Pisa A.A. 2008/09 1. Dare il tipo delle funzione

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Dettagli

Corso di Logica Computazionale

Corso di Logica Computazionale Corso di Logica Computazionale Laurea Magistrale in Informatica Anno Accademico 2010/11 Docente: Marianna Nicolosi Asmundo 1 Logica Computazionale La parola logica viene dal greco λóγoς che significa discorso

Dettagli

Capitolo IV SPAZI VETTORIALI EUCLIDEI

Capitolo IV SPAZI VETTORIALI EUCLIDEI Capitolo IV SPAZI VETTORIALI EUCLIDEI È ben noto che in VO 3 si possono considerare strutture più ricche di quella di spazio vettoriale; si pensi in particolare all operazioni di prodotto scalare di vettori.

Dettagli

Ragionamento formalei. Ragionamento formale

Ragionamento formalei. Ragionamento formale Ragionamento formale La necessità e l importanza di comprendere le basi del ragionamento formale, utilizzato in matematica per dimostrare teoremi all interno di teorie, è in generale un argomento piuttosto

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

NOTE DI ALGEBRA LINEARE v = a 1 v a n v n, w = b 1 v b n v n

NOTE DI ALGEBRA LINEARE v = a 1 v a n v n, w = b 1 v b n v n NOTE DI ALGEBRA LINEARE 2- MM 9 NOVEMBRE 2 Combinazioni lineari e generatori Sia K un campo e V uno spazio vettoriale su K Siano v,, v n vettori in V Definizione Un vettore v V si dice combinazione lineare

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

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Linguaggi con Tipi di Ordine Superiori

Linguaggi con Tipi di Ordine Superiori Linguaggi con Tipi di Ordine Superiori Aniello Murano Università degli Studi di Napoli Federico II 1 Prefazione In questa seconda parte del corso parleremo di linguaggi di ordine superiore. Si tratta di

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

CAPITOLO 1. Fondamenti. 1. Assiomi, postulati, definizioni

CAPITOLO 1. Fondamenti. 1. Assiomi, postulati, definizioni CAPITOLO 1 Fondamenti In questo capitolo presentiamo alcune nozioni necessarie per i successivi capitoli. 1. Assiomi, postulati, definizioni La Matematica è la scienza ipotetico-deduttiva per eccellenza.

Dettagli

ELEMENTI DI LOGICA MATEMATICA LEZIONE VII

ELEMENTI DI LOGICA MATEMATICA LEZIONE VII ELEMENTI DI LOGICA MATEMATICA LEZIONE VII MAURO DI NASSO In questa lezione introdurremo i numeri naturali, che sono forse gli oggetti matematici più importanti della matematica. Poiché stiamo lavorando

Dettagli

Algoritmi e Complessità

Algoritmi e Complessità Algoritmi e Complessità Università di Camerino Corso di Laurea in Informatica (tecnologie informatiche) III periodo didattico Docente: Emanuela Merelli Email:emanuela.merelli@unicam.it a.a. 2002-03 e.merelli

Dettagli

Logica: materiale didattico

Logica: materiale didattico Logica: materiale didattico M. Cialdea Mayer. Logica (dispense): http://cialdea.dia.uniroma3.it/teaching/logica/materiale/dispense-logica.pdf Logica dei Predicati (Logica per l Informatica) 01: Logica

Dettagli

Dispensa di Informatica Teorica (Elementi) - Teorema di Cook

Dispensa di Informatica Teorica (Elementi) - Teorema di Cook Teorema di ook (Idea generale) Dato L NP, costruire una trasformazione polinomiale f da L a L (sodd, e), cioè il linguaggio composto dalle stringhe che corrispondono ad istanze del problema sodd. La trasformazione

Dettagli

1 Cenni di logica matematica

1 Cenni di logica matematica 1 Cenni di logica matematica 1 1 Cenni di logica matematica Una delle discipline chiave della matematica (e non solo, visto che è fondamentale anche per comprendere la lingua parlata) è la logica matematica,

Dettagli

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio) Il Concetto Intuitivo di Calcolatore Elementi di Informatica e Programmazione Ingegneria Gestionale Università degli Studi di Brescia Docente: Prof. Alfonso Gerevini Variabile di uscita Classe di domande

Dettagli

Insiemi Numerici: I Numeri Naturali. 1 I Numeri Naturali: definizione assiomatica

Insiemi Numerici: I Numeri Naturali. 1 I Numeri Naturali: definizione assiomatica Insiemi Numerici: I Numeri Naturali Docente: Francesca Benanti Ottobre 018 1 I Numeri Naturali: definizione assiomatica Sin dall antichità è stata data una sistemazione rigorosa alla geometria. Euclide

Dettagli

Rappresentazione dei numeri interi in un calcolatore

Rappresentazione dei numeri interi in un calcolatore Corso di Calcolatori Elettronici I Rappresentazione dei numeri interi in un calcolatore Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle

Dettagli

Rappresentazione dei numeri interi in un calcolatore. Rappresentazione dei numeri

Rappresentazione dei numeri interi in un calcolatore. Rappresentazione dei numeri Corso di Calcolatori Elettronici I Rappresentazione dei numeri interi in un calcolatore Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle

Dettagli

Istituzioni di Logica Matematica

Istituzioni di Logica Matematica Istituzioni di Logica Matematica Sezione 12 del Capitolo 3 Alessandro Andretta Dipartimento di Matematica Università di Torino A. Andretta (Torino) Istituzioni di Logica Matematica AA 2013 2014 1 / 25

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

Induzione. Definizione induttiva di insiemi e funzioni Principio di induzione strutturale

Induzione. Definizione induttiva di insiemi e funzioni Principio di induzione strutturale Induzione Definizione induttiva di insiemi e funzioni Principio di induzione strutturale Gli insiemi definiti per induzione ricevono una struttura che può servire come base per la definizione induttiva

Dettagli

Fondamenti d Informatica: Linguaggio While. Barbara Re, Phd

Fondamenti d Informatica: Linguaggio While. Barbara Re, Phd Fondamenti d Informatica: Linguaggio While Barbara Re, Phd Il linguaggio WHILE } La computabilità come supporto ai moderni linguaggi di programmazione } Si può generalizzare rispetto ad una vasta famiglia

Dettagli