- Caracteristicile programării logice
- Adevăr și deducție logică
- Logica de prim ordin
- Forma de clauză
- Inteligență artificială
- Exemple de programare logică
- Exemplul 1
- Exemplul 2
- întrebare
- Alte anchete
- Referințe
Programarea logică este o paradigmă de programare care utilizează circuite logice , mai degrabă decât doar funcții matematice pentru a controla modul în care faptele și regulile sunt stabilite.
În loc de un flux de control atent structurat, care dictează când se execută și cum se evaluează apelurile funcționale sau alte instrucțiuni, regulile logice ale programului sunt scrise ca clauze sau predicate logice.
Exemple de programare logică în Prolog. Sursa: By Kuldeepsheoran1 - captură de ecran, CC BY-SA 3.0, commons wikimedia
Această abordare, care este adesea folosită în programarea genetică și evolutivă, spune în general unui model ce obiectiv trebuie atins, mai degrabă decât cum să-l atingem.
Fiecare regulă conține un antet și un corp cu o logică formalizată, mai degrabă decât o funcție matematică executabilă. De exemplu, "Și este adevărat (antet): dacă C1, C2 și C3 sunt adevărate (corp)." Faptele sau rezultatele sunt exprimate fără un corp, cum ar fi „Și este adevărat”.
Cu toate acestea, cu unele limbaje de programare precum Prolog, programarea imperativă poate fi inclusă și pentru a spune modelului cum să rezolve anumite probleme. De exemplu, "Pentru a rezolva Y, adăugați C1, C2 și C3."
Caracteristicile programării logice
Programarea logică este substanțial diferită de celelalte strategii de programare existente. În loc să dea instrucțiuni unui computer cu programul, se stabilesc relații între obiecte. În acest fel, computerul poate argumenta aceste relații și ajunge astfel la soluții logice.
În cadrul unui program logic există două seturi principale de coduri: fapte și reguli. Regulile sunt aplicate faptelor pentru a obține cunoștințe despre mediu.
Adevăr și deducție logică
Programele logice pot fi descifrate prin două concepte importante: adevărul și deducția logică. Adevărul rezultă dacă calculul din program este adevărat sau nu, sub implementarea simbolurilor programului. Deducția logică determină dacă o clauză logică este o consecință a programului.
Aceste instrucțiuni vor fi întotdeauna interpretate ca propoziții și clauze logice, rezultatul executării lor fiind o consecință logică a calculelor pe care le conține.
Logica de prim ordin
Este un offshoot al logicii propoziționale. Luați în considerare dacă obiectele sunt adevărate sau false dintr-o perspectivă mondială parțială, numită domeniu. Programarea logică se bazează pe o generalizare a logicii de prim ordin.
Această logică este alcătuită din sintaxă și semantică. Sintaxa este limbajul formal folosit pentru exprimarea conceptelor. Pe de altă parte, semantica formulelor logice de prim ordin indică modul de determinare a adevăratei valori a oricărei formule.
Această logică se bazează pe un alfabet și un limbaj de prim ordin, precum și un set de axiome și reguli de inferență.
Forma de clauză
Este un subset de logică de prim ordin. Are o formă normalizată în care o afirmație este definită printr-un prefix universal sau un lanț de cuantificatori universali și un set liber de quantificatori din clauză.
La solicitarea unei interogări la program, se va lua în considerare corpul clauzei al cărui antet poate coincide. Aceasta este aceeași cu aplicarea unei reguli de inferență în logică.
Ca un pas în inferență, sunt alese două clauze care au ca proprietate faptul că una conține o disjuncție X (un literal pozitiv), iar cealaltă conține o disjuncție ¬X (un literal negativ). Aceste compromisuri sunt cunoscute ca fiind complementare.
Din aceste două clauze inițiale se construiește o nouă clauză rezolutivă folosind toate literalele, cu excepția celor complementare.
Inteligență artificială
Programarea logică este o metodologie folosită pentru a determina calculatoarele să deducă, deoarece este utilă reprezentarea cunoștințelor. Logica este folosită pentru a reprezenta cunoștințe și inferențe pentru a o gestiona.
Logica folosită pentru a reprezenta cunoștințele este forma clauzală. Este folosit deoarece logica de prim ordin este bine înțeleasă și capabilă să reprezinte toate problemele de calcul.
Prolog este un limbaj de programare care se bazează pe ideile de programare logică. Ideea Prolog este de a face logica să pară un limbaj de programare.
Exemple de programare logică
Exemplul 1
- Fapt: Rubí este o pisică.
- Regula: toate pisicile au dinți.
- Consultare: Are dinți Rubí?
- Concluzie: da.
Regula „toate pisicile au dinți” poate fi aplicată pe Ruby, deoarece există un fapt care spune că „Ruby este o pisică”. Acest exemplu nu este scris cu nicio sintaxă pentru un limbaj de programare real.
Exemplul 2
Acest exemplu poate fi văzut scris în Prolog, deoarece este unul dintre cele mai populare limbaje de programare logică:
- feminin (alissa).
- masculin (bobby).
- masculin (carlos).
- feminin (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- tată_of (F, P): - bărbat (F), fiu_of (P, F).
Acest program devine dificil de citit, deoarece Prolog este deosebit de diferit de alte limbi. Orice componentă de cod care seamănă cu „feminin (alissa)”. este un fapt.
O regulă este „tată_of (F, P): - bărbat (F), copil_of (P, F)”. Simbolul ": -" poate fi citit ca "este adevărat dacă". Literele majuscule înseamnă că variabilele pot fi aplicate la orice obiect, astfel încât F ar putea reprezenta carlos, doris, alissa sau bobby. Acest cod poate fi tradus ca:
- Alissa este o femeie.
- Bobby este un bărbat.
- Carlos este un bărbat.
- Doris este o femeie.
- Doris este fiica lui Carlos.
- Carlos este fiul lui Bobby.
- Doris este fiica lui Alissa.
- «F este tatăl lui P» este adevărat dacă F este bărbat și dacă P este fiul lui F.
întrebare
Să presupunem că doriți să consultați programul pentru mai multe informații. Puteți căuta cerând să găsiți al cărui tată este Bobby cu:? - tată_of (bobby, X). Sistemul va indica următorul răspuns: X = Carlos.
În acest caz, o relație este trecută în cazul în care una dintre valorile sale este o variabilă. Ceea ce a făcut Prolog a fost să aplice diferite obiecte acestei relații până când unul dintre ei a fost logic solid.
Singurul tată al lui Carlos este Bobby, iar Bobby este bărbat. Aceasta a satisfăcut regula „tată_of (F, P): - masculin (F), fiul lui (P, F)." Când X este egal cu „carlos”, logica este sunetă.
Alte anchete
Se pot face și alte întrebări mai generale către Prolog, care determină sistemul să genereze mai multe rezultate:
-? - parent_of (Parent, Child).
- Tată = bobby
- Copil = Carlos
- Tată = Carlos
- Copil = doris
Așa cum s-a văzut, programarea logică nu necesită să existe informații conform cărora alissa sau bobby sunt oameni pentru a obține cunoștințe despre acestea. De fapt, nu este necesar să se indice că există un concept numit persoană.
În majoritatea limbajelor de programare non-logice, ar trebui să definiți mai întâi aceste concepte înainte de a putea scrie programe care procesează informații despre oameni.
Referințe
- AI profundă (2020). Programare logică. Luat de la: deepai.org.
- Wikiversitate (2020). Teoria limbajelor de programare / Programare logică. Preluat de la: en.wikiversity.org.
- Imperial College London (2006). Programare logică. Luat de la: doc.ic.ac.uk.
- Jia-Huai Tu (2020). Introducere în programarea logică. Universitatea din Alberta. Luat de la: eng.ucy.ac.cy.
- C2 Wiki (2020). Programare logică. Luat de la: wiki.c2.com.