Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio PROLOG.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

“ LAUREE SCIENTIFICHE ”
Calcolo Relazionale.
LINGUAGGIO DI PROGRAMMAZIONE C
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
Sommario Nelle lezioni precedenti abbiamo introdotto tutti gli elementi che formano un particolare tipo di linguaggio logico, denominato linguaggio predicativo.
Linguaggi di programmazione
Intelligenza Artificiale
Agenti logici: la logica del prim’ordine
Linguaggi di Programmazione (AA 2002/2003)
Corso di Laurea in Informatica Gabriella Pasi e Carla Simone
Il ragionamento classico
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 7 Prof. M.T. PAZIENZA a.a
Maria Teresa PAZIENZA a.a
Intelligenza Artificiale 1 Gestione della conoscenza lezione 8
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Programmazione)
LISP.
Qualche esempio di tableaux
Semantica per formule di un linguaggio proposizionale p.9 della dispensa.
Unità Didattica 2 I Linguaggi di Programmazione
Intelligenza Artificiale
Programmazione logica
Intelligenza Artificiale
Intelligenza Artificiale - AA 2001/2002 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Intelligenza Artificiale
Intelligenza Artificiale - AA 2002/2003 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Introduzione ~ 1850 Boole - De Morgan – Schroeder ALGEBRA BOOLEANA
4 Tipi di dati & variabili
Prof. Marina BARTOLINI . “Liceo Maccari” Frosinone
Dalla logica naturale alla logica formale
Logica Matematica Seconda lezione.
Riassunto delle puntate precedenti:
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
INFORMATICA MATTEO CRISTANI. INDICE CICLO DELLE LEZIONI LEZ. 1 INTRODUZIONE AL CORSO LEZ. 2 I CALCOLATORI ELETTRONICI LEZ. 3 ELEMENTI DI TEORIA DELL INFORMAZIONE.
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Il primo passo: I basilari del Prolog
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
ECDL Patente europea del computer
Interrogare il database
TURBOPASCAL …. ripassiamo - prof. V. Riboldi -.
Lezione 3 Struttura lessicale del linguaggio
La logica è lo studio del ragionamento.
Introduzione a Javascript
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
La logica Dare un significato preciso alle affermazioni matematiche
INTRODUZIONE ALLA GEOMETRIA EUCLIDEA
Carluccio Antonio Carluccio Alessandra Caricola Giovanni Vizzino Anna Università degli Studi di Bari.
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio Prolog - alberi SLD.
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Copyright © Istituto Italiano Edizioni Atlas
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Approfondimenti SQL.
ELEMENTI DI LOGICA del Prof. Giovanni Ianne
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini III. La logica delle proposizioni.
Elementi di Logica Teoria degli insiemi Proff. A. Albanese – E. Mangino Dipartimento di Matematica e Fisica “E. De Giorgi” - Università del Salento Precorso.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Le proposizioni DEFINIZIONE. La logica è un ramo della matematica che studia le regole per effettuare ragionamenti rigorosi e corretti. DEFINIZIONE. Una.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Logica Lezione 8, DISTRIBUIRE COMPITO 1.
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
Logica Lez. 5, Varzi su affermazione del conseguente Malgrado alcuni esempi di questa forma siano argomentazioni valide, altri non lo sono.
INSIEMI E LOGICA PARTE QUARTA.
Transcript della presentazione:

Linguaggi di Programmazione (AA 2005/2006) Corso di Laurea in Informatica Introduzione al linguaggio PROLOG

Programmazione logica La programmazione logica nasce all’inizio degli anni settanta da studi sulla deduzione automatica: il Prolog costituisce il suo primo prodotto. La programmazione logica NON è soltanto rappresentata dal Prolog: essa costituisce infatti un settore molto ricco che cerca di utilizzare la logica matematica come base dei linguaggi di programmazione. Prolog è l’esempio più noto. Obiettivi e ragioni di successo: - semplicità del formalismo - linguaggio ad alto livello - semantica chiara

Logica matematica Logica matematica: formalizzazione del ragionamento Con l'avvento dell'informatica: Logica Matematica  Dimostrazione automatica di teoremi interpretazione procedurale di formule logica come linguaggio di programmazione Programmazione logica la logica matematica Utilizzata in varie applicazioni: dalle prove di correttezza dei programmi alle specifiche, da linguaggio per la rappresentazione della conoscenza in IA a formalismo per DB.

Stile dichiarativo della programmazione logica orientato ad utenti non programmatori grande potere espressivo programma come insieme di formule goalcomputazione come costruzione di una dimostrazione di una affermazione (goal) BASE FORMALE unificazione e risoluzione BASE FORMALE: calcolo dei predicati del primo ordine ma con limitazione nel tipo di formule (clausole di Horn) e utilizzo di particolari tecniche per la dimostrazione di teoremi (unificazione e risoluzione)

PROLOG Acronimo per PROgramming in LOGic. Nato nel Basato su una restrizione della logica del primo ordine Stile dichiarativo Prolog è usato per determinare se una certa affermazione è vera o no e, se è vera, quali variabili hanno vincolato la risposta

Prolog – Linguaggio dichiarativo Non contiene istruzioni Contiene solo fatti e regole (clausole) – I fatti Asserzioni vere nel contesto che stiamo descrivendo – Regole Ci danno gli strumenti per dedurre nuovi fatti da quelli esistenti Un programma Prolog ci da informazioni su un sistema ed è normalmente chiamato base di conoscenza Un programma Prolog non si esegue ma si interroga – Ci si chiede: questi fatti sono veri? – Il Programma risponderà solo SI o NO alla domanda.

Termini Le espressioni del Prolog sono chiamate TERMINI. Esistono diversi tipi di termini: – Atomi – Variabili – Numeri – Una composizione di termini  termine composto (simbolo di funtore + uno o piu’ argomenti)

ATOMI un atomo è: – Una sequenza di caratteri alfanumerici, che inizia con un carattere minuscolo (può contenere il carattere “_” underscore); – Qualsiasi cosa racchiusa tra apici (‘ ‘);

Le variabili Una variabile è una sequenza alfanumerica che inizia con un carattere maiuscolo o con il simbolo _ (underscore). Le variabili composte solo dal simbolo _ sono chiamate indifferenza o anonime. Le variabili vengono istanziate (legate a un valore) con il procedere del programma (nella dimostrazione del teorema)

Composizione di termini Una composizione di termini (formula atomica) consiste in: un funtore (simbolo di funzione o di predicato definito come atomo); Una sequenza di termini racchiusi tra parentesi tonde e separati da virgole. Questi sono chiamati argomenti del predicato (non ci deve mai essere uno spazio tra il funtore e la parentesi di sinistra).

VALIDI foo hello Hello sam Sam hello_Sam ‘hello’’Hello’ ’Hello Sam’ _ a1 ’1a’ X _hello _234 hello(X) f(a) f(a,b,c) f(hello,Sam) f( a, b, c ) p(f(a),b) hello(1,hello(x,X,hello(sam))) t(a,t(b,t(c,t(d,[])))) NON VALIDI hello Sam Hello Sam hello-sam 1a f(a, b f(a, f a,b) f (a, b) X(a,b) 1(a,b) Esempi

Prolog – I Fatti Un fatto consiste in: – Un nome di predicato, ad esempio genitore, uomo e animale. Deve iniziare con una lettera minuscola. – Zero o più argomenti come maria, wirth o cane. Da notare che i fatti (e le regole e le domande) devono essere chiusi da un punto “.”.

FATTI - ESEMPI libro(kowalski, prolog). libro(yoshimoto, kitchen). donna(yoshimoto). uomo(kowalski). animale(cane). animale(trota). ha_le_squame(trota).

Le regole In prolog si usano le regole quando si vuole esprimere che un certo fatto dipende da un insieme di altri fatti. Per esprimere in linguaggio naturale questa dipendenza usiamo la parola “se” – Uso l’ombrello se piove – Gino compra il vino se è meno caro della birra.

Regole per le definizioni Le regole sono anche usate per esprimere definizioni: – X è un pesce se: X è un animale X ha le squame oppure – X è sorella di Y se: X è di sesso femminile X e Y hanno gli stessi genitori

Le regole pesce(X) :- animale(X), ha_le_squame(X). – L’ operatore Prolog ”:-'' esprime il “se” – implicazione - – “,” equivale a “e” (AND). La regola dice che X è un pesce se X è un animale e ha le squame Gli argomenti che iniziano con una lettera maiuscola sono variabili

Regole In Prolog una regola consiste di una testa e di un corpo. Testa e corpo sono collegati dal simbolo “:-” La frase: Gigi ama chiunque ami il vino In prolog diventa: ama(gigi,X):-ama(X,vino). Gigi ama le donne a cui piace il vino In prolog sarà: ama(gigi,X):-donna(X),ama(X,vino).

Le relazioni definite da più regole Una relazione (ad esempio genitore) può essere definita da più regole aventi lo stesso predicato come conclusione. Esempio: – genitore(X,Y) :- padre(X,Y). – genitore(X,Y) :- madre(X,Y). In questo caso esse vengono considerate come in alternativa tra loro, cioè implicitamente connesse dall’operatore logico di disgiunzione (“o”).

Regole – La ricorsione Una relazione può anche essere definita ricorsivamente. In questo caso la definizione richiede almeno due proposizioni: una è quella ricorsiva che corrisponde al caso generale, l’altra esprime il caso particolare più semplice. – antenato(X,Y) :- genitore(X,Y). – antenato(X,Y) :- genitore(Z,Y),antenato(X,Z).

Operatori logici L’operatore logico AND inserito in una regola viene espresso mediante ”,” L’operatore logico OR viene invece espresso mediante “;”

Sintassi Ricordatevi che : ➔ ogni fatto o regola o funzione DEVE terminare con un punto “.” ➔ ogni variabile DEVE iniziare con una maiuscola ➔ I commenti si inseriscono dopo un “%” (commento di linea) o tra “/*” e “*/” % Questa è una linea di commento f(a,b). % Solo questa parte di riga è un commento % Ecco un commento % su più righe. % Anche questo è un commento. /* Questo commento può essere scritto su più righe */

Le interrogazioni (query o goal) Una volta che le regole ed i fatti sono scritte e caricate nell’interprete, eseguire un programma Prolog significa interrogare l’interprete, per esempio ?- libro(kowalski,prolog). Il prolog risponde “SI” (anzi “YES”). Interrogare il programma equivale a richiedere la dimostrazione di un teorema.

SINTASSI SINTASSI: un programma Prolog e’ costituito da un insieme di clausole della forma FATTO o ASSERZIONE (cl1) A. FATTO o ASSERZIONE REGOLA (cl2) A :- B1, B2,…,Bn. REGOLA GOAL G1, G2,…,Gn. GOAL In cui A, Bi, Gi sono formule atomiche A : testa della clausola B1,B2,…,Bn : corpo della clausola Il simbolo “,” indica la congiunzione; il simbolo “:-” l’implicazione logica in cui A e’ il conseguente e B1,B2,…,Bn l’antecedente Prolog: programmi

Fatti Fatti (DB) padre (giovanni, maria). padre (carlo, giulio). madre(maria, ettore). Interrogazioni Interrogazioni (domande) anche dette “goal” ?-padre (giovanni, maria). risposta: Yes (cons. logica del DB) ?-padre (giovanni, carlo). risposta: No (fallimento nella dimostrazione) Programma Prolog: esempio

Una regola Una regola: due individui sono colleghi se lavorano per la stessa ditta Programma Prolog: esempio

Le variabili delle interrogazioni Le interrogazioni possono contenere variabili – Le variabili sono istanziate quando il Prolog prova a rispondere alla domanda – Tutte le variabili istanziate vengono mostrate nella risposta. Esempi: ?- libro (kowalski, LINGUAGGIO). LINGUAGGIO = prolog ?- libro (AUTORE, prolog). AUTORE = kowalski Prompt dell’interprete Prolog

Domande esistenziali Domande esistenziali (con variabili logiche) ?-padre(X, maria). risposta: X=giovanni ?-padre(X, Y). risposte: X=giovanni, Y= maria X=carlo, Y= giulio Query Prolog: esempi

INTERROGAZIONI ESTESE Possiamo scoprire chi ha scritto cosa facendo la seguente query: ?- libro(Qualcuno, Qualcosa). Qualcuno = kowalski Qualcosa = prolog Qualcuno = yoshimoto Qualcosa = kitchen

Le liste in Prolog Si definisce una lista in Prolog racchiudendo gli elementi della lista tra parentesi quadre “[]” e separandoli da virgole. Gli elementi di una lista in prolog possono essere termini qualsiasi o liste [] indica la lista vuota.

Le liste: testa e coda Ogni lista non vuota può essere divisa in due parti: una testa ed una coda. La testa è il primo elemento della lista La coda rappresenta tutto il resto ed è sempre una lista [a,b,c] : “a” è la testa e [b,c] la coda [a,b] : “a” è la testa e [b] la coda [a] : “a” è la testa e [] la coda

L’operatore “|” Prolog possiede uno speciale operatore usato per distinguere tra testa e coda di una lista. L’operatore “|” -? [X|Y] = [mia, vincent, jules, yolanda]. X = mia Y = [vincent,jules,yolanda] yes

[] La lista vuota [] in prolog viene gestita come una lista speciale. ?- [X|Y] = []. no

liste ?- [X1,X2,X3 | Tail] = [a,b,c,d,e] X1 = a X2 = b X3 = c Tail = [d,e] ?- [X1,_,X3 | _ ] = [a,b,c,d] X1 = a X3 = c

L’interprete Prolog Si accede sempre tramite l’interfaccia di interrogazione (prompt: “?-”) La base di conoscenza è nascosta ed è accessibile solo tramite opportuni comandi o tramite ambiente di programmazione) Per caricare dati nella base di conoscenza del Prolog si deve fare una CONSULT (consultazione di un testo da valutare)