Documente Academic
Documente Profesional
Documente Cultură
Laborator: 30 puncte
Examen: 60 puncte
Se acordă 10 puncte din oficiu!
7 / 42
Laborator: 30 puncte
Testare:
Are loc în Săptămâna 11 (7 – 13 mai).
Data concretă o să fie anunţată ulterior.
Prezenţa este obligatorie!
Pentru a trece această probă, trebuie să obţineţi minim 15 puncte.
8 / 42
Examen: 60 puncte
9 / 42
Curs/seminar/laborator
Curs
Programare logică
Deducţia naturală
Logica clauzelor Horn
Unificare
Rezoluţie
Elemente de demonstrare automată
Sisteme de rescriere
Semantică şi verificarea programelor
Logica Hoare
Seminar
Exerciţii suport pentru curs.
Laborator: Prolog
cel mai cunoscut limbaj de programare logică
bazat pe logica clauzelor Horn
semantica operaţională este bazată pe rezoluţie
10 / 42
Bibliografie
11 / 42
Logica matematică
Logica ne permite să
reprezentăm/modelăm probleme.
Care logică?
propoziţională
de ordinul I
de ordin înalt
logici modale
logici temporale
logici cu mai multe valori
...
12 / 42
La acest curs vom folosi litere greceşti:
13 / 42
Privire de ansamblu
14 / 42
Principalele paradigme de programare
Imperativă
Procedurală
Orientată pe obiecte
...
Declarativă
Logică
Funcţională
...
15 / 42
Programare declarativă
16 / 42
Programare logică
17 / 42
Ce veţi vedea la laborator
Prolog
bazat pe logica clauzelor Horn
semantica operaţională este bazată pe rezoluţie
este Turing complet
vom folosi implementarea SWI-Prolog
18 / 42
Sisteme de rescriere
19 / 42
TheProblema corectitudinii
Program Correctness programelor
Problem
?
Pentru anumite
• Conventional models ofmetode de programare
using computers (e.g.,
– not easy imperativă,
to determine orientată
correctness!
pe obiecte), nu este uşor să stabilim că un program este corect sau
! Has become a very important issue, not just in safety-critical apps.
să înţelegem ce înseamnă că este corect (e.g, în raport cu ce?!).
! Components with assured quality, being able to give a warranty, ...
Corectitudinea programelor devine o problemă din ce în ce mai
! Being able to run untrusted code, certificate carrying code, ...
importantă, nu doar pentru aplicaţii ”safety-critical”.
Avem nevoie de metode ce asigură ”calitate”, capabile să ofere 2
”garanţii”.
20 / 42
Un program imperativ simplu
#include <iostream>
using namespace std;
int main()
{
int square;
for(int i = 1; i <= 5; ++i)
{
square = i * i;
cout << square << endl;
}
}
Este corect? În raport cu ce?
Un formalism adecvat trebuie:
să permită descrierea problemelor (specificaţii), şi
să raţioneze despre implementarea lor (corectitudinea programelor).
21 / 42
Corectitudinea programelor
Use of Logic
Specs
(Logic)
Semantics
?
Proof YES / NO
22 / 42
Tipuri de semantică
Denotaţională:
Înţelesul programului este definit abstract ca element dintr-o
structură matematică adecvată.
Axiomatică:
Înţelesul programului este definit indirect în funcţie de axiomele şi
regulile pe care le verifică.
23 / 42
Programare logică & Prolog
25 / 42
Programare logică - în mod idealist
26 / 42
Programare logică - în mod idealist
27 / 42
Exemplu de program logic
oslo → windy
oslo → norway
norway → cold
cold ∧ windy → winterIsComing
oslo
Exemplu de întrebare
28 / 42
Putem să testăm în SWI-Prolog
Program:
windy :- oslo.
norway :- oslo.
cold :- norway.
winterIsComing :- windy, cold.
oslo.
Intrebare:
?- winterIsComing.
true
http://swish.swi-prolog.org/
29 / 42
Un program în Prolog
30 / 42
Termeni
31 / 42
Un mic exerciţiu
32 / 42
Program
Exemplu
Exemplu de regulă: stark(X) :- father(Y,X), stark(Y).
Exemplu de fapt: father(eddard, jon_snow).
33 / 42
Program
Exemplu
Un program în Prolog:
father(eddard,sansa).
father(eddard,jon_snow).
mother(catelyn,sansa).
mother(wylla,jon_snow).
stark(eddard).
stark(catelyn).
34 / 42
Întrebări în Prolog
35 / 42
Întrebări în Prolog
36 / 42
Întrebări în Prolog
Exemplu
?- stark(jon_snow) ?- stark(X)
true X = eddard
?- stark(wylla) X = catelyn
false X = sansa
X = jon_snow
false
37 / 42
Cum găseşte Prolog răspunsul
Depth-first search U
NI VER
S
IT
TH
Y
O F
H
G
E
R
D I U
N B
Alan Smaill Logic Programming: Terms, unification and proof search Sep 24 2015 20/
38 / 42
Cum găseşte Prolog răspunsul
Prolog se întoarceDepth
la ultima alegere dacă o sub-ţintă eşuează.
first search ctd U
NI VER
S
IT
TH
Y
O F
H
G
E
R
D I U
N B
39 / 42
Problema colorării hărţilor
Exemplu
culoare(albastru).
culoare(rosu).
culoare(verde).
culoare(galben).
harta(RO,SE,MD,UA,BG,HU) :- vecin(RO,SE), vecin(RO,UA),
vecin(RO,MD), vecin(RO,BG),
vecin(RO,HU), vecin(UA,MD),
vecin(BG,SE), vecin(SE,HU).
vecin(X,Y) :- culoare(X),
culoare(Y),
X \== Y.
?- harta(RO,SE,MD,UA,BG,HU).
RO = albastru,
SE = UA, UA = rosu,
MD = BG, BG = HU, HU = verde
40 / 42
Puncte-cheie
41 / 42