Wstęp do Prologa PRZYGOTOWALI: MARIUSZ TREMBIŃSKI, KRZYSZTOF DĄBROWSKI, DAWID SZYMAŃSKI, PAWEŁ POLAŃCZYK.

Slides:



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

Język C/C++ Funkcje.
Programowanie obiektowe
RACHUNEK ZDAŃ.
11. Różniczkowanie funkcji złożonej
Systemy Sztucznej Inteligencji
Sztuczna Inteligencja Reprezentacja wiedzy I Logika przybliżona
Programowanie I Rekurencja.
REGUŁOWO-MODELOWE SKORUPOWE SYSTEMY EKSPERTOWE Część 1
Wprowadzenie do języka skryptowego PHP
VI Rachunek predykatów
ALGORYTM Co to jest algorytm?
Badania operacyjne. Wykład 2
Matematyka Dyskretna, G.Mirkowska, PJWSTK
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
DANE INFORMACYJNE Gimnazjum Nr 43 w Szczecinie ID grupy: 98/38_MF_G2
Inteligentne Systemy Informacyjne
Semantyki programów współbieżnych " Determinizm programów sekwencyjnych, " Nie-determinizm programów współbieżnych, " prawdziwa równoległość vs.przeploty.
Wstęp do programowania obiektowego
Projektowanie i programowanie obiektowe II - Wykład IV
FUNKTORY Katarzyna Radzio Kamil Sulima.
Jest to wyrażenie jednoznacznie stwierdzające, na gruncie danego języka, iż tak a tak jest albo że tak a tak nie jest. Zazwyczaj określa się, iż takim.
Matematyka wokół nas Równania i nierówności
Bibliotekarz – odkrywca. Agenda Proces tworzenia informacji Indeksy wyszukiwawcze Budowa rekordu w Promaxie Zapytania.
Podstawy programowania
Podstawy układów logicznych
Instrukcje sterujące część 1
Programowanie w logice
Poznaj bliżej program Microsoft Office Word 2007
RÓWNANIA Aleksandra Janes.
I. Informacje podstawowe
Programowanie strukturalne i obiektowe
Elementy Rachunku Prawdopodobieństwa i Statystyki
ITERACJA - powtórzenie
XML – eXtensible Markup Language
II. Matematyczne podstawy MK
Algorytmy.
Rachunki Gentzena Joanna Witoch.
Elżbieta Fiedziukiewicz
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Wybrane zagadnienia relacyjnych baz danych
Model relacyjny.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
FUNKCJE Opracował: Karol Kara.
ZBIORY PODSTAWY.
MATURA 2010 Z MATEMATYKI Podstawowe informacje o egzaminie maturalnym z matematyki Prezentację opracowała: Iwona Kowalik.
PRZYGOTOWALI Bartosz Pawlik Daniel Sawa Marcin Turbiński.
Semantyczna teoria prawdy Tarskiego
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Zbiory Co to jest zbiór? Nie martw się, jeśli nie potrafisz odpowiedzieć. Nie ma odpowiedzi na to pytanie.
Modelowanie Kognitywne
Iga Lewandowska I EMII MU
Systemy wspomagające dowodzenie twierdzeń
Dynamika punktu materialnego Dotychczas ruch był opisywany za pomocą wektorów r, v, oraz a - rozważania geometryczne. Uwzględnienie przyczyn ruchu - dynamika.
Wstęp do programowania Wykład 10 Programowanie w logice.
ZDANIE.
KNW - wykład 3 LOGIKA MODALNA.
Do czego służy arkusz kalkulacyjny, jego budowa
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
Nawracanie i odcięcie Jakub Czoboda, Jezierski Aleksander, Skierkowski Paweł, Bembenista Kamil, Martynowski Witold.
Prolog Tutorial Introduction
Piotr Kawałek , Mateusz Śliwowski
Patryk Kłys Aleksandra dąbrowska
Zapis prezentacji:

Wstęp do Prologa PRZYGOTOWALI: MARIUSZ TREMBIŃSKI, KRZYSZTOF DĄBROWSKI, DAWID SZYMAŃSKI, PAWEŁ POLAŃCZYK

Czym jest Prolog? Prolog to komputerowy język programowania logicznego. Początkowo Prolog służył jako język do automatycznej analizy języków naturalnych, jednak obecnie ma on szerokie zastosowanie. Jego początki sięgają roku 1970, od tego czasu używano go w aplikacjach związanych z przetwarzaniem symbolicznym, w takich dziedzinach jak: -relacyjne bazy danych, -logika matematyczna, -rozwiązywanie problemów abstrakcyjnych, -przetwarzanie języka naturalnego, -automatyzacja projektowania, -symboliczne rozwiązywanie równań, -analiza struktur biochemicznych, -różne zagadnienia z dziedziny sztucznej inteligencji.

Początki Prolog został stworzony w 1971 roku przez Alaina Colmeraurera i Phillipe'a Roussela. Opiera się o rachunek predykatowy pierwszego rzędu, jednak ogranicza się tylko do klauzul Horna. Istnieją jednak wbudowane predykaty wyższego rzędu. Język Prolog jeszcze w pierwszych latach XXI wieku był bardzo chętnie używany w wielu programach związanych z: 1.Logiką matematyczną (automatyczne dowodzenie twierdzeń). 2.Przetwarzaniem języka naturalnego. 3.Symbolicznym rozwiązywaniem równań. 4.Sztuczną inteligencją. 5.Przechowywaniem i przetwarzaniem danych.

Wstęp Prolog może być uważany za język opisowy i deklaratywny.Programowanie w Prologu polega przede wszystkim na opisaniu znanych faktów i relacji dotyczących problemu. Prolog to język programowania używany do rozwiązywania problemów dotyczących obiektów i relacji między nimi. Programowanie w Prologu nie polega na opisywaniu algorytmu Programiści Prologu zajmują się raczej formalnymi relacjami i obiektami związanymi z danym problemem. Uwaga: Obiekty mogą pozostawać we wzajemnych zależnościach wyrażanaych za pomocą implikacji, której poprzednikiem i następnikiem są określone formuły zdaniowe. Możemy zatem definiować jedne obiekty poprzez inne w ten sposób, że z prawdziwości pewnych predykatów określonych na znanych już obiektach i na tym definiowanym wynika prawdziwość jakiegoś predykatu określonego (między innymi) na obiekcie definiowanym.

Predykaty W Prologu podaje się bazę faktów i reguł. Potem można wykonywać zapytania na tej bazie. Podstawową jednostką w Prologu jest predykat. Predykat składa się z nagłówka i argumentów, na przykład: ojciec(tomasz, agata), gdzie ojciec to nagłówek a tomasz i agata to argumenty. Predykat może zostać użyty do wyrażenia pewnych faktów o świecie, które są znane programowi. W tym przypadku programista musi nadać im znaczenie. Jedną z interpretacji zdania ojciec(tomasz, agata) jest "tomasz to ojciec agaty". Jednak równie dobrze mogłoby to znaczyć "ojcem tomasza jest agata".

Obiekty w Prologu Programowanie w Prologu polega na „definiowaniu” obiektów i określaniu wiążących ich relacji. Odmienne jednakże od tradycyjnego (tzn. występującego w klasycznym programowaniu obiektowym) jest pojmowanie obiektu. Obiekt w sensie Prologu jest czymś, co możemy nazwać bytem. Nie definiujemy z czego się on składa i co można z nim zrobić, ale jaki jest. Dodatkowo, dla każdego obiektu definiujemy relacje jakim obiekt ten podlega. Przy pomocy obiektów opisujemy interesujący nas wycinek świata. Działanie programu prologowego objawia się możliwością stawiania pytań związanych z uprzednio opisanym światem. Najprostszym sposobem opisu świata (problemu), jest podanie faktów z nim związanych, jak na przykład: ciezszy(pomarancz,jablko). ciezszy(jablko,mandarynka). ciezszy(arbuz,pomarancz). ciezszy(jablko,winogrono). Powyższe fakty stwierdzają, że ciezszy(pomarancz,jablko). – pomarańcz jest cięższa od jabłka, ciezszy(jablko,mandarynka). – jabłko jest cięższe od mandarynki, itd.

Relacje Tak więc powyżej określiliśmy kilka obiektów (pomarancz,jablko, itd) i powiązaliśmy je między sobą relacją cięższy wyrażającą, który z obiektów jest cięższy od innych. Istotne jest to, że nadal nie jest nam znana masa żadnego z obiektów – one po prostu nie posiadają cech. Okazuje się, że już nawet jeden fakt jest poprawnym (przynajmniej składniowo) programem Prologu. Po „uruchomieniu” takiego programu, możemy zadawać pytania związane z rzeczywistością jaką opisuje. ?- ciezszy(pomarancz,jablko). Yes W ten oto sposób otrzymujemy twierdzącą odpowiedz na pytanie: Czy pomarańcz jest cięższa od jabłka?. Będąc precyzyjniejszym, to pytanie brzmi: Czy wiadomo coś na temat tego, że pomarańcz jest cięższa od jabłka?. Jest to istotne rozróżnienie, gdyż wówczas reakcję ?- ciezszy(winogrono,arbuz). No należy odczytywać jako: Nic nie wiadomo na temat tego, że winogrono jest cięższe od arbuza. Nie oznacza to jednak, że tak nie jest. Taka interpretacja jest właściwsza, co pokazuje kolejny przykład ?- ciezszy(arbuz,winogrono). No

Relacje cd. Z podanych faktów, przez przechodniość i znajomość pojęcia ciężaru możemy wywnioskować, że odpowiedź powinna być twierdząca, według rozumowania ponieważ prawdą jest, że: ciezszy(arbuz,pomarancz). i prawdą jest, że ciezszy(pomarancz,jablko). i prawdą jest, że ciezszy(jablko,winogrono). Czyli arbuz > pomarancz > jablko > winogrono Inaczej arbuz >... > winogrono więc prawdą jest, że ciezszy(arbuz,winogrono). Jednak Prolog nie wie, że w stosunku do relacji cięższy może przechodniość stosować, w związku z czym, w świetle znanych faktów i związków, udziela odpowiedzi negatywnej. W ten oto sposób dochodzimy do sytuacji, gdy musimy poinformować Prolog o pewnych relacjach, czyli określić reguły.

Reguły Baza danych Prologu może też zawierać reguły. Przykład reguły to: jest(światło) :- włączony(przycisk). Zapis :- oznacza "wtedy, gdy" lub "jeśli". Ta reguła oznacza, że zdanie jest(światło) jest prawdziwe wtedy, gdy prawdziwe jest zdanie włączony(przycisk). Reguły mogą używać zmiennych. Zmienne zapisuje się zaczynając od wielkiej litery, dla odróżnienia od stałych, zaczynających się małą. ojciec(X, Y) :- rodzic(X, Y), jest_rodzaju_męskiego(X).

Reguły cd. Zajmijmy się zatem relacją przechodniości i utworzeniem dla niej odpowiednich reguł. W matematyce relacja (dwuargumentowa)R na zbiorze A, co zapisujemy R ⊆ A 2 jest przechodnia, gdy dla wszystkich elementów a, b, c ∈ A, jeżeli elementy (a, b) są w relacji R i elementy (b, c) są w relacji R, to także elementy (a, c) są w relacji R. Jako przykłady takich relacji można podać np. relacje większości, relacja zawierania zbiorów czy relację być rodzeństwem. Przechodnia nie jest natomiast relacja różności, relacja być rodzicem czy być przyjacielem. W przypadku rozważanej przez nas relacji wystarczy dodać taką regułę ciezszy(X,Y) :- ciezszy(X,Z),ciezszy(Z,Y). W powyższej regule symbol :- oznacza jeśli (jeśli zachodzi prawa strona to zachodzi lewa) a symbol przecinka (,) pełni rolę operatora logicznego i (AND). Symbole X, Y oraz Z są nazwami zmiennych (w Prologu nazwa zmiennej rozpoczyna się od dużej litery).

Program w Prologu Programowanie w Prologu polega na „definiowaniu” obiektów i okreslaniu wiazacych ich relacji. Zatem przystepujac do rozwiązania jakiegos problemu musimy bardzo uwaznie sie zastanowic 1. z jakimi obiektami mamy do czynienia, 2. jakie relacje (zwiazki) łączą wytypowane przez nas obiekty. Musimy przy tym zdawać sobie jasno sprawę z kilku faktów. 1. Z punktu widzenia jezyka, obiekty nie sa rozróżnialne semantycznie. Oznacza to, ze obiekt slon i slonia w poniższych faktach jestDuzy(slon). lubi(zosia,slonia). są róznymi obiektami, pomimo tego, ze my „wiemy” iż są tym samym. 2. Nie wszystkie relacje jawnie okreslaja wszystkie obiekty, których dotycza. 3. Wybór formy relacji (reguły) powinien byc wystarczajaco precyzyjny aby mógł być potraktowany jak definicja w problemie jaki rozwiazujemy.

Praca w Prologu Praca z Prologiem składa sie zwykle z nastepujacych etapów: 1. Definiowanie obiektów poprzez definiowanie faktów dotyczacych obiektów i zwiazków miedzy nimi. 2. Definiowanie reguł dotyczacych obiektów i zwiazków miedzy nimi. 3. Zapytania o obiekty i zwiazki miedzy nimi.

Praca w Prologu Podczas zapisywania programu stosujemy następującą konwencje: * Nazwy relacji i obiektów musza zaczynać się małymi literami. * Nazwy rozpoczynające się od dużej litery oznaczają zmienne. * Najpierw zapisujemy relacje, a potem, rozdzielone przecinkami i ujęte w nawias okrągły, obiekty których ona dotyczy. * Nazwy obiektów występujących w nawiasach nazywamy argumentami. * Nazwę relacji znajdującej się przed nawiasem nazywamy predykatem. * Nie można jako predykatu użyć zmiennej. Innymi słowy, nie można się dowiedzieć jaka relacja łączy obiekty jas i malgosia X(jas,malgosia). * Fakt i regułę kończymy znakiem kropki. * Kolejność obiektów umieszczonych w nawiasie jest dowolna, ale trzeba stosować ja konsekwentnie. O ile bowiem dobrze znanym faktem jest to, ze Ala lubi swojego kota, to nie oznacza to, ze kot ten lubi Ale. * Zbiór faktów i reguł nazywamy baza danych.

Praca w Prologu :-. ​ co możemy czytać jako ​ lewaCzesc zachodzi (jest prawda), gdy zachodzi prawaCzesc (jest prawda), ​ gdzie ​ – to predykat i ewentualne argumenty umieszczone w nawiasach ​ okrągłych, np. ​ lubi(X,Y) ​ silnia(0,X) ​ – to jedno lub więcej wyrażeń atomowych połączonych operatorami logicznymi: i (,) oraz lub (;) i poprzedzonych ewentualnie operatorem ​negacji (\+). Wyrażenie atomowe w tym kontekście to wyrażenie, dla którego ​ można obliczyć wartość logiczną, a które nie może być już rozłożone na ​wyrażenia prostsze, np.: ​ N>0 ​ A is B-1 ​ silnia(N,X) ​ \+ lubi(malgosia,X)

Praca z programem Praca z programem Prologowym takze odbywa sie inaczej niz w innych jezykach programowania. Raczej trudno mówic o uruchamianiu programu i jego działaniu jako samodzielnej i niezaleznej aplikacji, gdyz programy Prologu z natury sa raczej interakcyjne. Bardziej adekwatnym okresleniem zamiast uruchamianie wydaje sie byc formułowanie zapytan lub tez interakcyjny tryb zapytanie–odpowiedz. Zapisany program wczytujemy poleceniem (znaki ?- sa tzw. znakiem zachety) ?- [plikBezRozszerzenia]. i od tego momentu mozemy formułowac zapytania, np. ?- posiada(piotr,ksiazka). Zapytanie to, w jezyku naturalnym brzmiałoby Czy Piotr ma ksiazke?

Przetwarzanie zapytań Na potrzeby przetwarzania przez Prolog nalezy czytac je jednak troche inaczej Czy istnieje fakt mówiacy, ze Piotr ma ksiazke? Prolog przeszuka cała dostepna baze wiedzy (w postaci faktów i reguł) i jesli zostanie znalezione cos co pasuje do zapytania i zwraca przy tym wartosc logiczna prawda, wówczas zostanie zwrócona odpowiedz yes; w przeciwnym razie no. Raz jeszcze zaznaczamy, ze no nie oznacza „nie”, ale „nie wiem”. Sam proces przeszukiwania, o którym powiemy sobie w dalszej czesci (patrz rozdział ?? tutu), odbywa sie linia po linii, czyli fakty i reguły rozpatrywane sa w kolejnosci ich umieszczenia w pliku.

Przetwarzanie zapytań cd. Zamiast szukac odpowiedzi na pytanie Czy Piotr ma ksiazke? mozemy chciec zapytac Co ma Piotr? co w jezyku Prologu bardziej nalezy czytac jako Jesli Piotr ma X, to X jest tym czego szukam. ?- posiada(piotr,X). Majac wiecej faktów lubi(jas,piernik). lubi(jas,malgosia). lubi(malgosia,cukierek). lubi(malgosia,piernik).

Zapytania złożone możemy konstruować zapytania złożone, np. ?- lubi(jas,malgosia), lubi(malgosia,jas). Czyli Czy prawdą jest, ze Jaś lubi Małgosię i Małgosia lubi Jasia? lub ?- lubi(jas,X), lubi(malgosia,X). czyli Szukam tego wszystkiego co lubi zarówno Jaś jak i Małgosia. Odpowiedź na pytanie o to co lubi Jaś lub Małgosia uzyskamy zapytaniem ?- lubi(jas,X); lubi(malgosia,X).

Przykładowe programy Silnia rekurencyjnie: silnia(0,1). silnia(X,Wynik) :-X>0,R1 is X-1,silnia(R1,R2), Wynik is R2 *X. Ciąg Fibonacciego: fib(N,0):- N =:= 0, !. fib(N,1):- N>0, N<3, !. fib(N, R):- fib(N-1, R2), fib(N-2, R3), R is R2+R3. fib(N,0):- N =:= 0, !. fib(N,1):- N>0, N<3, !. fib(N, R):- fib(N-1, R2), fib(N-2, R3), R is R2+R3.