250 likes | 366 Views
Logické programování. Úvodní přednáška. Průběh výuky Přednášky/cvičení - 2/2 Přednášky prof. RNDr. Josef Hynek, MBA, Ph.D . Cvičení Doc. RNDr. Kamila Olševičová , Ph.D . Ing. Barbora Tesařová, Ph.D. Ukončení předmětu Zápočet - dva písemné testy (polovina a konec semestru)
E N D
Logické programování Úvodní přednáška
Průběh výuky • Přednášky/cvičení - 2/2 Přednášky • prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení • Doc. RNDr. Kamila Olševičová, Ph.D. • Ing. Barbora Tesařová, Ph.D.
Ukončení předmětu • Zápočet - dva písemné testy (polovina a konec semestru) - podmínky budou specifikovány na cvičeních • Zkouška - písemná a ústní, 4 úlohy Vzorové zadání • Zadaný seznam reálných čísel S rozdělte na dvě části (libovolným způsobem) tak, aby součet čísel v obou částech byl stejný (např. pro seznam S=[1,3,2,4] bude výsledek S1 = [1,4], S2 = [3,2] ). • Napište program, který navrhne obarvení zadané mapy čtyřmi barvami (viz. skripta str. 199). • Logický problém (viz. přednáška nebo skripta str. 213). • Napište program, který rozhodne, zda zadané číslo N je prvočíslo.
Literatura • Hynek,J., Mikulecký,P.: Logické programovánía Prolog. (1995, 2003) • Kolář,J.: Jazyky pro umělou inteligenci. (1998) • Jirků,P.: Programování v jazyku Prolog. (1991) • Polák,J.: Prolog. (1995) • Clocksin,W.F., Mellish, C.S.: Programming in Prolog. (2003) • Bratko,I.: Prolog – programmingfor AI. (2000) • Censki, A.: Prolog Techniques. (http://bookboon.com)
Další zdroje • kurz Logické programování I. http://oliva.uhk.cz Nemáte-li do kurzu přístup, zašlete svůj login na adresu kamila.olsevicova@uhk.cz • Programování v Prologu (Filip Rubáček) http://iris.uhk.cz/logpro/ • Kryl, R.: Úvod do programovacího jazyka Prolog http://ksvi.mff.cuni.cz/~kryl/prolog.pdf • Learn Prolog Now! http://www.coli.uni-sb.de/~kris/learn-prolog-now/ • Amzi! Prolog, Arity Prolog, B-Prolog, Strawberry Prolog, SWI – Prolog, Visual Prolog … lze najít a stáhnout z webu
Úvod • Logické programování = disciplína matematické informatiky • Prolog = PROgramování v LOGice • jazyk pro programování symbolických výpočtů, založený na matematické logice • vhodný k řešení problémů z oblasti umělé inteligence
Pohled do historie • 1972 - 1. verze, A.Colmerauer na univerzitě v Marseilles • 1974 - R.Kowalski vytvořil teoretický model jazyka, na který navázaly další implementace • 1977 - nejúspěšnější verze D.H.D.Warrena, popsaná v učebnici W.F.Clocksina a C.S.Mellishe "Programming in Prolog" • 1981 - v Japonsku byl Prolog zvolen za základní jazyk centrální jednotky počítače páté generace
Prolog je jazyk... • neprocedurální - postup řešení problému není to, co by nás nejvíc zajímalo • deklarativní - při psaní programu deklarujeme fakta a pravidla, jimiž popíšeme vlastnosti a vztahy mezi objekty • konverzační - uživatel klade dotazy, na které mu Prolog odpovídá • interaktivní - pokud uživatel dotazy neklade, Prolog nepracuje a čeká
Příklad Textový editor kral('Premysl Otakar I.',1197,1230). kral('Vaclav I.',1230,1253). kral('Premysl Otakar II.',1253,1278). predchudce(Prvni, Druhy):-kral(Prvni,_,Do),kral(Druhy,Do,_). naslednik(A,B):-predchudce(B,A). ?- kral('Vaclav I.',1230,1253). yes ?- kral(X, 1253,Rok). X = 'Premysl Otakar II.‚, Rok = 1278 Formální skutečnosti (fakta) Relace (pravidla) Konzole Konverzace s Prologem
PROLOG snadno a rychle
Programování v Prologu • Programování v PROLOGu spočívá v • deklarování určitých faktů o objektech a relacích president(obama,usa). • definování pravidel vztahujících se k objektům a relacím vip(Person):-president(Person,Country). • kladení otázek na objekty a relace ?-president(Who,czech_republic).
Deklarování faktů Tom má rád Janu. Jana má ráda Toma. • Jednodušší gramatika AJ: Tom likes Jane. Jane likes Tom. • Přepis v PROLOGu: likes(tom, jane). likes(jane, tom). • Jména relací (predikáty) i objektů (argumenty) začínají malým písmenem • Každý predikát má pevně danou aritu (počet argumentů) – predikát likes má aritu 2
Deklarování faktů • Argumenty jsou uvedeny v závorce a na konci sdělení je tečka • Pořadí argumentů má obvykle svůj význam a je třeba jej zachovávat likes(tom, jane).často neznamená likes(jane, tom). • Jména relací mohou být libovolná, ale lépe je používat s rozmyslem a udržet si přehled likes(jane,tom). jistě může být totéž co li34(t6, j_1). • Lze deklarovat i zjevné nepravdy king(obama, china).
Deklarování faktů • Další příklady girl(jane). father(george, lisa). parents(george, mary, lisa). friends(angel, mary, lisa, laura, barbara). president(`Putin`,`Russia`). president(putin, russia). % POZOR- jiné objekty!!! king(carlos, spain). /* soubor deklarovaných faktů a pravidel se v PROLOGu nazývá databáze*/
Kladení otázek ?-father(george, lisa). • Položíme-li nějaký dotaz, PROLOG hledá odpověď v databázi, kterou jsme mu předtím poskytli • Databáze je prohledávána shora dolů s cílem nalézt fakta a pravidla, která s dotazem souvisí • Mluvíme o tzv. unifikaci (matching) • Dvě fakta lze unifikovat, jestliže jejich predikáty jsou stejné, mají stejnou aritu a korespondující argumenty jsou také stejné • Pokud PROLOG nalezne skutečnost, kterou lze unifikovat se zadaným dotazem, odpoví YES, jinak odpoví NO
Kladení otázek • Předpokládejme, že máme zadanou následující databázi: likes(tom, mary). likes(tom, jane). likes(mary, money). likes(tom, food). • Nyní můžeme klást dotazy ?-likes(tom, jane). yes % proběhne unifikace s 2. řádkem ve výše uvedené databázi ?-likes(peter, jane). no % nelze unifikovat s žádným faktem ve výše uvedené databázi ?-animal(dog). no % nelze unifikovat s žádným faktem ve výše uvedené databázi
Kladení otázek • Důležité je správně chápat odpověď na položenou otázku: • YES znamená „na základě mých informací je to pravda“ ?-likes(tom, jane). yes • NO má ale hned několik významů • není to pravda (skutečně NE) • nepodařilo se ověřit „na základě mých informací“ = nevím ?-animal(dog). no • Váš program nefunguje („nepodařilo se dojít k cíli“)
Kladení obecnějších otázek • Je možné využít proměnných Who likes Mary? přepíšeme v PROLOGu jako ?-likes(Who, mary). • Jméno proměnné začíná velkým písmenem: Who, Mary, Someone_who_likes_someone_else • Proměnná může být specifikovaná (nabývá konkrétní hodnotu) nebo nespecifikovaná (hodnota proměnné není dosud známa) • Zadáme-li dotaz obsahující proměnnou, PROLOG prohledává databázi s cílem nalézt objekt, který by mohl stanout na místě proměnné
Otázka obsahující proměnnou • Předpokládejme, že máme zadanou následující databázi: likes(tom, mary). likes(tom, jane). likes(mary, money). likes(tom, food). • Předpokládejme dotaz „Co či koho má Tom rád?“ ?-likes(tom, X). X = mary; X = jane; X = food; no
Kladení ještě obecnějších otázek • Často chceme položit dotaz, který vyžaduje ověření více podmínek • Konjunkce cílů – pomocí symbolu čárka Má Tom rád Mary a má Mary ráda Toma? přepíšeme v PROLOGu jako ?-likes(tom, mary), likes(mary, tom). • Disjunkce cílů – pomocí symbolu středník ?-likes(X, mary);likes(X, lisa). lzeinterpretovat jako „má někdo rád Mary nebo Lisu?“
Splňování cílů v konjunkci • Každý cíl v konjunkci má vlastní značku (marker) • Cíle se splňují zleva doprava • Pokud se některý cíl nepodaří splnit jinak, PROLOG se vrací k cíli předchozímu, příslušnou proměnnou udělá nespecifikovanou a pokračuje od příslušné značky v dalším prohledávání databáze tzv. BACKTRACKING
Příklad • Předpokládejme, že máme zadanou následující databázi: likes(jane, food). likes(jane, wine). likes(tom, jane). likes(tom, wine). • Předpokládejme následující dotazy ?-likes(tom, jane), likes(jane, tom). no ?-likes(jane, X), likes(tom, X). X = wine; no
Pravidla • Pravidla popisují skutečnosti, které závisí na jiných skutečnostech likes(tom, X) :- girl(X). • Pravidlo se skládá z hlavy, definičního symbolu „:-“ a těla • Hlava pravidla popisuje to, co chceme definovat • Tělo určuje cíle, které musí být splněny, aby byla splněna hlava pravidla • Platnost proměnné je omezena pouze na příslušné pravidlo. likes(jane, M) :- male(M), likes(M, wine), play(M, tennis). likes(jane, M) :- animal(M), friendly(M).