Programowanie w Logice

Podobne dokumenty
Programowanie w logice

Programowanie w logice

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

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.

PODSTAWY SZTUCZNEJ INTELIGENCJI

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

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

Programowanie w logice Prolog 2

WYRAŻENIA ALGEBRAICZNE

Prolog struktury danych oraz obliczenia. 1. Arytmetyka?- Y is 2+2. Y = 4. ?- 5 is 3+3. false. ?- Z is (3.9 / 2.1). Z =

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

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

Wprowadzenie do Prologa

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

Programowanie deklaratywne

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

JAVAScript w dokumentach HTML (1)

Programowanie w logice

Programowanie w Logice Struktury danych (Lista 2)

Tablice (jedno i wielowymiarowe), łańcuchy znaków

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

Języki programowania Prolog

Prezentacja do pobranie:

Programowanie w Logice

Projekt 4: Programowanie w logice

Arytmetyka liczb binarnych

Matematyka dyskretna

Luty 2001 Algorytmy (7) 2000/2001

Języki programowania deklaratywnego

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Laboratorium przedmiotu Paradygmaty Programowania

Funkcje i Procedury. Wyrazenien

operator zmiany znaku operatory mnożenia, dzielenia, dzielenia modulo operatory dodawania, odejmowania

Podstawy programowania w języku C i C++

Programowanie w logice Prolog 1

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Podstawy programowania skrót z wykładów:

Przykłady zdań w matematyce. Jeśli a 2 + b 2 = c 2, to trójkąt o bokach długości a, b, c jest prostokątny (a, b, c oznaczają dane liczby dodatnie),

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Składnia rachunku predykatów pierwszego rzędu

Uzgadnianie formuł rachunku predykatów

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Algorytmika i Programowanie VBA 1 - podstawy

Cw.12 JAVAScript w dokumentach HTML

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

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wstęp do wskaźników w języku ANSI C

Algorytmy i struktury danych. Wykład 4

RBD Relacyjne Bazy Danych

Programowanie w Logice

Języki i paradygmaty programowania

Problem. Uzgadnianie wyrażeń rachunku predykatów. Instancja wyrażenia. Podstawienie termu za zmienną. Joanna Józefowska

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

Struktura pliku projektu Console Application

1.1. Pozycyjne systemy liczbowe

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

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

Funkcje wymierne. Jerzy Rutkowski. Teoria. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

MATERIAŁY DO ZAJĘĆ II

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

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

Wstęp do informatyki- wykład 2

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

Klasa 6. Liczby dodatnie i liczby ujemne

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

Obliczenia iteracyjne

Język rachunku predykatów Formuły rachunku predykatów Formuły spełnialne i prawdziwe Dowody założeniowe. 1 Zmienne x, y, z...

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

Klasa 6. Liczby dodatnie i liczby ujemne

IX. Wskaźniki.(3 godz.)

Zmienne, stałe i operatory

dr inż. Jarosław Forenc

Wstęp do programowania

Pętla for. Wynik działania programu:

Podstawy programowania w Pythonie

Programowanie w języku Python. Grażyna Koba

C++ wprowadzanie zmiennych

Lista 2 logika i zbiory. Zad 1. Dane są zbiory A i B. Sprawdź, czy zachodzi któraś z relacji:. Wyznacz.

1. Operacje logiczne A B A OR B

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

Rachunek predykatów. Formuły rachunku predykatów. Plan wykładu. Relacje i predykaty - przykłady. Relacje i predykaty

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. Czwartek 28 marca zaczynamy od omówienia zadań z kolokwium nr 1.

Metoda Tablic Semantycznych

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

Liczby zespolone. x + 2 = 0.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

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

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Kiedy i czy konieczne?

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

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

LICZBY POWTÓRKA I (0, 2) 10 II (2, 5) 5 III 25 IV Liczba (0, 4) 5 jest równa liczbom A) I i III B) II i IV C) II i III D) I i II E) III i IV

Języki programowania deklaratywnego

6. Liczby wymierne i niewymierne. Niewymierność pierwiastków i logarytmów (c.d.).

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Jak Arabowie rozwiązywali równania?

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Transkrypt:

Programowanie w Logice Działanie Prologu Przemysław Kobylański na podstawie [CM2003]

Składnia Programy Prologu składają się z termów. Term to stała, zmienna lub struktura (term złożony). Term zapisuje się jako ciąg znaków. Znaki podzielono na cztery kategorie: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + - * / \ ~ ^ < > :.? @ # $ &

Stałe Stałe nazywają konkretne obiekty lub konkretne relacje. Istnieją dwa rodzaje stałych: atomy i liczby. Przykłady atomów: lubi maria jan ksiazka wino posiada Specjalne symbole?- i :- to również atomy. Atomy alfanumeryczne zaczynają się małą literą. moze_ukrasc Atomy zawierające symbole składają się tylko z symboli. Atomem jest również dowolny ciąg znaków ujęty w apostrofy. Kolejne przykłady atomów: a void = Jan Kowalski --> jan_kowalski ieh2304 To nie są poprawne atomy: 2304ieh jan-kowalski Void _alfa Przykłady liczb: -17-2.67e2 0 1 99.9 512 8192 14765 67344 6.02e-23

Zmienne Zmienne mają postać atomów ale ich nazwy zaczynają się od wielkiej litery lub podkreślenia. Zmienną należy traktować jak zastępstwo obiektu, którego nie możemy w danej chwili nazwać. Gdy nazwa zmiennej nie ma znaczenia bo nie będziemy używać jej wartości, to można użyć zmiennej anonimowej zapisanej jako znak podkreślenia.?- lubi(jan, _).

Struktury Struktury w standardzie Prologu nazywane są termami złożonymi. Struktura to pojedynczy obiekt złożony z zestawu innych obiektów, nazywanych składnikami struktury.

Struktury p o s i a d a ( jan, k s i a z k a ). p o s i a d a ( maria, k s i a z k a ). Oboje posiadają tę samą książkę!

Struktury p o s i a d a ( jan, wichrowe_wzgorza ). p o s i a d a ( maria, moby_dick ). Czy wichrowe wzgórza to tytuł książki czy np. imię królika?

Struktury Struktury zapisuje się podając funktor oraz jego składniki. p o s i a d a ( jan, k s i a z k a ( wichrowe_wzgorza, b r o n t e ) ). W powyższym przykładzie funktorem jest ksiazka a jego dwoma składnikami wichrowe_wzgorza i bronte. p o s i a d a ( jan, k s i a z k a ( wichrowe_wzgorza, a u t o r ( emily, b r o n t e ) ) ).?- posiada(jan, ksiazka(x, autor(_, bronte))). p o s i a d a ( jan, k s i a z k a ( wichrowe_wzgorza, a u t o r ( emily, b r o n t e ), 3 1 2 9 ) ).

Znaki A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9! " # $ % & ( ) = - ~ ^ \ { } [ ] _ @ + ; * : < >,.? /

Operatory Zamiast funktorów przed składnikami wygodniej czasami pisać operatory między argumentami: Operatory nie powodują wykonania jakichkolwiek obliczeń. W Prologu 3+4 nie jest równoważne z 7, jest to inny zapis termu +(3, 4). Aby poprawnie zinterpretować term zawierający operatory musimy znać ich: położenie, priorytety i łączność.

Równość i unifikacja?- X = Y. Prolog stara się dopasować X i Y. O unifikacji można myśleć jako o próbie uczynienia X i Y równymi. Predykat równości jest predykatem wbudowanym. Działa tak, jakby był zdefiniowany za pomocą faktu: X = X.

Równość i unifikacja?- jedzie(student, rower) = X. X = jedzie(student, rower).?- jedzie(student, rower) = jedzie(student, X). X = rower.?- a(b, C, d(e, F, g(h, i, J))) = a(b, c, d(e, f, g(h, i, j))). C = c, F = f, J = j, B = b, E = e, H = h.

Arytmetyka Poniższe operatory można zapisywać między dwoma wyrażeniami arytmetycznymi i porównywane są ich wartości liczbowe: X =:= Y X =\= Y X < Y X > Y X =< Y X >= Y X i Y są tą samą liczbą X i Y są różnymi liczbami X jest mniejsze od Y X jest większe od Y X jest mniejsze lub równe Y X jest większe lub równe Y W porównywanych wyrażeniach wszystkie zmienne muszą mieć już wcześniej nadane wartości liczbowe.

Arytmetyka % l a t a panowania w a l i j s k i c h wladcow wlada ( r h o d r i, 844, 8 7 8 ). wlada ( anarawd, 878, 9 1 6 ). wlada ( hywel_dda, 916, 9 5 0 ). wlada ( lago_ap_idwal, 950, 9 7 9 ). wlada ( hywel_ap_ieuaf, 979, 9 8 5 ). wlada ( cadwallon, 985, 9 8 6 ). wlada ( maredudd, 986, 9 9 9 ). Kto był księciem w danym roku? X był księciem w roku Y, jeśli: X panował między rokiem A i B oraz Y mieści się między A a B z tymi latami włącznie.

Arytmetyka k s i a z e (X, Y) : wlada (X, A, B), Y >= A, Y =< B.?- ksiaze(cadwallon, 986). true.?- ksiaze(rhodri, 1979). false.?- ksiaze(x, 900). X = anarawd ; false.?- ksiaze(x, 979). X = lago_ap_idwal ; X = hywel_ao_ieuaf ; false.

Arytmetyka % p o p u l a c j a w m i l i o n a c h w roku 1976 l u d ( usa, 2 0 3 ). l u d ( i n d i e, 5 4 8 ). l u d ( chiny, 8 0 0 ). l u d ( b r a z y l i a, 1 0 8 ). % o b s z a r k r a j u w m i l i o n a c h m i l kwadratowych o b s z a r ( usa, 3 ). o b s z a r ( i n d i e, 1 ). o b s z a r ( chiny, 4 ). o b s z a r ( b r a z y l i a, 3 ). % g e s t o s c z a l u d n i e n i a g e s t o s c (X, Y) : l u d (X, P), o b s z a r (X, A), Y i s P/A.

Arytmetyka Prawym argumentem predykatu is jest term interpretowany jako wyrażenie arytmetyczne. Obliczona wartość wyrażenia arytmetycznego jest dopasowana do lewego argumentu.?- X is 2+2. X = 4.?- 4 is 2+2. true.?- 2+2 is 4. false.

Arytmetyka?- gestosc(chiny, X). X = 200?- gestosc(turcja, X). false. Wszystkie implementacje powinny obsługiwać następujące operatory arytmetyczne: X + Y X - Y X * Y X / Y X // Y X mod Y suma X i Y różnica X i Y iloczyn X i Y iloraz X i Y całkowity iloraz X przez Y reszta z dzielenia X przez Y

Udane spełnienie koniunkcji celów k o b i e t a ( maria ). r o d z i c (C, M, F) : matka (C, M), o j c i e c (C, F ). matka ( jan, anna ). matka ( maria, anna ). o j c i e c ( maria, f e r d y n a n d ). o j c i e c ( jan, f e r d y n a n d ).?- kobieta(maria), rodzic(maria, M, F), ojciec(jan, M, F).

Udane spełnienie koniunkcji celów kobieta(maria) rodzic(maria, M, F) rodzic(jan, M, F) Sekwencja jeszcze nie spełnionych celów.

Sekwencja spełnionych celów, zmienne zostały już ukonkretnione. Działanie Prologu Udane spełnienie koniunkcji celów kobieta(maria) rodzic(maria, anna, ferdynand) rodzic(jan, anna, ferdynand)

Udane spełnienie koniunkcji celów kobieta(maria) rodzic(maria, M, F) (1) matka(maria, M) ojciec(maria, F) rodzic(jan, M, F)

Udane spełnienie koniunkcji celów kobieta(maria) rodzic(maria, M, F) (1) matka(maria, anna) (2) ojciec(maria, ferdynand) (1) rodzic(jan, M, F)

Udane spełnienie koniunkcji celów?- trace. true. [trace]?- kobieta(maria), rodzic(maria, M, F), rodzic(jan, M, F). Call: (8) kobieta(maria)? creep Exit: (8) kobieta(maria)? creep Call: (8) rodzic(maria, _G16787, _G16788)? creep Call: (9) matka(maria, _G16787)? creep Exit: (9) matka(maria, anna)? creep Call: (9) ojciec(maria, _G16788)? creep Exit: (9) ojciec(maria, ferdynand)? creep Exit: (8) rodzic(maria, anna, ferdynand)? creep Call: (8) rodzic(jan, anna, ferdynand)? creep Call: (9) matka(jan, anna)? creep Exit: (9) matka(jan, anna)? creep Call: (9) ojciec(jan, ferdynand)? creep Exit: (9) ojciec(jan, ferdynand)? creep Exit: (8) rodzic(jan, anna, ferdynand)? creep M = anna, F = ferdynand. [trace]?- notrace. true.

Cele i nawracanie Rozpatrzmy następujący prosty program: p ( a ). p ( b ). q ( b ). q ( c ). Zadajmy cel:?- p(x), q(y), X = Y. Odpowiada on poszukiwaniu części wspólnej zbiorów {a, b} i {b, c}.

Cele i nawracanie odpowiedź: no p(x), q(y), X=Y. X=a Y=b a=b niepowodzenie powoduje nawrót Y=c a=c niepowodzenie powoduje nawrót nie ma innych wartości dla Y więc nawrót X=b Y=b b=b Y=c odpowiedź: X=b, Y=b naciśnięcie średnika powoduje nawrót niemożność sprawdzenia warunku b=b na inny sposób powoduje nawrót b=c niepowodzenie powoduje nawrót nie ma innych wartości dla Y więc nawrót nie ma innych wartości dla X więc nawrót (rys. własny)

Cele i nawracanie [trace]?- p(x), q(y), X = Y. Call: (8) p(_g2260)? creep Exit: (8) p(a)? creep Call: (8) q(_g2262)? creep Exit: (8) q(b)? creep Call: (8) a=b? creep Fail: (8) a=b? creep Redo: (8) q(_g2262)? creep Exit: (8) q(c)? creep Call: (8) a=c? creep Fail: (8) a=c? creep Redo: (8) p(_g2260)? creep Exit: (8) p(b)? creep Call: (8) q(_g2262)? creep Exit: (8) q(b)? creep Call: (8) b=b? creep Exit: (8) b=b? creep X = Y, Y = b.

Cele i nawracanie Zwróć uwagę, że SWI-Prolog po znalezieniu pierwszej odpowiedzi nie kontynuuje poszukiwania następnej, bo wie, że jej nie ma. Ten sam cel można zapisać prościej i uzyskać odpowiedź jeszcze mniejszą liczbą nawrotów: [trace]?- p(x), q(x). Call: (8) p(_g2260)? creep Exit: (8) p(a)? creep Call: (8) q(a)? creep Fail: (8) q(a)? creep Redo: (8) p(_g2260)? creep Exit: (8) p(b)? creep Call: (8) q(b)? creep Exit: (8) q(b)? creep X = b.