1 / 25

Logické programování

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)

Download Presentation

Logické programování

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Logické programování Úvodní přednáška

  2. 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.

  3. 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.

  4. 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)

  5. 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

  6. Ú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

  7. 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

  8. 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á

  9. 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

  10. LPA Prolog

  11. LPA Prolog

  12. PROLOG snadno a rychle

  13. 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).

  14. 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

  15. 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).

  16. 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*/

  17. 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

  18. 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

  19. 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“)

  20. 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é

  21. 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

  22. 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?“

  23. 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

  24. 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

  25. 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).

More Related