Logické programování I



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í

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

Logika a logické programování

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

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

Programovací jazyk Prolog

Seminární práce z Teorie ICT

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

Programovací jazyk Prolog

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

Operace na datových strukturách

Operace na datových strukturách

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

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

Operátory. Základy programování 1 Tomáš Kühr

Přednáška 3. Rekurze 1

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

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

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

Logické programování

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

popel, glum & nepil 16/28

Programování v čistém Prologu

Programy na PODMÍNĚNÝ příkaz IF a CASE

Částečná korektnost. 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ží

Klasická predikátová logika

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

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

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

4.2 Syntaxe predikátové logiky

Marie Duží

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

Modely Herbrandovské interpretace

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

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

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

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

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

Úvod do programování. Lekce 1

Lekce 01 Úvod do algoritmizace

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

Úvod do umělé inteligence, jazyk Prolog

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

Sémantika predikátové logiky

Logické programy Deklarativní interpretace

Úvod do umělé inteligence, jazyk Prolog

Deskripční logika. Petr Křemen FEL ČVUT. Petr Křemen (FEL ČVUT) Deskripční logika 37 / 157

Úvod do umělé inteligence, jazyk Prolog

Inovace výuky prostřednictvím šablon pro SŠ

Matematická logika. Rostislav Horčík. horcik

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

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

Úvod do umělé inteligence, jazyk Prolog

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

Lokální definice (1) plocha-kruhu

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

vhodná pro strojové dokazování (Prolog) metoda založená na vyvracení: dokazuje se nesplnitelnost formulí

Virtuální metody - polymorfizmus

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

Algoritmizace prostorových úloh

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

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

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

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Matematická logika. Rostislav Horčík. horcik

SLD-derivace. Petr Štěpánek. S využitím materiálu Krysztofa R. Apta

Programovací jazyk Pascal

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

Rekurze. Jan Hnilica Počítačové modelování 12

Úvod do umělé inteligence, jazyk Prolog

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

Úvod do umělé inteligence, jazyk Prolog

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

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

Predikátová logika (logika predikátů)

Aritmetické operace a obvody pro jejich realizaci

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

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

Definice globální minimum (absolutní minimum) v bodě A D f, jestliže X D f

COMPLEXITY

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

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

Matematická logika. Miroslav Kolařík

DUM 3 téma: Podmínky a Globální proměnné

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

Aritmetika s didaktikou I.

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

Dokumentace programu sdc

Paradigmata programování 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.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

Funkcionální programování. Kristýna Kaslová

Algoritmizace prostorových úloh

Struktura programu v době běhu

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ

Transkript:

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 :- tělo. predikát(argumenty) :- fakta. elementy programu: konstanty, proměnné, struktury = termy PGS 2.Log.pr. K.Ježek 2006 1

Konstanty čísla atomy a, ja_a_ty, NOVY, b1 Proměnné A, _X, _ Struktury muz(jan), cte(student(jan,novy),kniha(a,nazev)) 2+2 1)tvořené operátory a operandy obr? 2)tvořené seznamy výklad později PGS 2.Log.pr. K.Ježek 2006 2

Př. dum.pro ma(dum, dvere). ma(dum, okno). ma(dvere, klika). rozbite(dvere).?-ma(dum, dvere).?-ma(neco, klika).?-ma(dum, Neco).?-ma(X, Y), rozbite(y). PGS 2.Log.pr. K.Ježek 2006 3

Pravidla cil(argumenty):-logicka formule z podcilu. p q1 & q2 & & qn. Pr. rodina.pro rodic(eva, petr). rodic(eva, jan). rodic(jindrich, jan). zena(eva). muz(petr). muz(jan). muz(jindrich). Jak definovat rodinné vztahy? PGS 2.Log.pr. K.Ježek 2006 4

Predikáty se odlišují dle jména i arity Anonymní proměnná = nechceme znát její hodnotu Může jich být více v klauzuli. Navzájem nesouvisí Def.otce = někdo, kdo je rodičem a mužem Def.syna Databázi lze průběžně doplňovat PGS 2.Log.pr. K.Ježek 2006 5

Rekurze Definice českých panovníků přemyslovců Premyslovec je premysl_orac Premyslovec je syn premyslovce PGS 2.Log.pr. K.Ježek 2006 6

Jak vytvořit dotaz na jména všech přemyslovců? Jak definovat potomka po meči? Jak definovat příbuznost osob X a Y po meči? Jak definovat příbuznost osob X a Y PGS 2.Log.pr. K.Ježek 2006 7

Princip rezoluce a :- a 1, a 2,, a n. b :- b 1, b 2,, b m. Nechť b i a Pak rezolucí je b :- b 1, b 2, b i-1, a 1, a 2,, a n, b i+1,,b m. PGS 2.Log.pr. K.Ježek 2006 8

Unifikace porovná-li se volná proměnná s konstantou, naváže se na tuto konstantu, porovnají-li se dvě volné (neinstalované) proměnné, stanou se synonymy, porovná-li se volná proměnná s termem, naváže se na tento term, porovnají-li se termy, které nejsou volnými proměnnými, musí být pro úspěšné porovnání stejné. Př unifikace v dotazu?- X = Y, Y = a. PGS 2.Log.pr. K.Ježek 2006 9

Příklad největšího společného dělitele Největší společný dělitel A a A je A Největší společný dělitel A a B je NSD jestliže při A větším než B platí: A1 je A-B a největší společný dělitel A1 a B je NSD při A menším než B platí B1 je B-A a největší společný dělitel B1 a A je NSD PGS 2.Log.pr. K.Ježek 2006 10

Příklad faktoriálu Faktoriál 1 je 1. Faktoriál N je F, jestliže platí, že nějaké M má hodnotu N-1 a současně faktoriál M je G a současně F má hodnotu G*N PGS 2.Log.pr. K.Ježek 2006 11

Zásady při plnění cílů Dotaz může být složen z několika cílů. Při konjunkci cílů jsou cíle plněny postupně zleva. Pro každý cíl je při jeho plnění prohledávána databáze od začátku. Při úspěšném porovnání klauzule s cílem je její místo v databázi označeno ukazatelem. Každý z cílů má vlastní ukazatel. Při úspěšném porovnání cíle s hlavou pravidla, pokračuje výpočet plněním cílů zadaných tělem pravidla. Cíl je splněn, je-li úspěšně porovnán s faktem databáze, nebo s hlavou pravidla databáze a jsou splněny podcíle těla pravidla. Není-li během exekuce některý cíl splněn ani po prohlédnutí celé databáze, je aktivován mechanismus návratu. Splněním jednotlivých cílů dotazu je splněn globální cíl a systém vypíše hodnoty proměnných zadaných v dotazu. Zjistí-li se při výpočtu, že globální cíl nelze splnit, je výsledkem no. PGS 2.Log.pr. K.Ježek 2006 12

Mechanismus návratu exekuce se vrací k předchozímu splněnému cíli, zruší se instalace proměnných a pokouší se opětovně splnit tento cíl prohledáváním databáze dále od ukazatele pro tento cíl, splní-li se opětovně tento cíl, pokračuje se plněním dalšího, (předtím nesplněného) vpravo stojícího cíle, nesplní-li se předchozí cíl, vrací se výpočet opětovně zpět. PGS 2.Log.pr. K.Ježek 2006 13

Shrnutí základních principů Program specifikujeme množinou klauzulí. Klauzule mají podobu faktů, pravidel a dotazu. Prolog zná pouze to, co je definované programem. Fakt je jméno relace a argumenty (objekty) v daném uspořádání. Uspořádání je důležité. Pravidlo vyjadřuje vztahy, které platí jsou-li splněny podmínky z těla (cíle). Hlavu tvoří vždy jen jeden predikát. Dotaz může tvořit jeden nebo více cílů. Cíle mohou obsahovat proměnné i konstanty, Prolog najde tolik odpovědí kolik je požadováno (pokud existují). Proměnná je v klauzuli obecně kvantifikována. Její platnost je omezena na klauzuli. PGS 2.Log.pr. K.Ježek 2006 14

Definice predikátu je posloupnost klauzulí pro jednu relaci. Predikát může určovat vztah, databázovou relaci, typ, vlastnost, funkci. Jméno predikátu musí být atomem. Plnění cíle provádí Prolog pro nový cíl prohledáváním databáze od začátku, při opakovaném pokusu prohledáváním od naposled použité klauzule. Rekurzivní definice predikátu musí obsahovat ukončovací podmínku. Typ termu je rozpoznatelný syntaxí. Atomy a čísla jsou konstanty. Atomy a proměnné jsou jednoduchými termy. Anonymní proměnná představuje neznámý objekt, který nás nezajímá. Struktury jsou složené typy dat. Pravidlo je strukturou s funktorem :- Funktor je určen jménem a aritou PGS 2.Log.pr. K.Ježek 2006 15

Unifikace termů Dva termy jsou úspěšně porovnány (podobné), pokud jsou totožné nebo proměnné v termech lze navázat na objekty tak, že po navázání proměnných jsou termy totožné. Př. datum( D, M, 2003) datum(x, 12, R) datum( D, M, 2003) datum(x, 12, 2004) bod(x, Y, Z) datum( D, M, 2003) Prolog vybere vždy nejobecnější možnost porovnání Porovnání vyjadřuje operátor = PGS 2.Log.pr. K.Ježek 2006 16

Při porovnání proměnné se strukturou je nutné vyloučit případ, kdy se tato proměnná vyskytuje ve výrazu Př.?- X = f(x). %neproveditelné porovnání Způsobí navázání X na f(x) na f(x) na f(x) PGS 2.Log.pr. K.Ježek 2006 17

!! Aritmetické výrazy jsou termy!!?- X = +( 2, 2 ).?- X = 2 + 2. Pro vyhodnocení nutno použít is?- X is +( 2, 2 ).?- X is 2 + 2. PGS 2.Log.pr. K.Ježek 2006 18

Seznamy Seznam je rekurzivní datová struktura tvaru: [e1, e2,, en] [ Hlava Zbytek ] [ ] prázdný seznam Př. [a, b, c] dtto [a [b, c] ] dtto [a, b [c] ] dtto [a, b, c [ ] ] a b c [ ] PGS 2.Log.pr. K.Ježek 2006 19

[ X ] = [ a, b, c, d ]? [ X Y ] = [ a, b, c, d ]? [ X, Y Z ] = [ a, b, c, d ]? [ X ] = [ [ a, b, c, d ] ]? [ X Y ] = [ [ a, [ b, c ] ], d ]? [ X Y ] = [ ]? [ X Y ] = [ d ]? PGS 2.Log.pr. K.Ježek 2006 20

Predikáty pro práci se seznamy Zjištění, zda v nejvyšší úrovni seznamu S existuje prvek X member(prvek,seznam) Member platí, je-li prvek na začátku seznamu, jinak platí pokud pvek je ve zbytku seznamu?-member(a, [b,a,c,[d,a]]).?-member(a, [b,c,[d,a]]). Je mezi standardními PGS 2.Log.pr. K.Ježek 2006 21

Nalezení posledního prvku seznamu last(seznam, Prvek) Je-li v seznamu jen jeden prvek, tak je tím posledním, jinak je to poslední prvek ze zbytku seznamu?- last([a,[b,c]],x). PGS 2.Log.pr. K.Ježek 2006 22

Odstranění prvku ze seznamu delete(původní, Výsledný, Prvek) delete([x T],T,X). delete([y T],[Y T1],X) :- delete(t,t1,x). Zkuste formulovat slovně?- delete([a,b,a],l,a). PGS 2.Log.pr. K.Ježek 2006 23

Přidání seznamu k seznamu append(seznam1,seznam2,výsledek) append([ ],X,X). append([a B],X,[A C]):-append(B,X,C). Formulujte predikát slovně?- append([a,b],[c],x). X = [a,b,c] yes?- PGS 2.Log.pr. K.Ježek 2006 24

append([ ],X,X). append([a B],X,[A C]):-append(B,X,C).?- append(x,y,[a,b,c]). PGS 2.Log.pr. K.Ježek 2006 25

argumenty příklad bbb?-append( [a, b], [c], [a, b, c] ). bbf?-append( [a, b], [c], S3 ). bfb?-append( [a, b], S2, [a,b,c,d] ). PGS 2.Log.pr. K.Ježek 2006 26

bff?-append( [a, b], S2, S3 ). fbb?-append( S1, [c, d], [a,b,c,d] ). PGS 2.Log.pr. K.Ježek 2006 27

fbf?-append( S1, [c, d], S3 ). PGS 2.Log.pr. K.Ježek 2006 28

ffb?-append( S1, S2, [c, d]). PGS 2.Log.pr. K.Ježek 2006 29

fff?-append( S1, S2, S3 ). PGS 2.Log.pr. K.Ježek 2006 30

Vícesměrnost dalších predikátů member(x,[x _]). member(x,[_ Y]) :- member(x,y).?- member(x,[a,[b,c],d]). PGS 2.Log.pr. K.Ježek 2006 31

Vícesměrnost dalších predikátů delete([x T],T,X). delete([y T],[Y T1],X) :- delete(t,t1,x).?- delete(x,[a,b],c). PGS 2.Log.pr. K.Ježek 2006 32

Seznamy znaků jsou řetězce?- [X,Y Z]="abcd". X = 97 Y = 98 Z = [99,100] yes?- PGS 2.Log.pr. K.Ježek 2006 33