- Karakteristike logičkog programiranja
- Istina i logična dedukcija
- Logika prvog reda
- Obrazac klauzule
- Umjetna inteligencija
- Primjeri logičkog programiranja
- Primjer 1
- Primjer 2
- pitanje
- Ostala ispitivanja
- Reference
Logika programiranja je programski paradigma koja koristi logičkih sklopova nego samo matematičke funkcije za kontrolu kako su činjenice i pravila su postavljena.
Umjesto pažljivo strukturiranog tijeka kontrole koji diktira kada treba izvršiti i kako procijeniti pozive funkcija ili druge upute, logična pravila programa pišu se kao klauzule ili logički predikati.
Primjeri logičkog programiranja u Prologu. Izvor: Autor Kuldeepsheoran1 - snimka zaslona, CC BY-SA 3.0, wikimedia commons
Ovaj pristup, koji se često koristi u genetskom i evolucijskom programiranju, općenito govori o modelu koji cilj treba postići, a ne kako ga postići.
Svako pravilo sadrži zaglavlje i tijelo formalizirane logike, a ne izvršnu matematičku funkciju. Na primjer, "I istina je (zaglavlje): ako su C1, C2 i C3 istina (tijelo)." Činjenice ili rezultati izražavaju se bez tijela, poput "I to je istina".
Međutim, s nekim programskim jezicima kao što je Prolog, može se uključiti i imperativno programiranje koje će reći modelu kako riješiti određene probleme. Na primjer, "Da biste riješili Y, dodajte C1, C2 i C3."
Karakteristike logičkog programiranja
Logičko programiranje bitno se razlikuje od ostalih postojećih programskih strategija. Umjesto davanja upute računalu s programom, uspostavljaju se odnosi između objekata. Na ovaj način računalo može objasniti te odnose i na taj način doći do logičnih rješenja.
Unutar programa logike postoje dva glavna skupa koda: činjenice i pravila. Pravila se primjenjuju na činjenice u svrhu stjecanja znanja o okolišu.
Istina i logična dedukcija
Logički se programi mogu dešifrirati kroz dva važna koncepta: istinu i logičku dedukciju. Istina izlazi je li izračunavanje u programu istinito ili ne, pod provođenjem programskih simbola. Logički odbitak određuje je li logična klauzula posljedica programa.
Ove će se upute uvijek tumačiti kao logičke rečenice i rečenice, a rezultat njihova izvršavanja logična je posljedica izračuna koji sadrži.
Logika prvog reda
To je odstupanje logike prijedloga. Razmislite jesu li objekti istiniti ili lažni iz djelomične perspektive svijeta, zvane domena. Logičko programiranje temelji se na generalizaciji logike prvog reda.
Ta se logika sastoji od sintakse i semantike. Sintaksa je formalni jezik koji se koristi za izražavanje pojmova. S druge strane, semantika logičkih formula prvog reda pokazuje kako odrediti pravu vrijednost bilo koje formule.
Ta se logika temelji na abecedi i jeziku prvog reda, kao i skupu aksioma i pravila zaključivanja.
Obrazac klauzule
To je podskup logike prvog reda. Ima normalizirani oblik u kojem je izjava definirana univerzalnim prefiksom ili lancem univerzalnih kvantifikatora, a slobodnim skupom kvantifikatora u klauzuli.
Prilikom postavljanja upita programu, razmotrit će se tijelo klauzule čije se zaglavlje može podudarati. To je isto što i primjena pravila zaključivanja u logici.
Kao korak u zaključku, odabrane su dvije rečenice koje imaju svojstvo tako što jedna sadrži disjunktivnu X (pozitivan doslovni), a druga sadrži disjunktivnu ¬X (negativnu doslovnu). Ovi preokreti poznati su kao komplementarni.
Iz ove se dvije početne rečenice izgrađuje nova odlučna klauzula koristeći sve doslovne stavke, osim komplementarnih.
Umjetna inteligencija
Logičko programiranje je metodologija koja se koristi za zaključivanje računala, jer je korisno predstavljati znanje. Logika se koristi da predstavlja znanje i zaključak da se s njim upravlja.
Logika koja se koristi za predstavljanje znanja je oblik klauzule. Koristi se jer je logika prvog reda dobro razumljiva i sposobna je predstavljati sve računske probleme.
Prolog je programski jezik koji se temelji na idejama logičkog programiranja. Ideja Prologa je da logika izgleda kao programski jezik.
Primjeri logičkog programiranja
Primjer 1
- Činjenica: Rubí je mačka.
- Pravilo: sve mačke imaju zube.
- Savjetovanje: Ima li Rubí zube?
- Zaključak: da.
Pravilo „sve mačke imaju zube“ može se primijeniti na Ruby, jer postoji činjenica koja kaže „Ruby je mačka“. Ovaj primjer nije napisan bilo kojom sintaksom za pravi programski jezik.
Primjer 2
Ovaj se primjer može vidjeti u Prologu, jer je to jedan od najpopularnijih programskih jezika za logiku:
- žensko (alisa).
- muško (bobby).
- muško (karlos).
- žensko (doris).
- son_of (doris, karlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- otac_of (F, P): - muški (F), sin_of (P, F).
Ovaj program postaje težak za čitanje, jer se Prolog znatno razlikuje od ostalih jezika. Bilo koja komponenta koda koja nalikuje "ženskoj (alissa)". to je činjenica.
Jedno je pravilo "otac_of (F, P): - muško (F), dijete_o (P, F)". Simbol ": -" može se čitati kao "istina ako". Velika slova znače da se varijable mogu primijeniti na bilo koji objekt, pa bi F mogao predstavljati carlos, doris, alissu ili bobby. Ovaj se kod može prevesti kao:
- Alissa je žena.
- Bobby je čovjek.
- Carlos je čovjek.
- Doris je žena.
- Doris je Carlosova kći.
- Carlos je Bobbyjev sin.
- Doris je Alissa kći.
- «F je otac P» vrijedi ako je F čovjek i ako je P sin F.
pitanje
Pretpostavimo da želite konzultirati program za dodatne informacije. Možete pretražiti pitajući pronaći s kojim je otac Bobby:? - otac_of (bobby, X). Sustav će naznačiti sljedeći odgovor: X = Carlos.
U ovom se slučaju prenosi odnos gdje je jedna od njegovih vrijednosti varijabla. Ono što je Prolog učinio bilo je primjena različitih predmeta na taj odnos sve dok jedan od njih nije bio logično čvrst.
Carlosov jedini otac je Bobby, a Bobby muško. Time je zadovoljeno pravilo "otac_of (F, P): - muško (F), sin_of (P, F)." Kad je X jednak "karlosu", logika je zvučna.
Ostala ispitivanja
U Prolog se mogu postaviti i drugi općenitiji upiti zbog kojih sustav generira više rezultata:
-? - roditelj_ota (roditelj, dijete).
- Otac = bobby
- Dijete = Carlos
- Otac = Carlos
- Dijete = doris
Kao što je vidljivo, logičko programiranje ne zahtijeva informaciju da su alissa ili bobby ljudi da bi stekli znanje o njima. U stvari, nije potrebno naznačiti da postoji koncept koji se zove osoba.
U većini nelogičnih programskih jezika prvo biste morali definirati te koncepte prije nego što možete pisati programe koji obrađuju informacije o ljudima.
Reference
- Duboko AI (2020). Logičko programiranje. Preuzeto sa: deepai.org.
- Wikipedia (2020). Teorija jezika programiranja / Logičko programiranje. Preuzeto sa: en.wikiversity.org.
- Imperial College London (2006). Logičko programiranje. Preuzeto iz: doc.ic.ac.uk.
- Jia-Huai Ti (2020). Uvod u logičko programiranje. Sveučilište Alberta. Preuzeto iz: eng.ucy.ac.cy.
- C2 Wiki (2020). Logičko programiranje. Preuzeto sa: wiki.c2.com.