Programovací jazyk Prolog

Podobné dokumenty
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í

Logické programování I

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

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

Logické programy Deklarativní interpretace

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

Logické programování

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

Rovnost lze vyjádřit jako predikát, např. můžeme zvolit, že P(x, y) reprezentujetvrzení xjerovnoy.

Logika a logické programování

Predikátová logika [Predicate logic]

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

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

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

Klasická predikátová logika

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

Substituce. Petr Štěpánek. S využitím materialu Krysztofa R. Apta. Logické programování 2 1

Sémantika predikátové logiky

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

Operace na datových strukturách

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

Složitosti základních operací B + stromu

Modely Herbrandovské interpretace

Operace na datových strukturách

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

Matematická logika. Miroslav Kolařík

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

Matematická logika. Rostislav Horčík. horcik

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

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

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

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

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

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

Úvod do logiky (PL): analýza vět přirozeného jazyka

Rezoluční kalkulus pro logiku prvního řádu

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

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

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

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

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

Zastavování výpočtů (Terminace)

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

Denotační sémantika. Marek Běhálek

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Predikátová logika. Teoretická informatika Tomáš Foltýnek

1 Pravdivost formulí v interpretaci a daném ohodnocení

5.8 Induktivní logické programování

Programování v čistém Prologu

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

1 Predikátová logika. 1.1 Syntax. jaký mohou mít formule význam (sémantiku). 1. Logických symbolů: 2. Speciálních (mimologických) symbolů:

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

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

Komponenty v.net. Obsah přednášky

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

4.2 Syntaxe predikátové logiky

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

Seminární práce z Teorie ICT

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

Matematická logika. Miroslav Kolařík

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava


Poslední nenulová číslice faktoriálu

KMA/MDS Matematické důkazy a jejich struktura

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

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

Cvičení ke kursu Vyčíslitelnost

0.1 Funkce a její vlastnosti

Matematika (KMI/PMATE)

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Binární vyhledávací stromy II

1 REZOLUČNÍ FORMÁLNÍ DŮKAZY

PŘEDNÁŠKA 7 Kongruence svazů

popel, glum & nepil 16/28

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

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

Syntaxí řízený překlad

Teoretická informatika Tomáš Foltýnek Algebra Struktury s jednou operací

Úvod do teoretické informatiky

Úvod do programovacích jazyků (Java)

Tableaux metody. Jiří Vyskočil 2011

Poznámka. Je-li f zobrazení, ve kterém potřebujeme zdůraznit proměnnou, píšeme f(x) (resp. f(y), resp. f(t)) je zobrazení místo f je zobrazení.

Spojová implementace lineárních datových struktur

Hilbertovský axiomatický systém

(FAPPZ) Petr Gurka aktualizováno 12. října Přehled některých elementárních funkcí

Bakalářská matematika I

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.


Organizace. Zápočet: test týden semestru (pátek) bodů souhrnný test (1 pokus) Zkouška: písemná část ( 50 bodů), ústní část

é ď Ž Ř ť ě ě ě É ě š ó ó

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ů):

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

FUNKCE POJEM, VLASTNOSTI, GRAF

Přijímací zkouška - matematika

Transkript:

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 Term, substituce Logická proměnná Rekurzivní pravidla Seznamy Programovací jazyk Prolog 2 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1

Úvod Hlavní myšlenka: Využití počítače k vyvozování důsledků na základě deklarativního popisu Postup: reálný svět zamýšlená interpretace logický model program Výpočet - určení splnitelnosti či nesplnitelnosti cíle, případně včetně vhodných substitucí. Programovací jazyk Prolog 3 Logický program Fakta vek(petr, 30). vek(jana, 24). Pravidla starsi(x, Y) :- vek(x, V1), vek(y, V2), V1 > V2. Dotazy?- starsi(petr, jana). Yes Programovací jazyk Prolog 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2

Co je to dotaz? Odpověď na dotaz vzhledem k programu = určení, zda je dotaz logickým důsledkem programu. Logické důsledky se odvozují aplikací dedukčních pravidel, např. P P (identita) Je-li nalezen fakt identický dotazu, dostaneme Yes. Odpověď No znamená pouze to, že z programu nelze platnost dotazu vyvodit. Programovací jazyk Prolog 5 Předpoklad uzavřeného světa zvire(pes). zvire(kocka).?- zvire(pes). Yes?- zvire(zirafa). No => Předpokládáme platnost pouze toho, co je uvedeno v programu. Programovací jazyk Prolog 6 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3

Logická proměnná Představuje nespecifikovaný objekt Jméno začíná velkým písmenem?- vek(jana, X). X = 24.?- vek(pavla, X). No Existuje X takové, že vek(jana, X) lze odvodit z programu? Pokud ano, jaká je hodnota X? Programovací jazyk Prolog 7 Kvantifikátory likes(x, beer). Pro všechna X platí likes(x, beer).?- likes(x, beer). Existuje X takové, že likes(x, beer)? Programovací jazyk Prolog 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4

Term Datová struktura definovaná rekurzivně: Konstanty a proměnné jsou termy Struktury jsou termy: funktor(arg1, arg2, ) funktor: jméno začínající malým písmenem argument: term Funktor je určen jménem a aritou f(t1, t2,, tn). f/n Příklad: z/0 s/1 z, s(z), s(s(z)), s(s(s(z))) Programovací jazyk Prolog 9 Substituce Základní term (ground term) neobsahuje proměnné s(s(z)) Substituce Konečná množina dvojic ve tvaru X i =t i Aplikace substituce θ na term A Aθ f(x, a) {X=g(z), Y=b} = f(g(z), a) Instance termu A je instancí B, existuje-li substituce θ taková, že A = Bθ f(g(z), a) je instancí termu f(x, a) Programovací jazyk Prolog 10 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5

Konjunktivní dotazy?- zvire(pes), zvire(kocka). Yes Sdílení proměnných:?- vek(x, V), vek(y, V). Existují X a Y se stejným věkem? Programovací jazyk Prolog 11 Pravidla A :- B 1, B 2,, B n. A = hlava pravidla B 1, B 2,, B n = tělo pravidla syn(x, Y) :- otec(y, X), muz(x). deda(x, Y) :- otec(x, Z), otec(z, Y). Proměnné jsou univerzálně kvantifikované. Platnost proměnných je celé pravidlo. Programovací jazyk Prolog 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6

Rekurzivní pravidla Definice grafu edge(a, b). edge(a, c). edge(b, d). edge(c, d). edge(d, e). edge(f, g). connected(n, N). connected(n1, N2) :- edge(n1, L), connected(l, N2). b a d e c f g Programovací jazyk Prolog 13 Rekurzivní pravidla Přirozená čísla: nat(z). nat(s(x)) :- nat(x). leq(z, X) :- nat(x). leq(s(x), s(y)) :- leq(x, Y). add(z, X, X). add(s(x), Y, s(z)) :- add(x, Y, Z). Programovací jazyk Prolog 14 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7

Pracujeme s relacemi! add(s(z), s(z), X). X=s(s(z)) add(s(z), X, s(s(z))). X=s(z) add(x, Y, s(s(z))). X=z Y=s(s(z)) ; X=s(z) Y=s(z) ; X=s(s(z)) Y=z ; No Programovací jazyk Prolog 15 Seznamy list([]). list([x Xs]) :- list(xs). member(x,[x Xs]). member(x,[y Ys]) :- member(x,ys).?- member(b, [a,b,c]).?- member(x, [a,b,c]).?- member(b, X) Programovací jazyk Prolog 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8

Úkol Vytvořte predikát times/3 reprezentující operaci násobení Vytvořte predikáty even/1 a odd/1 pro ověření, zda je zadané číslo sudé, resp. liché. Vytvořte predikát prefix/2 pro zjištění, zda je jeden seznam prefixem druhého seznamu. Programovací jazyk Prolog 17 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 9