- Značilnosti logičnega programiranja
- Resnica in logični sklep
- Logika prvega reda
- Obrazložitev
- Umetna inteligenca
- Primeri logičnega programiranja
- Primer 1
- Primer 2
- Poizvedba
- Druge poizvedbe
- Reference
Logično programiranje je programiranje paradigma, ki uporablja logična vezja in ne samo matematičnih funkcij za nadzor nad tem, kako so dejstva in pravila set.
Namesto skrbno strukturiranega toka nadzora, ki narekuje, kdaj naj se izvede in kako oceniti funkcijske klice ali druga navodila, so logična pravila programa zapisana kot klavzule ali logični predikati.

Primeri logičnega programiranja v Prologu. Vir: avtor Kuldeepsheoran1 - posnetek zaslona, CC BY-SA 3.0, wikimedia commons
Ta pristop, ki se pogosto uporablja v genetskem in evolucijskem programiranju, na splošno kaže model, kateri cilj je treba doseči, namesto kako ga doseči.
Vsako pravilo vsebuje glavo in telo s formalizirano logiko in ne izvršljivo matematično funkcijo. Na primer, "In je res (glava): če so C1, C2 in C3 resnični (telo)." Dejstva ali rezultati so izraženi brez telesa, kot je "In res je."
Vendar pa je z nekaterimi programskimi jeziki, kot je Prolog, mogoče vključiti tudi nujno programiranje, da model pove, kako rešiti določene težave. Na primer, "Če želite rešiti Y, dodajte C1, C2 in C3."
Značilnosti logičnega programiranja
Logično programiranje se bistveno razlikuje od drugih obstoječih programskih strategij. Namesto dajanja navodil računalniku s programom se vzpostavijo razmerja med predmeti. Na ta način lahko računalnik razloži te odnose in tako doseže logične rešitve.
Znotraj logičnega programa obstajata dva glavna sklopa kode: dejstva in pravila. Pravila se uporabljajo za dejstva, da bi pridobili znanje o okolju.
Resnica in logični sklep
Logične programe je mogoče razvozlati s pomočjo dveh pomembnih konceptov: resnice in logičnega sklepa. Resnica izhaja, ali je izračun v programu resničen ali ne, pri izvajanju programskih simbolov. Logični odbitek določa, ali je logična klavzula posledica programa.
Ta navodila bodo vedno razlagana kot logični stavki in stavki, rezultat njihovega izvajanja pa je logična posledica izračunov, ki jih vsebuje.
Logika prvega reda
To je povod logike predloga. Razmislite, ali so predmeti resnični ali lažni z vidika delnega sveta, imenovanega domena. Logično programiranje temelji na posploševanju logike prvega reda.
To logiko sestavljajo skladnja in semantika. Sintaksa je formalni jezik, ki se uporablja za izražanje pojmov. Po drugi strani pa semantika logičnih formul prvega reda kaže, kako določiti resnično vrednost katere koli formule.
Ta logika temelji na abecedi in jeziku prvega reda ter naboru aksiomov in pravil sklepanja.
Obrazložitev
To je podvrsta logike prvega reda. Ima normalizirano obliko, kjer stavek opredeljen z univerzalno predpono ali verigo univerzalnih kvantifikatorjev, v oddelku pa prosti niz kvantifikatorjev.
Ko zahtevo poizvedujete po programu, bo upoštevano telo stavka, katerega glava se lahko ujema. To je isto kot uporaba pravila sklepanja v logiki.
Kot korak v sklepanju sta izbrana dva stavka, ki imata lastnost, da ena vsebuje disjunktiv X (pozitiven dobesedni člen), druga pa disjunktiv ¬X (negativni dobesedni). Ti kompromisi so znani kot komplementarni.
Iz teh dveh začetnih določb je zgrajena nova odločilna klavzula z uporabo vseh besed, razen dopolnilnih.
Umetna inteligenca
Logično programiranje je metodologija, ki se uporablja za sklepanje računalnikov, saj je koristno predstavljati znanje. Logika se uporablja za predstavljanje znanja in sklepanja za njegovo ravnanje.
Logika, ki se uporablja za predstavljanje znanja, je klavzulna oblika. Uporablja se, ker je logika prvega reda dobro razumljena in lahko predstavlja vse računske težave.
Prolog je programski jezik, ki temelji na idejah logičnega programiranja. Ideja Prologa je, da bi logika izgledala kot programski jezik.
Primeri logičnega programiranja
Primer 1
- Dejstvo: Rubí je mačka.
- Pravilo: vse mačke imajo zobe.
- Posvetovanje: Ali ima Rubí zobe?
- Sklep: da.
Pravilo "vse mačke imajo zobe" lahko uporabimo za Ruby, ker obstaja dejstvo, ki pravi, da je "Ruby mačka." Ta primer ni napisan z nobeno sintakso za pravi programski jezik.
Primer 2
Ta primer je zapisan v Prologu, saj gre za enega najbolj priljubljenih logičnih programskih jezikov:
- žensko (alisa).
- moško (bobby).
- moško (karlos).
- žensko (doris).
- sin_of (doris, carlos).
- sin_of (karlos, bobi).
- son_of (doris, alissa).
- oče_of (F, P): - moški (F), sin_of (P, F).
Ta program je težko brati, ker se Prolog bistveno razlikuje od drugih jezikov. Katera koli komponenta kode, ki spominja na "žensko (alissa)." je dejstvo.
Eno pravilo je "oče_of (F, P): - moški (F), otrok_of (P, F)". Simbol ": -" se lahko bere kot "res, če". Velike črke pomenijo, da se lahko spremenljivke uporabijo na katerem koli predmetu, zato bi F lahko pomenil karlos, doris, alisso ali bobby. To kodo lahko prevedemo kot:
- Alissa je ženska.
- Bobby je moški.
- Carlos je moški.
- Doris je ženska.
- Doris je Carlosova hči.
- Carlos je Bobbyjev sin.
- Doris je Alissa hči.
- «F je oče P» je res, če je F moški in če je P sin F.
Poizvedba
Recimo, da se želite za več informacij posvetovati s programom. Iščete lahko, če želite najti, s čijim očetom je Bobby :? - oče_of (bobby, X). Sistem bo pokazal naslednji odgovor: X = Carlos.
V tem primeru se prenese odnos, kjer je ena od njegovih vrednosti spremenljivka. Prolog je uporabil različne predmete v tem razmerju, dokler eden od njih ni bil logično trden.
Carlos-ov edini oče je Bobby, Bobby pa moški. To je izpolnilo pravilo "oče_of (F, P): - moško (F), sin_of (P, F)." Ko je X enak "karlos", je logika zdrava.
Druge poizvedbe
Prolog lahko vnesete tudi druge bolj splošne poizvedbe, zaradi katerih sistem ustvari več rezultatov:
-? - parent_of (starš, otrok).
- Oče = bobi
- Otrok = Carlos
- Oče = Carlos
- Otrok = doris
Kot je bilo že razvidno, za logično programiranje ni treba imeti informacij, da sta alissa ali bobby ljudje, da bi pridobila znanje o njih. Pravzaprav ni treba navajati, da obstaja koncept, imenovan oseba.
V večini ne logičnih programskih jezikov bi morali te koncepte najprej določiti, preden lahko napišete programe, ki obdelujejo podatke o ljudeh.
Reference
- Globoko AI (2020). Logično programiranje. Izvedeno iz: deepai.org.
- Wikipedia (2020). Teorija jezikov programiranja / Logično programiranje. Izvedeno iz: en.wikiversity.org.
- Imperial College London (2006). Logično programiranje. Izvedeno iz: doc.ic.ac.uk.
- Jia-Huai You (2020). Uvod v logično programiranje. Univerza v Alberti. Izvedeno iz: eng.ucy.ac.cy.
- C2 Wiki (2020). Logično programiranje. Vzeto iz: wiki.c2.com.
