Programowanie w logice

Podobne dokumenty
PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie deklaratywne

Programowanie w Logice

Programowanie w logice

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

Programowanie deklaratywne

Wprowadzenie do Prologa

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

Programowanie w logice

Deklarowania faktów dotyczących obiektów i związków między nimi. Definiowania reguł dotyczących obiektów i związków między nimi.

Projekt 4: Programowanie w logice

Języki programowania deklaratywnego

Podstawy języka PROLOG

Prezentacja do pobranie:

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

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

Języki programowania deklaratywnego

Paradygmaty programowania

Programowanie deklaratywne

Laboratorium przedmiotu Paradygmaty Programowania

Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0)

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

Programowanie w logice Prolog 1

Adam Meissner.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie w języku Python. Grażyna Koba

Programowanie deklaratywne

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

Programowanie w Logice Struktury danych (Lista 2)

Języki programowania zasady ich tworzenia

Wykład 0 Informacje Podstawowe

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

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

Warunki logiczne instrukcja if

Definicje. Algorytm to:

PROLOG INNE PRZYKŁADY MACIEJ KELM

Adam Meissner STUCZNA INTELIGENCJA

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

Arytmetyka liczb binarnych

Programowanie w logice Wykład z baz danych dla

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Programowanie w logice Prolog 2

Składnia rachunku predykatów pierwszego rzędu

Predykat. Matematyka Dyskretna, Podstawy Logiki i Teorii Mnogości Barbara Głut

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

FUNKCJA LINIOWA - WYKRES. y = ax + b. a i b to współczynniki funkcji, które mają wartości liczbowe

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 4. Karol Tarnowski A-1 p.

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

FUNKCJA LINIOWA - WYKRES

Język ludzki kod maszynowy

Algorytm. a programowanie -

Języki i paradygmaty programowania Wykład 7. dr Dariusz Wardowski, Katedra Analizy Nieliniowej Łódź, 22 maja 2010 r. 1/18

Wyrażenia arytmetyczne

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Programowanie komputerowe. Zajęcia 1

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

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

JAVAScript w dokumentach HTML (1)

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Podstawy Informatyki. Algorytmy i ich poprawność

Programowanie w języku C++ Grażyna Koba

Ćwiczenie 1. Wprowadzenie do programu Octave

Np. Olsztyn leży nad Łyną - zdanie prawdziwe, wartość logiczna 1 4 jest większe od 5 - zdanie fałszywe, wartość logiczna 0

Programowanie w języku C++ Podstawowe paradygmaty programowania

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

PROLOG. Programmation en Logique. Michał Bereta

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

Reprezentacja wiedzy i wnioskowanie

Przestrzenne bazy danych Podstawy języka SQL

Luty 2001 Algorytmy (7) 2000/2001

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Statyczne i dynamiczne predykaty

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Ćwiczenie 1. Wprowadzenie do programu Octave

Matematyczne Podstawy Informatyki

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Pascal - wprowadzenie

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

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

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Zadanie 1. Potęgi (14 pkt)

Języki i metodyka programowania. Wprowadzenie do języka C

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Programowanie logiczne a negacja

Internet Semantyczny i Logika I

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Alfred N. Whitehead

Logika binarna. Prawo łączności mówimy, że operator binarny * na zbiorze S jest łączny gdy (x * y) * z = x * (y * z) dla każdego x, y, z S.

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Transkrypt:

Programowanie w logice PROLOG cz.1 PROLOG język wysokiego poziomu Powstał w 1972 na Uniwersytecie w Marsylii (Francja) w zespole A.Colmerauer a i F.Roussel a PROgrammation en LOGique, PROgramming in LOGic, PROramowanie w LOGice Podstawa utworzenia PROLOGu: logika predykatów pierwszego rzędu oraz zasada rezolucji. Program napisany w PROLOGu zawiera zbiór asercji (faktów), które mogą być traktowane jako aksjomaty pewnej teorii oraz zbiór reguł wnioskowania (dedukcji) dla tej teorii. Problem do rozwiązania jest twierdzeniem teorii, które należy udowodnić. Języki proceduralne (imperatywne) program zawiera szczegółowy opis kolejnych kroków postępowania zgodnie z przyjętym algorytmem tak, aby z wprowadzonych danych otrzymać żądane wyniki (PASCAL, FORTRAN, C) Język deklaratywny wymaga określenia związków (relacji) między danymi a wynikiem (PROLOG) Predykaty Predykaty opisują związki zachodzące między obiektami Symbol predykatu: dowolna długość, dowolne litery cyfry i _, zaczyna się od małej litery. Przykłady: lubi, wiekszy_od, mlodszy_od, jest_przodkiem Argumenty predykatu: termy oddzielone przecinkami, dowolna liczba termów. Przykłady: lubi (anna,ksiazka(autor(adam,mickiewicz),pan_tadeusz,1960)) suma(x,y,z) ojciec(maciej,marek) Fakty Opisują związki między obiektami, opisują obiekty. Przedstawia się je za pomocą predykatów. predykat(obiekt 1, obiekt 2,obiekt 3,...,obiekt n ). lubi(anna, piotr). lubi(piotr, anna). kobieta(anna). ojciec(jan, marek). odleglosc(poznan,berlin,300). 1

Fakty Cel Nazwy obiektów występujące w nawiasach nazywamy argumentami. Bazę danych można wykorzystać poprzez zadawanie pytań lub inaczej celów do realizacji. Zbiór faktów nazywamy bazą danych. Celem, w zależności od formy, jest: pytanie o prawdziwość faktów, polecenie znalezienia obiektów będących w relacji z innymi obiektami. Zapytania (cele) lubi(jan, wycieczki). lubi(jan, ksiazki). lubi(jan, kino). lubi(ewa, ksiazki). lubi(ewa, kwiaty).?- lubi(jan, kino). yes?- lubi(jan, konie). no Zapytania?- lubi(jan,x).?- lubi(y,kwiaty). X=wycieczki; Y=ewa. X=ksiazki; X=kino.?- lubi(ewa,z).?- lubi(x,ksiazki). Z=ksiazki; X=jan; Z=kwiaty. X=ewa. Reguły stwierdzenia dotyczące obiektów i ich powiązań, opisują zależności między obiektami predykat(obiekt 1, obiekt 2, obiekt 3,... obiekt n ) if predykat1(obiekt1 1, obiekt1 2, obiekt1 3,...,obiekt1 m1 ) and predykat2(obiekt2 1, obiekt2 2, obiekt2 3,...,obiekt2 m2 ) and... predykatk(obiektk 1, obiektk 2,obiektk 3,... obiektk mk ). Reguły Przykład: siostra(x,y) :- kobieta(x),rodzice(m,o,x), rodzice(m,o,y), X\=Y. X jest siostrą Y, jeśli X jest kobietą oraz X i Y mają takich samych rodziców Predykat siostra jest tutaj głową reguły (głowa składa się tylko z jednego predykatu), zaś warunki: kobieta(x), rodzice(m,o,x), rodzice(m,o,y), X\=Y tworzą ciało reguły. 2

Poszukiwanie odpowiedzi Fakty i reguły Zapisane w bazie danych fakty i reguły analizowane są od góry do dołu w kolejności wprowadzenia. Szukany jest fakt potwierdzający zapytanie. Jeżeli w pytaniu jest zmienna, to w trakcie wyszukiwania odpowiedzi jest ukonkretniana (podstawiane są pod nią stałe wartości). Jeżeli zapytanie jest złożone, to zawsze poszukuje się potwierdzenia predykatów od lewego do skrajnie prawego. Powrót do wcześniejszych predykatów celem sprawdzenia wszystkich kombinacji nazywa się nawracaniem (backtracking). Fakty i reguły stanowią tzw. klauzule. Fakt to klauzula składająca się tylko z nagłówka (nie posiada treści). Zbiór klauzul, w których predykaty tworzące nagłówki mają tę samą nazwę i liczbę argumentów tworzą procedurę. Deklaratywna interpretacja klauzuli Każdą klauzulę o ogólnej postaci: A:- B 1, B 2,, B n. można interpretować w następujący sposób: A zachodzi, jeśli zachodzą (są prawdziwe) B 1 i B 2 i i B n. Podstawowe elementy języka Term to stała, zmienna lub struktura. Stałe (obiekty proste, struktury atomowe, atomy) to symboliczne nazwy obiektów występujących w programie. Przykłady: j23, 1, 2, 007, jan, aula_a, jan_kowalski, Jan Kowalski, 125,00 Podstawowe elementy języka Zmienne symbolicznie przedstawiają nazwy obiektów, które nie są w danej chwili znane. Przykłady: X, A, Ogon_listy, _miasto Zmienna anonimowa _ (nie ma znaczenia dla programisty) Struktury Struktura obiekt składający się z innych obiektów, określona jest przez funktor oraz nazwy obiektów składowych (argumentów funktora) Przykłady: ksiazka(adam,mickiewicz,pan_tadeusz,2012) ksiazka(autor(adam,mickiewicz), tytul(pan_tadeusz), wydanie(100,2012)) 3

termów T1 i T2 polega na szukaniu wyrażeń, jakie trzeba podstawić pod zmienne występujące w T1 i T2, by po ich podstawieniu termy stały się identyczne. Jeśli takiego postawienia nie ma, to unifikacja zawodzi. T1=T2 Jeżeli termy T1 i T2 są zmiennymi, X i Y to przy próbie uzgodnienia tych zmiennych możliwe są przypadki: Zmienna X jest ukonkretniona, czyli związana z pewną stałą (strukturą), a Y jest wolna wtedy Y zostanie ukonkretniona przez wartość zmiennej X. stolica(berlin,niemcy)=y. Zmienna X jest wolna, a Y ukonkretniona, wtedy X zostanie ukonkretniona przez wartość zmiennej Y. X=madryt. Jeśli obie zmienne są wolne, to wtedy następuje ich powiązanie, czyli jeśli w pewnym momencie działania programu jedna z nich zostanie ukonkretniona, to druga automatycznie przyjmie tę samą wartość. X=Y. Jeśli T1 i T2 są stałymi (atomami lub liczbami) to równość zachodzi, gdy ta sama stała występuje po obu stronach predykatu =. praga=praga. 2010=2010. Dwie struktury są sobie równe, jeśli a) są opisane przez ten sam funktor, b) funktory maja tę samą liczbę argumentów, c) odpowiednie argumenty są sobie równe. kolor(niebieski,auto)=kolor(niebieski,auto). Uzgadnianie: staw(morskie_oko,tatry)=staw(x,tatry). 4

Porównywanie wartości a(x,y,z)=a(s,t,v). X=1. X=uczenia(uam). uczelnia(uam,poznan)=uczelnia(y,poznan). stolica(x,polska)=stolica(warszawa,p). X=Y Porównanie kończy się sukcesem, gdy oba wyrażenia są identyczne lub da się je uzgodnić X\=Y Porównanie kończy się sukcesem, gdy wyrażeń nie daje się uzgodnić X==Y Porównywanie wartości Predykat X==Y również oznacza równość, ale w węższym znaczeniu niż X=Y. Jeśli X lub Y w wyrażeniu X=Y jest zmienną, to następuje uzgodnienie. W przypadku X==Y uzgodnienie nie nastąpi, jeśli jedna ze zmiennych ma przypisaną wartość, a druga nie. Predykat = traktuje zmienną nieukonkretnioną jako równą dowolnej wartości, dla predykatu == zmienna nieukonkretniona jest równa jedynie zmiennej z nią związanej X\==Y Lista operatorów arytmetycznych i porównania + dodawanie - odejmowanie / dzielenie // dzielenie całkowite * mnożenie ** potęga mod reszta z dzielenia is znak równości (wynik obliczeń arytmetycznych) ( X is 1 mod 3) =:= czy wartości równe =\= czy wartości różne > większe < mniejsze >= większe równe =< mniejsze równe Operator ''is'' is służy do ukonkretniania występującej po lewej stronie zmiennej przez wyrażenie arytmetyczne znajdującą się po prawej stronie.?- X is 2+3. X = 5 Yes 5

SWI-PROLOG Literatura www.swi-prolog.org Programy prologowe zapisuje się używając dowolnego edytora tekstowego notatnik (Windows). Plik zapisujemy z rozszerzeniem pl. Aby wczytać do pamięci plik prologowy, należy wydać interpreterowi następujące polecenie:?- [nazwa_pliku]. Uwaga: Wczytywane pliki muszą być w tym samym katalogu, z którego uruchamiany jest program pl. W. Clocksin, C. Mellish, Prolog. Programowanie E.Gatnar, K.Stąpor, Prolog G.Brzykcy, A.Meissner, Programowanie w prologu i programowanie funkcyjne M. Ben-Ari, Logika matematyczna w informatyce 6