PROLOG. Programmation en Logique. Michał Bereta



Podobne dokumenty
PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

Programowanie w logice

Języki programowania deklaratywnego

PODSTAWY SZTUCZNEJ INTELIGENCJI

Języki programowania deklaratywnego

Paradygmaty programowania

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.

Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

Programowanie deklaratywne

Podstawy Sztucznej Inteligencji (PSZT)

Logika stosowana. Ćwiczenia Programowanie w logice i PROLOG. Marcin Szczuka. Instytut Informatyki, Uniwersytet Warszawski

Dedukcyjne bazy danych i rekursja

Wprowadzenie do Prologa

Dedukcyjne bazy danych

Wykład 0 Informacje Podstawowe

Programowanie w logice

Programowanie deklaratywne

Języki i paradygmaty programowania. I. Wprowadzenie

Podstawy języka PROLOG

Adam Meissner.

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

RACHUNEK ZDAŃ 7. Dla każdej tautologii w formie implikacji, której poprzednik również jest tautologią, następnik także jest tautologią.

Dowody założeniowe w KRZ

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Dedukcyjne bazy danych i rekursja

1. Wstęp do logiki. Matematyka jest nauką dedukcyjną. Nowe pojęcia definiujemy za pomocą pojęć pierwotnych lub pojęć uprzednio wprowadzonych.

Programowanie deklaratywne

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

LOGIKA I TEORIA ZBIORÓW

Alfred N. Whitehead

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ

Dariusz Banasiak. Instytut Informatyki, Automatyki i Robotyki. Politechniki Wrocławskiej

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Podstawy Sztucznej Inteligencji (PSZT)

Metoda Tablic Semantycznych

Drzewa Semantyczne w KRZ

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Tautologia (wyrażenie uniwersalnie prawdziwe - prawo logiczne)

Składnia rachunku predykatów pierwszego rzędu

Rachunek zdań i predykatów

Dana jest baza: kobieta(katarzyna). kobieta(anna). kobieta(maria). kobieta(marianna). kobieta(marta). Zdefiniujemy predykat kobiety/0 następująco:

Programowanie w logice Wykład z baz danych dla

Reprezentacja wiedzy i wnioskowanie

Reprezentacja wiedzy: logika predykatów pierwszego rzędu

Sztuczna inteligencja i logika. Podsumowanie przedsięwzięcia naukowego Kisielewicz Andrzej WNT 20011

Adam Meissner SZTUCZNA INTELIGENCJA

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

Logika predykatów pierwszego rzędu PROLOG. Zarządzanie wiedzą. Wykład Reprezentacja wiedzy logika predykatów. Joanna Kołodziejczyk.

Programowanie w logice Prolog 2

Notacja. - operator implikacji, - operator koniunkcji v operator alternatywy - operator równoważności ~ operator negacji Duża litera (np.

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Zarządzanie wiedzą. Reprezentacja wiedzy: logika predykatów pierwszego rzędu

Prezentacja do pobranie:

RACHUNEK PREDYKATÓW 7

Programowanie logiczne a negacja

Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka)

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

I. Podstawowe pojęcia i oznaczenia logiczne i mnogościowe. Elementy teorii liczb rzeczywistych.

Laboratorium przedmiotu Paradygmaty Programowania

Programowanie w języku C++ Podstawowe paradygmaty programowania

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Systemy ekspertowe. Krzysztof Patan

Zasady krytycznego myślenia (1)

Elementy logiki matematycznej

Programowanie deklaratywne i logika obliczeniowa

Adam Meissner STUCZNA INTELIGENCJA

Formalna weryfikacja oprogramowania w lotnictwie

Programowanie w logice

Konsekwencja logiczna

PODSTAWY BAZ DANYCH. 19. Perspektywy baz danych. 2009/2010 Notatki do wykładu "Podstawy baz danych"

Wprowadzenie do Sztucznej Inteligencji

Elementy kognitywistyki III: Modele i architektury poznawcze

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Statyczne i dynamiczne predykaty

Metody dowodzenia twierdzeń i automatyzacja rozumowań Systemy aksjomatyczne I

Semantyka rachunku predykatów pierwszego rzędu. Dziedzina interpretacji. Stałe, zmienne, funkcje. Logika obliczeniowa.

Języki i metodyka programowania

Interpretacja Niech U będzie zbiorem formuł takim, że zbiór {p 1,..., p k } jest zbiorem wszystkich symboli predykatywnych, {f 1,..., f l } jest zbior

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.1 Elementy języka Prolog: fakty i zapytania. Przemysław Kobylański

Semantyka rachunku predykatów

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

JEZYKOZNAWSTWO. I NAUKI O INFORMACJI, ROK I Logika Matematyczna: egzamin pisemny 11 czerwca Imię i Nazwisko:... FIGLARNE POZNANIANKI

Logika. Michał Lipnicki. 15 stycznia Zakład Logiki Stosowanej UAM. Michał Lipnicki () Logika 15 stycznia / 37

Prolog - Programming In Logic

Uwagi wprowadzajace do reguł wnioskowania w systemie tabel analitycznych logiki pierwszego rzędu

Bazy dedukcyjne. 1. Filozofia nowego sposobu projektowania baz danych. 2. Wady klasycznych systemów bazodanowych

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

O badaniach nad SZTUCZNĄ INTELIGENCJĄ

Internet Semantyczny i Logika I

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie w logice Prolog 1

Projekt 4: Programowanie w logice

III rok kognitywistyki UAM,

Logika Matematyczna (10)

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Ziemia obraca się wokół Księżyca, bo posiadając odpowiednią wiedzę można stwierdzić, czy są prawdziwe, czy fałszywe. Zdaniami nie są wypowiedzi:

Matematyka ETId Elementy logiki

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Transkrypt:

PROLOG Programmation en Logique Michał Bereta

Programmation en Logique Stworzony w 1971 roku przez Alaina Colmeraurera i Phillipe'a Roussela na Uniwersytecie w Marsylii Podczas pracy nad zastosowaniem logiki predykatow (klauzul Horna) do NLP Pierwszy kompilator Prologu powstal w Algolu Od polowy lat 70-tych wspolpraca z Robertem Kowalskim na Uniwersytecie w Edynburgu (Szkocja)

Implementacje Allegro Prolog ( http://www.franz.com/products/prolog/ ) ALS Prolog ( http://www.als.com/ ) Amzi! Prolog (http://www.amzi.com/) B-Prolog (http://www.probp.com/) BinProlog ( http://www.binnetcorp.com/binprolog/ ) Ciao Prolog (http://www.clip.dia.fi.upm.es/software/ciao), Otwarte Oprogramowanie pod GNU General Public License i/lub GNU LGPL CxProlog ( http://ctp.di.fct.unl.pt/~amd/cxprolog/ )

Implementacje GNU Prolog (http://gnu-prolog.inria.fr) też zwany gprolog, Otwarte Oprogramowanie pod GNU General Public License hprolog ( http://www.cs.kuleuven.ac.be/~bmd/hprolog/ ) ilprolog ( http://www.pharmadm.com/dmax.asp ) LPA Prolog (http://www.lpa.co.uk/) MINERVA (http://www.ifcomputer.co.jp/minerva/) komercyjny kompilator ISO-Prolog w 100% Java MobileProlog ( http://67.15.41.154/mprolog/ ), C# port Winikoffa WProlog NanoProlog ( http://ctp.di.fct.unl.pt/~amd/cxprolog/ )

Implementacje Open Prolog (http://www.cs.tcd.ie/open-prolog/) Quintus Prolog ( http://www.sics.se/quintus/ ) SICStus Prolog (http://www.sics.se/sicstus/) Strawberry Prolog (http://www.dobrev.com/) SWI-Prolog (http://www.swi-prolog.org), Otwarte Oprogramowanie pod GNU LGPL Trinc Prolog (http://www.trinc-prolog.com) TuProlog (http://tuprolog.sourceforge.net/), Otwarte Oprogramowanie pod GNU LGPL XSB (http://xsb.sourceforge.net/), Otwarte Oprogramowanie pod GNU LGPL YAP Prolog (http://www.ncc.up.pt/~vsc/yap), Otwarte Oprogramowanie pod Licencja Artystyczna

PSI Prolog Sequential Inference Japonia, 1982 Proba budowy komputerów piątej generacji: Równoległa architektura Przetwarzanie wiedzy Prolog stał się podstawą języka KL0 (Kernel Language) asembler nowych maszyn o predkości 30 KLIPSów LIPS Logical Inference Per Second

Programowanie Algorytmy + Struktury Danych = Programy Niklaus Wirth Logika + Sterowanie = Algorytm Robert Kowalski

Programowanie Proceduralne C, Pascal,... Deklaratywne Prolog

Programowanie w Prologu Język deklaratywny Określa się zwiazki między danymi a wynikiem Określa się CO ma by przetworzone a nie JAK ma być przetworzone Minimalizacja STEROWANIA na korzyść LOGIKI

Program w Prologu FAKTY REGUŁY ZAPYTANIA

Hello World Co kto lubi? FAKTY: lubi(jarek, jablka). lubi(jarek, gruszka). lubi(kasia, hamburger). lubi(stefan, curry).

Reguły FAKTY: lubi(jarek, jablko). lubi(jarek, gruszka). lubi(kasia, hamburger). lubi(stefan, curry). REGUŁY: lubi(kasia, X) :- niezdrowe(x), alkohol(x). lubi(stefan, X) :- zdrowe(x) ; alkohol(x).

Reguły cd. FAKTY: zdrowe(jablko). zdrowe(gruszka). niezdrowe(hamburger). niezdrowe(piwo). alkohol(piwo). alkohol(wino).

Zapytania w PROLOGU Zapytania w PROLOGU nie muszą składać się z jednego członu, np.: lubi(x,y). Można w locie definiować zmienne i odnosić się do nich w dalszej części zapytania.

Zapytania w PROLOGU

Zapytania w PROLOGU

ale... Zapytania w PROLOGU

Zapytania w PROLOGU ale... PROLOG nie pamieta zmiennych w kolejnych zapytaniach, jeśli nie zostały one dodane do pamięci INTERPRETERA.

Mechanizmy Prologu Uzgadnianie Zaznaczanie Nawracanie Odcinanie -! Rekurencja Struktury, listy Przeszukiwanie w głąb Rozumowanie wstecz

Elementy języka Oparty na logice predykatów I rzędu System logiczny, w którym kwantyfikatory mogą mówić tylko o obiektach, nie zaś o ich zbiorach. Tak więc nie mogą występować kwantyfikatory typu "dla każdej funkcji X na Y...", "istnieje własność p, taka że..." czy "dla każdego podzbioru X zbioru Z...". Rachunek ten nazywa się też rachunkiem kwantyfikatorów

Predykaty I rzędu W system rachunku predykatów pierwszego rzędu obiekty są reprezentowane przez termy: Term to wyrażenie składające się ze zmiennych oraz symboli funkcyjnych z pewnego ustalonego zbioru. Np.: x, f(x) oraz f(f(f(f(x,g),h),i),j). Termy w PROLOGu: Stałe np. jarek, kasie, piwo, gruszka Zmienne, np.: X, Y Termy zlożone -> reguły Predykat określa związek między obiektami. Jest relacją w sensie matematycznym. Np.. Predykat lubi

Klauzule Klauzula (ang. clause) to zbiór literałów i zanegowanych literałów, który jest prawdziwy wtedy i tylko wtedy, gdy ich alternatywa jest prawdziwa. Klauzula pusta jest zawsze fałszywa. Na przykład klauzula {p, r,q} jest prawdziwa, gdy przynajmniej jedno z wyrażeń p, r, q ma wartość logiczną 1.

Klauzula jest wyrażeniem postaci: B1, B2, B3,.., Bm A1, A2,..., An Klauzule Horna Klauzule Horna posiadają co najwyżej jeden literał w następniku: m=0 lub m=1 m=1, n=0 m=1, n!=0 m=0 m=0, n=0 np. B1 oznacza, że B1 zawsze zachodzi (fakt, asercja) np. B1 A1, A2,..., An jest regułą np. A1, A2,..., An jest negacją faktu klauzula pusta

Zasada rezolucji Metodą wnioskowania w Prologu jest zasada rezolucji. Odkryta w 1965 r. Przez J. A. Robinsona Ogólny zasada: Jeśli zbór klauzul jest niespójny to metodą rezolucji da się z niego wyprowadzić klauzule pustą. Rezolucja jest zupełna tzn. możliwe jest udowodnienie faktu poprzez wykazanie fałszywości zbioru przesłanek uzupełnionych negacją faktu.

Prolog a rezolucja Prolog wykorzystuje zasadę rezolucji ale pozwala również na: - użycie odcięcia - dynamiczną zmianę zawartości pamięci w trakcie dowodzenia - dodatkowe nielogiczne operacje, np. IO - arytmetykę

Pięcioro przyjaciół Pięcioro przyjaciół rywalizowało na bieżni. Wincenty ze smutkiem opowiedział, ze mu się nie udało zająć pierwszego miejsca. Grzegorz przybiegł na metę jako trzeci po Dymitrze. Wincenty zauważył na marginesie, ze Dymitr nie zajął drugiego miejsca, a Andrzej nie był ani pierwszym ani ostatnim. Borys powiedział, ze przybiegł na metę w ślad za Wincentym. Pytanie: kto przybiegł na jakim miejscu?

Działanie predykatu SELECT

Działanie predykatu SELECT

Działanie predykatu SELECT

Działanie predykatu SELECT

Działanie predykatu SELECT

Działanie predykatu SELECT

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */ select(a, L2, L3), A \= 1, A \= 5, /* Andrzej nie zajął pierwszego ani piątego, ani tego co Wincenty lub Dymitr*/ select(b, L3, [G]), /* pozostale miejsca zajęli Borys i Grzegorz */ B is W+1, /* Borys przybiegl zaraz za Wincentym */ G > D. /* Dymitr był na mecie wcześniej niż Grzegorz */

miejsce(w,d,a,b,g) :- Rozwiązanie w Prologu

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], /*lista z numerami miejsc*/

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */ select(a, L2, L3), A \= 1, A \= 5, /* Andrzej nie zajął pierwszego ani piątego, ani tego co Wincenty lub Dymitr*/

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */ select(a, L2, L3), A \= 1, A \= 5, /* Andrzej nie zajął pierwszego ani piątego, ani tego co Wincenty lub Dymitr*/ select(b, L3, [G]), /* pozostale miejsca zajęli Borys i Grzegorz */

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */ select(a, L2, L3), A \= 1, A \= 5, /* Andrzej nie zajął pierwszego ani piątego, ani tego co Wincenty lub Dymitr*/ select(b, L3, [G]), /* pozostale miejsca zajęli Borys i Grzegorz */ B is W+1, /* Borys przybiegl zaraz za Wincentym */

Rozwiązanie w Prologu miejsce(w,d,a,b,g) :- L0 = [1,2,3,4,5], G = 3, /* Grzegorz zajął trzecie miejsce */ select(w, L0, L1), W \= 1, /* Wincenty nie zajął pierwszego miejsca */ select(d, L1, L2), D \= 2, /* Dymitr nie zajął drugiego, ani tego co Wincenty */ select(a, L2, L3), A \= 1, A \= 5, /* Andrzej nie zajął pierwszego ani piątego, ani tego co Wincenty lub Dymitr*/ select(b, L3, [G]), /* pozostale miejsca zajęli Borys i Grzegorz */ B is W+1, /* Borys przybiegl zaraz za Wincentym */ G > D. /* Dymitr był na mecie wcześniej niż Grzegorz */

Przeszukiwanie grafów

Rozwiązanie w Prologu d(a,b). d(b,e). d(b,c). d(d,e). d(c,d). d(e,f). d(g,e). go(x,x,t,t). go(x,y,t,t2) :- ( d(x,z) ; d(z,x) ), not(member(z,t)), go(z, Y, [Z T], T2).

Działanie predykatu MEMBER

Działanie predykatu MEMBER

lubi(jarek, jablko). lubi(jarek, gruszka). lubi(kasia, piwo). lubi(kasia, hamburger). Robienie exe'ka

Robienie exe'ka pisz_co_lubi(imie2):- lubi(imie2, X), write(x), nl, fail.

pytanie:- write('podaj imie: '), nl, read(imie), nl,nl, write('podales: '), write(imie), nl,nl, write(imie), write('lubi:'), nl, not(pisz_co_lubi(imie)), nl,nl, write('koniec'), get0(_), halt. Robienie exe'ka

Robienie exe'ka "C:\pl\bin\plcon.exe" --goal=pytanie --stand_alone=true -o pytanko.exe -c lubi.pl

Zastosowanie Sztuczna inteligencja Dowodzenie twierdzeń Systemy ekspertowe NLP (Natural Language Processing) Dedukcyjne bazy danych Matematyka przetwarzanie symboliczne