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í Doc. RNDr. Kamila Olševičová, Ph.D. 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. (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 – programming for 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 Programování v Prologu (Filip Rubáček) 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 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

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

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

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). lze interpretovat 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;

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


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

Podobné prezentace


Reklamy Google