Logica in informatica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Logica in informatica"

Transcript

1 Logica La logica è lo studio del ragionamento. Obiettivo: analizzare e rappresentare la forma dei ragionamenti, in base alla quale si può determinare se siano corretti o no. Logica in informatica Formalismo per rappresentare conoscenza in Intelligenza Artificiale Strumento metodologico per l informatica (prova di proprietà di programmi) Alla base della programmazione logica (risoluzione di un problema riconducibile all essere un teorema ) Alla base della programmazione funzionale (λ-calcolo) Risultati d impatto sull informatica teorica Programmazione Funzionale (Roma Tre) 11: Logica 1 / 25

2 Logica proposizionale (booleana) Linguaggio formale (sintassi + semantica) + Sistema di inferenza Sintassi: insieme delle espressioni ben formate (linguaggio) Semantica: interpretazione M del linguaggio Logica classica: rappresentazione di conoscenza dichiarativa e studio delle forme di ragionamento su questo tipo di conoscenza Ragionamento logico: non si basa su alcuna proprietà degli oggetti o concetti coinvolti nel ragionamento, si astrae dal contenuto specifico del ragionamento per considerare solo la sua forma. Logica proposizionale: gli elementi di base (atomici) sono proposizioni 1. SE c è il sole, ALLORA fa caldo 2. c è il sole QUINDI: fa caldo Forma comune: 1. SE A, ALLORA B 2. A QUINDI: B 1. SE il compito è sufficiente, ALLORA sei esonerato dallo scritto 2. il compito è sufficiente QUINDI: sei esonerato dallo scritto A B B Programmazione Funzionale (Roma Tre) 11: Logica 2 / 25 A

3 Logica Classica Elementi di base: proposizioni (o enunciati), che possono essere VERE o FALSE Logica proposizionale: ogni enunciato è un atomo non ulteriormente analizzabile Caino è fratello di Abele è rappresentato da un atomo p A ogni paziente piace qualche dottore è rappresentato da un atomo q Gli enunciati semplici (atomi o variabili proposizionali) possono essere composti per formare enunciati complessi (formule proposizionali), mediante operatori logici (connettivi proposizionali, o operatori booleani): NOT (negazione) IF/THEN (implicazione) AND (congiunzione) IFF (doppia implicazione) OR (disgiunzione) Programmazione Funzionale (Roma Tre) 11: Logica 3 / 25

4 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace qualche dottore Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

5 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace qualche dottore Caino NON è fratello di Abele p q Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

6 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace p q qualche dottore Caino NON è fratello di Abele p Caino è fratello di Abele E a ogni paziente piace qualche dottore Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

7 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace p q qualche dottore Caino NON è fratello di Abele p Caino è fratello di Abele E a ogni paziente piace qualche p q dottore SE Caino è fratello di Abele, ALLORA a ogni paziente piace qualche dottore Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

8 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace p q qualche dottore Caino NON è fratello di Abele p Caino è fratello di Abele E a ogni paziente piace qualche p q dottore SE Caino è fratello di Abele, ALLORA a ogni paziente p q piace qualche dottore Caino è fratello di Abele SE E SOLO SE a ogni paziente piace qualche dottore Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

9 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace p q qualche dottore Caino NON è fratello di Abele p Caino è fratello di Abele E a ogni paziente piace qualche p q dottore SE Caino è fratello di Abele, ALLORA a ogni paziente p q piace qualche dottore Caino è fratello di Abele SE E SOLO SE a ogni paziente p q piace qualche dottore Ricorsivamente: SE Caino NON è fratello di Abele, ALLORA Caino è fratello di Abele OPPURE a ogni paziente piace qualche dottore Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

10 Formule: esempi Caino è fratello di Abele OPPURE a ogni paziente piace p q qualche dottore Caino NON è fratello di Abele p Caino è fratello di Abele E a ogni paziente piace qualche p q dottore SE Caino è fratello di Abele, ALLORA a ogni paziente p q piace qualche dottore Caino è fratello di Abele SE E SOLO SE a ogni paziente p q piace qualche dottore Ricorsivamente: SE Caino NON è fratello di Abele, ALLORA Caino è fratello di Abele OPPURE a ogni paziente piace qualche dottore p (p q) Programmazione Funzionale (Roma Tre) 11: Logica 4 / 25

11 Logica Proposizionale Classica La logica proposizionale studia il significato dei connettivi e le forme di ragionamento corretto rappresentabili mediante formule proposizionali Sintassi: la sintassi di un linguaggio determina quali sono le espressioni corrette del linguaggio. Espressioni della logica proposizionale: formule Un linguaggio proposizionale è costruito sulla base di un determinato insieme P di variabili (o lettere) proposizionali P = {p, q, r} P = {p 0, p 1, p 2,...} P = {caino_fratello_di_abele, pazienti_dottori,...} Alfabeto: P {,,,,, (, )} Linguaggio (insieme delle formule): sottoinsieme delle stringhe sull alfabeto della logica considerata Programmazione Funzionale (Roma Tre) 11: Logica 5 / 25

12 Sintassi: l insieme delle formule Sia P un insieme P di variabili proposizionali. L insieme delle formule proposizionali costruite sulla base di P, Prop[P], è definito induttivamente: 1 ogni variabile proposizionale è una formula 2 e sono formule 3 se A è una formula, allora anche A è una formula 4 se A e B sono formule, allora anche (A B), (A B), (A B), (A B) sono formule 5 nient altro è una formula Esempi: Se P = {p, q, r, s}, allora sono in Prop[P]: p, q, r, s,,, p, q, r, s,,, (p q), (p q), (q r), (r s),... (p q), ((p q) (q r)), ((q r) s),... ( (p q) ((p q) (q r))), ((q r) s) ),... Programmazione Funzionale (Roma Tre) 11: Logica 6 / 25

13 Rappresentazione delle formule e definizioni ricorsive su di esse Osservazione: non rappresentiamo la doppia implicazione type form = True False Prop of string Not of form And of form * form Or of form * form Imp of form * form (p q): Not (Imp (Prop "p",prop "q")) Programmazione Funzionale (Roma Tre) 11: Logica 7 / 25

14 Rappresentazione delle formule e definizioni ricorsive su di esse Osservazione: non rappresentiamo la doppia implicazione type form = True False Prop of string Not of form And of form * form Or of form * form Imp of form * form (p q): Not (Imp (Prop "p",prop "q")) (* atomlist : form -> string list *) let rec atomlist = function True False -> [] Prop s -> [s] Not f -> atomlist f Or(f1,f2) -> union (atomlist f1) (atomlist f2) And(f1,f2) -> union (atomlist f1) (atomlist f2) Imp(f1,f2) -> union (atomlist f1) (atomlist f2) Programmazione Funzionale (Roma Tre) 11: Logica 7 / 25

15 Moduli e file Vogliamo arrivare a scrivere un parser per le formule proposizionali. A questo scopo conviene racchiudere la dichiarazione del tipo form in un file a parte, che andrà a costituire un modulo, come i moduli della libreria standard di OCaml. Creiamo il file language.ml che contiene soltanto la dichiarazione del tipo form (CODICE/11-logica/language.ml). Occorre poi compilare il modulo, dando il comando (da una command shell): > ocamlc -c language.ml che genera i file language.cmi (l interfaccia compilata del modulo) e language.cmo (bytecode del modulo Language). Per caricare in memoria il modulo Language: # #load "language.cmo";; Ma i costruttori sono relativi al modulo Language: # Prop "p";; ====> Unbound constructor Prop # Language.Prop "p";; - : Language.form = Language.Prop "p" Programmazione Funzionale (Roma Tre) 11: Logica 8 / 25

16 Aprire i moduli Per evitare di scrivere Language.Prop, Language.And,..., occorre aprire il modulo: # open Language;; # Prop "p";; - : Language.form = Prop "p" D ora in poi assumiamo di scrivere le nostre definizioni in un file (logic.ml) che inizia con: #load "language.cmo";; open Language (il file, ovviamente, deve stare nella stessa directory in cui si trovano language.cmi e language.cmo). Programmazione Funzionale (Roma Tre) 11: Logica 9 / 25

17 Stampa di una formula Vai al codice file: CODICE/11-logica/logic.ml Programmazione Funzionale (Roma Tre) 11: Logica 10 / 25

18 Convenzioni sull uso delle parentesi si possono omettere le parentesi esterne: (p q) si può scrivere p q associatività: da sinistra a destra (se non indicato altrimenti dall uso di parentesi) ((p q) r) si può scrivere p q r ((p q) r) si può scrivere p q r (p (q r)) NON si può scrivere p q r precedenza dei connettivi:,,,, (se non indicato altrimenti dall uso di parentesi) (p (q r)) si può scrivere p q r (p (q r)) si può scrivere (p q r) (p (q r)) NON si può scrivere p q r (p (q r)) NON si può scrivere p q r Quindi: s p q r abbrevia (s ((p q) r)) p (p r q) abbrevia (p (p (r q))) p q r s abbrevia ((p q) (r s)) p q r è diverso da p (q r) Programmazione Funzionale (Roma Tre) 11: Logica 11 / 25

19 Un parser per formule proposizionali Utilizziamo i costruttori di parser: ocamllex e ocamlyacc. Generatore di parser (compiler-compiler): strumento per la generazione del codice sorgente di un parser, a partire dalla descrizione data nella forma di grammatica (in genere BNF). I nomi derivano dai due più noti generatori di parser, Lex e Yacc. Lex: genera codice C per un lexical analyzer. Yacc: Yet Another Compiler Compiler!. A partire dalla grammatica, genera un parser o analizzatore sintattico (in C): la sequenza di token prodotta dall analisi lessicale è organizzata in un albero sintattico. In OCaml: ocamllex produce il codice OCaml dell analizzatore lessicale corrispondente ai pattern specificati in un file con estensione mll. ocamlyacc produce il codice OCaml di un parser, corrispondente alla grammatica specificata nel file (con estensione mly). Programmazione Funzionale (Roma Tre) 11: Logica 12 / 25

20 La dichiarazione dei simboli terminali Un file mly inizia con un header (codice OCaml che verrà copiato all inizio del file con il parser) e la dichiarazione dei simboli terminali (token) della grammatica. Nel nostro caso, il file parser.mly (in CODICE/11-logica) inizia con: %{ open Language %} %token <string> ATOM %token TRUE FALSE NOT AND OR IMP IFF RPAREN LPAREN EOF END %left IFF %left IMP %left OR %left AND %nonassoc NOT Le dichiarazioni %left, %right e %nonassoc associano la precedenza e l associatività ai simboli corrispondenti. Ogni simbolo ha precedenza più alta di quelli che lo precedono. Programmazione Funzionale (Roma Tre) 11: Logica 13 / 25

21 Dichiarazione degli entry point Il file prosegue con la dichiarazione degli entry point della grammatica: %start formula %type <Language.form> formula Per ogni entry point, il modulo prodotto da ocamlyacc avrà una funzione con lo stesso nome. val formula : (Lexing.lexbuf -> token) (* tipo della funzione di lexing *) -> Lexing.lexbuf (* tipo dei lexer buffer, tipo astratto del modulo Lexing *) -> Language.form Programmazione Funzionale (Roma Tre) 11: Logica 14 / 25

22 La grammatica Ogni simbolo non terminale deve essere definito mediante regole sintattiche, che associano un attributo (espressione OCaml) a ogni caso di espansione. formula : ATOM { Prop($1) } TRUE { True } FALSE { False } NOT formula { Not $2} formula IFF formula { And(Imp($1,$3),Imp($3,$1)) } formula IMP formula { Imp($1,$3) } formula OR formula { Or($1,$3) } formula AND formula { And($1,$3) } LPAREN formula RPAREN { $2 } ; A ogni sequenza di simboli (parte sinistra) è associato un attributo semantico, nella parte destra: questo sarà valutato a riportato come valore nel caso corrispondente. Nella parte destra: $1 corrisponde all attributo del primo simbolo della corrispondente parte sinistra, $2 quello del secondo simbolo, ecc. Programmazione Funzionale (Roma Tre) 11: Logica 15 / 25

23 L analisi lessicale (I) I file con estensione mll contengono un insieme di espressioni regolari con associata azione semantica (un Parser.token). Il file inizia con un header: { open Parser } E la definizione dell entry point token: Vai al codice CODICE/11-logica/lexer.mll rule token = parse (* keywords *)... Per ogni entry point (possono essercene diversi), il file lexer.ml prodotto da ocamllex conterrà la definizione di una corrispondente funzione di lexing: val token : Lexing.lexbuf -> Parser.token Programmazione Funzionale (Roma Tre) 11: Logica 16 / 25

24 L analisi lessicale (II) rule token = parse [ \t \n ] { token lexbuf } "T" { TRUE } "F" { FALSE }... La funzione è definita per casi: a sinistra c è un espressione regolare, a destra l attributo semantico associato. token lexbuf: applicare la funzione token al (resto del) lexer buffer. [ a - z A - Z ] [ a - z A - Z 0-9 _ ]* { ATOM(Lexing.lexeme lexbuf) } A sinistra: espressione regolare, a destra: Lexing.lexeme lexbuf riporta la stringa corrispondente all espressione regolare letta. Programmazione Funzionale (Roma Tre) 11: Logica 17 / 25

25 I moduli Abbiamo compilato il file language.ml, generando il file language.cmo (il modulo Language): ocamlc -c language.ml Ora è possibile generare il parser: ocamlyacc parser.mly ocamllex lexer.mll OCamlyacc genera parser.ml (modulo) e parser.mli (l interfaccia); OCamllex genera lexer.ml. Ora possiamo compilare questi file: ocamlc -c parser.mli parser.ml lexer.ml generando i corrispondenti file cmi e cmo. Per utilizzarli, da una shell OCaml: #load "language.cmo";; #load "parser.cmo";; #load "lexer.cmo";; Ora abbiamo a disposizione i moduli Language, Parser e Lexer. Programmazione Funzionale (Roma Tre) 11: Logica 18 / 25

26 Uso del parser (e dei moduli) in modalità interattiva Lexer.token: Lexing.lexbuf -> Parser.token Parser.formula: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Language.form Parser.formula Lexer.token: Lexing.lexbuf -> Language.form Per analizzare una stringa, si deve trasformare in un Lexing.lexbuf Lexing.from_string: string -> lexbuf #load "language.cmo";; open Language;; #load "parser.cmo";; #load "lexer.cmo";; (* parse: string -> Language.form *) (* solleva Parsing.parse_error in caso di fallimento *) let parse stringa = let lexbuf = Lexing.from_string stringa in Parser.formula Lexer.token lexbuf Vai al codice Programmazione Funzionale (Roma Tre) 11: Logica 19 / 25

27 Compilazione separata e codice eseguibile (ocamlc) I nomi dei file <nome-file>.mli: codice sorgente per interfacce. La compilazione produce un interfaccia compilata nel file <nome-file>.cmi <nome-file>.ml: codice sorgente per unità di compilazione. La compilazione produce bytecode nel file <nome-file>.cmo Per compilare separatamente un unità o un interfaccia: ocamlc -c <nome-file>.mli ocamlc -c <nome-file>.ml Mediante linking del bytecode (file.cmo) si ottiene un programma eseguibile indipendente. ocamlc -o <nome-programma> <file_1.cmo>... <file_n.cmo> ocamlc -o <nome-programma> <f1.mli> <f1.ml>... <fn.ml> Per eseguire il programma, si invoca l interprete di bytecode: ocamlrun <nome-programma> Programmazione Funzionale (Roma Tre) 11: Logica 20 / 25

28 Compilazione di programmi stand-alone ocamlc -custom -o <nome-programma>... (per la creazione di programma stand-alone su sistemi Windows, vedere il sito di OCaml) Programmazione Funzionale (Roma Tre) 11: Logica 21 / 25

29 Moduli e file Contenuto del file queue.mli (* interfaccia per le code *) type a t exception Empty val Tempty : a t val dequeue : a t -> a t val head : a t -> a val enqueue : a t -> a -> a t val null : a t -> bool Contenuto del file queue.ml: type a t = a list * a list exception Empty let norm = function... let empty = ([],[]) let dequeue =... let head =... let enqueue (h,t) x =... let null q = q = ([],[]) Il compilatore riconosce un modulo Queue, la cui segnatura è quella specificata in queue.mli. queue.mli definisce l interfaccia del file di nome queue.ml. Il tipo concreto utilizzato per rappresentare le code è nascosto. (vedere capitolo 5 del libro) Programmazione Funzionale (Roma Tre) 11: Logica 22 / 25

30 Accesso al contenuto di una unità di compilazione Le altre unità di compilazione (altri file), possono accedere al contenuto del file queue.mli (al modulo Queue) nello stesso modo in cui accedono ai moduli della libreria standard: if Queue.null (Queue.enqueue Queue.empty 3) then... Ovviamente vedono soltanto ciò che è specificato nell interfaccia. Per caricare bytecode in modalità interattiva: #load "queue.cmo";; Programmazione Funzionale (Roma Tre) 11: Logica 23 / 25

31 Esecuzione di un programma compilato Se vogliamo eseguire un programma creato con ocamlc -o <nome-programma>... il file principale (quello dal quale non dipende nessun altro), deve contenere una richiesta di valutazione che dia l avvio all esecuzione. Ad esempio: let _ = <Espressione-da-valutare> È anche possibile scrivere programmi che accettano argomenti: vedere il modulo Arg della libreria standard. Programmazione Funzionale (Roma Tre) 11: Logica 24 / 25

32 Esempio Abbiamo scritto i file language.ml, lexer.mll e parser.mly, abbiamo creato il parser (i file lexer.ml, parser.mli e parser.mly): ocamlc -c language.ml ocamlyacc parser.mly ocamllex lexer.mll Ora scriviamo un file prova.ml con il seguente contenuto: Vai al codice CODICE/11-logica/prova.ml Compiliamo, creando il file prova, e possiamo eseguirlo: ocamlc -o prova language.ml parser.mli parser.ml \ lexer.ml prova.ml ocamlrun prova Programmazione Funzionale (Roma Tre) 11: Logica 25 / 25

Rappresentazione delle formule e definizioni ricorsive su di esse

Rappresentazione delle formule e definizioni ricorsive su di esse Rappresentazione delle formule e definizioni ricorsive su di esse Osservazione: non rappresentiamo la doppia implicazione type form = True False Prop of string Not of form And of form * form Or of form

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

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

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione

Dettagli

Introduzione alla logica matematica

Introduzione alla logica matematica Introduzione alla logica matematica, Paolo Bison, A.A. 2004-05, 2004-10-26 p.1/29 Introduzione alla logica matematica Silvana Badaloni Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di

Dettagli

LOGICA FORMALE. Logiche

LOGICA FORMALE. Logiche LOGICA FORMALE Linguaggio formale (sintassi + semantica) + Sistema di inferenza Sintassi: insieme delle espressioni ben formate (linguaggio) Semantica: interpretazione M del linguaggio Logica classica:

Dettagli

PROGRAMMAZIONE 2 15bisbis. OCaML: un veloce ripasso

PROGRAMMAZIONE 2 15bisbis. OCaML: un veloce ripasso PROGRAMMAZIONE 2 15bisbis. OCaML: un veloce ripasso PR2 2017-2018 1 Funzioni generiche Analizziamo la funzione length applicata a int list e string list let rec length (l : int list) : int = match l with

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

Logica per la Programmazione

Logica per la Programmazione Logica del Primo Ordine: Motivazioni, Sintassi e Interpretazioni Logica per la Programmazione Lezione 1 Calcolo Proposizionale: sintassi e semantica Tautologie Esempi di Formalizzazione di Enunciati pag.

Dettagli

Introduzione alla logica matematica. Logica matematica. Paolo Bison

Introduzione alla logica matematica. Logica matematica. Paolo Bison Introduzione alla logica matematica Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Logica matematica formalizzazione dei meccanismi di ragionamento la logica

Dettagli

LINGUAGGI PER LA RAPPRESENTAZIONE DELLA CONOSCENZA

LINGUAGGI PER LA RAPPRESENTAZIONE DELLA CONOSCENZA LINGUAGGI PER LA RAPPRESENTAZIONE DELLA CONOSCENZA Linguaggio formale: SINTASSI SEMANTICA + Sistema di inferenza Sintassi: insieme delle espressioni ben formate (linguaggio) Semantica: interpretazione

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: nozioni di base

Logica: nozioni di base Fondamenti di Informatica Sistemi di Elaborazione delle Informazioni Informatica Applicata Logica: nozioni di base Antonella Poggi Anno Accademico 2012-2013 DIPARTIMENTO DI SCIENZE DOCUMENTARIE LINGUISTICO

Dettagli

si vuole verificare: P5: pioverà

si vuole verificare: P5: pioverà Logica matematica ntroduzione alla logica matematica ilvana adaloni Paolo ison Fondamenti di nformatica AA 20004 niversità di Padova formalizzazione dei meccanismi di ragionamento la logica studia proposizioni

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

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche Parse trees Lezione del 17/10/2012 Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,

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

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

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

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

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

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio

Dettagli

Logica proposizionale

Logica proposizionale Fondamenti di Informatica per la Sicurezza a.a. 2008/09 Logica proposizionale Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università degli

Dettagli

Logica proposizionale

Logica proposizionale Università di Bergamo Facoltà di Ingegneria Intelligenza Artificiale Paolo Salvaneschi A7_2 V1.1 Logica proposizionale Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio personale

Dettagli

BREVE CENNO DI LOGICA CLASSICA La logica può essere definita come la scienza che studia le condizioni in base alle quali un ragionamento risulta

BREVE CENNO DI LOGICA CLASSICA La logica può essere definita come la scienza che studia le condizioni in base alle quali un ragionamento risulta BREVE CENNO DI LOGICA CLASSICA La logica può essere definita come la scienza che studia le condizioni in base alle quali un ragionamento risulta corretto e vero. Un ragionamento è corretto se segue uno

Dettagli

Esercitazioni di Linguaggi e Traduttori

Esercitazioni di Linguaggi e Traduttori 1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce

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

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple.

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple. Domanda n. 1 Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Simulazione del Questionario a Risposte Multiple 8-Nov-2004 Argomento: Rappresentazione dell'informazione

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

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

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

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

Linea di comando. Compilazione. Aprire una shell di DOS tramite:

Linea di comando. Compilazione. Aprire una shell di DOS tramite: Linea di comando Aprire una shell di DOS tramite: Start MS VisualStudio 2005 Visual Studio Tools E una normale shell di DOS con aggiunte al path ed alle variabili d ambiented Digitare cl /? per vedere

Dettagli

CALCOLO PROPOSIZIONALE: CENNI

CALCOLO PROPOSIZIONALE: CENNI CALCOLO PROPOSIZIONALE: CENNI Francesca Levi Dipartimento di Informatica February 26, 2016 F.Levi Dip.to Informatica Informatica per le Scienze Umane a.a. 15/16 pag. 1 La Logica La logica è la disciplina

Dettagli

CALCOLO PROPOSIZIONALE. Corso di Logica per la Programmazione Andrea Corradini

CALCOLO PROPOSIZIONALE. Corso di Logica per la Programmazione Andrea Corradini CALCOLO PROPOSIZIONALE Corso di Logica per la Programmazione Andrea Corradini andrea@di.unipi.it UN PROBLEMA DI DEDUZIONE LOGICA (da un test d ingresso) Tre amici, Antonio, Bruno e Corrado, sono incerti

Dettagli

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Stefano Guerrini A.A. 2000/01 Come abbiamo già visto, l obiettivo del progetto è arrivare a determinare il valore assegnato

Dettagli

Analizzatore lessicale

Analizzatore lessicale Analizzatore lessicale Legge la stringa in input e la trasforma in un flusso di token da sottoporre all analizzatore sintattico. Le frasi di un linguaggio sono stringhe di token (simboli atomici). Richieste

Dettagli

Analizzatori Lessicali con JLex. Giuseppe Morelli

Analizzatori Lessicali con JLex. Giuseppe Morelli Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica

Dettagli

4 La Logica come base di ogni scienza. 5 Alla ricerca della forma logica. logica

4 La Logica come base di ogni scienza. 5 Alla ricerca della forma logica. logica 4 La Logica come base di ogni scienza La Logica è alla base di ogni scienza (o teoria) in quanto è fondamento di ogni scienza non tanto per i contenuti specifici ma per la loro articolazione deduttiva.

Dettagli

CALCOLO PROPOSIZIONALE

CALCOLO PROPOSIZIONALE CALCOLO PROPOSIZIONALE UN PROBLEMA DI DEDUZIONE LOGICA (da un test d ingresso) Tre amici, Antonio, Bruno e Corrado, sono incerti se andare al cinema. Si sa che: Se Corrado va al cinema, allora ci va anche

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Linguaggi e Traduttori: Analisi lessicale

Linguaggi e Traduttori: Analisi lessicale Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

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

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

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi POLITECNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Controllo dei tipi Type expressions Symbol tables Implementazione di un type-checker strutture

Dettagli

Logica Proposizionale

Logica Proposizionale Intelligenza rtificiale I Logica Proposizionale Introduzione Marco Piastra Intelligenza rtificiale I -.. 28-29 29 Introduzione al corso ] lgebre di Boole Definizione Una collezione di oggetti X su cui

Dettagli

La principale modalità di calcolo è l applicazione di funzioni

La principale modalità di calcolo è l applicazione di funzioni 1 La principale modalità di calcolo è l applicazione di funzioni Nei linguaggi funzionali puri non esistono strutture di controllo predefinite per la realizzazione di cicli quali for, while, repeat Un

Dettagli

Le fasi della programmazione

Le fasi della programmazione Algoritmi Le fasi della programmazione Ad un primo livello di astrazione l attività della programmazione può essere suddivisa in quattro (macro) fasi principali. 1. Definizione del problema (specifica)

Dettagli

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Corso di Linguaggi e Traduttori Anno Accademico 2017 2018 Prof. Giovanni Pighizzini Progetto d esame Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Variabili

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

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 4 Marzo 2008 Derivazioni canoniche Una derivazione

Dettagli

SmallC: Definizione ed Implementazione

SmallC: Definizione ed Implementazione Laboratorio Sommario: 16 Marzo, 2017 SmallC: Definizione e Implementazione Definizione: Sintassi e Semantica Implementazione: Il linguaggio Funzionale Ocaml. Ocaml: Guida all Istallazione Ocaml: Introduzione

Dettagli

Ragionamento Automatico Richiami di calcolo dei predicati

Ragionamento Automatico Richiami di calcolo dei predicati Richiami di logica del primo ordine Ragionamento Automatico Richiami di calcolo dei predicati (SLL: Capitolo 7) Sintassi Semantica Lezione 2 Ragionamento Automatico Carlucci Aiello, 2004/05Lezione 2 0

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

Introduzione alla logica

Introduzione alla logica Corso di Intelligenza Artificiale 2011/12 Introduzione alla logica iola Schiaffonati Dipartimento di Elettronica e Informazione Sommario 2 Logica proposizionale (logica di Boole) Logica del primo ordine

Dettagli

Tipi di dato primitivi

Tipi di dato primitivi Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 2. a.a 2010 / 2011

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 2. a.a 2010 / 2011 POLITECNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Riconoscitori e analizzatori sintattici Data una grammatica non ambigua ed una sequenza di

Dettagli

Riconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio

Riconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio POLITECNICO I TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: Riconoscitori e analizzatori sintattici ata una grammatica non ambigua ed una sequenza

Dettagli

DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI. Corso di Logica per la Programmazione

DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI. Corso di Logica per la Programmazione DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI Corso di Logica per la Programmazione SULLE LEGGI DEL CALCOLO PROPOSIZIONALE Abbiamo visto le leggi per l'equivalenza ( ),

Dettagli

MS Visual Studio: Linea di Comando

MS Visual Studio: Linea di Comando MS Visual Studio: Linea di Comando Aprire una shell di DOS tramite: Start MS VisualStudio 2010 Visual Studio Tools è una normale shell di DOS con aggiunte al path ed alle variabili d ambiente Digitare

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

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina

Esempio. Le istruzioni corrispondono a quelle di sopra, ma sono scritte in modo simbolico. E indipendente dalla machina Il compilatore C Astrazione Linguaggio macchina implica la conoscenza dei metodi usati per la rappresentazione dell informazioni nella CPU Linguaggio Assembly è il linguaggio delle istruzioni che possono

Dettagli

Introduzione alla logica proposizionale

Introduzione alla logica proposizionale Introduzione alla logica proposizionale Mauro Bianco Questa frase è falsa Contents 1 Proposizioni 1 2 Altri operatori 4 Nota : Le parti delimitate da *** sono da considerarsi facoltative. 1 Proposizioni

Dettagli

Logica booleana. Bogdan Maris ( )

Logica booleana. Bogdan Maris ( ) Logica booleana 1 Algebra di Boole Opera con i soli valori di verità 0 o 1 (variabili booleane o logiche) La struttura algebrica studiata dall'algebra booleana è finalizzata all'elaborazione di espressioni

Dettagli

Logica proposizionale classica. Studia il comportamento dei connettivi proposizionali quali ( And ) e ( Or )

Logica proposizionale classica. Studia il comportamento dei connettivi proposizionali quali ( And ) e ( Or ) Logica proposizionale classica Studia il comportamento dei connettivi proposizionali quali ( And ) e ( Or ) Parte da una famiglia di enunciati atomici di cui non analizziamo la struttura interna, che rappresentiamo

Dettagli

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ v x y z $ pila tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento

Dettagli

DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI. Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini

DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI. Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini DIMOSTRAZIONI DI EQUIVALENZE, SUI CONNETTIVI E SULL'AMBIGUITA' DELLA SINTASSI Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini SULLE LEGGI DEL CALCOLO PROPOSIZIONALE Abbiamo visto le

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 12 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 20 Aprile 2009 Riassunto: definire

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

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 6 Logica del Primo Ordine Motivazioni Sintassi di Termini e Formule Formule aperte e chiuse A. Corradini e F.Levi Dip.to Informatica Logica per la Programmazione a.a.

Dettagli

Iniziare a programmare in C++

Iniziare a programmare in C++ Iniziare a programmare in C++ Docente: Ing. Edoardo Fusella Dipartimento di Ingegneria Elettrica e Tecnologie dell Informazione Via Claudio 21, 4 piano laboratorio SECLAB Università degli Studi di Napoli

Dettagli

Valutazione di espressioni

Valutazione di espressioni Valutazione di espressioni Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Blocco Blocco è un insieme di istruzioni consecutive, con un

Dettagli

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio Messaggio Insieme di sequenze di simboli, le parole,

Dettagli

marina/did/mdis03/ marina/did/mdis03/ marina/did/mdis03/

marina/did/mdis03/   marina/did/mdis03/   marina/did/mdis03/ Matematica Discreta (elementi) E-O CdL Informatica Elementi di logica formale 8 ottobre 2003 Marina Cazzola (marina@matapp.unimib.it) Dipartimento di Matematica e Applicazioni Università di Milano Bicocca

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Linguaggi di programmazione Automi e Linguaggi Formali A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Struttura di un compilatore e fasi principali 01 Ottobre 2014 Linguaggio di programmazione e

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

4. I moduli in Access 2000/2003

4. I moduli in Access 2000/2003 LIBRERIA WEB 4. I moduli in Access 2000/2003 Il modulo è uno degli oggetti del database di Access e rappresenta un insieme di dichiarazioni e routine scritte con il linguaggio Visual Basic, memorizzate

Dettagli

Fondamenti teorici e programmazione

Fondamenti teorici e programmazione Fondamenti teorici e programmazione FTP(A) - modb Lezione 8 F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1 Ragionamento formale Comprendere le basi del ragionamento

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

Fortran in pillole : prima parte

Fortran in pillole : prima parte Fortran in pillole : prima parte Annamaria Mazzia Dipartimento di Metodi e Modelli Matematici per le Scienze Applicate Corso di Metodi Numerici per l Ingegneria Introduzione al Fortran Un libro consigliato

Dettagli

Java e i Tipi di dati primitivi. Parte 3

Java e i Tipi di dati primitivi. Parte 3 Java e i Tipi di dati primitivi Parte 3 La nozione di tipo di dato Il tipo del dato consente di esprimere la natura del dato Indica il modo con cui verrà interpretata la sequenza di bit che rappresenta

Dettagli

API. Ripasso di logica. Davide Martinenghi. Politecnico di Milano. API Davide Martinenghi (1/30)

API. Ripasso di logica. Davide Martinenghi. Politecnico di Milano. API Davide Martinenghi (1/30) API Ripasso di logica Davide Martinenghi Politecnico di Milano API Davide Martinenghi (1/30) Logica proposizionale - sintassi L è un linguaggio della logica proposizionale L alfabeto di L è composto da

Dettagli

Ragionamento Automatico Richiami di tableaux proposizionali

Ragionamento Automatico Richiami di tableaux proposizionali Richiami di logica e deduzione proposizionale Ragionamento Automatico Richiami di tableaux proposizionali (L. Carlucci Aiello & F. Pirri: SLL, Cap. 5) La logica proposizionale I tableau proposizionali

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 2 I tipi di dato Prerequisiti Concetto di relazione e funzione Concetto di insieme numerico Operatori aritmetici Operatori relazionali 2 Introduzione Abbiamo visto che un

Dettagli

Programmazione Funzionale

Programmazione Funzionale Programmazione Funzionale Linguaggi funzionali http://cialdea.dia.uniroma3.it/teaching/pf/ di alto livello: un programma è una funzione. di tipo dichiarativo: il programmatore specifica che cosa calcola

Dettagli

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Descrizione delle operazioni di calcolo. Espressioni costanti semplici Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette

Dettagli

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina

Dettagli

Primi passi con JFlex

Primi passi con JFlex Primi passi con JFlex Luca Chiodini Abstract Ci proponiamo di muovere i primi passi nel mondo dell analisi lessicale e della produzione automatica di un analizzatore lessicale. Verrà mostrato l uso di

Dettagli

Intelligenza Artificiale. Breve introduzione alla logica classica (Parte 1)

Intelligenza Artificiale. Breve introduzione alla logica classica (Parte 1) Intelligenza Artificiale Breve introduzione alla logica classica (Parte ) Marco Piastra Logica formale (Parte ) - Introduzione alla logica formale Parte. Preambolo: algebra di Boole, proposizioni, conseguenza

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

Logica per la Programmazione

Logica per la Programmazione Logica per la Programmazione Lezione 4 Dimostrazione di Implicazioni Tautologiche Principio di sostituzione per l implicazione Occorrenze positive e negative Altre tecniche di dimostrazione Forme Normali

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 5 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 10 Marzo 2008 Struttura di un compilatore

Dettagli

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06 1 ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA # Objective Caml version 3.06 Il cancelletto è il prompt di Caml. # 3*8;; - : int = 24 LETTURA: viene

Dettagli