Obsah

AP13 Prolog

Zadání

(SLD-rezoluce, SLD-stromy, výpočetní mechanismus Prologu, základy programování v Prologu)

Vypracování

Rezoluce

Rezoluce –- dokazuje se nesplnitelnost formulí, jsou v KNF, v kořenu je □ a nebo dokazovaná formule C, v listech jsou jednotlivé klauzule S, ve vnitřních listech resolventy

Lineární rezoluce –- jde o posloupnost dvojic <C_{0}, B_{0}>, … , <C_{n}, B_{n}> takovou, že C = C_{n+1} a

  1. C_{0} a všechny B_{i} jsou z S anebo nějaké C_{j}, kde j<i
  2. každé C_{i+1}, i \leq n je rezolventou C_{i} a B_{i} (vstupní klauzule S, boční B_{i} a střední C_{i})

Lineární vstupní rezoluce (LI) množiny S=P \cup \{ G\} je lineární vyvrácení S, které začíná klauzulí G, a bočními klauzulemi jsou jen klauzule z P.

Hornovy klauzule (jsou v Prologu) = klauzule s nejvýše jedním pozitivním literálem (dají se reprezentovat jako implikace)

Typy:

  1. programové –- fakta (bez negativního literálu. p.), pravidla (s aspoň 1 negativním literálem p:-q.)
  2. cíle –- bez pozitivního literálu ?-p. (t.j. ekvivalent {neg p})

LD rezoluce –- už máme uspořádané klauzule a při rezoluci vkládáme dovnitř. LD rezoluční vyvrácení P \cup \{ G\} je postupnost <G_{0}, C_{0}>, … , <G_{n}, C_{n}> uspořádaných klauzulí taková, že G_{0}=G, G_{n+1}=□, C_{i} \in T a každé G_{i}, 1\leq i\leq n je rezolventou uspořádaných klauzulí G_{i-1} a C_{i-1}

SLD-rezoluce

SLD rezoluce -– lineární vstupní rezoluce se selekčním pravidlem (selekční pravidlo = libovolná funkce, která vybere literál z každé uspořádané cílové klauzule)

Význam SLD rezoluce

: máme množinu klauzulí P a cílovou klauzuli G=[\neg A_{1}(\vec{x}) \cdots \neg A_{n}(\vec{x})]

Příklad(1)

SLD-stromy

SLD strom pro program P a cíl G: v kořeni je G. Když je libovolný uzel označený G‘, tak jeho bezprostřední následníci jsou označení výsledkem rezoluce nejlevějšího literálu G‘ se všemi použitelnými klauzulemi z P.

Příklad(2)

EDIT: Tento příklad obsahuje chybu - doporučuji se podívat na interaktivní přednášku pana Popelínského:1) Chyba je hned na 1. řádku.
Ten má vypadat takto: 1. [P(x,y),\neg Q(x,z), R(z,y)]

Prolog

Prolog je logický programovací jazyk. Patří mezi tzv. deklarativní programovací jazyky, ve kterých programátor popisuje pouze cíl výpočtu, přičemž přesný postup, jakým se k výsledku program dostane, je ponechán na libovůli systému. Prolog se snaží o pokud možno abstraktní vyjádření faktů a logických vztahů mezi nimi s potlačením imperativní složky. Prolog je využíván především v oboru umělé inteligence a v počítačové lingvistice (obzvláště zpracování přirozeného jazyka, pro nějž byl původně navržen).

Výpočetní mechanismus Prologu

Vyhodnocovací mechanizmus Prologu prochází SLD-strom do hloubky zleva doprava a hledá (první) úspěšnou cestu (backtracking) – případně projde celý strom a vyhlásí, že to není možné.

- zadání středníku (;) po úspěšném vyhodnocení čísla vynutíme backtracking a hledání alternativního důkazu
- odpověď „no“ systému znamená, že daný cíl není logickým důsledkem programu (případně že nemá alternativní důkaz) prologovská strategie prohledávání stavového prostoru (do hloubky) může vést k zacyklení (i v případě, že existují úspěšné větve)

Příklad programu, který vede k zacyklení, i když existují úspěšné větve: q:- r. r:- q. q. ?- q.

Základy programování v Prologu

Logické programování:

  1. logický program = libovolná konečná množina programových Hornových klauzulí
  2. odvozování (dokazování) cílů založené na SLD-rezoluci
  3. deklarativní (specifikace programu je přímo programem)
  4. teoretický model, zachovává úplnost

Prolog

Syntax : datové objekty

Syntax: program

  1. množina programových klauzulí
  2. proměnné v lokální klauzuli
  3. pravidla: hlava:- tělo.
    1. date(D,M,Y):- day(D), month(M), year(Y).
  4. fakta: pravidla s prázdným tělem
  5. cíle: klauzule bez hlavy, reprezentují dotazy

Poznámky

Literatura

Wikipedia Prolog - http://cs.wikipedia.org/wiki/Prolog_%28programovac%C3%AD_jazyk%29 Slidy předmětu - http://www.fi.muni.cz/usr/popelinsky/lectures/bak_logika/ Vypracování otázek Elena Halicová - http://www.fi.muni.cz/~xhalic1/statnice/vypracovaneIM.doc