- Charakteristika logického programování
- Pravda a logická dedukce
- Logika prvního řádu
- Formulář žádosti
- Umělá inteligence
- Příklady logického programování
- Příklad 1
- Příklad 2
- Dotaz
- Další dotazy
- Reference
Logika programování je programovací paradigma, které používá logické obvody, spíše než jen matematické funkce ke kontrole, jak fakta a pravidla jsou stanovena.
Místo pečlivě strukturovaného toku kontroly, který určuje, kdy se má provést a jak vyhodnotit volání funkcí nebo jiné pokyny, jsou logická pravidla programu psána jako klauzule nebo logické predikáty.
Příklady logického programování v Prologu. Zdroj: Autor: Kuldeepsheoran1 - snímek obrazovky, CC BY-SA 3.0, wikimedia commons
Tento přístup, který se často používá v genetickém a evolučním programování, obecně říká modelu, jaký cíl má být dosažen, než jak jej dosáhnout.
Každé pravidlo obsahuje záhlaví a tělo s formalizovanou logikou, nikoli vykonatelnou matematickou funkcí. Například: „A je pravda (záhlaví): pokud jsou C1, C2 a C3 pravdivé (tělo).“ Fakta nebo výsledky jsou vyjádřeny bez těla, například „A je to pravda“.
U některých programovacích jazyků, jako je Prolog, však může být zahrnuto i imperativní programování, které modelu řekne, jak řešit určité problémy. Například: „Chcete-li vyřešit Y, přidejte C1, C2 a C3.“
Charakteristika logického programování
Logické programování se podstatně liší od ostatních existujících programovacích strategií. Namísto zadávání pokynů počítači s programem se navazují vztahy mezi objekty. Tímto způsobem může počítač tyto vztahy zdůvodnit a dosáhnout tak logických řešení.
V logickém programu jsou dvě hlavní sady kódu: fakta a pravidla. Pravidla jsou aplikována na fakta za účelem získání znalostí o životním prostředí.
Pravda a logická dedukce
Logické programy lze dešifrovat pomocí dvou důležitých konceptů: pravdy a logické dedukce. Pravda vychází z toho, zda je výpočet v programu pravdivý nebo ne, při implementaci symbolů programu. Logická dedukce určuje, zda je logická klauze důsledkem programu.
Tyto pokyny budou vždy interpretovány jako logické věty a klauzule, jejichž výsledek bude logickým důsledkem výpočtů, které obsahuje.
Logika prvního řádu
Je to odnož výrokové logiky. Zvažte, zda jsou objekty pravdivé nebo nepravdivé z pohledu částečného světa, nazývané doména. Logické programování je založeno na zobecnění logiky prvního řádu.
Tato logika se skládá ze syntaxe a sémantiky. Syntaxe je formální jazyk používaný k vyjádření pojmů. Na druhé straně sémantika logických vzorců prvního řádu naznačuje, jak určit skutečnou hodnotu libovolného vzorce.
Tato logika je založena na abecedě a jazyce prvního řádu, jakož i na souboru axiomů a odvozovacích pravidel.
Formulář žádosti
Je to podmnožina logiky prvního řádu. Má normalizovanou podobu, kde je příkaz definován univerzální předponou nebo řetězcem univerzálních kvantifikátorů a volnou sadou kvantifikátorů v klauzuli.
Při žádosti o dotaz do programu se vezme v úvahu tělo klauzule, jejíž záhlaví se může shodovat. To je stejné jako použití pravidla odvozování v logice.
Jako krok v závěru se vybírají dvě klauze, která mají jako vlastnost, že jedna obsahuje disjunktivní X (kladný literál) a druhý obsahuje disjunktivní X (záporný literál). Tyto kompromisy jsou známé jako doplňkové.
Z těchto dvou počátečních klauzulí je vytvořena nová rezoluční klauze s využitím všech literálů, s výjimkou doplňujících.
Umělá inteligence
Logické programování je metodika, která se používá k dedukci počítačů, protože je užitečné reprezentovat znalosti. Logika se používá k reprezentaci znalostí a inference k jejich zvládnutí.
Logika použitá k reprezentaci znalostí je klauzulární forma. Používá se proto, že logika prvního řádu je dobře srozumitelná a schopná reprezentovat všechny výpočetní problémy.
Prolog je programovací jazyk, který je založen na myšlenkách logického programování. Myšlenkou Prologu je, aby logika vypadala jako programovací jazyk.
Příklady logického programování
Příklad 1
- Skutečnost: Rubí je kočka.
- Pravidlo: všechny kočky mají zuby.
- Konzultace: Má Rubí zuby?
- Závěr: ano.
Pravidlo „všechny kočky mají zuby“ lze použít na Ruby, protože existuje skutečnost, že „Ruby je kočka.“ Tento příklad není psán s žádnou syntaxí pro skutečný programovací jazyk.
Příklad 2
Tento příklad lze vidět v Prologu, protože se jedná o jeden z nejpopulárnějších logických programovacích jazyků:
- ženská (alissa).
- mužský (bobby).
- mužský (carlos).
- ženský (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- Father_of (F, P): - pes (F), son_of (P, F).
Tento program je obtížně čitelný, protože program Prolog se výrazně liší od jiných jazyků. Jakákoli součást kódu, která se podobá „ženskému (alissa)“. to je fakt.
Jedno pravidlo je „otec_ (F, P): - muž (F), dítě (P, F)“. Symbol „: -“ lze číst jako „je pravdivý, pokud“. Velká písmena znamenají, že proměnné lze použít na jakýkoli objekt, takže F může znamenat carlos, doris, alissa nebo bobby. Tento kód lze přeložit jako:
- Alissa je žena.
- Bobby je muž.
- Carlos je muž.
- Doris je žena.
- Doris je Carlosova dcera.
- Carlos je Bobbyho syn.
- Doris je Alissina dcera.
- «F je otec P» platí, je-li F člověk a pokud P je syn F.
Dotaz
Předpokládejme, že se chcete dozvědět více o programu. Můžete hledat a zjistit, s kým otcem Bobby je:? - otec_of (bobby, X). Systém zobrazí následující odpověď: X = Carlos.
V tomto případě se předává vztah, kde jedna z jeho hodnot je proměnná. Co Prolog udělal, bylo aplikovat na tento vztah různé objekty, dokud jeden z nich nebyl logicky solidní.
Carlosův jediný otec je Bobby a Bobby je muž. To vyhovovalo pravidlu „otec_ (F, P): - mužský (F), son_of (P, F).“ Když se X rovná „carlos“, logika je zdravá.
Další dotazy
Další obecnější dotazy mohou být učiněny pro Prolog, které způsobí, že systém generuje více výsledků:
-? - parent_of (rodič, dítě).
- Otec = bobby
- Dítě = Carlos
- Otec = Carlos
- Dítě = doris
Jak bylo vidět, logické programování nevyžaduje informace, že alissa nebo bobby jsou lidé, aby se o nich dozvěděli. Ve skutečnosti není nutné uvádět, že existuje pojem zvaný osoba.
Ve většině nealogických programovacích jazycích musíte tyto pojmy definovat nejprve, než budete moci psát programy, které zpracovávají informace o lidech.
Reference
- Hluboká AI (2020). Logické programování. Převzato z: deepai.org.
- Wikiverzita (2020). Teorie programovacích jazyků / logické programování. Převzato z: en.wikiversity.org.
- Imperial College London (2006). Logické programování. Převzato z: doc.ic.ac.uk.
- Jia-Huai You (2020). Úvod do logického programování. University of Alberta. Převzato z: eng.ucy.ac.cy.
- C2 Wiki (2020). Logické programování. Převzato z: wiki.c2.com.