Logické programování



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

Logika a logické programování

Modely Herbrandovské interpretace

Programovací jazyk Prolog

Klasická predikátová logika

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

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

Logické programy Deklarativní interpretace

Matematická logika. Miroslav Kolařík

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

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

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 α

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

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

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

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

Matematická logika. Miroslav Kolařík

4.2 Syntaxe predikátové logiky

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

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

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

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

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

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

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

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

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

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

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

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

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

Matematická logika. Miroslav Kolařík

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

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

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

Logické programování

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

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

Matematická logika. Rostislav Horčík. horcik

DEFINICE Z LINEÁRNÍ ALGEBRY

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

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

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

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

Programovací jazyk Prolog

Úvod do informatiky. Miroslav Kolařík

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

Matematická logika. Miroslav Kolařík

Úvod. Programovací paradigmata

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

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

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

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

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

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

Representace znalostí s použitím klasické negace

Rezoluce v predikátové logice

Výroková logika dokazatelnost

Jan Pavĺık. FSI VUT v Brně

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

NAIVNÍ TEORIE MNOŽIN, okruh č. 5

Seminární práce z Teorie ICT

Rezoluce v predikátové logice

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

Programování v čistém Prologu

Matematická logika. Rostislav Horčík. horcik

Matematická analýza 1

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

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

Množiny, relace, zobrazení

Doporučené příklady k Teorii množin, LS 2018/2019

Třída PTIME a třída NPTIME. NP-úplnost.

LOGIKA VÝROKOVÁ LOGIKA

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

Fuzzy logika a reálný svět, aneb jsou všechny hromady skutečně malé?

Sémantika predikátové logiky

Matematická logika. Rostislav Horčík. horcik

IB111 Úvod do programování skrze Python Přednáška 13

Lineární algebra : Lineární prostor

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

Hilbertovský axiomatický systém

IB013 Logické programování I Hana Rudová. jaro 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í.

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

2.2 Sémantika predikátové logiky

TOPOLOGIE A TEORIE KATEGORIÍ (2017/2018) 3. PREDNÁŠKA - KOMPAKTNÍ PROSTORY.

Omezenost funkce. Definice. (shora, zdola) omezená na množině M D(f ) tuto vlastnost. nazývá se (shora, zdola) omezená tuto vlastnost má množina

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

Lineární algebra : Polynomy

Logika. 6. Axiomatický systém výrokové logiky

Dodatek 2: Funkce dvou proměnných 1/9

Logika Libor Barto. Výroková logika

Úvod do informatiky. Miroslav Kolařík

Matematika B101MA1, B101MA2

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

Naproti tomu gramatika je vlastně soupis pravidel, jak

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

Paradigmata programování 1

Transkript:

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í Funkcionální programování Objektově orientované programování

Paradigmata programování Strukturované programování Procedurální programování Funkcionální programování Objektově orientované programování

Co je logické programování? jedno z paradigmat programování založeno na matematické logice program = konečná množina axiomů výpočet = konstruktivní důkaz dotazu zadaného uživatelem Vývoj a využití princip logického programování představen J. A. Robinsonem v 1965 první implementace v 70. letech 20. století na Univerzitě v Marseille (PROLOG) využití při programování expertních systémů jazyky: dialekty LISPu (USA), PROLOG (Evropa) rozšíření PROLOGU: fuzzy PROLOG, DATALOG,...

Znalostní báze Znalostní báze (popis přirozeným jazykem) Honza, Jirka a Vilík jsou muži. Monika a Jana jsou ženy. Honza je Jirkovo dítě. Vilík je Moničino dítě. Synové jsou děti mužského pohlaví. Děti jsou naši potomci, děti našich potomků jsou také naši potomci. Přesnější formulace znalostní báze Honza je muž. Jirka je muž. Vilík je muž. Monika je žena. Jana je žena. Honza je Jirkovo dítě. Vilík je Moničino dítě. Osoba X je synem osoby Y pokud je X dítětem Y a pokud je X muž. Osoba X je potomkem osoby Y pokud je X dítětem Y nebo pokud je X dítětem některého potomka Y.

Znalostní báze Znalostní báze (popis přirozeným jazykem) Honza, Jirka a Vilík jsou muži. Monika a Jana jsou ženy. Honza je Jirkovo dítě. Vilík je Moničino dítě. Synové jsou děti mužského pohlaví. Děti jsou naši potomci, děti našich potomků jsou také naši potomci. Přesnější formulace znalostní báze Honza je muž. Jirka je muž. Vilík je muž. Monika je žena. Jana je žena. Honza je Jirkovo dítě. Vilík je Moničino dítě. Osoba X je synem osoby Y pokud je X dítětem Y a pokud je X muž. Osoba X je potomkem osoby Y pokud je X dítětem Y nebo pokud je X dítětem některého potomka Y.

Ukázka logického programu Honza je muž. Jirka je muž. Vilík je muž. Monika je žena. Jana je žena. Honza je Jirkovo dítě. Vilík je Moničino dítě. Osoba X je synem osoby Y pokud je X dítětem Y a pokud je X muž. Osoba X je potomkem osoby Y pokud je X dítětem Y nebo pokud je X dítětem některého potomka Y. Logický program muz(honza). muz(jirka). muz(vilik). zena(monika). zena(jana). jedite(honza,jirka). jedite(vilik,monika). jesyn(x,y) :- jedite(x,y), muz(x). jepotomek(x,y) :- jedite(x,y). jepotomek(x,y) :- jedite(x,z), jepotomek(z,y).

Ukázka logického programu % prirozene cislo natural(0). natural(s(x)) :- natural(x). % scitani prirozenych cisel add(x,0,x). add(x,s(y),s(z)) :- add(x,y,z). % je sude? even(0). even(s(s(x))) :- even(x). % je liche? odd(s(0)). odd(s(s(x))) :- odd(x). % prirozené usporadani X,Y leq(x,x). leq(x,s(y)) :- leq(x,y).

1 Principy logického programování 2 3

Jazyk logického programu Definice Jazyk logického programu L obsahuje konečnou množinu atomů (konstant) A (např. honza, jirka, monika, 0), spočetnou množinu proměnných V (např. X, Y, Z, Cislo), konečnou neprázdnou množinu predikátů P (např. muz/1, zena/1, jepotomek/2, natural/1, leq/2) a konečnou množinu funktorů F (např. s/1). U každého predikátu a funktoru se obvykle uvádí i jeho arita.

Termy a formule Definice Term jazyka L definujeme následovně: Každá proměnná v V je term. Každý atom a A je term. Jsou-li t 1,..., t n termy, pak pro libovolný funktor f F je f (t 1,..., t n ) term. Příklady: X, honza, 0, s(s(0)), s(s(s(s(cislo)))) Definice Jsou-li t 1,..., t n termy jazyka L, pak pro libovolný predikát p P je p(t 1,..., t n ) atomická formule. Příklady: muz(honza), zena(jirka), leq(s(0),0)

Logický program Definice Faktem nazýváme libovolnou atomickou formuli A 0. Příklady: muz(jirka), jedite(vilik,monika) Definice Pravidlem rozumíme libovolný výraz ve tvaru A 0 A 1, A 2,..., A n, kde A 0,..., A n jsou atomické formule. Příklad: jepotomek(x,y) :- jedite(x,y). Definice Cíl je libovolný výraz ve tvaru A 1, A 2,..., A n, kde A 1,..., A n jsou atomické formule. Příklad: jedite(x,monika), muz(x)

Příklad výpočtu Program: muz(honza). muz(jirka). muz(vilik). zena(monika). zena(jana). jedite(honza,jirka). jedite(jana,monika). jedite(vilik,monika). jesyn(x,y) :- jedite(x,y), muz(x). Zadán cíl: jesyn(x, monika). Intuitivní řešení: K tomu, abychom stanovili odpověd na jesyn(x, monika). stačí stanovit odpověd na jedite(x,monika), muz(x), což pro X = vilik dostáváme ihned z databáze faktů. Pro žádnou další hodnotu X to již neplyne.

1 Principy logického programování 2 3

Substituce Principy logického programování Definice Necht X 1,..., X n jsou proměnné a t 1,..., t n jsou takové termy, že platí 1 X i t i (i = 1,..., n), 2 X i X j (i j). Pak množinu Θ = {X 1 /t 1,..., X n /t n } nazveme substituce. Použití substituce Θ na term (formuli, fakt, pravidlo, cíl) A je term (formule, fakt, pravidlo, cíl) AΘ, který vznikne z A náhradou všech výskytů proměnných X i v A odpovídajícími termy t i. Příklad: Θ = {X/vilik, Y /Z, Z /jana}, A = jedite(x, Y ), muz(z ), muz(vilik), AΘ = jedite(vilik, Z ), muz(jana), muz(vilik).

Skládání substitucí Definice Necht Θ a σ jsou substituce ve tvaru Θ = {X 1 /s 1,..., X m /s m } a σ = {Y 1 /t 1,..., Y n /t n }. Pak složená substituce Θσ je ve tvaru {X 1 /(s 1 σ),..., X n /(s m σ), Y 1 /t 1,..., Y n /t n }, ve které navíc vynecháme všechny: 1 prvky X i /(s i σ), pro které X i = s i σ, 2 prvky Y j /t j, pro které Y j {X 1,..., X n }. Příklad: Θ = {X/s(Z ), Y /W } a σ = {X/0, Z /0, W /Y } Vytvoříme {X/s(0), Y /Y, X/0, Z /0, W /Y }, ze které následně odebereme Y /Y a X/0. Θσ = {X/s(0), Z /0, W /Y }.

Nejobecnější unifikátor algoritmus Vstup: atomické formule φ a ψ Výstup: substituce Θ, pro kterou φθ = ψθ a Θ je nejobecnější (nejjednodušší) možná, nebo odpověd nelze unifikovat 1 Položme E = { φ, ψ }. 2 Vyber libovolný prvek s, t E. Pokud s = f (s 1,..., s n ) a t = f (t 1,..., t n ), nahrad s, t v E dvojicemi s 1, t 1,..., s n, t n a opakuj bod 2. Pokud s = f (s 1,..., s m ) a t = g(t 1,..., t n ), kde f g, pak ukonči výpočet s výstupem nelze unifikovat. Pokud s = t, vyjmi s, t z E a opakuj bod 2. Pokud t = X a s není proměnná, nahrad s, X v E dvojicí X, s a opakuj bod 2. Pokud s = X, t X a proměnná X má v E více výskytů, pak pokud se X vyskytuje v t, odpověz nelze unifikovat, jinak nahrad ostatní výskyty X v E termem t a opakuj bod 2. Pokud pro žádný s, t E nelze nic provést, pak vrat Θ = {X/t X, t E}.

Nejobecnější unifikátor příklad Příklad Nalezněte nejobecnější unifikátor f (X, g(y )) a f (g(z ), Z ). E = { f (X, g(y )), f (g(z ), Z ) } E = { X, g(z ), g(y ), Z } E = { X, g(z ), Z, g(y ) } E = { X, g(g(y )), Z, g(y ) } Θ = {X/g(g(Y )), Z /g(y )}

Deterministický algoritmus Vstup: logický program a cíl Výstup: odpověd No nebo odpověd Yes spolu se substitucí 1 Vyber první podcíl v aktuálním cíli. Pokud je aktuální cíl prázdný pokračuj bodem 3. 2 Procházej od začátku program. Pokud je první podcíl unifikovatelný pomocí Θ s hlavou některého pravidla, přepiš jej v aktuálním cíli tělem tohoto pravidla a na celý aktuální cíl použij Θ. Pokračuj bodem 1. Pokud je první podcíl unifikovatelný pomocí Θ s faktem, odstraň jej z cíle a použij Θ na cíl. Pokračuj bodem 1. Pokud první podcíl není s ničím unifikovatelný, vrátíme se k předchozímu cíli a zkusíme použít jiné pravidlo/fakt. Pokud první podcíl není s ničím unifikovatelný a již se nelze vrátit k předchozímu cíli, končí výpočet odpovědí No. 3 Odpověz Yes a substitucí vzniklou složením použitých substitucí, ze které odstraníme X j /t j, pokud X j není v cíli.

Literatura Principy logického programování J. W. Lloyd: Foundations of logic programming. Springer, 1987. J. Hynek, P. Mikulecký: a Prolog, Gaudeamus, 2003. V. Vychodil: Prezentace k předmětu Paradigmata programování IV, 2005. SWI-Prolog, dostupné na adrese http://www.swi-prolog.org/. Tato prezentace a implementace did-prolog je dostupná na adrese http://www.inf.upol.cz/ v části Přednášky pro střední školy.