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

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

Seminární práce z Teorie ICT

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

Logika a logické programování

Modely Herbrandovské interpretace

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

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

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

popel, glum & nepil 16/28

Programovací jazyk Prolog

Programovací jazyk Prolog

Marie Duží

Logické programování

Programování v čistém Prologu

Matematická logika. Miroslav Kolařík

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

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

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

Logické programy Deklarativní interpretace

Výroková logika - opakování

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

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

Programovací jazyk Pascal

Operace na datových strukturách

Logické programování

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

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

4.2 Syntaxe predikátové logiky

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


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

Operace na datových strukturách

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

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

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Sémantika predikátové logiky

Sada 1 - Základy programování

Algoritmizace a programování

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

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

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

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

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

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

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

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

Matematická logika. Rostislav Horčík. horcik

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


teorie logických spojek chápaných jako pravdivostní funkce

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

postaveny výhradně na syntaktické bázi: jazyk logiky neinterpretujeme, provádíme s ním pouze syntaktické manipulace důkazy

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

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

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

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

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

Funkce. Definiční obor a obor hodnot

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

Další (neklasické) logiky. Jiří Velebil: AD0B01LGR 2015 Predikátová logika 1/20

Úvod do predikátové logiky. (FLÚ AV ČR) Logika: CZ.1.07/2.2.00/ / 1

Predikátová logika dokončení

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

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

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

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

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

Úvod do programování. Lekce 1

B i n á r n í r e l a c e. Patrik Kavecký, Radomír Hamřík

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

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

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

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

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

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

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

VISUAL BASIC. Práce se soubory

Sada 1 - PHP. 03. Proměnné, konstanty

Náhodný pokus Náhodným pokusem (stručněji pokusem) rozumíme každé uskutečnění určitého systému podmínek resp. pravidel.

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

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

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

Paradigmata programování 1

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

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

Převyprávění Gödelova důkazu nutné existence Boha

Kapitola 1: Reálné funkce 1/13

Rezoluční kalkulus pro výrokovou logiku

MATEMATICKÁ TEORIE ROZHODOVÁNÍ

Úvod do programování 6. hodina

Derivace funkce. Přednáška MATEMATIKA č Jiří Neubauer

výrok-každésdělení,uněhožmásmyslseptát,zdaječinenípravdivé, aproněžprávějednaztěchtodvoumožnostínastává.

PŘIJÍMACÍ ZKOUŠKY 2008

Programování v C++, 2. cvičení

DATABÁZE MS ACCESS 2010

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

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

Transkript:

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 funkcí zapisujeme klauzule, které společně s vyhodcovacím mechanismem umožňují odpověd uživatelovi na otázku zda nějaký vztah je splnitelný nebo ne klauzule - 3 typy: fakta - vyjadřují bezpodmíněčně pravdivá tvrzení term. pravidla - vyjadřují tvrzení zavislá na splnění určitých podmínek term0 := term1, term2,..., termn. dotazy - vyvolávají výpočet za účelem zjistit, zda je dotaz splnitelný či nikoliv?- term1, term2,..., termn. Během procesu vyhodcení dochází v případě úspěchu k nastavení proměných na takové hodty, které umožní splnitelst. Je-li více možstí je Prolog schopen nalézt je všechny pomocí zpětného prohledávání (backtracking). Rodinné vztahy pomocí Prologu: fakta: rodic(jarda,marie). rodic(jarda,pepa). rodic(marie,bozena). rodic(marie,tonda). muz(tonda). zena(bozena). dotazy:?- rodic(jarda,pepa). -> yes?- rodic(jarda,tonda). ->?- rodic(jarda,x) -> X=marie; %středník vyvolá další řešení Y=pepa; Řetězec, který začíná velkým písmenem je považován za proměu a Prolog se snaží nastavit jeho hodtu, tak aby dotaz byl splnitelný. Anymní proměnu, která nás nezajímá značíme pomocí podtržítka _. pravidla: (zkusíme nalézt jmé Jardovy babičky) babicka(vnuk,x) :- rodic(vnuk,y), rodic(y, X), zena(x). dotaz:?- babicka(jarda, X) -> X=bozena; - nejdříve se nalezne relace ve které Vnuk (Jarda) vystupuje jako syn nějakého rodiče Y. Dále pro osobu Y zkusíme nalézt relaci, ve které vystupuje jako dítě Xka. Pro X potom ještě ověříme existenci relace býti žeu. Čárky mezi termy mají tedy význam logického AND.

Prolog 1-2 Datové objekty v Prologu - jedduché objekty - konstanty - atomy např. jarda, neco - čísla např. 10, -3 - proměnné např. X, Vnuk, _ - struktury např. vyuka(predmet(jui, cviceni), doba(streda), ucitel(dobsicek, miroslav)) Dotaz na všechna cvičení konkrétního učitele: cvicici(ucitel, Predm) :- vyuka(predmet(predm, cviceni), _, Ucitel). Deklarativní a procedurální sémantika programu Mějme klazuli tvaru P :- Q, R, kde P, Q, R jsou libovolné tvary termů. deklarativní pohled: P je pravdivé, jestliže Q i R jsou pravdivé; z platsti Q a R plyne platst P; atd.. procedurální pohled: aby se vyřešil problém P, je potřeba nejprve vyřešit problém Q a potom problém R; aby se splnil cíl P, je potřeba nejprve splnit cíl Q a potom cíl R Seznamové a číslicové operace Seznam se v Prologu zapisuje jako [bohous, jarda, pepa, milan]. Vnitřní reprezentace je opět pomocí tečka dvojice.(bohous,.(jarda,.(pepa,.(milan, [])))). Prázdný seznam se značí pomocí [], atom nil zde neexistuje. Pomocí operátoru můžeme seznam rozdělit na prvních pár prvků a zbytek. [bohous, jarda [pepa, milan]] Predikát member: member(x, [X Zbytek]). member(x, [ Zacatek Zbytek]) :- member(x, Zbytek). member(2, [1,2,3]). -> yes member(x, [1,2,3]. -> X = 1; X = 2; X = 3; Mezi jedtlivými klauzulemi je logiké OR. Protože v podstatě provádíme definici vzorem musí umět Prolog důkladně srovnat hlavu pravidla a cíle. Dva termy se rovnají když jsou identické nebo proměnné lze nastavit na takové hodty aby se získaly indentické termy -> unifikace aktivní mechanismus jehož výsledkem je a/ne. Vložení na začátek seznamu: ins(x, L, [X L]). ins(elf, [honza, pepa], L). -> L = [elf, honza, pepa]

Prolog 1-3 Ubrání prvku ze seznamu: del1(x, [X T], T). del1(1, [1,2,3], X) => X=[2,3] delx(x, [X T], T). delx(x, [Z L], [Z LO]) :- delx(x, L, LO). delx(1,[1,2,1,3],x). => X=[2,1,3]; X=[1,2,3]; Test na seznam: list([]). list([_ _]). list([1,2,3]). => yes list(1). => Spojení dvou seznamů: append([], L, L). append([head Rest], L, [Head Newrest]) :- append(rest, L, Newrest). append([1,2], [3,4], [1,2,3,4]). => yes append([1,2], [3,4], X). => X=[1,2,3,4] append([1,2], X, [1,2,3,4]). => X=[3,4] append(x, [3,4], [1,2,3,4]). => X=[1,2] Test na celé kladné číslo: isint(0). isint(n) :- isint(n1), N is N1 + 1. isint(5) -> true isint(-5) -> % při pokusu o další vyhodcení nám to zkončí v nekonečném hledání % zkočíme v nekonečném hledání

Prolog 1-4 Součet čísel v seznamu: sum([],0). sum([h T], S) :- integer(h), sum(t, S1), S is S1 + H. sum([1,2,3], X). => X=6 Délka seznamu: len([], 0). len([_ T],N) :- len(t, N1), N is N1 + 1. len([1,2,3], X). => X=3 Výběr nejmenšího prvku seznamu: min_list([x], X). min_list([h T], H) :- min_list(t, X), H =< X. min_list([h T], X) :- min_list(t, X), H > X. min_list([3,4,1,2],x). => X=1 Jedsměrný faktoriál: fact(0,1). N > 0, N1 is N - 1, fact(n1,f1), F is F1 * N. fact(5,x). => X=120 fact(x,120). =>??? % jedním směrem je to fajn % druhým už moc ne

Prolog 1-5 Obousměrný faktoriál: testfact(akt,poz,f) :- fact(akt,f), Poz is Akt. testfact(akt,poz,f) :- fact(akt,fs), FS < F, S1 is Akt + 1, testfact(s1,poz,f). fact(0,1). var(n), testfact(1,n,f). N > 0, N1 is N - 1, fact(n1,f1), F is F1 * N. fact(5,x). => X=120 fact(x,120). => X=5