- Charakteristika logického programovania
- Pravdivé a logické dedukcie
- Logika prvého poriadku
- Formulár žaloby
- Umela inteligencia
- Príklady logického programovania
- Príklad 1
- Príklad 2
- Dopyt
- Ďalšie otázky
- Referencie
Logika programovania je programovací paradigma, ktoré používa logické obvody, skôr než len matematické funkcie na kontrolu, ako fakty a pravidlá sú stanovené.
Namiesto starostlivo štruktúrovaného toku kontroly, ktorý určuje, kedy sa má vykonať a ako hodnotiť volania funkcií alebo iné pokyny, sa logické pravidlá programu píšu ako klauzuly alebo logické predikáty.
Príklady logického programovania v Prologu. Zdroj: Autor: Kuldeepsheoran1 - snímka obrazovky, CC BY-SA 3.0, wikimedia commons
Tento prístup, ktorý sa často používa v evolučnom a genetickom programovaní, vo všeobecnosti hovorí skôr o modeli, aký cieľ dosiahnuť, ako o tom, ako ho dosiahnuť.
Každé pravidlo obsahuje hlavičku a telo s formalizovanou logikou, a nie vykonateľnú matematickú funkciu. Napríklad „A je pravda (hlavička): ak sú C1, C2 a C3 pravdivé (telo).“ Fakty alebo výsledky sú vyjadrené bez tela, napríklad „A je to pravda“.
Avšak s niektorými programovacími jazykmi, ako je Prolog, sa môže zahrnúť aj imperatívne programovanie, ktoré modelu povie, ako vyriešiť určité problémy. Napríklad „Ak chcete vyriešiť Y, pridajte C1, C2 a C3.“
Charakteristika logického programovania
Logické programovanie sa podstatne líši od ostatných existujúcich programovacích stratégií. Namiesto zadávania pokynov počítaču s programom sa vytvárajú vzťahy medzi objektmi. Týmto spôsobom môže počítač zdôvodniť tieto vzťahy a dosiahnuť logické riešenia.
V rámci logického programu existujú dve hlavné sady kódu: fakty a pravidlá. Pravidlá sa uplatňujú na fakty s cieľom získať vedomosti o životnom prostredí.
Pravdivé a logické dedukcie
Logické programy možno dešifrovať pomocou dvoch dôležitých konceptov: pravdy a logickej dedukcie. Pravda vychádza z toho, či je výpočet v programe pravdivý alebo nie, pri implementácii symbolov programu. Logická dedukcia určuje, či je logická klauzula dôsledkom programu.
Tieto pokyny sa budú vždy interpretovať ako logické vety a klauzuly, ktorých výsledok bude logickým dôsledkom výpočtov, ktoré obsahuje.
Logika prvého poriadku
Je to odnož výrokovej logiky. Zvážte, či sú objekty pravdivé alebo nepravdivé z perspektívy čiastočného sveta, nazývané doména. Logické programovanie je založené na zovšeobecnení logiky prvého poriadku.
Táto logika sa skladá zo syntaxe a sémantiky. Syntax je formálny jazyk používaný na vyjadrenie pojmov. Na druhej strane sémantika logických vzorcov prvého poriadku naznačuje, ako určiť skutočnú hodnotu ľubovoľného vzorca.
Táto logika je založená na abecede a jazyku prvého poriadku, ako aj na súbore axiómov a inferenčných pravidiel.
Formulár žaloby
Je to podmnožina logiky prvého poriadku. Má normalizovanú podobu, keď je príkaz definovaný univerzálnou predponou alebo reťazou univerzálnych kvantifikátorov a v doložke je voľný súbor kvantifikátorov.
Pri žiadosti o dotaz do programu sa bude brať do úvahy telo klauzuly, ktorej záhlavie sa môže zhodovať. Je to rovnaké ako použitie logického pravidla odvodenia.
Ako krok pri odvodení sa vyberú dve vety, ktoré majú takú vlastnosť, že jedna obsahuje disjunkčný X (kladný literál) a druhý obsahuje disjunkčný X (záporný literál). Tieto kompromisy sa nazývajú doplnkové.
Z týchto dvoch úvodných ustanovení sa vytvára nová rezolučná klauzula, ktorá využíva všetky literály, s výnimkou doplnkových.
Umela inteligencia
Logické programovanie je metodika, ktorá sa používa na dedukciu počítačov, pretože je užitočné reprezentovať vedomosti. Logika sa používa na vyjadrenie vedomostí a na ich odvodenie.
Logika použitá na vyjadrenie vedomostí je klauzulárna forma. Používa sa preto, že logika prvého poriadku je dobre pochopená a schopná predstavovať všetky výpočtové problémy.
Prolog je programovací jazyk, ktorý je založený na myšlienkach logického programovania. Myšlienka Prologu je, aby logika vyzerala ako programovací jazyk.
Príklady logického programovania
Príklad 1
- Skutočnosť: Rubí je mačka.
- Pravidlo: všetky mačky majú zuby.
- Konzultácia: Má Rubí zuby?
- Záver: áno.
Na Ruby sa môže vzťahovať pravidlo „všetky mačky majú zuby“, pretože existuje skutočnosť, že „Ruby je mačka“. Tento príklad nie je napísaný so žiadnou syntaxou pre skutočný programovací jazyk.
Príklad 2
Tento príklad je možné vidieť v programe Prolog, pretože je to jeden z najpopulárnejších logických programovacích jazykov:
- ženská (alissa).
- mužský (bobby).
- mužský (carlos).
- ženský (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- otec (F, P): - muž (F), syn (P, F).
Tento program sa ťažko číta, pretože program Prolog sa výrazne líši od iných jazykov. Akákoľvek zložka kódu, ktorá sa podobá výrazu „ženský (alissa)“. je to skutočnosť.
Jedným pravidlom je „otec_ (F, P): - muž (F), dieťa (P, F)“. Symbol „: -“ možno chápať ako „je pravdivý, ak“. Veľké písmená znamenajú, že premenné sa dajú použiť na akýkoľvek objekt, takže F môže znamenať carlos, doris, alissa alebo bobby. Tento kód možno preložiť ako:
- Alissa je žena.
- Bobby je muž.
- Carlos je muž.
- Doris je žena.
- Doris je Carlosova dcéra.
- Carlos je Bobbyho syn.
- Doris je Alissina dcéra.
- "F je otec P" platí, ak je F človek a ak P je syn F.
Dopyt
Predpokladajme, že chcete získať ďalšie informácie o programe. Môžete hľadať a zistiť, s kým otcom je Bobby :? - otec_of (bobby, X). Systém uvedie túto odpoveď: X = Carlos.
V tomto prípade sa odovzdáva vzťah, kde jedna z jeho hodnôt je premenná. To, čo Prolog urobil, bolo použitie rôznych objektov na tento vzťah, kým jeden z nich nebol logicky solídny.
Carlosovým jediným otcom je Bobby a Bobby je muž. Tým sa splnilo pravidlo „otec_ (F, P): - mužský (F), syn_ (P, F)“. Keď sa X rovná „carlos“, logika je zdravá.
Ďalšie otázky
Na Prolog môžu byť predložené ďalšie všeobecnejšie otázky, ktoré spôsobia, že systém vygeneruje viac výsledkov:
-? - parent_of (rodič, dieťa).
- Otec = bobby
- Dieťa = Carlos
- Otec = Carlos
- Dieťa = doris
Ako bolo vidieť, logické programovanie nevyžaduje informácie, že alissa alebo bobby sú ľudia, aby sa o nich dozvedeli. V skutočnosti nie je potrebné naznačovať, že existuje pojem nazývaný osoba.
Vo väčšine neslogických programovacích jazykov musíte tieto koncepty definovať ako prvé skôr, ako budete môcť písať programy, ktoré spracúvajú informácie o ľuďoch.
Referencie
- Hlboká AI (2020). Logické programovanie. Prevzaté z: deepai.org.
- Wikiverzita (2020). Teória programovacích jazykov / logické programovanie. Prevzaté z: en.wikiversity.org.
- Imperial College London (2006). Logické programovanie. Prevzaté z: doc.ic.ac.uk.
- Jia-Huai You (2020). Úvod do logického programovania. University of Alberta. Prevzaté z: eng.ucy.ac.cy.
- C2 Wiki (2020). Logické programovanie. Prevzaté z: wiki.c2.com.