- Характеристики на логическото програмиране
- Истина и логично дедуктиране
- Логика от първия ред
- Формуляр за отказ
- Изкуствен интелект
- Примери за логическо програмиране
- Пример 1
- Пример 2
- Запитване
- Други запитвания
- Препратки
В програмирането логика е парадигмата на програмиране, която използва логически схеми, а не само на математически функции за контрол как фактите и правилата са изложени.
Вместо внимателно структуриран поток от контрол, който диктува кога да се изпълнява и как да се оценят обажданията на функции или други инструкции, логическите правила на програмата се записват като клаузи или логически предикати.
Примери за логическо програмиране в Prolog. Източник: От Kuldeepsheoran1 - екранна снимка, CC BY-SA 3.0, wikimedia commons
Този подход, който често се използва в генетичното и еволюционното програмиране, по принцип казва на модел каква цел да се постигне, а не как да се постигне.
Всяко правило съдържа заглавка и тяло с формализирана логика, а не изпълними математически функции. Например "И е вярно (заглавие): ако С1, С2 и С3 са верни (тяло)." Фактите или резултатите се изразяват без тяло, като „И това е вярно“.
Въпреки това, с някои езици за програмиране като Prolog може да се включи и императивното програмиране, за да се каже на модела как да се решат определени проблеми. Например „За да разрешите Y, добавете C1, C2 и C3.“
Характеристики на логическото програмиране
Логическото програмиране съществено се различава от другите съществуващи стратегии за програмиране. Вместо даване на инструкции на компютър с програмата, се установяват връзки между обекти. По този начин компютърът може да разсъждава за тези връзки и по този начин да стигне до логически решения.
В рамките на логическата програма има два основни набора от кодове: факти и правила. Правилата се прилагат към фактите, за да се получат знания за околната среда.
Истина и логично дедуктиране
Логическите програми могат да бъдат дешифрирани чрез две важни концепции: истина и логическо извеждане. Истината излиза дали изчислението в програмата е вярно или не, при прилагането на символите на програмата. Логическото изваждане определя дали логическата клауза е следствие от програмата.
Тези инструкции винаги ще бъдат интерпретирани като логически изречения и клаузи, като резултатът от тяхното изпълнение е логично следствие от изчисленията, които съдържа.
Логика от първия ред
Това е отклонение от логиката на предложенията. Помислете дали обектите са верни или неверни от гледна точка на частичен свят, наречени домейн. Логическото програмиране се основава на обобщение на логиката от първи ред.
Тази логика е изградена от синтаксис и семантика. Синтаксисът е формалният език, използван за изразяване на понятия. От друга страна, семантиката на логическите формули от първи ред показва как да се определи истинската стойност на всяка формула.
Тази логика се основава на азбука и език от първи ред, както и набор от аксиоми и правила за извод.
Формуляр за отказ
Това е подмножество от логика от първи ред. Той има нормализирана форма, при която операторът е дефиниран от универсален префикс или верига от универсални квантори и свободен набор от квантори в клаузата.
При заявяване на заявка към програмата ще се вземе предвид тялото на клаузата, чието заглавие може да съвпада. Това е същото като прилагането на правило за извод в логиката.
Като стъпка в извода се избират две клаузи, които имат свойство, че едната съдържа дизюнктив X (положителен буквал), а другата съдържа дизюнктив ¬X (отрицателен буквал). Тези компромиси са известни като допълващи се.
От тези две начални клаузи се изгражда нова резолютивна клауза, използваща всички буквали, с изключение на допълнителните.
Изкуствен интелект
Логическото програмиране е методология, която се използва, за да се установи, че компютрите извеждат, защото е полезно да се представи знанието. Логиката се използва за представяне на знание и извод за справяне с него.
Логиката, използвана за представяне на знанието, е клаузалната форма. Използва се, защото логиката от първи ред е добре разбрана и може да представи всички изчислителни проблеми.
Prolog е език за програмиране, който се основава на идеите на логическото програмиране. Идеята на Prolog е да направи логиката да изглежда като език за програмиране.
Примери за логическо програмиране
Пример 1
- Факт: Руби е котка.
- Правило: всички котки имат зъби.
- Консултация: Руби има ли зъби?
- Заключение: да.
Правилото „всички котки имат зъби“ може да се приложи към Руби, защото има факт, който казва „Руби е котка“. Този пример не се записва с никакъв синтаксис за истински език за програмиране.
Пример 2
Този пример може да се види написан в Prolog, тъй като той е един от най-популярните езици за логическо програмиране:
- женствена (алиса).
- мъжествен (боби).
- мъжествен (карлос).
- женски (doris).
- son_of (doris, karlos).
- son_of (карлос, боби).
- son_of (дорис, алиса).
- баща_ от (F, P): - мъж (F), son_of (P, F).
Тази програма става трудна за четене, тъй като Prolog значително се различава от другите езици. Всеки компонент на код, който наподобява "женски (алиса)." това е факт.
Едно правило е "баща_ от (F, P): - мъж (F), дете_ на (P, F)". Символът ": -" може да се чете като "е вярно, ако". Заглавните букви означават, че променливите могат да бъдат приложени към всеки обект, така че F може да означава карлос, дорис, алиса или боби. Този код може да бъде преведен като:
- Алиса е жена.
- Боби е мъж.
- Карлос е мъж.
- Дорис е жена.
- Дорис е дъщеря на Карлос.
- Карлос е син на Боби.
- Дорис е дъщеря на Алиса.
- «F е бащата на P» е вярно, ако F е мъж и ако P е син на F.
Запитване
Да предположим, че искате да се консултирате с програмата за повече информация. Можете да търсите с молба да намерите чий баща е Боби с:? - баща_оф (боби, X). Системата ще посочи следния отговор: X = Карлос.
В този случай се предава връзка, при която една от нейните стойности е променлива. Това, което Prolog направи, беше да прилага различни обекти към тази връзка, докато един от тях не беше логично солиден.
Единственият баща на Карлос е Боби, а Боби е мъж. Това удовлетворява правилото "баща_ от (F, P): - мъжествен (F), son_of (P, F)." Когато X се равнява на "карлос", логиката е звукова.
Други запитвания
Други по-общи запитвания могат да бъдат отправени към Prolog, които причиняват системата да генерира множество резултати:
-? - parent_of (Родител, Дете).
- Баща = боби
- Дете = Карлос
- Баща = Карлос
- Дете = дори
Както видяхме, логическото програмиране не изисква информацията, че алиса или боби са хора, за да получат знания за тях. Всъщност не е необходимо да се посочва, че съществува понятие, наречено човек.
В повечето нелогични езици за програмиране първо трябва да дефинирате тези понятия, преди да можете да пишете програми, които обработват информация за хората.
Препратки
- Дълбок AI (2020). Логическо програмиране. Взета от: deepai.org.
- Уикиверситет (2020). Теория на езиците на програмиране / Логическо програмиране. Взета от: en.wikiversity.org.
- Imperial College London (2006). Логическо програмиране. Взето от: doc.ic.ac.uk.
- Jia-Huai You (2020). Въведение в логическото програмиране. Университет в Алберта. Взето от: eng.ucy.ac.cy.
- C2 Wiki (2020). Логическо програмиране. Взета от: wiki.c2.com.