Úvod do umělé inteligence, jazyk Prolog

Podobné dokumenty
Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

klauzulí deklarativní (specifikace programu je přímo programem) popel, glum & nepil 1/18

IB013 Logické programování I Hana Rudová. jaro 2011

Logika a logické programování

Logické programování I

Logické programování

Seminární práce z Teorie ICT

C2142 Návrh algoritmů pro přírodovědce

Umělá inteligence a rozpoznávání

Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1

Matematická logika. Miroslav Kolařík

popel, glum & nepil 16/28

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

Programovací jazyk Prolog

Programování v čistém Prologu

Václav Matoušek KIV. Umělá inteligence a rozpoznávání. Václav Matoušek / KIV

Využití principů, ale vlastní naprogramování řešících

Logické programování s omezujícími podmínkami. Constraint Logic Programming: CLP

Domény. Petr Štěpánek. S využitím materialu Krysztofa R. Apta

Úvod do TI - logika Logické programování, PROLOG (10.přednáška) Marie Duží

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Prolog 1-1. Rodinné vztahy pomocí Prologu:

ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA PROVOZNĚ EKONOMICKÁ FAKULTA KATEDRA INFORMAČNÍHO INŽENÝRSTVÍ

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Marie Duží

Prohledávání do šířky = algoritmus vlny

Výroková a predikátová logika - XII

MATEMATICKÁ TEORIE ROZHODOVÁNÍ

Zabýváme se konstrukcí racionálních agentů.

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Logický agent, výroková logika

Obsah: Organizace předmětu IB030. Situace na FI MU

MATEMATICKÁ TEORIE ROZHODOVÁNÍ

Obsah: CLP Constraint Logic Programming. u odpovědí typu A, B, C, D, E: jako 0)

Klauzulární logika. úvod. Šárka Vavrečková. 20. října Ústav informatiky Filozoficko-Přírodovědecká fakulta Slezské univerzity, Opava

Výroková a predikátová logika - V

IB015 Neimperativní programování. Neimperativní programování v Prologu. Jiří Barnat

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Logický agent, výroková logika

Výroková logika syntaxe a sémantika

Výroková logika. Sémantika výrokové logiky

Logický agent, výroková logika

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Metody návrhu algoritmů, příklady. IB111 Programování a algoritmizace

Úvod do logiky a logického programování.

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Umělá inteligence I. Roman Barták, KTIML.

Logický agent, výroková logika.

1 Prolog. 1.1 Histroie. 1.2 Základní rysy Prologu. 1.3 Databáze Prologu

H. Dreyfuss: What computers can t do, 1972 What computers still can t do, J. Weizenbaum. Computer power and human reason, 1976

Logický agent, výroková logika. Návrh logického agenta

Logické programování

Obsah: Problém osmi dam

Výroková a predikátová logika - II

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Matematická logika. Lekce 1: Motivace a seznámení s klasickou výrokovou logikou. Petr Cintula. Ústav informatiky Akademie věd České republiky

Programovací jazyk Prolog

2.5 Rezoluční metoda v predikátové logice

4.2 Syntaxe predikátové logiky

Úvod do teoretické informatiky

Obsah Předmluva Rekapitulace základních pojmů logiky a výrokové logiky Uvedení do predikátové logiky...17

Modely Herbrandovské interpretace

Rezoluce v predikátové logice

LOGIKA VÝROKOVÁ LOGIKA

UDL 2004/2005 Cvičení č.6 řešení Strana 1/5

Reprezentace znalostí. Katedra kybernetiky, ČVUT v Praze.

Algoritmizace a programování

Výroková a predikátová logika - III

Klasická predikátová logika

Implementace LL(1) překladů

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Rezoluce v predikátové logice

10. Techniky formální verifikace a validace

Biologicky inspirované výpočty. Schématické rozdělení problematiky a výuky

Výroková a predikátová logika - II

Soulad studijního programu. Aplikovaná informatika

6. Logika a logické systémy. Základy logiky. Lucie Koloušková, Václav Matoušek / KIV. Umělá inteligence a rozpoznávání, LS

Částečná korektnost. Petr Štěpánek. S využitím materialu Krysztofa R. Apta

Výroková a predikátová logika - VI

Occur-check (Test konfliktu proměnných)

Programovací jazyk Pascal

Rezoluce ve výrokové logice

Negace bázového atomu Negace atomu s existenčním termem Negace klauzule Negace množiny klauzulí Predikát rovnosti. Klauzulární logika

Týden 11. Přednáška. Teoretická informatika průběh výuky v semestru 1. Nejprve jsme dokončili témata zapsaná u minulé přednášky.

I) Příklady (převeďte následující věty do formulí PL1 a ověřte jejich ekvivalenci pomocí de Morganových zákonů):

Rekurzivní algoritmy

Katedra kybernetiky laboratoř Inteligentní Datové Analýzy (IDA) Katedra počítačů, Computational Intelligence Group

Od Aristotela k Prologu

Znalosti budeme nejčastěji vyjadřovat v predikátové logice prvního řádu. Metody:

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

Základy umělé inteligence

Predik atov a logika - pˇredn aˇska () Predik atov a logika - pˇredn aˇska / 16

Transkript:

Úvod do umělé inteligence, jazyk Prolog Aleš Horák E-mail: hales@fi.muni.cz http://nlp.fi.muni.cz/uui/ Obsah: Organizace předmětu PB016 Co je umělá inteligence Úvod do umělé inteligence 1/12 1 / 22

Organizace předmětu PB016 Organizace předmětu PB016 Hodnocení předmětu: průběžná písemka (max 32 bodů) v 1 /2 semestru v rámci 6. přednášky, pro všechny jediný termín závěrečná písemka (max 96 bodů) dva řádné a jeden opravný termín hodnocení součet bodů za obě písemky (max 128 bodů) známka A za více než 115 bodů známka E za více než 63 bodů rozdíly zk, k, z různé limity někteří můžou získat body za studentské referáty až 20 bodů za kvalitní text (cca 5 stran) + 10 20 minut referát nutné před průběžnou písemkou domluvit téma projekt/program, algoritmus z Náplně předmětu domluva e-mailem návrh tématu, který musí projít schválením kdo opraví chybu nebo vylepší příklady z přednášek, může dostat 1 5 bodů (celkem max 5) Úvod do umělé inteligence 1/12 2 / 22

Základní informace Organizace předmětu PB016 Základní informace cvičení samostudium, v rámci třetího kreditu web stránka předmětu http://nlp.fi.muni.cz/uui/ http://nlp.fi.muni.cz/uui/priklady/ příklady z přednášek slajdy průběžně doplňovány na webu předmětu kontakt na přednášejícího Aleš Horák <hales@fi.muni.cz> (Subject: PB016...) literatura: Russell, S. a Norvig, P.: Artificial Intelligence: A Modern Approach, 3rd ed., Prentice Hall, 2010. (prezenčně v knihovně) Bratko, I.: Prolog Programming for Artificial Intelligence, Addison-Wesley, 2001. (prezenčně v knihovně) slajdy na webu předmětu Jirků, Petr: Programování v jazyku Prolog, Praha : Státní nakladatelství technické literatury, 1991. Úvod do umělé inteligence 1/12 3 / 22

Náplň předmětu Organizace předmětu PB016 Náplň předmětu 1 úvod do UI, jazyk Prolog (19.9.) 2 operace na datových strukturách (26.9.) 3 prohledávání stavového prostoru (3.10.) 4 heuristiky, best-first search, A* search (10.10.) 5 dekompozice problému, AND/OR grafy (17.10.) 6 problémy s omezujícími podmínkami, průběžná písemka (24.10.) 7 hry a základní herní strategie (31.10.) 8 logický agent, výroková logika (7.11.) 9 logika prvního řádu a transparentní intenzionální logika (14.11.) 10 reprezentace a vyvozování znalostí (21.11.) 11 učení, rozhodovací stromy, neuronové sítě (28.11.) 12 zpracování přirozeného jazyka (5.12.) Úvod do umělé inteligence 1/12 4 / 22

Obsah Co je umělá inteligence 1 Organizace předmětu PB016 Základní informace Náplň předmětu 2 Co je umělá inteligence Čím se budeme zabývat? 3 Principy Syntax jazyka Prolog Strom výpočtu Rozdíly od procedurálních jazyků Programujeme Fibonacciho čísla Úvod do umělé inteligence 1/12 5 / 22

Co je umělá inteligence Co je umělá inteligence systém, který se chová jako člověk Turingův test (1950) zahrnuje: zpracování přirozeného jazyka (NLP) reprezentaci znalostí (KRepresentation) vyvozování znalostí (KReasoning) strojové učení (počítačové vidění) (robotiku) od 1991 Loebnerova cena (Loebner Prize) každý rok $4.000 za nejlidštější program, nabízí $100.000 a zlatá medaile za složení celého Turingova testu Úvod do umělé inteligence 1/12 6 / 22

Co je umělá inteligence systém, který mysĺı jako člověk snaha porozumět postupům lidského myšlení kognitivní (poznávací) věda využívá poznatků neurologie, neurochirurgie,... např. COLING 2000 Angela Friederici: Language Processing in the Human Brain Max Planck Institute of Cognitive Neuroscience, Leipzig měření Event Related Potentials (ERP) v mozku jako potvrzení oddělení syntaxe a sémantiky při zpracování věty Úvod do umělé inteligence 1/12 8 / 22

Co je umělá inteligence systém, který mysĺı rozumně od dob Aristotela (350 př.n.l.) náplň studia logiky problém umět najít řešení teoreticky prakticky (složitost a vyčíslitelnost) problém neúplnost a nejistota vstupních dat systém, který se chová rozumně inteligentní agent systém, který jedná za nějakým účelem jedná samostatně jedná na základě vstupů ze svého prostředí pracuje delší dobu adaptuje se na změny Úvod do umělé inteligence 1/12 9 / 22

Co je umělá inteligence Čím se budeme zabývat? Čím se budeme zabývat? základní struktury a algoritmy běžně používané při technikách programovaní pro inteligentní agenty strategie řešení, prohledávání stavového prostoru, heuristiky,... s příklady v jazyce Prolog a Python Úvod do umělé inteligence 1/12 10 / 22

Obsah 1 Organizace předmětu PB016 Základní informace Náplň předmětu 2 Co je umělá inteligence Čím se budeme zabývat? 3 Principy Syntax jazyka Prolog Strom výpočtu Rozdíly od procedurálních jazyků Programujeme Fibonacciho čísla Úvod do umělé inteligence 1/12 11 / 22

Historie: 70. l. Colmerauer, Kowalski; D.H.D. Warren (WAM); CLP, paralelní systémy PROgramování v LOGice; část predikátové logiky prvního řádu (logika Hornových klauzuĺı) deklarativnost (specifikace programu je přímo programem) řešení problémů týkajících se objektů a vztahů mezi nimi Prology na FI: SICStus Prolog (modul sicstus) SWI (modul pl) ECLiPSe (modul eclipse) stroje aisa, erinys, oreias, nymfe verze Úvod do umělé inteligence 1/12 12 / 22

Příklad Principy jednoduchý příklad DB rodinných vztahů: otec(milan,dana). otec(milan,petr). otec(jan,david). matka(pavla,dana). matka(pavla,petr). matka(jana,david). rodic(x,y):- otec(x,y). rodic(x,y):- matka(x,y). Úvod do umělé inteligence 1/12 13 / 22

Příklad Principy jednoduchý příklad DB rodinných vztahů: otec(milan,dana). otec(milan,petr). otec(jan,david). matka(pavla,dana). matka(pavla,petr). matka(jana,david). fakty (DB) rodic(x,y):- otec(x,y). rodic(x,y):- matka(x,y). Úvod do umělé inteligence 1/12 13 / 22

Příklad Principy jednoduchý příklad DB rodinných vztahů: otec(milan,dana). otec(milan,petr). otec(jan,david). matka(pavla,dana). matka(pavla,petr). matka(jana,david). rodic(x,y):- otec(x,y). rodic(x,y):- matka(x,y). fakty (DB) pravidla Úvod do umělé inteligence 1/12 13 / 22

Příklad Principy jednoduchý příklad DB rodinných vztahů: otec(milan,dana). otec(milan,petr). otec(jan,david). matka(pavla,dana). matka(pavla,petr). matka(jana,david). rodic(x,y):- otec(x,y). rodic(x,y):- matka(x,y). fakty (DB) pravidla? otec(x,dana). X = milan Yes Úvod do umělé inteligence 1/12 13 / 22

Příklad Principy jednoduchý příklad DB rodinných vztahů: otec(milan,dana). otec(milan,petr). otec(jan,david). matka(pavla,dana). matka(pavla,petr). matka(jana,david). rodic(x,y):- otec(x,y). rodic(x,y):- matka(x,y). fakty (DB) pravidla? otec(x,dana).? rodic(x,david). X = milan X = jan ; Yes X = jana ; Úvod do umělé inteligence 1/12 13 / 22

Principy Principy backtracking řízený unifikací, hojně využívá rekurzi spojitost s logikou: důkaz pravdivosti cíle; cíl je dokázán, unifikuje-li s hlavou nějaké klauzule a všechny podcíle v těle této klauzule jsou rovněž dokázány. Strategie výběru podcíle: shora dolů, zleva doprava. unifikace: řídicí mechanismus, hledání nejobecnějšího unifikátoru dvou termů. info(manzel,dana,deti,svatba( 20.12.1940 )) = info(petr,dana,[jan,pavel],info). po unifikaci: Manzel=petr, Deti=[jan,pavel], Info=svatba( 20.12.1940 ) backtracking: standardní metoda prohledávání stavového prostoru do hloubky (průchod stromem nesplnitelný cíl návrat k nejbližšímu minulému bodu s alternativní volbou) rekurze potomek(x,y):- rodic(y,x). potomek(x,y):- rodic(z,x), potomek(z,y). Úvod do umělé inteligence 1/12 14 / 22

Syntax jazyka Prolog Syntax jazyka Prolog logický (prologovský) program seznam klauzuĺı (pravidel a faktů) nikoli množina klauzule seznam literálů Literál před :- je hlava, ostatní literály tvoří tělo klauzule. Význam klauzule je implikace: hlava:-tělo1, tělo2,... tělo1 tělo2... hlava Pokud je splněno tělo1 a současně tělo2 a současně..., pak platí také hlava. 3 možné typy klauzuĺı: fakt: hlava bez těla. Zápis v Prologu: p(x,y). (ekv. p(x,y):-true.) pravidlo: hlava i tělo. Prolog: p(z,x) :- p(x,y), p(y,z). cíl: tělo bez hlavy. Prolog:?- p(g,f). predikát seznam (všech) klauzuĺı se stejným funktorem a aritou v hlavovém literálu. Zapisuje se ve tvaru funktor/arita potomek/2. Úvod do umělé inteligence 1/12 15 / 22

Syntax jazyka Prolog literál atomická formule, nebo její negace atomická formule v Prologu zcela odpovídá složenému termu (syntaktický rozdíl neexistuje) term: konstanta: a, 1,., [], sc2 atomic/1 (metalogické testování na konstantu) atom/1, number/1 proměnná: X, Vys, var/1 (metalogické testování na proměnnou) složený term: f(a,x) funktor, argumenty, arita functor/3 dává funktor termu, arg/3 dává n-tý argument zkratka pro zápis seznamů: [1,a,b3] odpovídá struktuře. (1,. (a,. (b3, []))) Úvod do umělé inteligence 1/12 16 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking 2, otec(milan,y) % Y = petr Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking 2, otec(milan,y) % Y = petr 3, dana \= petr % true Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking 2, otec(milan,y) % Y = petr 3, dana \= petr % true 4, matka(m,dana) % M = pavla Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking 2, otec(milan,y) % Y = petr 3, dana \= petr % true 4, matka(m,dana) % M = pavla 5, matka(pavla,petr) % true Úvod do umělé inteligence 1/12 17 / 22

Příklad Syntax jazyka Prolog predikát sourozenci(x,y) je true, když X a Y jsou (vlastní) sourozenci. sourozenci(x,y):- otec(o,x), otec(o,y), X\=Y, matka(m,x), matka(m,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y).? sourozenci(dana,y). 1, otec(o,dana) % O = milan 2, otec(milan,y) % Y = dana 3, dana \= dana % fail backtracking 2, otec(milan,y) % Y = petr 3, dana \= petr % true 4, matka(m,dana) % M = pavla 5, matka(pavla,petr) % true Y = petr Yes Úvod do umělé inteligence 1/12 17 / 22

Strom výpočtu Strom výpočtu Dotaz?- sourozenci(dana,y). 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y). 9 sourozenci(x,y):- otec(o,x), otec(o,y), 10 X\=Y, 11 matka(m,x), matka(m,y). Úvod do umělé inteligence 1/12 18 / 22

Strom výpočtu Strom výpočtu Dotaz?- sourozenci(dana,y). sourozenci(dana,y) 9 1 otec(milan,dana). 2 otec(milan,petr). 3 otec(jan,david). 4 matka(pavla,dana). 5 matka(pavla,petr). 6 matka(jana,david). 7 rodic(x,y):- otec(x,y). 8 rodic(x,y):- matka(x,y). 9 sourozenci(x,y):- otec(o,x), otec(o,y), 10 X\=Y, 11 matka(m,x), matka(m,y). otec(o,dana), otec(o,y),... otec(milan,y), dana\=y,... dana\=dana, matka(m,dana),... unif fail 1 1 2 dana\=petr, matka(m,dana),... unif matka(m,dana), matka(m,petr) 4 matka(pavla,petr) Úvod do umělé inteligence 1/12 18 / 22 5 true Y=petr

Rozdíly od procedurálních jazyků Rozdíly od procedurálních jazyků single assignment = (unifikace) vs. přiřazovací příkaz, == (identita), is (vyhodnocení aritm. výrazu). rozdíly:? A=1, A=B. % B=1 Yes? A=1, A==B. % No? A=1, B is A+1. % B=2 Yes vícesměrnost predikátů (omezená, obzvláště při použití řezu)? otec(x,dana).? otec(milan,x).? otec(x,y). (rozlišení vstupních/výstupních proměnných: + -?) cykly, podmíněné příkazy tiskniseznam(s) :- write( seznam=[ ),nl,tiskniseznam(s,1). tiskniseznam([], ) :- write( ] ),nl. tiskniseznam([h T],N):- tab(4),write(n),write( : ),write(h),nl,n1 is N+1, tiskniseznam(t,n1). Úvod do umělé inteligence 1/12 19 / 22

Programujeme Programujeme consult( program.pl ). % kompiluj program.pl [ program.pl,program2]. % kompiluj program.pl, program2.pl listing. % vypiš programové predikáty trace, rodic(x,david). % trasuj volání predikátu notrace. % zruš režim trasování halt. % ukonči interpret Úvod do umělé inteligence 1/12 20 / 22

Fibonacciho čísla Fibonacciho čísla Fibonacciho čísla jsou čísla z řady: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,... Rekurenční vzorec této řady je: fib 0 = 0 fib 1 = 1 fib i = fib i 1 +fib i 2,pro i 2 Úvod do umělé inteligence 1/12 21 / 22

Fibonacciho čísla Fibonacciho čísla Fibonacciho čísla jsou čísla z řady: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,... Rekurenční vzorec této řady je: fib 0 = 0 fib 1 = 1 fib i = fib i 1 +fib i 2,pro i 2 Přepis do Prologu je přímočarý: fib(0,0). fib(1,1). fib(x,y) :- X1 is X 1, X2 is X 2, fib(x1,y1), fib(x2,y2), Y is Y1+Y2. Úvod do umělé inteligence 1/12 21 / 22

Fibonacciho čísla II Fibonacciho čísla Předchozí program exponenciální časová složitost (konstatní pamět ová) Úvod do umělé inteligence 1/12 22 / 22

Fibonacciho čísla II Fibonacciho čísla Předchozí program exponenciální časová složitost (konstatní pamět ová) Využití extralogických predikátů lineární časová složitost (a lineární pamět ová) fib(0,0). fib(1,1). fib(x,y) :- X1 is X 1, X2 is X 2, fib(x1,y1), fib(x2,y2), Y is Y1+Y2, asserta(fib(x,y)). Úvod do umělé inteligence 1/12 22 / 22