Sunteți pe pagina 1din 21

Machine Translated by Google

Programare bazată pe reguli


Anul 3, semestrul 2

Programare logica
Logica propozițională
Introducere în PROLOG
Machine Translated by Google

Paradigma de programare: declarativă


• Spuneți computerului exact ce trebuie să facă.
• Greu de depanat.
• Greu de implementat - are nevoie de cât mai multe
date posibil.
• Execuție lentă (control limitat de către un
programator bun).
• Poate rezolva aproape orice puteți descrie.

Mergeți la C309.
Machine Translated by Google

Înlănțuire înainte și înapoi


• Înlănțuire înainte (raționament bazat pe date)
• porniți de la fapte, vedeți ce se poate deduce; •
ce se poate dovedi din faptele cunoscute? • nici un
control asupra rezultatului posibil; • CLIPS
• Înlănțuire
înapoi • porniți de la o
ipoteză, vedeți dacă este susținută de fapte; • acest lucru poate
fi dovedit din faptele cunoscute? • rezultatul este
întotdeauna adevărat/fals - programare logică; • PROLOG
Machine Translated by Google

Programare logica

Inferență
Bază de cunoștințe Reguli de inferență
Motor

Restrâns la o logică formală

Informații suplimentare: https://www.cs.cmu.edu/~fp/courses/lp/lectures/lp-all.pdf


Machine Translated by Google

Scurt istoric al programării logice

Alan Robinson: O logică orientată pe mașină bazată pe principiul rezoluției (1965)


A_Machine-Oriented_Logic_Based_on_the_Re.pdf Prima descriere a
rezoluției peste predicate logice de ordinul întâi ca modalitate prin care un computer poate rezolva probleme

Robert Kowalski și Donal Kuehner: Rezoluție liniară cu funcție de selecție (1971)


Rezoluție liniară cu funcție de selecție
Prima descriere a modului în care funcționează astăzi majoritatea programării logice

Alain Colmerauer: Un sistem de communication homme-machine (1973)


Un sistem de comunicare homme-mașină în franceză
Prima implementare a unui limbaj de programare logic
Machine Translated by Google

Silogismele - primele reguli de inferență

Un alt exemplu:
Premisa majoră: Toți bărbații (M) sunt muritori (P).
Pisicile (M) sunt buni vânători (P).
Premisa minoră: Socrate (S) este un om (M). Câinii (S) sunt la fel de buni vânători (P) ca și pisicile (M).
Concluzie: Socrate (S) este muritor (P). Câinii (S) sunt buni vânători (P).

256 de tipuri de silogisme, dar:


Este susținută concluzia? Nicio concluzie nu poate avea două premise negative.
S trebuie să fie într-o singură premisă. Nicio concluzie nu
MP M- termen mediu poate avea două premise particulare (ambele referitoare la S).
O concluzie afirmativă trebuie să aibă două premise
SM P-predicat
afirmative.
SP S-subiect O concluzie negativă (fără S) trebuie să aibă o
premisă negativă.
O concluzie universală (orice S) trebuie să aibă două
Dacă toți M sunt P și S este M, atunci S este P.
premise universale.

Logica lui Aristotel


Machine Translated by Google

Formule bine formate


• O formulă este o succesiune de simboluri (α, β, γ, …), variabile (p, q, v, …), logice
operatori (¬, , , , ) și paranteze.
• TRUE și FALSE sunt formule bine formate (WFF).
• Fiecare simbol primitiv din (α, β, γ, …) și (p, q, v, …) este un WFF.
• Dacă A și B sunt WFF, atunci sunt și ¬A, A B, A B, A B, A B. Un WFF poate fi
inclus în paranteză și este încă un WFF.
• Dacă p este o variabilă și A este o formulă WFF, atunci pA, pA sunt WFF.

Regula generală: dacă pronunți formula în limbaj natural și are sens, este bine formată.
Acestea sunt WFF?
¬α ¬, α¬α, p p
Machine Translated by Google

Logica propozițională
Sintaxa logicii propoziționale: puteți demonstra o formulă bine formată : (p r) ca o consecință a
unui set de formule F: (p r) (r q) folosind proprietăți/reguli implicite (raționamentul deductiv):
F

Semantica logicii propoziționale: puteți demonstra că o formulă bine formată este ADEVĂRAT dacă un
set de F de formule este ADEVĂRAT: F . Acest lucru ar putea să nu fie echivalent cu F !

Dacă sistemul logic este sănătos , atunci putem spune că dacă F atunci F . Dacă sistemul logic
este complet , atunci putem spune că dacă F atunci F .
Machine Translated by Google

Este această formulă ADEVĂRATĂ sau FALSĂ?


Valorile de adevăr trebuie atribuite explicit formulelor cu variabile înlocuite cu fiecare valoare posibilă.

p r valoare de adevăr

:p r ADEVARAT ADEVARAT ADEVĂRAT

ADEVARAT FALS FALS

FALS ADEVARAT ADEVĂRAT

FALS FALS ADEVĂRAT

Tabelul de adevăr trebuie să aibă 2n linii, unde n este numărul de variabile din formulă.
Prin urmare, complexitatea este exponențială.
Machine Translated by Google

teoremele Gödel
Prima teoremă de completitudine: Dacă o formulă este validă din punct de vedere logic, atunci există o deducție finită (o demonstrație
formală) a formulei. Aceasta înseamnă că putem rezolva orice este în timp exponențial (problema SAT).

Demonstrarea faptului că puteți demonstra validitatea unei formule (verificați valoarea de adevăr a unei formule pentru un model - atribuirea de
valori pentru variabile - în tabelul de adevăr) în timp polinomial v-ar face cel mai faimos student al facultății noastre vreodată. Fiecare problemă
poate fi descrisă ca o formulă, verificarea răspunsului corect se poate face în timp polinomial (probleme P). Dacă acest răspuns poate fi
demonstrat și (dedus din datele disponibile) în timp polinomial, atunci P=NP (vezi cursul de inteligență artificială 2).

Prima teoremă de incompletitudine: Orice sistem formal consistent F în cadrul căruia poate fi efectuată o anumită cantitate de aritmetică elementară
este incomplet; adică, există afirmații ale limbajului lui F care nu pot fi nici dovedite, nici infirmate în F. Astfel, niciun sistem deductiv (util) de
lume deschisă nu este complet. Exemplu: „Această afirmație este falsă”.

Există o modalitate de a folosi logica de ordinul întâi pentru regulile de inferență și motorul de deducție, formule bine formate ca bază de
cunoștințe și să obțineți totuși un sistem complet? Săptămâna viitoare: sisteme deductive, clauze Horn
Machine Translated by Google

PROLOG
PROLOG = programation en logique

4 revizuiri majore, încă utilizate pe scară largă astăzi.

Utilizare academică: toată lumea care studiază programarea logică sau bazată pe reguli.
Utilizare în industrie: DeepQA IBM (https://www.ibm.com/watson), UIMA IBM/Apache (https://uima.apache.org),
cele mai importante probleme CSP, prototipare rapidă.

Implementări multiple, verificați: https://


en.wikipedia.org/wiki/Comparison_of_Prolog_implementations

Recomandat: SWIProlog: https://www.swi-prolog.org sau https://swish.swi-prolog.org


Machine Translated by Google

Baza de cunoștințe în PROLOG


Baza de cunoștințe din PROLOG
conține: •
Constante •
Variabile • Relații

O constantă este o singură valoare de câmp, începe întotdeauna cu litere mici și se termină cu un punct

alb. el
este un elev.

La prompt utilizați assert (alb).


Machine Translated by Google

Relații și variabile

Relațiile din PROLOG sunt etichete asociate cu zero sau mai multe câmpuri.
Începe cu o literă mică, se termină cu un punct.
După primul câmp are o pereche de paranteze care conțin toate celelalte câmpuri.
frecventează (Student, clasă). Albă ca
Zăpada).

Variabilele sunt câmpuri care încep cu majuscule.


Ele nu au o valoare implicită (spre deosebire de constante) și apar de obicei în relații, ca în exemplul
de mai sus.
Poate fi unificat (legat) în multe feluri, cel mai simplu este: Student =
john.
Machine Translated by Google

Utilizarea variabilelor și a interogărilor (I)

mănâncă (pisică, șoareci).

Să vedem dacă pisica mănâncă ceva.

?- mănâncă (pisica, Ce).

? denotă o interogare - o afirmație pe care PROLOG trebuie să o verifice (deduce din KB).

Al doilea câmp din interogare este o variabilă care va fi unificată (potrivită) cu al doilea câmp în singura relație din KB. Ieșirea va fi

Ce=șoareci

da

Pentru a șterge o constantă utilizați retract(X). X trebuie să fie unificat anterior cu acea constantă.
Machine Translated by Google

Utilizarea variabilelor și a interogărilor (II)

mănâncă (pisică, șoareci).


mănâncă (pisica, elefanți).

?- mănâncă (pisica, Ce).

Ce=șoareci

da

O a doua verificare va solicita următoarea unificare posibilă.

Ce=elefanți

da

Dacă doriți doar să verificați dacă valoarea aa poate fi unificată, utilizați _ : ?- mananca(pisica,_).
Machine Translated by Google

Rulați un fișier cod PROLOG

Extensia implicită este .pl. Utilizați .pl sau .pro.

Se încarcă un fișier: ?- consult(file).

Se încarcă mai multe fișiere: ?- consult([„fișier1.pl”, „fișier2’]). Se presupune că extensia este .pl sau .pro,
nu este necesară în mod explicit.

Comenzile din fișier sunt executate la încărcarea fișierului. Dacă fișierul conține interogări, acestea sunt
efectuate după încărcare.
Machine Translated by Google

Reguli de inferență (I)

muritor(X) :- om(X).

Toate valorile X pentru care uman (X) este adevărat vor avea și mortal (X) drept adevărat.

Primul dacă al doilea. Condițiile sunt în partea dreaptă, acțiunile în stânga! Opusul CLIPS.

uman (socrate). ?-
muritor(socrate).

da
Machine Translated by Google

Reguli de inferență (II)

muritor(X) :- om(X). uman (socrate).

?- muritor(Cine).

Cine=socrate
da

Puteți avea mai multe condiții într-o regulă.

carnivor(X) :- mănâncă (X, șoareci), mănâncă (X, elefanți).

Variabilele la care se face referire în stânga nu trebuie să apară în dreapta. Diferență majoră față de CLIPS!
Machine Translated by Google

Colorarea hărții în PROLOG (I)


Atribuiți culori vecinilor României, astfel încât două țări vecine să nu aibă aceeași culoare asociată.

Predicate pentru
culori: culoare
(roșu). culoare
(galben). culoare
(albastru). culoare (verde).

Spune-i lui PROLOG că vecinii trebuie să aibă culori diferite:

vecin(X,Y) :- culoare(X), culoare(Y), X\==Y.

X și Y sunt vecini dacă au culori asociate lor și


sunt diferite
Machine Translated by Google

Colorarea hărții în PROLOG (II)


Spuneți PROLOG care țări sunt vecine:
hartă (România, Ucraina, Moldova, Bulgaria, Serbia, Ungaria) :-
vecin(România, Ucraina),vecin(România, Moldova), vecin(România,
Bulgaria),vecin(România, Serbia), vecin(România, Ungaria), vecin(Ucraina,
Moldova),vecin(Ucraina, Ungaria), vecin
(Bulgaria, Serbia), vecin (Serbia, Ungaria).

Vrem o hartă pe care acele țări să fie vecine: ?- hartă


(România, Ucraina, Moldova, Bulgaria, Serbia, Ungaria).

Bulgaria = Ucraina, Ucraina = galben,


Aceasta este doar prima soluție. PROLOG caută valori de unificat cu
Ungaria = verde,
Moldova = Serbia, Serbia = albastru, variabilele din interogare. Unele variabile sunt unificate cu
Romania = red altele (Bulgaria=Ucraina), ceea ce înseamnă că au aceeași culoare.
Machine Translated by Google

Săptămâna viitoare

Sisteme deductive

Clauze de corn

Motor de inferență PROLOG

Tăieri și recursivitate PROLOG

S-ar putea să vă placă și