- Карактеристике логичког програмирања
- Истина и логички закључак
- Логика првог реда
- Образац клаузуле
- Вештачка интелигенција
- Примјери логичког програмирања
- Пример 1
- Пример 2
- Упит
- Остала испитивања
- Референце
Програмирање логика је програмска парадигма која користи логичка кола, а не само математичке функције контроле како чињенице и правила су скуп.
Уместо пажљиво структурираног тока контроле који диктира када треба извршити и како оценити позиве функција или друга упутства, логичка правила програма пишу се као логичке клаузуле или предикати.
Примери логичког програмирања у Прологу. Извор: Аутор Кулдеепсхеоран1 - снимак заслона, ЦЦ БИ-СА 3.0, викимедиа цоммонс
Овај приступ, који се често користи у генетском и еволутивном програмирању, генерално говори моделу који циљ треба постићи, а не како га постићи.
Свако правило садржи заглавље и тело са формализованом логиком, уместо извршне математичке функције. На пример, "И тачно је (заглавље): ако су Ц1, Ц2 и Ц3 тачни (тело)." Чињенице или резултати изражавају се без тела, попут "И то је истина".
Међутим, уз неке програмске језике као што је Пролог, може се укључити и императивно програмирање да би се моделу рекао како да се реше одређени проблеми. На пример, "Да бисте решили И, додајте Ц1, Ц2 и Ц3."
Карактеристике логичког програмирања
Логичко програмирање битно се разликује од осталих постојећих програмских стратегија. Уместо давања упутстава рачунару са програмом, успостављају се односи између објеката. На овај начин рачунар може да образложи те везе и тако дође до логичних решења.
У оквиру програма логике постоје два главна скупа кода: чињенице и правила. Правила се примењују на чињенице у циљу стицања знања о окружењу.
Истина и логички закључак
Логички програми могу се дешифровати кроз два важна концепта: истина и логичка дедукција. Истина је да ли је израчунавање у програму тачно или не, под спровођењем програмских симбола. Логички закључак одређује да ли је логична клаузула последица програма.
Ова упутства ће се увек тумачити као логичке реченице и реченице, а резултат њиховог извршења логична је последица прорачуна који садржи.
Логика првог реда
То је одступање логике предлога. Размотрите да ли су објекти истинити или лажни из перспективе делимичног света, зване домена. Логичко програмирање заснива се на генерализацији логике првог реда.
Ту логику чине синтакса и семантика. Синтакса је формални језик који се користи за изражавање појмова. С друге стране, семантика логичких формула првог реда говори о томе како одредити праву вредност било које формуле.
Та се логика заснива на абецеди и језику првог реда, као и скупу аксиома и правила закључивања.
Образац клаузуле
То је подскуп логике првог реда. Има нормализован облик где је изјава дефинисана универзалним префиксом или ланцем универзалних квантификатора, и слободним сетом квантификатора у клаузули.
Приликом постављања упита програму, размотрит ће се тијело клаузуле чије се заглавље може подударати. То је исто што и примјена правила закључка у логици.
Као корак у закључку, бирају се две клаузуле које имају својство тако што једна садржи дисјунктивну Кс (позитиван дословни), а друга садржи дисјунктивну ¬Кс (негативну дословну). Ови компромиси су познати као комплементарни.
Из ове двије почетне клаузуле гради се нова одлучна клаузула користећи све дословне ставке, осим комплементарних.
Вештачка интелигенција
Логичко програмирање је методологија која се користи за закључивање рачунара, јер је корисно представљати знање. Логика се користи да представља знање и закључак да се њиме управља.
Логика која се користи за представљање знања је облик клаузуле. Користи се јер је логика првог реда добро разумљива и способна да представља све рачунске проблеме.
Пролог је програмски језик који се заснива на идејама логичког програмирања. Идеја Пролога је да логика изгледа као програмски језик.
Примјери логичког програмирања
Пример 1
- Чињеница: Руби је мачка.
- Правило: све мачке имају зубе.
- Консултације: Да ли Руби има зубе?
- Закључак: да.
Правило „све мачке имају зубе“ може се применити на Руби, јер постоји чињеница која каже „Руби је мачка“. Овај пример није написан било којом синтаксом за прави програмски језик.
Пример 2
Овај пример се може видети написан у Прологу, јер је један од најпопуларнијих језика за логичко програмирање:
- женски (алиса).
- мушко (бобби).
- мушко (карлос).
- женски (дорис).
- сон_оф (дорис, карлос).
- сон_оф (карлос, боби).
- сон_оф (дорис, алисса).
- отац_оф (Ф, П): - мушко (Ф), син_оф (П, Ф).
Овај програм постаје тежак за читање, јер се Пролог знатно разликује од осталих језика. Било која компонента кода која подсећа на "женствено (алисса)." чињеница је.
Једно правило је „отац_оф (Ф, П): - мушко (Ф), дете_оф (П, Ф)“. Симбол ": -" може се читати као "истина ако". Велика слова значе да се променљиве могу применити на било који објект, па би Ф могао да стоји као карлос, дорис, алиса или боби. Овај код се може превести као:
- Алисса је жена.
- Бобби је мушкарац.
- Царлос је мушкарац.
- Дорис је жена.
- Дорис је Царлосова ћерка.
- Царлос је Боббијев син.
- Дорис је Алисина ћерка.
- «Ф је отац П» тачно је ако је Ф мушкарац и ако је П син Ф.
Упит
Претпоставимо да желите да се консултујете са програмом за више информација. Можете тражити да пронађете чији је отац Бобби са :? - отац_оф (бобби, Кс). Систем ће назначити следећи одговор: Кс = Царлос.
У овом случају се преноси однос где је једна од његових вредности променљива. Оно што је Пролог урадио било је примењивање различитих предмета на овај однос све док један од њих није био логично чврст.
Царлос-ов отац је Бобби, а Бобби мушко. Ово је задовољило правило "отац_оф (Ф, П): - мушко (Ф), син_оф (П, Ф)." Када је Кс једнак "карлос", логика је звучна.
Остала испитивања
У Пролог се могу поставити и друга општа питања која узрокују да систем генерише више резултата:
-? - родитељ_ота (родитељ, дете).
- Отац = бобби
- Дете = Царлос
- Отац = Царлос
- Дете = дорис
Као што је видљиво, за логичко програмирање није потребно имати информације да су алисса или бобби људи да би стекли знање о њима. У ствари, није неопходно назначити да постоји концепт који се зове особа.
У већини не логичких програмских језика морали бисте прво дефинисати ове концепте пре него што можете да пишете програме који обрађују информације о људима.
Референце
- Дееп АИ (2020). Логичко програмирање. Преузето са: деепаи.орг.
- Викиверзитет (2020). Теорија језика програмирања / Логичко програмирање. Преузето са: ен.викиверсити.орг.
- Империал Цоллеге Лондон (2006). Логичко програмирање. Преузето са: доц.иц.ац.ук.
- Јиа-Хуаи Иоу (2020). Увод у логичко програмирање. Универзитет Алберта. Преузето из: енг.уци.ац.ци.
- Ц2 Вики (2020). Логичко програмирање. Преузето са: вики.ц2.цом.