Programowanie w logice

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Wzorce.
REGUŁOWO-MODELOWE SKORUPOWE SYSTEMY EKSPERTOWE Część 1
VI Rachunek predykatów
Badania operacyjne. Wykład 2
KNW- Wykład 8 Wnioskowanie rozmyte.
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.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 4: Wyrażenia i operatory. Podstawowe instrukcje języka.
Tablice.
Tablice jednowymiarowe 1
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
PHP wprowadzenie.
Zapis informacji Dr Anna Kwiatkowska.
Wprowadzenie do programowania w języku Turbo Pascal
Matematyka wokół nas Równania i nierówności
Podstawy programowania
Podstawy układów logicznych
Instrukcje sterujące część 1
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Podstawy programowania
Turbo Pascal Turbo Pascal - jedna z popularniejszych implementacji kompilatorów języka PASCAL, zintegrowane srodowisko programistyczne, produkt firmy Borland.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
RÓWNANIA Aleksandra Janes.
Metody reprezentacji wiedzy – cz. 2.
Języki i automaty część 3.
Dziedziczenie Maciek Mięczakowski
XML – eXtensible Markup Language
Systemy liczbowe.
Algorytmy.
Proste obliczenia w arkuszu
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
OBIEKTY Utworzenie obiektu var osoba = { „imię”:”Anna”,
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Projektowanie stron WWW
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Zagadnienia AI wykład 2.
KNW- Wykład 3 Powtórzenie. PROGRAM WYKŁADU NR 3 Przykładowe zadania z logiki Modele możliwych światów.
Algorytmy- Wprowadzenie do programowania
PHP + MySQL Podstawy pracy z bazą danych Damian Urbańczyk.
Krakowski Piotr, Woliński Radosław, Kowalski Piotr, Machowski Michał.
Komendy SQL do pracy z danymi
Wstęp do Prologa PRZYGOTOWALI: MARIUSZ TREMBIŃSKI, KRZYSZTOF DĄBROWSKI, DAWID SZYMAŃSKI, PAWEŁ POLAŃCZYK.
Systemy wspomagające dowodzenie twierdzeń
Warstwowe sieci jednokierunkowe – perceptrony wielowarstwowe
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]
Wstęp do programowania Wykład 10 Programowanie w logice.
Wykład 5 Informatyka MPDI 3 semestr Język JavaScript.
 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,
Liczby 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …(i tak dalej) nazywamy liczbami naturalnymi. Tak jak z liter tworzy się słowa, tak z cyfr tworzymy liczby. Dowolną.
Prolog - wprowadzenie Wojciech Besler Paweł Madej
Temat: Tworzenie bazy danych
Metody sztucznej inteligencji - Technologie rozmyte i neuronowe 2015/2016 Systemy rozmyte – wnioskowanie Mamdani’ego II © Kazimierz Duzinkiewicz, dr hab.
Treść dzisiejszego wykładu l Analiza wrażliwości –zmiana wartości współczynników funkcji celu, –zmiana wartości prawych stron ograniczeń. l Podejścia do.
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.
Nawracanie i odcięcie Jakub Czoboda, Jezierski Aleksander, Skierkowski Paweł, Bembenista Kamil, Martynowski Witold.
Prolog Tutorial Introduction
Piotr Kawałek , Mateusz Śliwowski
Typy wyliczeniowe, kolekcje
PROLOG z BLISKA Przygotowali: Konrad Daniszewski, Adam Kuliński, Konrad Poszwiński, Arkadiusz Trzciński.
Dane wejściowe/wyjściowe Wbudowane predykaty
Programowanie Obiektowe – Wykład 2
Patryk Kłys Aleksandra dąbrowska
A closer look.
Haskell Składnia funkcji.
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Programowanie w logice Prolog Programowanie w logice

Geneza Prolog powstał w latach 70. XX wieku jako język programowania służący do automatycznej analizy języków naturalnych. Szczególnie dobrze sprawdza się w programach związanych ze sztuczną inteligencją. Prolog w przeciwieństwie do większości popularnych języków jest językiem deklaratywnym.

Programowanie w Logice Język Prolog jest przykładem języka programowania w logice. W tym paradygmacie programowania podawany jest pewien zestaw zależności, a wynik działania programu jest dowodem pewnego twierdzenia w oparciu o te zależności. Innymi słowy wynik programu opiera się o zależności, które zdefiniujemy w programie, a nie o sposób uzyskania tych danych. Pisanie programu w Prologu nie polega na opisywaniu algorytmu. Język piątej generacji.

Przykładzik Przykładowy program napisany w Prologu może wyglądać tak: lubi(jan, tatry). lubi(jan, beskidy). lubi(jerzy, beskidy). lubi(jerzy, bieszczady). lubiToSamo(X, Y) :-lubi(X, S), lubi(Y, S), X \= Y. Fakty Reguła

Fakty Zauważmy, że nazwy relacji pisane są z małej litery, a konstrukcją przypominają funkcję wieloargumentową, której stałe zapisane są małymi literami. lubi(jan, tatry). Tak skonstruowaną formułę nazywamy strukturą, a jej składowe stałymi. Nie musimy nigdzie deklarować co oznaczają elementy lubi, jan, tatry, - ważne, że te terminy są czytelne dla człowieka. Dla komputera wystarczy informacja, że obiekty jan i tatry znajdują się w relacji o nazwie lubi. Fakty kończymy kropką.

Struktury Wiemy już, że lubi(jan, tatry). to pewna struktura składająca się z atomów jan i tatry. Predykatem nazwiemy funktor lubi. W przypadku zapytań lub reguł (o których za chwilkę powiemy) zamiast atomów będących stałymi, możemy zastosować zmienne lub inne struktury.

Struktury - Przykładzik pracownik( imię(jan), nazwisko(kowalski), adres( ulica(dluga), nr(2), miasto(krakow)), telefon(’0123456789’) ) ).

Cele Celem może być odpowiedź na pytanie czy dany fakt zachodzi czy nie. Zapytanie lubi(jan, tatry). Zwróci true, bo taka relacja zachodzi, ale nie zachodzi relacja lubi(jan, bieszczady). Zatem otrzymamy wartość false. W zapytaniach możemy pytać również o podmioty, których wcześniej nie zdefiniowaliśmy: lubi(filip,tatry).

Cele Zapytanie możemy tworzyć również poprzez zastąpienie stałej zmienną w argumentach dla danej relacji. lubi(X, tatry). Tym samym otrzymamy listę takich podmiotów X, które spełniają powyższą relację. Brak wyników zakończy się wypisaniem false. Jak widzimy w przykładzie – stałą odpowiadającą imieniu zastąpiliśmy zmienną X – a więc wynikiem działania tego zapytania będzie lista osób lubiących Tatry. Zmienne zapisujemy z dużej litery.

Cele – przykładzik #1 ?- lubi(jan,X). X = tatry ; X = beskidy. Wypiszmy wszystko co lubi jan Elementy spełniające relację lubi z obiektem jan przypisane zostaną do zmiennej X ?- lubi(jan,X). X = tatry ; X = beskidy. Elementów może być wiele, Prolog wyszuka i wypisze po jednym elemencie. Każdy kolejny zostanie wyszukany i wypisany po wciśnięciu na klawiaturze średnika. Po ostatnim elemencie występuje kropka.

Cele – przykładzik #2 ?- lubi(X,alpy). false. Wypiszmy wszystkich, którzy lubią Alpy Elementy, z którymi Alpy spełniające relację lubi przypisane zostaną do zmiennej X ?- lubi(X,alpy). false. Ponieważ w naszej bazie faktów nie zdefiniowaliśmy żadnej osoby, która lubi obiekt alpy, a nawet nie zdefiniowaliśmy obiektu alpy w ogóle, to uzyskamy odpowiedź false.

Cele – przykładzik #3 ?- X(jan,tatry). Niestety zmiennymi nie możemy zastępować predykatów. Tym samym nie jesteśmy w stanie dowiedzieć się jaka relacja łączy obiekty jan i tatry. ?- X(jan,tatry).

Cele – przykładzik #4 ?- lubi(_,tatry). Zamiast zmiennej możemy skorzystać również ze znaku specjalnego _ będącego zmienną anonimową. To stwierdzenie można interpretować jako: „są osoby, które lubią tatry” ?- lubi(_,tatry). Ta sama struktura zdefiniowana jako fakt oznaczałaby „każdy lubi tatry”

Cele – przykładzik #5 Załóżmy, że nasza baza wiedzy opiera się o pewną relację wielkości. wiekszy(mega,kilo). wiekszy(giga,mega). wiekszy(tera,giga). Przy takiej bazie wiedzy dla zapytania czy tera jest wiekszy od mega otrzymamy odpowiedź false. Dzieje się tak dlatego, że nie zdefiniowaliśmy relacji przechodniości za pomocą reguły.

Reguły Reguły pozwalają na uzyskanie odpowiedzi na bardziej złożone zapytania. Składają się z prostych podcelów. W pewnym uproszczeniu tworzą nowy fakt w implementacji programu. Fakty i reguły nazywamy stwierdzeniami.

Reguły – Przykładzik #1 Dzięki regułom możemy rozwiązać problem relacji przechodniości: wiekszy(X,Y) :- wiekszy(X,Z),wiekszy(Z,Y). Operator znaczący tyle co jeśli zachodzi strona prawa, to zachodzi strona lewa co można traktować jako implikacja Przecinek pełni rolę operatora AND

Reguły – Przykładzik #2 Reguła pozwalająca na ustalenie obiektów lubiących to samo: lubiToSamo(X, Y):- lubi(X, S), lubi(Y, S), X \= Y.

Rezolucja i unifikacja Rezolucja jest to metoda wnioskowania, którą można stosować do opisanych tu stwierdzeń. Podstawowa reguła jest następująca: wiedząc że P=>Q oraz R=>S, wnioskujemy że P=>S, o ile tylko Q i R dają się zunifikować. Z technicznego punktu widzenia, osiąga się to przez wyliczenie Q  S oraz P   R i usunięcie termów, które występują po obydwu stronach T. Występowanie zmiennych w stwierdzeniach powoduje, że w trakcie rezolucji trzeba znaleźć takie wartości dla tych zmiennych, które pozwolą na odpowiednie dopasowanie. Unifikacja to proces znajdowania wartości dla zmiennych, dzięki którym uzyskamy Q = R. Podstawianie pod zmienne tymczasowych wartości pozwalających na unifikację zwane jest instancjonowaniem. Mówimy też o utożsamieniu zmiennej z wartością. Unifikacja często wymaga nawrotów: Zmienna jest instancjonowana, lecz dopasowanie nie udaje się. Zmienną instancjonuje się wówczas inną wartością 

przykładzik podzielne(18,6). podzielne(6,3). czypodzielne(A,B) :- podzielne(A,C),podzielne(D,B),C=:=D. ?- podzielne(18,6). ?- true. ?- podzielne(6,3). ?- czypodzielne(18,3).

Operatory Zapis a-b*c to inna forma zapisu -(a,*(b,c)). gdzie operatorami są – i *. Operatory występują w postaciach: Prefixowa (np. -1) Infixowa (np. 1 + 2) Sufixowa (np. 4!)

operatory Definiując nowy operator, oprócz zdecydowania się na jedną z wcześniej opisanych postaci, ustalić musimy jego priorytet i łączność • priorytet: od 1 do 1200 (im mniej tym większy) • łączność: lewo- lub prawostronna (1-2-3 interpretowane jest jako ((1-2)-3) ponieważ - jest operatorem lewostronnie łącznym); łączność definiujemy za pomocą jednego z atomów: xf, yf, xfx, xfy, yfx, fx lub fy.

Operatory - przykładzik lubi(jas,malgosie). ?- lubi(jas,malgosie). true ?- jas lubi malgosie. ERROR: Syntax error: Operator expected ERROR: jas ERROR: ** here ** ERROR: lubi malgosie . ?- op(500, xfx, lubi).

Operatory - Przykładzik ?- X is 2+3*5. X = 17 true ?- op(100,yfx,+). X = 25 ?-

arytmetyka W oryginalnym Prologu dostępna jest tylko arytmetyka na liczbach całkowitych. W wersji SWI-Prolog mamy możliwość pracy na liczbach zmiennoprzecinkowych. Dla uproszczenia zapisu wprowadzono infiksowe operatory arytmetyczne, np.: +,-,*,/,// Przykład: dodawanie(X,Y,Z) :- Z is X + Y. ?- dodawanie(2,4,Z). ?- Z = 6.

arytmetyka Przy zapisie X is 1 + 2. zostaną wykonane kolejne czynności: - zostanie wyliczona wartość wyrażenia 1+2, otrzymamy X is 3 - operator is zostanie zinterpretowany jako podstawienie - otrzyamamy odpowiedź true gdyż X i 3 mają teraz tą samą wartość

Arytmetyka Jeśli napiszemy 3 is 1+2 wówczas is nie zadziała jako „operator” przypisania a spowoduje jedynie wykonanie porównania wartości z wyrażeniem. Zwróconą wartością będzie true. Jeśli napiszemy 1+2 is 1+2 wówczas zwrócona zostanie wartość false. Wynika to z faktu, że oba argumenty są wyrażeniami. Wyrażenie z prawej strony zostanie obliczone dając w wyniku liczbę 3. Wyrażenie z lewej strony pozostanie bez zmian, przez co nie będzie reprezentowane przez wartość 3.

arytmetyka Do porównywania zamiast is możemy używać także operatora =:=, który w odróżnieniu od is pozwala na umieszczenie wyrażeń arytmetycznych w miejscu obydwu swoich argumentów. Możemy wiec napisać: (3+2 =:= 4+1). co zostanie poprawnie zinterpretowane i zwróci wartość true.

arytmetyka Oprócz =:= Prolog posiada jeszcze inne operatory porównania: - mniejszy < - większy > - mniejszy równy <= - większy równy >= Przykład: (1+2 < 2+3). (1+2*3 >= 3+3). (1 < 4). (N < N+1).

Instrukcja warunkowa Instrukcja warunkowa w Prologu wygląda trochę inaczej niż w innych językach programowania: struktura: warunek -> true ; false Przykładzik: waga(slon, 1000). waga(czlowiek, 80). ciezszy(A,B)->waga(A,W1),waga(B, W2), W1>W2 -> write(A) ; write(B).

Przykładzik polekwadratu(A, X) :- X is A*A. poleprostokata(A,B,X) :- X is A*B. poletrojkata(A,H,X) :- X is A*H/2. wzrost(jan, 180). wzrost(anna, 160). wyzszy(A,B) :- wzrost(A,S), wzrost(B,T), S>T->write(A);write(B). ?- wyzszy(jan, anna). ?- jan.

Dziękujemy za uwagę 