- Jedná se o programovací paradigma založené na formální logice
- Programy tedy nejsou posloupnosti příkazů, nýbrž soubor logický pravidel a vztahů z nichž odvozujeme závěry
- Nejznámějším jazykem je Prolog
Pravidla
- Definuje vztah mezi objekty a umožní odvození nových znalostí
; Prolog pravidlo
head :- body
; Lisp pravidlo
(<- head body)
(<- alarm-on locked room-danger)
- Zápis slovy “hlava platí, pokud platí tělo”
- Hlava je hodnota a tělo je seznam hodnot
- program … seznam pravidel
- záleží na jejich pořadí (přidáváme nakonec)
- Aplikací pravidel na cíl vzniká stromová struktura nazývaná strom úsudků (viz dále)
Cíl substituce
- V logickém programování se jedná o otázku, na kterou chceme najít odpověď
; Cíl
(goal)
(? subgoal1 subgoal2 ...)
(? alarm-on police-on-way)
- Substitucí se myslí proces, kde se jedná o dosazení konkrétní hodnoty za proměnnou
- proměnná … symbol začínající otazníkem … např:
?x, ?a
- Substituce se rovnají pokud obsahují stejné páry
Unifikace (výrazů)
- Substituci nazveme unifikátorem výrazu pokud po aplikaci na dané výrazy, dostanu stejné výrazy
- Např: substituce
(sub (?x . a) (?y . b)))
je unifikátor výrazů (?x ?y)
a (?x b)
- Existuje algoritmus, který dokáže zjistit zda jous výrazy unifikovatelné a případně vrátí jejich nejobecnější unifikátor
- nejobecnější unifikátor … unifikuje pouze jen to opravdu potřebné
- Pokud jde výrazy unifikovat, existuje i nejobecnější unifikátor
Úsudek
- Jde o proces odvozování nových informací z existujících pravidel
- V procesu jde o dokázání cíle pomocí rozložení na podcíle a následném nalézání shody s existujícími pravidly
- Při vytváření těchto úsudků vzniká strom, který může být nekonečný
Strom úsudků
- Vizualizace procesu usuzování
- Pokud ve stromu úsudků vyjde
(?)
je odpověď na otázku TRUE

Nekonečný strom úsudků

- Řešení 2 způsoby
- líné stromy
- průchod do šířky - hůře předvídatelné pořadí odpovědí; v konečném čase dorazíme ke každé odpovědi