Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: "Algoritmo = Logica + Controllo"



Documenti analoghi
Conseguenza logica ed insoddisfacibilità. Semantica Dichiarativa. FOL e clausole (generali) FOL e Clausole di Horn. Minimo modello di Herbrand

Prolog Prodromi. Sistemi distribuiti LS 2003/2004 Prof. Andrea Omicini

Programmazione logica e PROLOG. Esercitazione 1. Sommario. Programmazione logica. Applicazioni della Programmazione Logica

Programmazione logica e PROLOG. Esercitazione 1. AI - Carlucci Aiello & Nardi, 2007 Esercitazione 1 0

Derivazioni SLD. Passo di derivazione SLD. Derivazione SLD. Notazione

Logica: materiale didattico

C1: L C1 C2: L C2 C: C1 C2

Maiuscole e minuscole

PROLOG: PROgramming in LOGic Linguaggio usato per risolvere problemi che coinvolgono oggetti e relazioni tra oggetti.

Logica proposizionale

Corso di Linguaggi di Programmazione

Prolog: materiale didattico

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

LINGUAGGI DI ALTO LIVELLO

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Esempio compito 11 Sett 2008

Introduzione alla Programmazione Logica ed al linguaggio PROLOG

Introduzione alla Programmazione Logica ed al linguaggio PROLOG

Corso di Informatica

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

UNIFICAZIONE E PATTERN MATCHING

View-based query answering

Logica per la Programmazione

Linguaggi di Programmazione Prolog (1) Prolog. Processo di dimostrazione (limiti) Linguaggio: Utile per:

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

si vuole verificare: P5: pioverà

Introduzione alla logica

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Tipi di dato primitivi

CONSTRAINT PROGRAMMING & PLANNING

Logica per la Programmazione

FONDAMENTI DI INTELLIGENZA ARTIFICIALE PRIMA PARTE (6 CFU) 9 Dicembre 2010 Tempo a disposizione 2h Risultato 32/32 punti

Ragionamento formalei. Ragionamento formale

Rappresentazione della Conoscenza. Lezione 2. Rappresentazione della Conoscenza Daniele Nardi, 2008Lezione 2 0

TABELLA OPERATORI ARITMETICI

Logica per la Programmazione

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Programmazione Procedurale in Linguaggio C++

Interpreti, compilatori e semantica operazionale

LOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI. Corso di Logica per la Programmazione A.A Andrea Corradini

In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile

Ragionamento Automatico Richiami di calcolo dei predicati

Linguaggi di programmazione. Paradigmi di programmazione

(X (, Y, Y Z ) Z " Z Z

1 IL LINGUAGGIO MATEMATICO

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione

RELAZIONI TRA SINTASSI E SEMANTICA

Trasformazione in clausole

Il linguaggio JavaScript

Fondamenti teorici e programmazione

Logica per la Programmazione

Fondamenti di Informatica 2

Ragionamenti e metodi di dimostrazione. Liceo Scientifico Statale S. Cannizzaro Prof.re E. Modica

Struttura dei programmi C

Logica booleana. Bogdan Maris ( )

Semantiche dei linguaggi di programmazione

Lezione 1 - Insiemi. Laboratorio di Programmazione M1 UD2 Matematica e Logica per la Programmazione

Algebra di Boole Algebra di Boole

Linguaggio C - sezione dichiarativa: costanti e variabili

Universita' degli Studi di Udine UNA PROPOSTA PER L'INTRODUZIONE DI CAPACITA' DI META-RAPPRESENTAZIONE IN UN LINGUAGGIO DI PROGRAMMAZIONE LOGICA

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Corso di Informatica

Prolog. Processo di dimostrazione (limiti) Dott. Fabio Massimo Zanzotto. Linguaggio: Utile per:

La codifica dell informazione

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

CALCOLO PROPOSIZIONALE. Corso di Logica per la Programmazione Andrea Corradini

LOGICA DEL PRIMO ORDINE: PROOF SYSTEM. Corso di Logica per la Programmazione A.A. 2013/14 Andrea Corradini

Esercitazioni per il corso di Logica Matematica

Cenni di logica matematica e di teoria degli insiemi. CORSI INTRODUTTIVI Dipartimento di Ingegneria di Perugia a.a. 2016/2017 Paola Rubbioni

CALCOLO PROPOSIZIONALE

Informatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza

T1: Logica, discorso e conoscenza. Logica classica

Cenni di logica matematica e di teoria degli insiemi Paola Rubbioni

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

Proposizioni e verità

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

Raffinamenti della risoluzione

La Programmazione. Cos è la programmazione? Concetti preliminari

Cenni di logica matematica e di teoria degli insiemi Paola Rubbioni

Classificazione dei termini

Introduzione alla Matematica per le Scienze Sociali - parte II

Introduzione alla logica matematica

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

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

Rappresentazione della conoscenza. Lezione 5. Rappresentazione della Conoscenza Daniele Nardi, 2008Lezione 5 0

Logica proposizionale

Indice. NUMERI REALI Mauro Saita Versione provvisoria. Ottobre 2017.

Introduzione alla logica matematica. Logica matematica. Paolo Bison

QUANTIFICATORI FUNZIONALI: MINIMO, MASSIMO, SOMMATORIA, CARDINALITA. Corso di Logica per la Programmazione A.A. 2013/14

BOLLETTINO UNIONE MATEMATICA ITALIANA

Transcript:

Programmazione Logica Bob Kowalski: "Algoritmo = Logica + Controllo" nella programmazione tradizionale: il programmatore deve occuparsi di entrambi gli aspetti nella programmazione dichiarativa: il programmatore si occupa solo della struttura logica del problema, la parte di controllo e' demandata all'interprete. Programmazione Dichiarativa Il compito del programmatore e' solo quello di specificare il problema da risolvere: cosa si vuole ottenere (dichiarativo) e non anche come lo si vuole ottenere (operazionale) PROLOG SICStus PROLOG Il primo ed il più diffuso linguaggio reale basato sulla programmazione logica è il PROLOG (Programming in logic). Il compilatore PROLOG che utilizzeremo per le esercitazioni è stato sviluppato da un gruppo di ricercatori dello Swedish Institute of Computer Science Il primo interprete PROLOG è stato ideato e sviluppato da Colmerauer e Russel nel 1972. ultima release: 3.9.1 del 28 Giugno 2002 maggiori informazioni (e download di prova) http://www.sics.se/sicstus/

Dalla Deduzione Automatica alla Programmazione Logica Le origini della programmazione logica si trovano nei lavori sulla dimostrazione automatica di teoremi. La programmazione logica è un sottoinsieme della logica del primo ordine (FOL: first order logic), e si compone delle cosidette Clausole di Horn (dal nome del loro inventore). Programmazione logica: sintassi L' alfabeto è composto da: Var un insieme di simboli di variabili: x, y, z Costr un insieme di simboli di costruttori, ciascuno con una determinata arietà (numero di argomenti), che distinguamo in Const le costanti, i costruttori di arietà 0: a,b,c, Fun le funzioni, i costruttori di arietà > 0: f, g, h, Pred un insieme di simboli di predicato, ciascuno con una determinata arietà: p,q,r, Spec due simboli speciali: e and corrispondenti alla implicazione a sinistra e alla congiunzione L' insieme Term dei termini è definito da sintassi - 2 Term ::= Var Const Fun(Term,,Term) sintassi - 3 L' insieme Atom degli atomi (A, B, H, ) è definito da Atom ::= Pred(Term,, Term) es. x, a, f(x,a), f(g(x),y), g(f(a,a)) es. p(a,x), q(f(g(a),y)), p(a,f(x,a)) termine ground: se non contiene variabili Universo di Herbrand: l'insieme di tutti i termini ground (su di un prefissato alfabeto) atomo ground: se non contiene variabili Base di Herbrand: l'insieme di tutti gli atomi ground (su di un prefissato alfabeto)

L' insieme delle Clausole di Horn è definito da sintassi - 4 HClause ::= Atom Atom and and Atom Atom and and Atom sintassi - 5 Un Programma Logico è un insieme di clausole definite volo_diretto(venezia, londra) volo_diretto(roma, atene) volo_diretto(roma, venezia) volo(x,y) volo_diretto(x,z) and volo(z,y) H B Head (testa) Body (corpo) H (se Body è True) volo(x,y) volo_diretto(x,y) Un goal è una clausola con testa vuota (False) volo(roma, londra) volo(roma, y) Sintassi PROLOG Semantica dichiarativa logica PROLOG :- (nelle clausole definite)?- (nei goal) Un programma logico viene interpretato come una teoria della FOL, che definisce il significato dei predicati che compaiono nelle teste delle clausole definite. and, (virgola). (punto) alla fine di ogni clausola Computare consiste nel provare (deduzione logica) che la proprietà espressa dal corpo del goal è conseguenza logica del programma.

esempio: voli esempio: somma x,y. volo(x,y) volo_diretto(x,y) x,y. volo(x,y) volo_diretto(x,z) and volo(z,y) volo(venezia,londra) volo_diretto(venezia,londra) volo(roma,londra) volo_diretto(roma,venezia) and volo(venezia,londra) y.?- volo(roma,y) z.?- volo(z,roma) somma(x,y,z) := z è la somma di x ed y sum(0,y,y) sum(s(x),y,s(z)) sum(x,y,z)?- somma(s(s(0)), s(0), y)?- somma(x, s(0), s(s(0)))?- somma(x, y, s(s(0))) esempio: numero misterioso Esiste un numero (AB) di 2 cifre tale che il suo quadrato e' di 4 cifre (XYZW) e è uguale alla somma del numero che corrisponde alle prime due cifre del quadrato più quello che corrisponde alle ultime due (AB = XY + ZW) N.B. supponiamo di aver definito tutte le operazioni aritmetiche necessarie numero di 2 cifre esempio: numero misterioso due_c(n) maggiore(n,9) and maggiore(100,n) il suo quadrato e' di 4 cifre quattro_c(m) maggiore(n,999) and maggiore(10000,n) quattro_sq(n) square(n,m) and quattro_c(m) è uguale alla somma.... prime due cifre prime(m,x) div(m,100,x). ultime due cifre ultime(m,x) mod(m,100,x) somma_cifre(m,z) somma(prime(m,x), ultime(m,x), Z) somma_cifre_sq(n) square(n,m) and somma_cifre(m,n) soluzione(n) due_c(n) and quattro_sq(n) and somma_cifre_sq(n)

Conseguenza logica ed insoddisfacibilità FOL e clausole (generali) Proposizione Una formula F è conseguenza logica di una teoria T se e solo se T not(f) è insoddisfacibile (non ha modelli). Una clausola(generale) è della forma A1 or or Am B1 and and Bn Teorema Una qualsiasi teoria FOL T si può riscrivere in un in sieme di clausole generali T' tali che T e T' sono equivalenti dal punto di vista della soddisfacibilità. FOL e Clausole di Horn Esistono teorie che non si possono formulare con clausole di Horn insetto(x) or uccello(x) or pipistrello(x) vola(x) ma è possibile definire un metodo di prova per le clausole di Horn molto più efficiente di quanto sia possibile fare per la FOL in generale.