" Použij t lo pravidla, kterým v dotazu nahra ást Q1.! Pro pravidla, kde T lo=true, dotaz Q1 zmizí. " Opakuj, dokud nezískáš prázdný dotaz.

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

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

Logické programování I

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Logika a logické programování

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

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

popel, glum & nepil 16/28

Operace na datových strukturách

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

Programování v čistém Prologu

Dotazování nad stromem abstraktní syntaxe

Operace na datových strukturách

Logické programování

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

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

Úvod do programovacích jazyků (Java)

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

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

Přednáška 3. Rekurze 1

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Programování v jazyce JavaScript

5 Přehled operátorů, příkazy, přetypování

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

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

RNÉ MATERIÁLY. PSYCHODIAGNOSTIKA - VYHODNOCENÍ z , 13:19 hodin

Marie Duží

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

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

Programovací jazyk Prolog

Metody odvozování. matematická východiska: logika, Prolog

SRF08 ultrazvukový dálkoměr

Skolemizace. x(x + f(x) = 0). Interpretace f unární funkce, která pro daný

Základní datové struktury

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Paradigmata programování 1

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

Implementace LL(1) překladů

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

Team Engineering. New in V13. TIA Portal news. Restricted / Siemens AG All Rights Reserved.

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Domácí úkol 2. Obecné pokyny. Dbejte na formáln správný zápis výpo tu! Pro vy íslení výsledku pro binomické rozd lení pouºijte nap. Maple nebo Matlab.

Výroková logika. Teoretická informatika Tomáš Foltýnek

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

Základní stavební prvky algoritmu

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Sémantika predikátové logiky

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Sekvenční a podmíněné provádění

Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15

Vysoké učení technické v Brně Fakulta elektrotechniky a informatiky Ústav biomedicínského inženýrství EXPERTNÍ SYSTÉMY.

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

P íklady k prvnímu testu - Scilab

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Programovací jazyk Prolog

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Pravd podobnost a statistika - cvi ení. Simona Domesová místnost: RA310 (budova CPIT) web:

Plánování výroby elekt iny a ízení rizik na liberalizovaném trhu

6. DIDAKTICKÁ JEDNOTKA PREVENCE KONFLIKTŮ, KOMUNIKACE

/01: Teoretická informatika(ti) přednáška 5

Operace nad celými tabulkami

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

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

Genetické programování

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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

platné nejsou Sokrates je smrtelný. (r) 1/??

Da D to t v o é v ty t py IB111: Datové typy

ÚVOD DO GEOGRAFICKÝCH INFORMA NÍCH SYSTÉM

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Programovací jazyk Haskell

informa ní linka: Daisy Perfect M

Algoritmizace a programování

6. Matice. Algebraické vlastnosti

Algoritmizace a programování

Standardní algoritmy vyhledávací.

NPRG030 Programování I, 2018/19 1 / :03:07

Programovací í jazyk Haskell

1. Signatura datového typu

Logické programování

Tableaux metody. Jiří Vyskočil 2011

Programování v jazyce JavaScript

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

11. Tabu prohledávání

Algoritmizace prostorových úloh

Seminární práce z Teorie ICT

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Rekurzivní algoritmy

Poslední aktualizace: 14. října 2011

Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce

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

MANUÁL PRO PRÁCI S POČÍTAČOVÝM PROGRAMEM SLUNÍČKO

Dynamické programování

Vraťme se k základům: DFS = Depth First Search

Transkript:

Cvi ení 2 Programování s omezujícími podmínkami Roman Barták Katedra teoretické informatiky a matematické logiky roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Prolog ve zkratce Prologovský program se skládá z pravidel a fakt. Každé pravidlo má strukturu Hlava:-T lo.! Hlava je (složený) term! T lo je dotaz (konjunkce term ) " T lo typicky obsahuje všechny prom nné z Hlavy! sémantika: pokud je T lo pravda potom odvo Hlavu Fakty jsou vlastn pravidla s prázdným t lem (true). Dotaz je konjunkce term : Q = Q1,Q2,,Qn. " Najdi pravidlo, jehož hlava odpovídá dotazu Q1.! Pokud je takových pravidel více, vytvo bod volby a použij první pravidlo.! Pokud neexistuje žádné pravidlo, potom se vra na poslední bod volby a zkus zde alternativní pravidlo. " Použij t lo pravidla, kterým v dotazu nahra ást Q1.! Pro pravidla, kde T lo=true, dotaz Q1 zmizí. " Opakuj, dokud nezískáš prázdný dotaz. Technologie Prologu Prolog = Unifikace + Backtracking " Unifikace (matching) slouží pro! výb r vhodného pravidla (dle hlavy)! vytvo ení odpov dní substituce! Jak? " substitucí se snaží ud lat termy syntakticky identické " Backtracking (prohledávání do hloubky) je pro! prozkoumání alternativ! Jak? " nejd íve vy eš první ást (zleva) dotazu " použij první pravidlo (shora) Unifikace " základní mechanismus pro předávání informací " vlastně syntaktická rovnost termů po substituci termů do proměnných "?-X=f(a). "?-f(x,a)=f(g(b),y). "?-f(x,b,g(a))=f(a,y,g(x)). "?-X=f(X).! kontrola výskytu m že zakázat nekone né struktury! ale cyklické struktury se n kdy hodí, protože vlastn modelují klasické ukazatele f -> X/f(a) -> X/g(b), Y/a -> X/a, Y/b -> infinite term X

Výb r pravidel " Unifikace se používá pro výb r pravidel.?-path(f(a),g).! pravidlo: path(x,y):-arc(x,y).! unifikuj hlavu: X=f(a),Y=G?-arc(f(a),G). " pravidlo(fakt): arc(a,b). " unifikuj: f(a)=a, G=b -> fail " pravidlo (fakt): arc(a,c). " unifikuj: f(a)=a, G=c -> fail " Skládání odpov di " Unifikace se používá pro složení odpov di. path(x,y,path(x,y)):- arc(x,y). path(x,y,path(x,pathzy)):- arc(x,z), path(z,y,pathzy).?-path(a,d,p). P=path(a,path(b,d)) ; P=path(a,path(b,path(c,d))) P=path(a,path(c,d)) ; no ; a b c d node(a). node(b). node(c). node(d). node(e). e arc(a,b). arc(a,c). arc(b,c). arc(b,d). arc(c,d). arc(d,e). " Jak Prolog po ítá výstup? " Akumulátor P edávání informace! áste ný výsledek je akumulovaný v atributu pravidla.! Požaduje po áte ní nastavení atributu. " Skládání substitucí! Složí výsledek z ástí, které se vybudují pozd ji.! Specifické pro Prolog a použití substituce. Symbolický sou et unárn reprezentovaných ísel (0, s(0), s(s(0)), ). Výsledek je akumulovaný v parametru pravidla. plus(0,x,x). plus(s(x),y,z):-plus(x,s(y),z). akumulátor Akumulátor?-plus(s(s(s(0))), s(0),sum).?-plus( s(s(0)), s(s(0)),sum).?-plus( s(0), s(s(s(0))),sum).?-plus( 0,s(s(s(s(0)))),Sum).

Skládání Symbolický sou et unárn reprezentovaných ísel. Výsledkem je složený term, jehož úplný obsah bude napln n pozd ji. plus2(0,x,x). plus2(s(x),y,s(z)):-plus2(x,y,z). argument pro skládání výsledku?-plus2(s(s(s(0))),s(0),s1). %S1=s(S2)?-plus2( s(s(0)),s(0),s2). %S2=s(S3)?-plus2( s(0),s(0),s3). %S3=s(S4)?-plus2( 0,s(0),S4). %S4=s(0) " Jak reprezentovat seznam prvk? " Použitím term :! struktura s ukazateli! list(a,list(b,list(c,nil))) Seznamy nil a b c " Prolog tuto strukturu poskytuje p ímo:! [Head Tail]! [a,b,c] =[a [b [c []]]]! prvkem seznam m že být cokoliv, t eba jiný seznam " [[q,2], 12, f(a,b), [[]]] " Jedná se pouze o syntaktický cukr! P íslušnost do seznamu " Jak zkontrolovat p íslušnost do seznamu? " Projitím seznamu od za átku, dokud není prvek nalezen. member(x,[x _]). member(x,[_ T]):- member(x,t). Smazání prvku " Smazání prvního výskytu X ze seznamu List. delete(list,x,listwithoutx) delete([],_,[]). delete([x T],X,T). delete([y T],X,[Y NewT]):- X\=Y, delete(t,x,newt).?-member(a,[a,b,a]).?-member(x,[a,b,a]).?-member(a,l). -> yes -> X=a; X=b; X=a -> L=[a _]; L=[_,a _], X a Y nelze unifikovat " ást seznamu p ed X je zduplikována! p vodní seznam delete([a,b,c,d,e],c,l]) a b c d nil e nový seznam po smazání c

Vložení prvku " Vložení X p ed seznam insert(l,x,lstartwithx): insert(l,x,[x L]). " P idání X na konec seznamu add(l,x,lendwithx): add([],x,[x]). add([y T],X,[Y NewT]):- add(t,x,newt).! Op t je celý seznam duplikován!! Stejná procedura m že také odebrat poslední prvek!?-add(newlist,x,[a,b,c,d]). NewList=[a,b,c] X=d " spojení dvou seznam! concat(l1,l2,l)! L1=[a,b,c], L2=[d,e] -> L=[a,b,c,d,e] concat([],l,l). concat([h T],L2,[H NewT]):- concat(t,l2,newt). Spojení seznam " asová a prostorová složitost záleží na délce prvního seznamu! " Proceduru lze použít také na rozd lení seznam.?-concat(list1,list2,[a,b,c,d]). List1=[], List2=[a,b,c,d] ; List1=[a], List2=[b,c,d] ; " Obrať seznam! revert(l,rev)! L=[a,b,c] -> Rev=[c,b,a] revert([],[]). revert([h T],Rev):- revert(t,rt), add(rt,h,rev). Pomalé a spot ebovává pam! Vyhýbejte se add (concat) ve svých kódech. Obrácení seznamu Lepší technika je užitím akumulátoru! revert1(list,rev):- rev(list,[],rev). rev([],l,l). rev([h T],Acc,Rev):- rev(t,[h Acc],Rev). délka seznamu revert revert1 50000 39 s. 0 s. Operátory " zapisovat vše formou termu není moc komfortní! srovnejme '='(X,'+'(2,3)) a X=2+3 " pro lidi je vhodn jší jiný zápis term! např. infixová notace standarních operací (posktovaných Prologem) " uživatel navíc m že definovat vlastní operátory :- op(precedence, type, name). " opět se jedná pouze o syntaktický cukr

?-X=1+2.?-3=1+2. " Term 1+2 je r zný od termu 3. Aritmetické operace! S termy totiž není spojena žádná sémantika! " Pot ebujeme speciální proceduru pro vyhodnocování numerických výraz : is?-x is 1+2. X=3 -> X=1+2 -> no " X is Expr funguje jako aritmet. vyhodnocení:! vyhodno Expr a srovnej (unifikuj) výsledek s X " Pozor: is není p i azovací p íkaz!?-x is 1+2, X is 7. íslo je speciálním tvarem atomu. Má vlastní sémantiku (je to íslo)! Aritmetické porovnání " Pokud máme ísla, m žeme je porovnávat? " Prolog poskytuje standardní dotazy na porovnání ísel:! X < Y " numerická hodnota X je menší než num. hodnota Y?-1<2.?-1+1<3.?-3<1+2. -> yes -> yes -> no! X > Y, X =< Y, X >= Y " Prolog používá prohledávání do hloubky pro výběr alternativních pravidel.! je-li více alternativ, udělá bod volby Řez " Můžeme explicitně některé alternativy zakázat?! Řez je metoda odstranění posledního bodu volby. backtracking umožn n! Head:-Body1,!,Body2. Head:-Body3. backtracking zakázán! řez test1(x,y):- member(y,[[1,2],[3,4]]),member(x,y). test1(0,[]). Řez v praxi test2(x,y):-!,member(y,[[1,2],[3,4]]),member(x,y). test2(0,[]). test3(x,y):- member(y,[[1,2],[3,4]]),!,member(x,y). test3(0,[]). test4(x,y):- member(y,[[1,2],[3,4]]),member(x,y),!. test4(0,[]). X 1 2 3 4 0 Y [1,2] [1,2] [3,4] [3,4] [] 1 2 3 4 Příklady červeného řezu Tento typ řezu není doporučen, protože mění běh výpočtu!

Efektivní řez " Odstranění nenavštívených větví výpočtu (zelený řez). Příklad: rozdělte seznam na prvky menší než X a prvky, které nejsou menší než X ( split(list,x,lessx,nolessx) ) split([],_,[],[]):-!. split([h T],X,[H T1],T2):- H<X,!, split(t,x,t1,t2). split([h T],X,T1,[H T2]):- split(t,x,t1,t2). " Jak ukázat neexistenci ešení? Negace " Užite né pro negativní dotazy typu není prvkem. \+ :Goal " nesvazuje prom nné! " Uvnit negace: not(query):- call(query),!,fail. not(_query):- true. META-PREDICATE Prologovský cíl je term, takže každý term lze použít jako dotaz. Pokud Query usp je potom neúsp ch ( ez zakáže použití alternativního pravidla), jinak úsp ch díky alternativnímu pravidlu. Negace v praxi " Negace v Prologu je negace-jako-nesp ch.! To není stejné jako logická negace! p(a). p(b). q(a).?- \+ (p(x),q(x)), X=b.?- X=b, \+ (p(x),q(x)). -> fail -> X=b " Zvláštní pozornost je potřeba věnovat negovaným cílům obsahujícím proměnné! " Jak získat všechna ešení dotazu Query? Všechna ešení findall(?template,:query,?list) Posbírá všechny odpov di na Query ve tvaru Template do seznamu List. P íklad: Najd te všechny sousedy uzlu a.?-findall(x,edge(a,x),neigborhood).?-findall(f(x),edge(a,x),neigborhood).?-findall(dzzz,edge(a,x),neigborhood). [b,c] [f(b),f(c)] [dzzz,dzzz]

Blackboard Práce s blackboardem " Jak p edávat informaci p i neúsp šném návratu (backtracking)? " Jak p edávat informaci mezi v tvemi výpo tu? " Lze p ímo použít Prologovsko databázi!! assert pro uložení informace v jedné v tvi! která budu dostupná i dále " Lepší je používat blackboard!! isté a efektivní ešení " Informace uložená na blackboardu je jednoznačně identifikována atomem, kterém se říká klíč (atom si volí uživatel). " bb_put(:key, +Term) " bb_get(:key,?term) " bb_delete(:key,?term) " bb_update(:key,?oldterm,?newterm) Blackboard-p íklad Blackboard v praxi " Otestujte splnitelnost dotazu Query bez svázání prom nných. sat(query, _Answer):- bb_put(sat,no), once(query), % finds one solution (if any) bb_put(sat,yes), fail. sat(_query,answer):- bb_delete(sat,answer). Jiné ešení je použitím negace a if-then-else: sat2(query,answer):- (\+ call(query) -> Answer=no ; Answer=yes). " Zjist t po et odpov dí na dotaz Query sat_num(:query,-numanswers) sat_num(query,_numanswers):- bb_put(counter,0), call(query), bb_get(counter,n), N1 is N+1, bb_put(counter,n1), fail. sat_num(_query,numanswers):- bb_delete(counter,numanswers). " Jiná metoda pomocí findall: sat_num(query,numanswers):- findall(x,query,list), length(list,numanswers). arc(a,b). arc(a,c). arc(a,d).?-sat_num(arc(a,x),n). N=3; no

Blackboard-vlastnosti " Blackboard funguje jako globální prom nná. " Pozor p i zano ení!! Pokud Query z p edchozího slajdu volá sat, potom se data na blackboardu promíchají. " Blackboard zachovává strukturu termu, ale ztrácí vazby na prom nné!!?-a=term(x,f(x)), bb_put(test,a), X=a, bb_get(test,b). A = term(a,f(a)), B = term(_a,f(_a)), X = a? ; no " Databáze (graf): arc(a,b). arc(a,c). arc(b,c). arc(b,e). arc(c,d). arc(d,b). arc(d,e). Domácí úkol Vytvořte program pro nalezení jedné z nejkratších cest mezi zadanou dvojicí uzlů. a b c d e " Očekávané odpovědi:?-shortest_path(a,a,p). P = [a]?- shortest_path(a,e,p). P = [a,b,e]?- shortest_path(e,b,p). no