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

Podobné dokumenty
Logické programy Deklarativní interpretace

Programování v čistém Prologu

Modely Herbrandovské interpretace

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

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

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

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

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

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

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

Logika a logické programování

Logické programování

Logické programování I

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

popel, glum & nepil 16/28

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

Matematická logika. Miroslav Kolařík

Logické programování

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 α

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

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

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

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

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

Matematická logika. Miroslav Kolařík

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

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

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

Množiny, základní číselné množiny, množinové operace

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

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

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

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

4.2 Syntaxe predikátové logiky

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

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

Fuzzy množiny, Fuzzy inference system. Libor Žák

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

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Přednáška 3: Limita a spojitost

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

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Derivace funkce Otázky

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

4 Integrální počet funkcí více reálných proměnných

Derivace funkce DERIVACE A SPOJITOST DERIVACE A KONSTRUKCE FUNKCÍ. Aritmetické operace

15. Moduly. a platí (p + q)(x) = p(x) + q(x), 1(X) = id. Vzniká tak struktura P [x]-modulu na V.

Seminární práce z Teorie ICT

ALGEBRA. Téma 5: Vektorové prostory

RELACE, OPERACE. Relace

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

Matematická analýza 1

Sémantika predikátové logiky

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Teoretická informatika Tomáš Foltýnek Teorie čísel Nekonečno

Zimní semestr akademického roku 2014/ prosince 2014

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

1 Báze a dimenze vektorového prostoru 1

Matematika B101MA1, B101MA2

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

Diferenciální rovnice 1

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

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

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

9. Vícerozměrná integrace

Matematická logika. Miroslav Kolařík

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

Programovací jazyk Prolog

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

Matematická logika. Rostislav Horčík. horcik

α β ) právě tehdy, když pro jednotlivé hodnoty platí β1 αn βn. Danou relaci nazýváme relace

7B. Výpočet limit L Hospitalovo pravidlo

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

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

1 Základní pojmy. 1.1 Množiny

DEFINICE Z LINEÁRNÍ ALGEBRY

10. Vektorové podprostory

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Programovací jazyk Prolog

Naproti tomu gramatika je vlastně soupis pravidel, jak

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í

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

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

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

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

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

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

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

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

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7

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

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

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

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

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

0.1 Úvod do lineární algebry

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

7. Rozdělení pravděpodobnosti ve statistice

Dokumentace programu piskvorek

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

Transkript:

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, které programy ke svému životu potřebují. Nejprve musíme vysvětlit pojem domény. Definice. (Domény) Je-li L jazyk nějakého programu, množinu všech základních termů označíme HU L a nazveme Herbrandovo univerzum. Množinu všech základních atomů jzyka L označíme Herbrandova báze. HB L a nazveme Z praktických důvodů budeme Herbrandovo univerzum nazývat doménou jazyka L (případně i doménou programu, ke kterému tento jazyk patří. Logické programování 10 2

Prázdná doména Je nejjednodušší doménou. Jazyk, kterému prázdná doména odpovídá neobsahuje žádné funkční symboly. Proto také nejsou žádné termy bez proměnných a všechny predikáty mají četnost nula. Jsou to vlastně výrokové konstanty. Nicméně lze napsat legální Prologovské programy, které počítají nad touto doménou. Příkladem takového programu je program SUMMER. summer. warm summer. warm sunny. happy summer, warm. Logické programování 10 3 Programu SUMMER můžeme klást jednoduché dotazy. Protože atomy (v Herbrandově bázi) neobsahují proměnné, vypočtené odpovědní substituce jsou prázdné.?- happy. yes?- sunny. no Prolog nabízí tři vestavěné predikáty četnosti nula: true/0, fail/0 a repeat/0. Predikát true/0 je vnitřně definován jedinou klauzulí true. takže dotaz true je vždy úspěšný. Logické programování 10 4

fail/0 má prázdnou definici, proto dotaz fail je vždy neúspěšný. repeat/0 je vnitřně definován pomocí dvou klauzulí: repeat. repeat repeat. Vestavěné predikáty nelze předefinovat, takže klauzule, jejichž hlavy se shodují s některým vestavěným predikátem jsou ignorovány. Cvičení. (i) Nakreslete LD-strom a Prologvský strom pro dotazy repeat a fail. (ii) Příkaz Prologu write( a ) zobrazí řetězec a a příkaz nl znamená přechod na nový řádek. Jaký efekt má dotaz repeat, write( a ), nl, fail? Logické programování 10 5 Konečné domény Užitečnější jsou již konečné domény. Každý prvek domény odpovídá nějaké konstantě v daném jazyce. Předpokládáme, že takových konstant je konečně mnoho a žádné funkční symboly četnosti větší než nula v jazyce nejsou. Uvažujme příklad jednoduché databáze, která obsahuje informaci o tom, které země spolu sousedí. Znázorníme to na příkladu Střední Ameriky. 1 2 3 4 5 6 7 1 Belize 2 Guatemala 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica 7 Panama Logické programování 10 6

Program CENTRAL_AMERICA je jednoduchou databází, která popisuje, které země spolu sousedí. % neighbour(x,y) X sousedí s Y. neighbour(belize,guatemala). neighbour(guatemala, belize). neighbour(guatemala,el_salvador). neighbour(guatemala,honduras). neighbour(el_salvador,guatemala). neighbour(el_salvador,honduras). neighbour(honduras,guatemala). neighbour(honduras,el_salvador). neighbour(honduras,nicaragua). neighbour(nicaragua,honduras). neighbour(nicaragua,costa_rica). neighbour(costa_rica,panama). neighbour(panama,costa_rica). Logické programování 10 7 Program odpovídá na jednoduché otázky: jsou Honduras a El Salvador sousední státy??- neighbour(honduras,el_salvador). yes 1 2 3 4 5 6 7 1 Belize 2 Guatemala 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica 7 Panama Logické programování 10 8

které státy jsou sousedy Nicaragui??- neighbour(nicaragua,x). X = honduras ; X = costa_rica ; no 1 2 3 4 5 6 7 1 Belize 2 Guatemala 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica 7 Panama Logické programování 10 9 Které státy sousedí s oběma státy Hondurasem a Costa Ricou??- neighbour(x,honduras), neighbour(x,costa_rica). X = nicargua ; no 1 2 3 4 5 6 7 1 Belize 2 Guatemala 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica 7 Panama Logické programování 10 10

Složitější dotazy vyžadují rozšíření programu o další pravidla. Například pro otázku které země lze dosáhnout z Guatemaly přejitím jediné země je třeba doplnit program o pravidlo one_crossing(x,y) neighbour(x,z),. neighbour(z,x), diff(x,y). Nyní dostáváme Logické programování 10 11?- one_crossing(guatemala,y). Y = honduras ; Y = el_salvador ; Y = nicaragua ; no 1 2 3 4 5 6 7 1 Belize 2 Guatemala 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica 7 Panama Logické programování 10 12

Toto pravidlo obsahuje lokální proměnnou Z. Proměnnou v klauzuli, která se vyskytuje jen těle klauzule nazýváme lokální. Lokální proměnné se zpravidla používají k přenášení mezivýsledků. Lokální proměnné nelze zaměňovat s anonymními proměnnými. Kdybychom v uvedené klauzuli zaměnili oba výskyty Z anonymními proměnnými, změnili bychom její význam. Každý výskyt anonymní proměnné _ by označoval jinou proměnnou. Zatím co konjunkce je obsažena v definici klauzule, s disjunkcí máme v čistém Prologu větší problém. Logické programování 10 13 Uvažujme dotaz které země sousedí s Hondurasem nebo s Costa Ricou? V čistém Prologu je třeba definovat nový predikát pomocí dvou klauzulí, které přidáme k programu. neighbour_h_or_c(x) neighbour_h_or_c(x) neighbour(x,honduras). neighbour(x,costa_rica). Potom dostáváme Logické programování 10 14

?- neighbour_h_or_c(x). X = guatemala ; X = el_salvador ; X = nicaragua ; X = nicaragua ; X = panama ; no V odpovědích je obou zemí. nicaragua uvedena dvakrát, protože je sousedem 1 2 3 4 1 Belize 5 2 Guatemala 6 7 3 El Salvador 4 Honduras 5 Nicaragua 6 Costa Rica Logické programování 10 7 Panama 15 Reprezentace relace neighbour v programu CENTRAL AMER- ICA je příliš jednoduchá. Otázky Která země má nejvíce sousedů? Které země je třeba přejít na cestě ze země X do země Y? nelze jednoduše zodpovědět. Vhodnější by byla reprezentace, kde by pro každou zemi byl vytvořen seznam sousedních zemí. K tomuto problému se vrátíme až zavedeme pojem seznamu. Logické programování 10 16

Numerály Již jsme je použili reprezentaci přirozených čísel v programu SUMA. Formálně se numerály definují indukcí. Používáme jazyk, ve kterém je konstanta 0 (nula) a unární funkční symbol s (následník). Podle následující definice vytvořené základní termy nazýváme numerály. 0 je numerál, je-li x numerál, potom s(x), následník x je také numerál. Tuto definici lze bezprostředně vyjádřit programem NUMERAL. % num(x) X je numerál. num(0). num(s(x)) num(x). Logické programování 10 17 Snadno se ověří pro numerál s n (0), a n > 0 dotaz num(s n (0)) končí úspěšně, pro základní term t, který není numerálem, dotaz num(t) konečně selhává. Předchozí program je rekurzivní, predikát num je v těle i v hlavě druhé klauzule. V obecném případě rekurse připouští možnost nekonečných výpočtů. Stačí vyměnit pořadí první a druhé klauzule a vytvořit tak program NUMERAL1. Dotaz num(y) s proměnnou Y, která se unifikuje s hlavou první (rekurzivní) klauzule s(x),dává num(x) jako rezolventu num(y). Je zřejmé, že opakování tohoto postupu vede na nekonečný výpočet počínající dotazem num(y). Logické programování 10 18

Naproti tomu původní program NUMERAL na dotaz num(y) generuje vypočtenou odpovědní substituci {Y/0}. Při navracení (hledání dalších odpovědí) postupně generuje odpovědní substituce. {Y/ s(0)}, {Y/ s(s(0))},... atd. Program NUMERAL generuje nekonečně mnoho odpovědí, tedy potenciálně diverguje. Pořadí klauzulí ovlivňuje efektivnost výpočtů. Uvažujeme-li dotaz num(s n (0)),pro program NUMERAL1, jeho první klauzule se unfikuje a po n použitích této klauzule výpočet končí úspěšně využitím druhé klauzule. Při výpočtu bylo provedeno n+2 pokus; o unifikaci. Při výpočtu podle programu NUMERAL bude provedeno 2n+1 pokusů o unifikaci (z toho n neúspěšných s hlavou první klauzule). Pokud n > 0 platí 2n+1 > n+2. Logické programování 10 19 Program SUMA S tímto programem pro součet numerálů jsme se již seznámili při výkladu SLD-derivací. % sum(x,y,z) X,Y,Z jsou numerály a Z je. součet X a Y. sum(x,0,x). sum(x,s(y),s(z)) sum(x,y,z). Pro součet dostáváme například?- sum(s(s(0)),s(s(s(0))),z). Z = s 5 (0) Logické programování 10 20

Můžeme také generovat rozklady součtu na dvojice sčítanců?- sum(x,y,s(s(s(0)))). X = s(s(s(0))) Y = 0 ; X = s(s(0)) Y = s(0) ; atd. Podobně dotaz sum(s(x),s(y),s 5 (0)) dává všechny dvojice X,Y, takové, že s(x)+s(y) = s 5 (0) atd. Také odpovědi na dotazy nemusí být základní?- sum(x,s(0),z). Z = s(x); no Logické programování 10 21 Některé dotazy jako sum(x,y,z) generují nekonečně mnoho odpovědí. Protože jsme nezabezpečili, že argumenty relace sum mají být termy, jejichž instance jsou numerály, můžeme dostat také odpovědi?- sum(a,0,x). X = a... nebo také?- sum([a,b,c],s(0),x). X = s([a,b,c]) Proti takovým případůmstačí do první klauzule programu SUM A vložit test num(x) a upravit ji do tvaru. sum(x,0,x) num(x). Logické programování 10 22

S podobnými problémy se setkáme i při použití dalších programů pro numerály. Pro násobení můžeme napsat program MULT. Násobení je v aritmetice definováno indukcí axiomy x.0 = 0 x. s(y) = (x. y) + x Můžeme to vyjádřit programem % mult(x,y,z) X,Y,Z takové, že Z je součinem X a Y. mult(_,0,0). mult(x,s(y),w) sum(w,x,z). V první klauzuli je použita anonymní proměnná (test na numerál zde nemá smysl). Ve druhé klauzuli je lokální proměnná W, která přenáší mezivýsledek. Této klauzuli by lépe odpovídal druhý axiom součinu ve tvaru x. s(y) = w + x, kde w = x. y. Logické programování 10 23 Program LESS. Relace < ostrého uspořádání numerálů se v aritmetice definuje pomocí dvou axiomů 0 < s(x), je-li x < y, potom s(x) < s(y). Tyto axiomy lze vyjádřit programem % less(x,y) X,Y jsou numerály takové, že X < Y. less(0,s(_)). less(s(x),s(y)) less(x,y). V aritmetice se zaručuje, že relace < je lineární uspořádání axiomem x < y x = y y < x Logické programování 10 24