Programovací jazyk Prolog

Rozměr: px
Začít zobrazení ze stránky:

Download "Programovací jazyk Prolog"

Transkript

1 Programovací jazyk Prolog Logické programování Šárka Vavrečková Ústav informatiky, Filozoficko-přírodovědecká fakulta Slezské univerzity v Opavě sarka.vavreckova@fpf.slu.cz 1. prosince 2008

2 Prolog Co je to Prolog Prolog je jazyk pro logické programování, vznikl ve Francii v roce 1973 (prof. A. Colmerauer). Je to zkratka z francouzského PROgramation à LOGic ( programování v logice ). Je to interpretační deklarativní jazyk.

3 Prolog Varianty Prologu SWI Prolog šířený pod GNU licencí a používaný v Unixech, Linuxu a Windows, LPA Win Prolog je komerční program pro Windows považovaný za jeden z nejlepších pro tuto platformu, GNU Prolog pro Unixy a Linux, OpenProlog pro MacOS, Amzi! Prolog, Visual Prolog, Strawbery Prolog, atd., rozšíření: Fuzzy Prolog, Templog, Chronolog, Temporal Prolog, Mercury, atd. Viz ~ vav10ui/vyukaprol.html.

4 Prolog Rozdíly mezi variantami licence (některé jsou komerční, jiné volně šiřitelné, také pod GPL (SWI Prolog, GNU Prolog), grafické rozhraní vždy je přítomna konzola na zadávání příkazů, ale může vypadat jinak, dále v rozhraní může/nemusí být editor samotných programů(znalostních bází), rozdíl v ovládání, klávesových zkratkách, atd., predikáty pro vstupy a výstupy, včetně práce se soubory někdy bývají jinak nazvány, případně jinak fungují, to je často způsobeno tím, že bývají psány pro různé SW platformy, další přidané predikáty, které nejsou v základní normě pro Prolog, přípony zdrojového souboru programu, atd.

5 Používání Prologu Postup 1. Vytvoříme znalostní bázi = program popisující svět, ve kterém se budeme pohybovat. 2. Zadáváme dotazy (cílové klauzule), Prolog odpovídá nebo no podle toho, zda je formule dotazu splnitelná v zadaném programu (světě), nebo vypíše hodnoty parametrů, pro které je splnitelná (ohodnocení). 3. Prolog rozhoduje podle našeho programu, vnitřních pravidel obdoby logických axiomů v klauzulární logice.

6 Používání Prologu Postup 1. Vytvoříme znalostní bázi = program popisující svět, ve kterém se budeme pohybovat. 2. Zadáváme dotazy (cílové klauzule), Prolog odpovídá nebo no podle toho, zda je formule dotazu splnitelná v zadaném programu (světě), nebo vypíše hodnoty parametrů, pro které je splnitelná (ohodnocení). 3. Prolog rozhoduje podle našeho programu, vnitřních pravidel obdoby logických axiomů v klauzulární logice.

7 Používání Prologu Postup 1. Vytvoříme znalostní bázi = program popisující svět, ve kterém se budeme pohybovat. 2. Zadáváme dotazy (cílové klauzule), Prolog odpovídá nebo no podle toho, zda je formule dotazu splnitelná v zadaném programu (světě), nebo vypíše hodnoty parametrů, pro které je splnitelná (ohodnocení). 3. Prolog rozhoduje podle našeho programu, vnitřních pravidel obdoby logických axiomů v klauzulární logice.

8 Používání Prologu Postup 1. Vytvoříme znalostní bázi = program popisující svět, ve kterém se budeme pohybovat. 2. Zadáváme dotazy (cílové klauzule), Prolog odpovídá nebo no podle toho, zda je formule dotazu splnitelná v zadaném programu (světě), nebo vypíše hodnoty parametrů, pro které je splnitelná (ohodnocení). 3. Prolog rozhoduje podle našeho programu, vnitřních pravidel obdoby logických axiomů v klauzulární logice.

9 Používání Prologu Postup 1. Vytvoříme znalostní bázi = program popisující svět, ve kterém se budeme pohybovat. 2. Zadáváme dotazy (cílové klauzule), Prolog odpovídá nebo no podle toho, zda je formule dotazu splnitelná v zadaném programu (světě), nebo vypíše hodnoty parametrů, pro které je splnitelná (ohodnocení). 3. Prolog rozhoduje podle našeho programu, vnitřních pravidel obdoby logických axiomů v klauzulární logice.

10 Program v Prologu Definice Program v Prologu je konečná neprázdná množina Hornových klauzulí. Je to ekvivalent znalostní báze klauzulární logiky a množiny speciálních axiomů Klauzulárního axiomatického systému. V programu lze použít dva druhy klauzulí: pravidla obecná tvrzení ve tvaru Závěr platí, pokud platí všechny jeho předpoklady zároveň. fakty konstantní tvrzení Používání programu spočívá v zadávání dotazů (cílových klauzulí) Hornových klauzulí bez pozitivních literálů.

11 Zápis klauzulí v Prologu Převod z klauzulární logiky Klauzulární logika Množinový zápis Zápis v Prologu Pravidlo B, C, D A A, B, C, D A :- B, C, D. Fakt A A A. Dotaz B, C, D B, C, D?- B, C, D. Tvar pravidla:

12 Zápis klauzulí v Prologu Převod z klauzulární logiky Klauzulární logika Množinový zápis Zápis v Prologu Pravidlo B, C, D A A, B, C, D A :- B, C, D. Fakt A A A. Dotaz B, C, D B, C, D?- B, C, D. Tvar pravidla: Predikat1(param) :- Predikat2(param), Predikat3(param),...

13 Zápis klauzulí v Prologu Převod z klauzulární logiky Klauzulární logika Množinový zápis Zápis v Prologu Pravidlo B, C, D A A, B, C, D A :- B, C, D. Fakt A A A. Dotaz B, C, D B, C, D?- B, C, D. Tvar pravidla: Predikat1(param) :- Predikat2(param), Predikat3(param),... hlava tělo

14 Zápis klauzulí v Prologu Převod z klauzulární logiky Klauzulární logika Množinový zápis Zápis v Prologu Pravidlo B, C, D A A, B, C, D A :- B, C, D. Fakt A A A. Dotaz B, C, D B, C, D?- B, C, D. Tvar pravidla: Predikat1(param) :- Predikat2(param), Predikat3(param),... hlava tělo klauzule

15 Programujeme v Prologu Postup 1. Vytvoříme textový soubor s příponou.pl, do kterého uložíme program (fakty a pravidla). Každý příkaz musí být na samostatném řádku (nebo na více řádcích), končí tečkou, komentáře jsou řádky začínající znakem %. 2. Načteme tento soubor (po uložení) do editoru Prologu (příkazem consult, případně položkou v menu (consult nebo compile) s tím, že před volbou v menu je vhodné soubor s programem v editoru Prologu otevřít). 3. Na výzvu Prologu (prompt, je to dvojznak?-, znamená zadej dotaz ) zadáváme dotazy, Prolog vypisuje odpovědi.

16 Programujeme v Prologu Postup 1. Vytvoříme textový soubor s příponou.pl, do kterého uložíme program (fakty a pravidla). Každý příkaz musí být na samostatném řádku (nebo na více řádcích), končí tečkou, komentáře jsou řádky začínající znakem %. 2. Načteme tento soubor (po uložení) do editoru Prologu (příkazem consult, případně položkou v menu (consult nebo compile) s tím, že před volbou v menu je vhodné soubor s programem v editoru Prologu otevřít). 3. Na výzvu Prologu (prompt, je to dvojznak?-, znamená zadej dotaz ) zadáváme dotazy, Prolog vypisuje odpovědi.

17 Programujeme v Prologu Postup 1. Vytvoříme textový soubor s příponou.pl, do kterého uložíme program (fakty a pravidla). Každý příkaz musí být na samostatném řádku (nebo na více řádcích), končí tečkou, komentáře jsou řádky začínající znakem %. 2. Načteme tento soubor (po uložení) do editoru Prologu (příkazem consult, případně položkou v menu (consult nebo compile) s tím, že před volbou v menu je vhodné soubor s programem v editoru Prologu otevřít). 3. Na výzvu Prologu (prompt, je to dvojznak?-, znamená zadej dotaz ) zadáváme dotazy, Prolog vypisuje odpovědi.

18 Programujeme v Prologu Konzultování programu Načtení (přeložení, konzultování) programu je nutné, protože Prolog si program udržuje v interním kódu, se kterým se mu pracuje jednodušeji a především rychleji. Při každé změně v souboru programu musíme (samozřejmě po uložení těchto změn) program znovu načíst, aby si Prolog mohl tento interní kód obnovit.

19 Programujeme v Prologu Konzultování programu Načtení (přeložení, konzultování) programu je nutné, protože Prolog si program udržuje v interním kódu, se kterým se mu pracuje jednodušeji a především rychleji. Při každé změně v souboru programu musíme (samozřejmě po uložení těchto změn) program znovu načíst, aby si Prolog mohl tento interní kód obnovit.

20 Příklad Zadání V programu budou tyto klauzule: Petr má rád květiny, Ivanu a televizi. Jan má rád jitrnice a televizi. Věra má ráda všechno, co má rád Jan. V klauzulární logice ma rad(petr, kvetiny) ma rad(petr, ivana) ma rad(petr, televize) ma rad(jan, jitrnice) ma rad(jan, televize) ma rad(jan, X) ma rad(vera, X)

21 Příklad Zadání V programu budou tyto klauzule: Petr má rád květiny, Ivanu a televizi. Jan má rád jitrnice a televizi. Věra má ráda všechno, co má rád Jan. V klauzulární logice ma rad(petr, kvetiny) ma rad(petr, ivana) ma rad(petr, televize) ma rad(jan, jitrnice) ma rad(jan, televize) ma rad(jan, X) ma rad(vera, X)

22 Příklad V klauzulární logice ma rad(petr, kvetiny) ma rad(petr, ivana) ma rad(petr, televize) ma rad(jan, jitrnice) ma rad(jan, televize) ma rad(jan, X) ma rad(vera, X) V Prologu ma_rad(petr,kvetiny). ma_rad(petr,ivana). ma_rad(petr,televize). ma_rad(jan,jitrnice). ma_rad(jan,televize). ma_rad(vera,x):-ma_rad(jan,x).

23 Příklad V klauzulární logice ma rad(petr, kvetiny) ma rad(petr, ivana) ma rad(petr, televize) ma rad(jan, jitrnice) ma rad(jan, televize) ma rad(jan, X) ma rad(vera, X) V Prologu ma_rad(petr,kvetiny). ma_rad(petr,ivana). ma_rad(petr,televize). ma_rad(jan,jitrnice). ma_rad(jan,televize). ma_rad(vera,x):-ma_rad(jan,x).

24

25

26

27

28

29

30

31

32

33

34

35

36 Anonymní proměnná Anonymní proměnná Použití Anonymní proměnná nahrazuje existenční termy: zapisuje se znakem podtržítka nebo tímto podtržítkem začíná: _, _Prom pro argument, ve kterém je použita, existuje hodnota, kterou tam lze dosadit, ale tato hodnota nás nezajímá, také použijeme místo běžné proměnné, pokud se tato proměnná vyskytuje v těle pravidla pouze jednou.

37 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

38 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

39 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

40 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

41 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

42 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

43 Anonymní proměnná Program lovi(liska,zajic). lovi(orel,mys). lovi(orel,vrabec). lovi(honza,ryba). dravec(x) :- lovi(x,_). Dotazy?- dravec(_).?- lovi(liska,_). Liška loví zajíce. Orel loví myš. Orel loví vrabce. Honza loví rybu. Kdo někoho loví, je dravec.?- lovi(x,_). X = liska ; X = orel ; X = honza ; no

44 Aritmetické a relační operátory, predikát rovnosti Predikát rovnosti Použití aritmetické operátory jsou vlastně termy (vrací hodnotu obvykle odlišnou od pravdivostní), mohou být použity jen jako argument predikátu, relační operátory jsou predikáty, predikát rovnosti existuje, ale pro jeho použití existují přísná pravidla, jeho argumenty po interpretaci musí být identické, v logických programovacích jazycích je obvykle možné operátory používat v infixovém zápisu: Prefixový zápis: +(p,q) =(X,a) =(X,+(a,Y)) Infixový zápis: p + q X = a X = a + Y

45 Aritmetické a relační operátory, predikát rovnosti Program predikát rovnosti matka(pepa)=jana. otec(pepa)=honza. matka(honza)=emilka. otec(honza)=karel. matka(jana)=jitka. otec(jana)=albert. matka(albert)=katerina. babicka(vnouce,babicka) :- X=matka(Vnouce),Babicka=matka(X). babicka(vnouce,babicka) :- X=otec(Vnouce),Babicka=matka(X). dedecek(vnouce,dedecek) :- X=matka(Vnouce),Dedecek=otec(X). dedecek(vnouce,dedecek) :- X=otec(Vnouce),Dedecek=otec(X). prababicka(vnouce,prababicka) :- X=matka(Vnouce),babicka(X,Prababicka). prababicka(vnouce,prababicka) :- X=otec(Vnouce),babicka(X,Prababicka).

46 Aritmetické a relační operátory, predikát rovnosti Část programu interpretace funkcí matka(pepa)=jana. otec(pepa)=honza. matka(honza)=emilka. otec(honza)=karel. Dotazy?- dedecek(pepa,x). X = albert ; X = karel ; no?- prababicka(pepa,x). X = katerina ; no matka(jana)=jitka. otec(jana)=albert. matka(albert)=katerina.

47 Aritmetické a relační operátory, predikát rovnosti Část programu interpretace funkcí matka(pepa)=jana. otec(pepa)=honza. matka(honza)=emilka. otec(honza)=karel. Dotazy?- dedecek(pepa,x). X = albert ; X = karel ; no?- prababicka(pepa,x). X = katerina ; no matka(jana)=jitka. otec(jana)=albert. matka(albert)=katerina.

48 Aritmetické a relační operátory, predikát rovnosti Jak moc je predikát = použitelný? Zápisy typu matka(pepa)=jana. ve většině Prologů nefungují, protože to je považováno za pokus o předefinování vestavěného predikátu. Možnost použití: v těle klauzule pro unifikaci proměnné: hlava_klauzule :-..., X=jana,... funktory raději nepoužíváme.

49 Aritmetické a relační operátory, predikát rovnosti Jak moc je predikát = použitelný? Zápisy typu matka(pepa)=jana. ve většině Prologů nefungují, protože to je považováno za pokus o předefinování vestavěného predikátu. Možnost použití: v těle klauzule pro unifikaci proměnné: hlava_klauzule :-..., X=jana,... funktory raději nepoužíváme.

50 Aritmetické a relační operátory, predikát rovnosti Jak moc je predikát = použitelný? Zápisy typu matka(pepa)=jana. ve většině Prologů nefungují, protože to je považováno za pokus o předefinování vestavěného predikátu. Možnost použití: v těle klauzule pro unifikaci proměnné: hlava_klauzule :-..., X=jana,... funktory raději nepoužíváme.

51 Aritmetické a relační operátory, predikát rovnosti Operátory souhrn Relační operátory, konjunkce ; disjunkce = porovnání s unifikací, identita \= opak předchozího, nerovná se is vyčíslení (provede se vyhodnocení argumentů) <, >, =<, >= porovnání ==, \== porovnání bez přiřazení =:=, =\= porovnání bez přiřazení s vyhodnocením not negace Aritmetické operátory +, -, *, /, mod, div

52 Aritmetické a relační operátory, predikát rovnosti Přiřazování, porovnávání?- X = 1+1. X = 1+1?- X is 1+1. X = 2?- X == 1. no?- 1 == 1.?- 2 == 1+1. no?- 2 =:= 1+1.

53 Testování atomů Vestavěné predikáty na testování typu údajů atom(argument) vrátí true, jestliže je argument řetězcová konstanta atomic(argument) vrátí true, jestliže je argument konstanta (řetězcová, číselná) integer(argument) vrátí true, jestliže je argument celé číslo float(argument) vrátí true, jestliže je argument reálné číslo number(argument) vrátí true, jestliže je argument číslo

54 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

55 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

56 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

57 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

58 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

59 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

60 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

61 Testování atomů Vestavěné predikáty na testování typu údajů?- atom(neco).?- atom(2). no?- atomic(2).?- atomic(neco).?- atom(x). no?- integer(2).?- float(2.1).?- float(2). no

62 Negace Negace atomu Jak znegovat atom Nejdřív můžeme vyzkoušet postup známý z klauzulární logiky transfer atomu na druhou stranu implikace (včetně řešení kvantifikátorů): pokud vyjde Hornova klauzule (za implikací jen jediný atom), je to dostačující, v opačném případě transfer nelze použít, využijeme speciální predikát not. Predikát not je jeden z mála predikátů, které mají jako argument jiný predikát: not(p(arg 1,arg 2,...,arg n ))

63 Negace Negace atomu Jak znegovat atom Nejdřív můžeme vyzkoušet postup známý z klauzulární logiky transfer atomu na druhou stranu implikace (včetně řešení kvantifikátorů): pokud vyjde Hornova klauzule (za implikací jen jediný atom), je to dostačující, v opačném případě transfer nelze použít, využijeme speciální predikát not. Predikát not je jeden z mála predikátů, které mají jako argument jiný predikát: not(p(arg 1,arg 2,...,arg n ))

64 Negace Negace atomu Jak znegovat atom Nejdřív můžeme vyzkoušet postup známý z klauzulární logiky transfer atomu na druhou stranu implikace (včetně řešení kvantifikátorů): pokud vyjde Hornova klauzule (za implikací jen jediný atom), je to dostačující, v opačném případě transfer nelze použít, využijeme speciální predikát not. Predikát not je jeden z mála predikátů, které mají jako argument jiný predikát: not(p(arg 1,arg 2,...,arg n ))

65 Negace Negace atomu Jak funguje not(p(arg 1,arg 2,...,arg n )) nejdřív je vyhodnocen atom p(arg 1,arg 2,...,arg n ), pak je jeho pravdivostní hodnota převrácena, vrací informaci typu Jestliže p(...) je odvoditelný z báze (programu), pak not(p(...)) není odvoditelný z báze..

66 Negace Negace atomu Jak funguje not(p(arg 1,arg 2,...,arg n )) nejdřív je vyhodnocen atom p(arg 1,arg 2,...,arg n ), pak je jeho pravdivostní hodnota převrácena, vrací informaci typu Jestliže p(...) je odvoditelný z báze (programu), pak not(p(...)) není odvoditelný z báze..

67 Negace Negace atomu Jak funguje not(p(arg 1,arg 2,...,arg n )) Problém: proměnné vázané univerzálně ( ) se stávají volnými, neumí řešit existenční vazbu (nahrazení _), při vyhodnocení p(...) ještě funguje vazba na tytéž proměnné v předchozích atomech klauzule, ale za ním se ztrácí. Řešení: atom s predikátem not dáváme v klauzuli až za všechny atomy, které obsahují tytéž proměnné (třeba až na konec klauzule, např. r(a,b) :- p(x),not(q(x)),p(y).), klauzule obsahující negaci dáváme spíše za všechny klauzule obsahující proměnnou, která je zde negována a se kterými je zároveň unifikována během výpočtu.

68 Negace Negace atomu Jak funguje not(p(arg 1,arg 2,...,arg n )) Problém: proměnné vázané univerzálně ( ) se stávají volnými, neumí řešit existenční vazbu (nahrazení _), při vyhodnocení p(...) ještě funguje vazba na tytéž proměnné v předchozích atomech klauzule, ale za ním se ztrácí. Řešení: atom s predikátem not dáváme v klauzuli až za všechny atomy, které obsahují tytéž proměnné (třeba až na konec klauzule, např. r(a,b) :- p(x),not(q(x)),p(y).), klauzule obsahující negaci dáváme spíše za všechny klauzule obsahující proměnnou, která je zde negována a se kterými je zároveň unifikována během výpočtu.

69 Negace Negace atomu Jak funguje not(p(arg 1,arg 2,...,arg n )) Problém: proměnné vázané univerzálně ( ) se stávají volnými, neumí řešit existenční vazbu (nahrazení _), při vyhodnocení p(...) ještě funguje vazba na tytéž proměnné v předchozích atomech klauzule, ale za ním se ztrácí. Řešení: atom s predikátem not dáváme v klauzuli až za všechny atomy, které obsahují tytéž proměnné (třeba až na konec klauzule, např. r(a,b) :- p(x),not(q(x)),p(y).), klauzule obsahující negaci dáváme spíše za všechny klauzule obsahující proměnnou, která je zde negována a se kterými je zároveň unifikována během výpočtu.

70 Negace Program osobni(autopepy). osobni(autojany). nakladni(autostandy). ma_vozik(autojany). auto(x) :- osobni(x). auto(x) :- nakladni(x). velky_naklad(x) :- nakladni(x). velky_naklad(x) :- osobni(x),ma_vozik(x). maly_naklad(x) :- auto(x),not(velky_naklad(x)). Dotazy

71 Negace Program osobni(autopepy). osobni(autojany). nakladni(autostandy). ma_vozik(autojany). auto(x) :- osobni(x). auto(x) :- nakladni(x). velky_naklad(x) :- nakladni(x). velky_naklad(x) :- osobni(x),ma_vozik(x). maly_naklad(x) :- auto(x),not(velky_naklad(x)). Dotazy?- nakladni(x).

72 Negace Program osobni(autopepy). osobni(autojany). nakladni(autostandy). ma_vozik(autojany). auto(x) :- osobni(x). auto(x) :- nakladni(x). velky_naklad(x) :- nakladni(x). velky_naklad(x) :- osobni(x),ma_vozik(x). maly_naklad(x) :- auto(x),not(velky_naklad(x)). Dotazy?- nakladni(x). X = autostandy ; no

73 Negace Program osobni(autopepy). osobni(autojany). nakladni(autostandy). ma_vozik(autojany). auto(x) :- osobni(x). auto(x) :- nakladni(x). velky_naklad(x) :- nakladni(x). velky_naklad(x) :- osobni(x),ma_vozik(x). maly_naklad(x) :- auto(x),not(velky_naklad(x)). Dotazy?- osobni(x),not(x=autojany).

74 Negace Program osobni(autopepy). osobni(autojany). nakladni(autostandy). ma_vozik(autojany). auto(x) :- osobni(x). auto(x) :- nakladni(x). velky_naklad(x) :- nakladni(x). velky_naklad(x) :- osobni(x),ma_vozik(x). maly_naklad(x) :- auto(x),not(velky_naklad(x)). Dotazy?- osobni(x),not(x=autojany). X = autopepy ; no

75 Interní databáze Konzultování programu Na začátku práce s programem tento program načteme do interní databáze Prologu, konzultujeme. Kdykoliv provedeme změny, musíme znovu načíst program do databáze rekonzultovat. Konzultování se provádí buď položkou v menu programového prostředí Prologu (volba Consult, Reconsult, příp. Compile), a nebo příkazy (včetně tečky): consult( Název souboru s programem ). reconsult( Název souboru s programem ).

76 Interní databáze Konzultování programu Na začátku práce s programem tento program načteme do interní databáze Prologu, konzultujeme. Kdykoliv provedeme změny, musíme znovu načíst program do databáze rekonzultovat. Konzultování se provádí buď položkou v menu programového prostředí Prologu (volba Consult, Reconsult, příp. Compile), a nebo příkazy (včetně tečky): consult( Název souboru s programem ). reconsult( Název souboru s programem ).

77 Interní databáze Obsah databáze Když chceme vypsat momentální obsah databáze, použijeme příkaz listing. Když chceme vypsat pouze ty klauzule, které obsahují určitý predikát (třeba p), použijeme příkaz listing(p).

78 Interní databáze Obsah databáze Když chceme vypsat momentální obsah databáze, použijeme příkaz listing. Když chceme vypsat pouze ty klauzule, které obsahují určitý predikát (třeba p), použijeme příkaz listing(p).

79 Predikáty se stejným jménem V různých klauzulích Více klauzulí může mít stejný cíl, představují různá řešení téhož problému, z nichž některá končí popřením, jiná splněním cíle. V téže klauzuli Rekurze je základní výpočetní prvek Prologu, nastává tehdy, když v těle klauzule je stejný predikát jako v těle klauzule, v těle klauzule tento predikát umísťujeme spíše na konec, pokud není důvod pro jiné umístění.

80 Predikáty se stejným jménem V různých klauzulích Více klauzulí může mít stejný cíl, představují různá řešení téhož problému, z nichž některá končí popřením, jiná splněním cíle. V téže klauzuli Rekurze je základní výpočetní prvek Prologu, nastává tehdy, když v těle klauzule je stejný predikát jako v těle klauzule, v těle klauzule tento predikát umísťujeme spíše na konec, pokud není důvod pro jiné umístění.

81 Predikáty se stejným jménem V různých klauzulích Více klauzulí může mít stejný cíl, představují různá řešení téhož problému, z nichž některá končí popřením, jiná splněním cíle. V téže klauzuli Rekurze je základní výpočetní prvek Prologu, nastává tehdy, když v těle klauzule je stejný predikát jako v těle klauzule, v těle klauzule tento predikát umísťujeme spíše na konec, pokud není důvod pro jiné umístění.

82 Příklad výpočet faktoriálu Predikáty faktorial(cislo,vysl) tento predikát bude volán uživatelem v dotazu, faktorialpom(citac,vysl,vysl) bude použit pro samotný rekurzivní výpočet.

83 Příklad výpočet faktoriálu Predikáty faktorial(cislo,vysl) tento predikát bude volán uživatelem v dotazu, faktorialpom(citac,vysl,vysl) bude použit pro samotný rekurzivní výpočet. faktorialpom( Citac, Vysl, Vysl )

84 Příklad výpočet faktoriálu Predikáty faktorial(cislo,vysl) tento predikát bude volán uživatelem v dotazu, faktorialpom(citac,vysl,vysl) bude použit pro samotný rekurzivní výpočet. faktorialpom( Citac, Vysl, Vysl ) Čítač, snižuje seo1

85 Příklad výpočet faktoriálu Predikáty faktorial(cislo,vysl) tento predikát bude volán uživatelem v dotazu, faktorialpom(citac,vysl,vysl) bude použit pro samotný rekurzivní výpočet. faktorialpom( Citac, Vysl, Vysl ) Čítač, snižuje seo1 Počítá výsledek, nazačátku1

86 Příklad výpočet faktoriálu Predikáty faktorial(cislo,vysl) tento predikát bude volán uživatelem v dotazu, faktorialpom(citac,vysl,vysl) bude použit pro samotný rekurzivní výpočet. faktorialpom( Citac, Vysl, Vysl ) Čítač, snižuje seo1 Počítá výsledek, nazačátku1 Zde bude výsledek přístupný, na začátku proměnná

87 Příklad výpočet faktoriálu Program v Pascalu procedure faktorial(citac,vysl: integer); var C: integer; begin if (Citac=0) then Vysl := 1 else begin C := Citac-1; Vysl := Citac * faktorial(c,vysl); end; end;

88 Příklad výpočet faktoriálu Program v Prologu faktorialpom(0, Vysl, Vysl). faktorialpom(citac,pomocna,vysl) :- C is Citac - 1, V is Pomocna * Citac, faktorialpom(c,v,vysl). faktorial(citac,vysl) :- faktorialpom(citac,1,vysl). Dotaz?- faktorial(4,f). F = 24.

89 Příklad výpočet faktoriálu Program v Prologu faktorialpom(0, Vysl, Vysl). faktorialpom(citac,pomocna,vysl) :- C is Citac - 1, V is Pomocna * Citac, faktorialpom(c,v,vysl). faktorial(citac,vysl) :- faktorialpom(citac,1,vysl). Dotaz faktorial(3,f). faktorialpom(3,1,vysl). C = 3-1 = 2, V = 1*3 = 3 faktorialpom(2,3,vysl). C = 2-1 = 1, V = 2*3 = 6 faktorialpom(1,6,vysl). C = 1-1 = 0, V = 6*1 = 6 faktorialpom(0,6,vysl). F = Vysl.

90 Zajímavé odkazy Test Zone on-line editor Prologu Expertní systémy v Prologu

Logika a logické programování

Logika a logické programování Logika a logické programování témata ke zkoušce Poslední aktualizace: 16. prosince 2009 Zkouška je písemná, skládá se obvykle ze sedmi otázek (může být více nebo méně, podle náročnosti otázek), z toho

Více

Klauzulární logika. Znalostní báze. Šárka Vavrečková

Klauzulární logika. Znalostní báze. Šárka Vavrečková Klauzulární logika Znalostní báze Šárka Vavrečková Ústav informatiky, Filozoficko-přírodovědecká fakulta Slezské univerzity v Opavě sarka.vavreckova@fpf.slu.cz 26. listopadu 2007 (Znalostní báze) Klauzulární

Více

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

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

Více

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

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 Úvod do Prologu 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 Warren (Warren Abstract Machine) implementace

Více

Seminární práce z Teorie ICT

Seminární práce z Teorie ICT ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE Provozně ekonomická fakulta Seminární práce z Teorie ICT Implementace logické hádanky v Prologu Autor : Petr Pechek 1 Popis zvoleného problému Mým úkolem bylo vyřešit

Více

Logické programování I

Logické programování I Logické programování I PROLOG Program popisuje "svět" Prologu = databáze faktů a pravidel (tzv. klauzulí). fakta: predikát(arg1, arg2,...argn). cíle:?- predikát(arg1, arg2,...argn). pravidla: hlava :-

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

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

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model Databázové systémy Tomáš Skopal - relační model * relační kalkuly Osnova přednášky relační kalkuly doménový n-ticový Relační kalkuly využití aparátu predikátové logiky 1. řádu pro dotazování rozšíření

Více

Hilbertovský axiomatický systém

Hilbertovský axiomatický systém Hilbertovský axiomatický systém Predikátová logika H 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava Poslední aktualizace: 24. října 2008 Specifikace H 1 Jazyk L H1 přejímáme jazyk predikátové logiky

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška první Miroslav Kolařík Zpracováno dle učebního textu prof. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Co a k čemu je logika? 2 Výroky a logické spojky

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9 Začínáme programovat v Ruby on Rails 9 O autorovi 9 Poděkování 9 Úvod 11 Komu je kniha určena 11 Jak je kniha uspořádána 11 Co ke knize potřebujete 12 Konvence 12 Zdrojový kód 13 Poznámka redakce českého

Více

Poslední aktualizace: 14. října 2011

Poslední aktualizace: 14. října 2011 Lexikální analýza Překladače, přednáška č. 2 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 14. října 2011 Symboly Co je to

Více

Predikátová logika. prvního řádu

Predikátová logika. prvního řádu Predikátová logika prvního řádu 2 Predikát Predikát je n-ární relace - vyjadřuje vlastnosti objektů a vztahy mezi objekty - z jednoduchého výroku vznikne vypuštěním alespoň jednoho jména objektu (individua)

Více

Přednáška 3. Rekurze 1

Přednáška 3. Rekurze 1 Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady

Více

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů. Základní symboly - písmena A B C Y Z a b c y z - číslice 0 1 2 9 - speciální symboly + - * / =., < > = a další - klíčová slova and array begin case const a další Klíčová slova jsou chráněnými útvary,

Více

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání Čtvrtek 3. listopadu Makra v Excelu Obecná definice makra: Podle definice je makro strukturovanou definicí jedné nebo několika akcí, které chceme, aby MS Excel vykonal jako odezvu na nějakou námi definovanou

Více

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

2.5 Rezoluční metoda v predikátové logice 2.5. Rezoluční metoda v predikátové logice [101104-1520] 19 2.5 Rezoluční metoda v predikátové logice Rezoluční metoda v predikátové logice je obdobná stejnojmenné metodě ve výrokové logice. Ovšem vzhledem

Více

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové

Více

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

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 Otázka 06 - Y01MLO Zadání Predikátová logika, formule predikátové logiky, sentence, interpretace jazyka predikátové logiky, splnitelné sentence, tautologie, kontradikce, tautologicky ekvivalentní formule.

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

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

IB015 Neimperativní programování. Neimperativní programování v Prologu. Jiří Barnat IB015 Neimperativní programování Neimperativní programování v Prologu Jiří Barnat Logické programování a Prolog IB015 Neimperativní programování 09 str. 2/35 Logické programování Deklarativní programovací

Více

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

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

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

klauzulí deklarativní (specifikace programu je přímo programem) popel, glum & nepil 1/18 IB101, log programování, Prolog Logické programování logický program: libovolná konečná množina programových Hornových klauzulí odvozování (dokazování) cílů založeno na SLD-rezoluci deklarativní (specifikace

Více

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1 1. Prvocisla: Kratky ukazkovy priklad na demonstraci baliku WEB. Nasledujici program slouzi pouze jako ukazka nekterych moznosti a sluzeb,

Více

Logické programování

Logické programování 30. října 2012 Osnova Principy logického programování 1 Principy logického programování 2 3 1 Principy logického programování 2 3 Paradigmata programování Strukturované programování Procedurální programování

Více

Základy PERLu snadno a rychle

Základy PERLu snadno a rychle Základy PERLu snadno a rychle Začínáme Začneme tak, že si vytvoříme třeba soubor hellopl, do souboru napíšeme: print "Hello world\n"; Pak soubor nastavíme jako spustitelný: $ chmod +x hellopl A teď si

Více

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D.

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D. Logika 2. Výroková logika RNDr. Luděk Cienciala, Ph. D. Tato inovace předmětu Úvod do logiky je spolufinancována Evropským sociálním fondem a Státním rozpočtem ČR, projekt č. CZ. 1.07/2.2.00/28.0216, Logika:

Více

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

Sémantika predikátové logiky

Sémantika predikátové logiky Sémantika predikátové logiky pro analýzu sémantiky potřebujeme nejprve specifikaci jazyka (doména, konstanty, funkční a predikátové symboly) příklad: formální jazyk s jediným binárním predikátovým symbolem

Více

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

Výroková a predikátová logika - V Výroková a predikátová logika - V Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - V ZS 2015/2016 1 / 21 Dokazovací systémy VL Hilbertovský kalkul Hilbertovský

Více

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

Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1 Negativní informace Petr Štěpánek S použitím materiálu M.Gelfonda a V. Lifschitze 2009 Logické programování 15 1 Negace jako neúspěch Motivace: Tvrzení p (atomická formule) neplatí, jestliže nelze odvodit

Více

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

Umělá inteligence I. Roman Barták, KTIML. Umělá inteligence I Roman Barták, KTIML roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Už umíme používat výrokovou logiku pro reprezentaci znalostí a odvozování důsledků. Dnes Dnes zopakujeme

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2013/2014 1 / 20 Základní syntax Jazyk Výroková logika je logikou

Více

Matematická logika. Miroslav Kolařík

Matematická logika. Miroslav Kolařík Matematická logika přednáška desátá Miroslav Kolařík Zpracováno dle textu R. Bělohlávka: Matematická logika poznámky k přednáškám, 2004. Obsah 1 Úvod do modální logiky 2 Logické programování a Prolog 3

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

NPRG030 Programování I, 2016/17 1 / :58:13

NPRG030 Programování I, 2016/17 1 / :58:13 NPRG030 Programování I, 2016/17 1 / 31 10. 10. 2016 10:58:13 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE NPRG030 Programování

Více

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

Negace bázového atomu Negace atomu s existenčním termem Negace klauzule Negace množiny klauzulí Predikát rovnosti. Klauzulární logika Vlastnosti klauzulí, negace Šárka Vavrečková Ústav informatiky, Filozoficko-přírodovědecká fakulta Slezské univerzity v Opavě sarka.vavreckova@fpf.slu.cz 27. října 2008 Věta o transferu bázového atomu

Více

Výroková logika - opakování

Výroková logika - opakování - opakování ormální zavedení Výroková formule: Máme neprázdnou nejvýše spočetnou množinu A výrokových proměnných. 1. Každá proměnná je výroková formule 2. Když α, β jsou formule, potom ( α), (α β), (α

Více

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody 4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty

Více

MS Excel makra a VBA

MS Excel makra a VBA Autor: RNDr. Obsah: MS Excel makra a VBA 1 Využití, ukázky, výhody a nevýhody... 2 2 Makra a zabezpečení... 2 2.1 Nastavení zabezpečení Excelu... 2 2.2 Uložení maker do sešitu a osobního sešitu maker...

Více

Matematická logika. Rostislav Horčík. horcik

Matematická logika. Rostislav Horčík.    horcik Matematická logika Rostislav Horčík horcik@math.feld.cvut.cz horcik@cs.cas.cz www.cs.cas.cz/ horcik Rostislav Horčík (ČVUT FEL) Y01MLO Letní semestr 2007/2008 1 / 20 Predikátová logika Motivace Výroková

Více

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2 * násobení maticové Pro čísla platí: Pro matice - násobení inverzní maticí inv inverzní matice A -1 k dané matici A je taková matice, která po vynásobení s původní maticí dá jednotkovou matici. Inverzní

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2015/2016 1 / 18 Základní syntax Jazyk Výroková logika je logikou

Více

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: SII - Informatika Způsob vyhodnocení: Při vyhodnocení budou za nesprávné odpovědi strhnuty body. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá: a) sekundární klíč b)

Více

VISUAL BASIC. Práce se soubory

VISUAL BASIC. Práce se soubory VISUAL BASIC Práce se soubory Práce se soubory 1/2 2 Vstupní data pro programy bývají uloženy do souborů Vstupy pro výpočet, nastavení vzhledu aplikace Výsledky práce programu je potřeba uchovat uložit

Více

Logika Libor Barto. Výroková logika

Logika Libor Barto. Výroková logika Logika Libor Barto Výroková logika Definice.(Jazyk výrokové logiky) Ve výrokové logice používáme tyto symboly: (1) Výrokové proměnné: velká písmena, případně opatřená indexy. (2) Výrokovéspojky:,,&,,,....

Více

NPRG030 Programování I, 2010/11

NPRG030 Programování I, 2010/11 Podmínka = něco, co JE, nebo NENÍ splněno typ Boolean hodnoty: TRUE pravda FALSE lež domluva (optimistická): FALSE < TRUE když X, Y jsou (číselné) výrazy, potom X = Y X Y X < Y X > Y X = Y jsou

Více

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

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α 1. JAZYK ATEATIKY 1.1 nožiny nožina je souhrn objektů určitých vlastností, které chápeme jako celek. ZNAČENÍ. x A x A θ A = { { a, b a A = B A B 0, 1 2 a, a,..., a n x patří do množiny A x nepatří do množiny

Více

Okruh č.3: Sémantický výklad predikátové logiky

Okruh č.3: Sémantický výklad predikátové logiky Okruh č.3: Sémantický výklad predikátové logiky Predikátová logika 1.řádu formalizuje úsudky o vlastnostech předmětů a vztazích mezi předměty pevně dané předmětné oblasti (univerza). Nebudeme se zabývat

Více

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

Prolog 1-1. Rodinné vztahy pomocí Prologu: Prolog 1-1 - Prolog znamená programování v logice - namísto otázky jak se má získat určitá hodta se ptáme co platí mezi objekty - vhodný jazyk pro úlohy kde nás zajímají vztahy mezi objekty - namísto definic

Více

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

Výroková a predikátová logika - VI Výroková a predikátová logika - VI Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - VI ZS 2017/2018 1 / 24 Predikátová logika Úvod Predikátová logika Zabývá

Více

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

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Logika pro každodenní přežití Stefan Ratschan Katedra číslicového návrhu Fakulta informačních technologíı České vysoké učení technické v Praze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Více

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

platné nejsou Sokrates je smrtelný. (r) 1/?? Predikátová logika plně přejímá výsledky výrokové logiky zabývá se navíc strukturou jednotlivých jednoduchých výroků na základě této analýzy lze odvodit platnost některých výroků, které ve výrokové logice

Více

Formální systém výrokové logiky

Formální systém výrokové logiky Formální systém výrokové logiky 1.Jazyk výrokové logiky Nechť P = {p,q,r, } je neprázdná množina symbolů, které nazýváme prvotní formule. Symboly jazyka L P výrokové logiky jsou : a) prvky množiny P, b)

Více

Programovací jazyk Prolog

Programovací jazyk Prolog Programovací jazyk Prolog doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Logický program Fakt, dotaz, pravidlo

Více

0. ÚVOD - matematické symboly, značení,

0. ÚVOD - matematické symboly, značení, 0. ÚVOD - matematické symboly, značení, číselné množiny Výroky Výrok je každé sdělení, u kterého lze jednoznačně rozhodnout, zda je či není pravdivé. Každému výroku lze proto přiřadit jedinou pravdivostní

Více

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

Výroková logika. Sémantika výrokové logiky Výroková logika Výroková logika se zabývá vztahy mezi dále neanalyzovanými elementárními výroky. Nezabývá se smyslem těchto elementárních výroků, zkoumá pouze vztahy mezi nimi. Elementární výrok je takový

Více

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5 Obsah Obsah 1 Řídicí struktury 1 2 Podmínka 1 2.1 Podmínka typu case......................... 2 3 Příkaz skoku 3 4 Cykly 4 4.1 Cyklus s podmínkou na začátku................... 4 4.2 Cyklus s podmínkou

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML HTTP://KTIML.MFF.CUNI.CZ/~SURYNEK/NAIL094

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML HTTP://KTIML.MFF.CUNI.CZ/~SURYNEK/NAIL094 10 ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML HTTP://KTIML.MFF.CUNI.CZ/~SURYNEK/NAIL094 Matematicko-fyzikální fakulta Univerzita Karlova v Praze 1 ROZHODOVÁNÍ TEORIÍ POMOCÍ SAT ŘEŠIČE (SMT)

Více

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

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

Domény. Petr Štěpánek. S využitím materialu Krysztofa R. Apta Domény Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 10 1 Typy programů v čistém Prologu je možné uspořádat podle různých pohledů. Zajímavá je charakteristika podle domén,

Více

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat IB015 Neimperativní programování Organizace a motivace kurzu, programovací jazyk Haskell Jiří Barnat Sekce IB015 Neimperativní programování 01 str. 2/36 Organizace kurzu Cíle kurzu IB015 Neimperativní

Více

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná

Více

Přednáška 2: Formalizace v jazyce logiky.

Přednáška 2: Formalizace v jazyce logiky. Přednáška 2: Formalizace v jazyce logiky. Marie Duží marie.duzi@vsb.cz Úvod do teoretické informatiky (logika) Dva základní logické systémy: Výroková logika a predikátová logika. řádu. Výroková logika

Více

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

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -

Více

CZ.1.07/1.5.00/

CZ.1.07/1.5.00/ Celá čísla Celočíselný typ má označení INTEGER. Kromě tohoto základního jsou k dispozici ještě další celočíselné typy, které uvádí následující tabulka. Každý typ umožňuje definovat určitý rozsah celých

Více

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

ŘÍDÍCÍ STRUKTURY - PODMÍNKY ŘÍDÍCÍ STRUKTURY - PODMÍNKY Pokusíme se rozvětvit sktipt v Bashi ŘÍDÍCÍ STRUKTURY - PODMÍNKY V této lekci budeme probírat podmínkové, tj., které nám pomohou rozvětvit skript a provádět určité pouze při

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

LEKCE 6. Operátory. V této lekci najdete:

LEKCE 6. Operátory. V této lekci najdete: LEKCE 6 Operátory V této lekci najdete: Aritmetické operátory...94 Porovnávací operátory...96 Operátor řetězení...97 Bitové logické operátory...97 Další operátory...101 92 ČÁST I: Programování v jazyce

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Čtvrté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 4.

Více

Systém přirozené dedukce výrokové logiky

Systém přirozené dedukce výrokové logiky Systém přirozené dedukce výrokové logiky Korektnost, úplnost a bezespornost Šárka Vavrečková Ústav informatiky, FPF SU Opava Poslední aktualizace: 6. října 2008 Věta o korektnosti Věta (O korektnosti Systému

Více

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

Logické programování

Logické programování Logické programování Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 1 1 Prolog a Logické programování Prolog vznikl jako programovací jazyk v Marseille 1970, jeho autorem

Více

Predikátová logika [Predicate logic]

Predikátová logika [Predicate logic] Predikátová logika [Predicate logic] Přesněji predikátová logika prvého řádu. Formalizuje výroky o vlastnostech předmětů (entit) a vztazích mezi předměty, které patří do dané předmětné oblasti univerza.

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Database Research Group Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz

Více

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8 Přednáška 8 Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. 1 Proměnné Jména nových proměnných by neměly kolidovat se jmény předdefinovaných proměnných.

Více

Programování v čistém Prologu

Programování v čistém Prologu Programování v čistém Prologu Petr Štěpánek S využitím materiálu Krysztofa R. Apta 2006 Logické programování 9 1 Ukázali jsme, že logické programy mohou sloužit k výpočtům. Volně řečeno, logiské programz

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2017/2018 1 / 17 Předběžnosti Základní pojmy n-ární relace a funkce

Více

8 Makra Příklad 4 Excel 2007

8 Makra Příklad 4 Excel 2007 TÉMA: Úprava maker rozhodování, příkaz If..Then..Else Sekretářka společnosti Naše zahrada potřebuje upravit makra vytvořená pomocí záznamu tak, aby vyhovovala jejím požadavkům. Pro úpravy využije Editor

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

NPRG030 Programování I, 2018/19 1 / :25:37

NPRG030 Programování I, 2018/19 1 / :25:37 NPRG030 Programování I, 2018/19 1 / 26 24. 9. 2018 10:25:37 Čísla v algoritmech a programech 10 26 Poloměr vesmíru 2651 studujících studentů MFF UK 3.142857... Ludolfovo číslo 10 16 stáří vesmíru v sekundách!!!

Více

Místo pojmu výroková formule budeme používat zkráceně jen formule. Při jejich zápisu

Místo pojmu výroková formule budeme používat zkráceně jen formule. Při jejich zápisu VÝROKOVÁ LOGIKA Matematická logika se zabývá studiem výroků, jejich vytváření a jejich pravdivostí. Základním kamenem výrokové logiky jsou výroky. Co je výrok nedefinujejme, pouze si řekneme, co si pod

Více

Úvod do výrokové a predikátové logiky

Úvod do výrokové a predikátové logiky Úvod do výrokové a predikátové logiky Eva Ondráčková Na této přednášce se seznámíte se základy výrokové a predikátové logiky. Zjistíte, že podstatou logiky není vyplňování pravdivostních tabulek ani negování

Více

Základní pojmy matematické logiky

Základní pojmy matematické logiky KAPITOLA 1 Základní pojmy matematické logiky Matematická logika se zabývá studiem výroků, jejich vytváření a jejich pravdivostí. Základním kamenem výrokové logiky jsou výroky. 1. Výroková logika Co je

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Logika. 5. Rezoluční princip. RNDr. Luděk Cienciala, Ph. D.

Logika. 5. Rezoluční princip. RNDr. Luděk Cienciala, Ph. D. Logika 5. Rezoluční princip RNDr. Luděk Cienciala, Ph. D. Tato inovace předmětu Úvod do logiky je spolufinancována Evropským sociálním fondem a Státním rozpočtem ČR, projekt č. CZ. 1.07/2.2.00/28.0216,

Více

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

Výroková a predikátová logika - X Výroková a predikátová logika - X Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - X ZS 2018/2019 1 / 16 Rozšiřování teorií Extenze o definice Rozšiřování

Více