Logica in informatica
|
|
- Mario Colonna
- 6 anni fa
- Visualizzazioni
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 Osservazione: non rappresentiamo la doppia implicazione type form = True False Prop of string Not of form And of form * form Or of form
DettagliLogica: 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
DettagliSintassi. 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
DettagliYet 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
DettagliIntroduzione 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
DettagliLOGICA 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:
DettagliPROGRAMMAZIONE 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
DettagliAnalizzatore 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,
DettagliLogica 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.
DettagliIntroduzione 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
DettagliLINGUAGGI 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
DettagliFondamenti 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
DettagliLogica: 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
Dettaglisi 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
DettagliINTRODUZIONE 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
DettagliGrammatiche 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,
DettagliLinguaggi 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
DettagliInterpreti, 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
DettagliEspressioni 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:
DettagliLogica 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,
DettagliLogica 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
DettagliLinguaggi 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
DettagliLogica 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
DettagliLogica 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
DettagliBREVE 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
DettagliEsercitazioni 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
DettagliLogica 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,
DettagliCorso: 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
DettagliLINGUAGGI 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
DettagliLINGUAGGI 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
DettagliFondamenti 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
DettagliLogica 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.
DettagliLinea 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
DettagliCALCOLO 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
DettagliCALCOLO 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
DettagliProgetto 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
DettagliAnalizzatore 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
DettagliAnalizzatori 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
Dettagli4 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.
DettagliCALCOLO 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
DettagliLinguaggi 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
DettagliLinguaggi 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
DettagliProgramma 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
DettagliRagionamento 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
DettagliPOLITECNICO 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
DettagliLogica 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
DettagliLa 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
DettagliLe 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)
DettagliScopo 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
DettagliINTRODUZIONE 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:
DettagliCorso 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
DettagliSmallC: 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
DettagliRagionamento 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
DettagliAnalisi 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
DettagliIntroduzione 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
DettagliTipi 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
DettagliLezione 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,
DettagliPOLITECNICO 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
DettagliRiconoscitori 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
DettagliDIMOSTRAZIONI 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 ( ),
DettagliMS 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
DettagliPattern 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.
DettagliEsempio. 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
DettagliIntroduzione 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
DettagliLogica 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
DettagliLogica 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
DettagliANALISI 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
DettagliDIMOSTRAZIONI 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
DettagliCorso 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
DettagliCosa 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
DettagliLogica 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.
DettagliIniziare 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
DettagliValutazione 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
DettagliSommario 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,
Dettaglimarina/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
DettagliAutomi 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
DettagliLinguaggi, 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
Dettagli4. 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
DettagliFondamenti 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
DettagliContenuti. 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
DettagliFortran 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
DettagliJava 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
DettagliAPI. 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
DettagliRagionamento 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
DettagliIntroduzione 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
DettagliCorso 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
DettagliProgrammazione 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
DettagliDescrizione 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
DettagliProgrammazione. 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
DettagliPrimi 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
DettagliIntelligenza 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
Dettagli1 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
DettagliLogica 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
DettagliCorso 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
DettagliML è 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