Programmation en Logique

Slides:



Advertisements
Podobne prezentacje
Wprowadzenie w problematykę związaną z twierdzeniem Gödla
Advertisements

II Relacje i relacje równoważności
Programowanie obiektowe
Mechanizm wnioskowania rozmytego
RACHUNEK ZDAŃ.
Rafał Hryniów Tomasz Pieciukiewicz
Język ANSI C Funkcje Wykład: Programowanie komputerów
Systemy Sztucznej Inteligencji
Metody Analizy Programów Wykład 02
Sztuczna Inteligencja Reprezentacja wiedzy I Logika przybliżona
Automatyczne dowodzenie twierdzeń
REGUŁOWO-MODELOWE SKORUPOWE SYSTEMY EKSPERTOWE Część 1
Wprowadzenie do C++ Zajęcia 2.
Języki programowania C++
WYKŁAD 2 SYSTEMY EKSPERTOWE cz.2.
Informatyka Stosowana
BAZA DANYCH - RODZAJE.
Generyczne Repozytorium Dokumentów w XML
AUTOMATYCZNE DOWODZENIE TWIERDZEŃ.
Co UML może zrobić dla Twojego projektu?
Język SQL – zapytania zagnieżdżone (podzapytania)
P O D S T A W Y P R O G R A M O W A N I A
WekaSQL Język i aplikacja przetwarzania oraz eksploracji danych.
Sztuczna Inteligencja Reprezentacja wiedzy I Reprezentacja logiczna
Sztuczna Inteligencja Reprezentacja wiedzy II Systemy produkcyjne Włodzisław Duch Katedra Informatyki Stosowanej UMK Google: W. Duch.
Materiały pomocnicze do wykładu
DANE INFORMACYJNE Gimnazjum Nr 43 w Szczecinie ID grupy: 98/38_MF_G2
Inteligentne Systemy Informacyjne
PODSTAWY INFORMATYKI Wykładowca: mgr Tadeusz Ziębakowski
FUNKTORY Katarzyna Radzio Kamil Sulima.
Wprowadzenie do programowania w języku Turbo Pascal
OPERACJA DZIELENIA W SQL
Zależności funkcyjne.
Podstawy programowania
Podstawy układów logicznych
Programowanie w logice
Przegląd podstawowych algorytmów
IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
I. Informacje podstawowe
dr hab. Ryszard Walkowiak prof. nadzw.
Metody reprezentacji wiedzy – cz. 2.
ITERACJA - powtórzenie
Języki i automaty część 3.
XML – eXtensible Markup Language
Rachunki Gentzena Joanna Witoch.
Elżbieta Fiedziukiewicz
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
PRZYGOTOWALI Bartosz Pawlik Daniel Sawa Marcin Turbiński.
Programowanie strukturalne i obiektowe C++
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
KNW- Wykład 3 Powtórzenie. PROGRAM WYKŁADU NR 3 Przykładowe zadania z logiki Modele możliwych światów.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Wstęp do Prologa PRZYGOTOWALI: MARIUSZ TREMBIŃSKI, KRZYSZTOF DĄBROWSKI, DAWID SZYMAŃSKI, PAWEŁ POLAŃCZYK.
Systemy wspomagające dowodzenie twierdzeń
Metody Sztucznej Inteligencji – technologie rozmyte i neuronowe Wnioskowanie Mamdani’ego - rozwinięcia  Dr hab. inż. Kazimierz Duzinkiewicz, Katedra Inżynierii.
Listy Listy w Prologu mogą przechowywać dane dowolnego typu [alpha,beta,gamma,delta] [1,2,3] Sama lista również może zawierać listę: [[a,list,within],a,list]
Rozdział IV Wyrażenia proceduralne algorytmów Grzegorz Gacek Patryk Gajewski.
Wstęp do programowania Wykład 10 Programowanie w logice.
ZDANIE.
KNW K Konwencjonalne oraz N Niekonwencjonalne metody W Wnioskowania.
Etapy procesu sterowania rozmytego
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Systemy rozmyte – wnioskowanie Mamdani’ego II © Kazimierz Duzinkiewicz, dr hab.
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Nawracanie i odcięcie Jakub Czoboda, Jezierski Aleksander, Skierkowski Paweł, Bembenista Kamil, Martynowski Witold.
Prolog Tutorial Introduction
Pojęcia podstawowe Algebra Boole’a … Tadeusz Łuba ZCB 1.
Metody sztucznej inteligencji
Patryk Kłys Aleksandra dąbrowska
Sztuczna Inteligencja Reprezentacja wiedzy I Logika przybliżona
Zapis prezentacji:

Programmation en Logique 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 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

Zapytania w PROLOGU ale...

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.

Klauzule Horna Klauzula jest wyrażeniem postaci: B1, B2, B3,.., Bm  A1, A2,..., An Klauzule Horna posiadają co najwyżej jeden literał w następniku: m=0 lub m=1 m=1 , n=0 np. B1  oznacza, że B1 zawsze zachodzi (fakt, asercja) m=1, n!=0 np. B1  A1, A2, ... , An jest regułą m=0 np.  A1, A2, ..., An jest negacją faktu m=0 , n=0 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 */

Rozwiązanie w Prologu miejsce(W,D,A,B,G) :-

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

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

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

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

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