Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Logické programování Úvodní přednáška."— Transkript prezentace:

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

2 Průběh výuky Přednášky Cvičení Přednášky/cvičení - 2/2
prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení Ing. Barbora Tesařová, Ph.D.

3 Ukončení předmětu Zápočet Zkouška - písemná a ústní, 4 úlohy
- 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. Gaudeamus, 2003. Clocksin, W. F., Mellish, C. S.: Programming in Prolog. Springer (5th edition), 2013. Bramer, M.: Logic Programming with Prolog Springer (2nd edition), 2013. Levesque, H. J.: Thinking as Computation MIT Press, 2017. Bratko, I.: Prolog – Programming for AI Addison Wesley (3rd edition), 2000.

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 Kryl, R.: Úvod do programovacího jazyka Prolog 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 Stručný pohled do historie
verze, A.Colmerauer na univerzitě v Marseilles R.Kowalski vytvořil teoretický model jazyka, na který navázaly další implementace nejúspěšnější verze D.H.D.Warrena, popsaná v učebnici W.F.Clocksina a C.S.Mellishe "Programming in Prolog" v Japonsku byl Prolog zvolen za základní jazyk centrální jednotky počítače páté generace Je to jazyk minulého století? IEEE Top Programming Languages – 34/50 (2018) Vesmírná stanice NASA, Watson od IBM (Jeopardy), …

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 Proč se mám učit Prolog? Informatik by měl znát i nějaký neprocedurální jazyk Krátké programy jsou vhodné k hlubšímu pochopení algoritmizace Programování spočívá ve specifikaci problému, což umožňuje snadno měnit program při změně specifikace Logické programování je dobrým základem pro další studium reprezentace znalostí, umělé inteligence a expertních systémů Naučíte se programovat s použitím rekurze, která je dostupná ve většině programovacích jazyků, ale je obvykle považována za pokročilou techniku, a snad i proto je často opomíjena

10 PROLOG snadno a rychle

11 Formální skutečnosti (fakta)
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

12 LPA Prolog

13 LPA Prolog

14 Programování v Prologu
Programování v PROLOGu spočívá v deklarování určitých faktů o objektech a relacích president(trump,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).

15 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

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

17 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 */

18 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

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

20 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“)

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

22 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

23 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). lze interpretovat jako „má někdo rád Mary nebo Lisu?“

24 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

25 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;

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


Stáhnout ppt "Logické programování Úvodní přednáška."

Podobné prezentace


Reklamy Google