Cursul 1: Introducere Paradigme de Programare Conf. dr. ing. Andrei Olaru Departamentul de Calculatoare 2019

Mărimea: px
Porniți afișarea la pagina:

Download "Cursul 1: Introducere Paradigme de Programare Conf. dr. ing. Andrei Olaru Departamentul de Calculatoare 2019"

Transcriere

1 Cursul 1: Paradigme de Programare Conf. dr. ing. Andrei Olaru Departamentul de Calculatoare Ce studiem la PP? 3 De ce studiem această materie? 4 Paradigma de programare 5 Istoric: Paradigme și limbaje de programare 6 în Racket 7 Organizare 0 0 : 1 1 : 1 BlooP and FlooP and GlooP [ [(CC) BY-NC abstrusegoose.com] 1 : 2 1 : 3 Modelare funcțională (1) Ex Să se determine dacă un element e se regăsește într-o listă L (e L). Să se sorteze o listă L. Racket: 1 ( define memlist ( lambda (e L ) 2 (if ( null? L ) 3 # f 4 (if ( equal? ( first L ) e ) 5 # t 6 ( memlist e ( rest L ) ) 7 ) ) 8 ) ) 9 10 ( define ins ( lambda (x L ) 11 ( cond (( null? L ) ( list x ) ) 12 ((< x ( first L ) ) ( cons x L ) ) 13 ( else ( cons ( first L ) ( ins x ( rest L ) ) ) ) ) ) ) 1 : 4 1 : 5 Modelare funcțională (2) Modelare logică Haskell Prolog: 1 memlist x [] = False 2 memlist x (e:t) = x == e memlist x t 1 membera (E, [E _ ]) :-!. 2 membera (E, [_ L ]) :- membera (E, L). 3 4 ins x [] = [x] 5 ins x l@ (h:t) = if x < h then x:l else h : ins x t 3 4 % elementul, lista, rezultatul 5 ins (E, [], [E ]). 6 ins (E, [H T], [E, H T ]) :- E < H,!. 7 ins (E, [H T], [H TE ]) :- ins (E, T, TE ). 1 : 6 1 : 7

2 Elemente pe care le vom studia Paradigma funcțională și paradigma logică, în contrast cu paradigma imperativă. Ce studiem la PP? Racket: introducere în programare funcțională Calculul λ ca bază teoretică a paradigmei funcționale Racket: întârzierea evaluării și fluxuri Haskell: programare funcțională cu o sintaxă avansată Haskell: evaluare leneșă și fluxuri Haskell: tipuri, sinteză de tip, și clase Prolog: programare logică LPOI ca bază pentru programarea logică Prolog: strategii pentru controlul execuției Algorimi Markov: calcul bazat pe reguli de transformare 1 : 8 1 : 9 De ce? Ne vor folosi aceste lucruri în viața reală? De ce studiem această materie? The first math class. [(C) Zach Weinersmith, Saturday Morning Breakfast Cereal] [https: // comic/a-new-method] 1 : 10 1 : 11 De ce? De ce? Mai concret I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail. The law of instrument Abraham Maslow până acum ați studiat paradigma imperativă (legată și cu paradigma orientată-obiect) un anumit mod de a privi procesul de rezolvare al unei probleme și de a căuta soluții la probleme de programare. paradigmele declarative studiate oferă o gamă diferită (complementară!) de unelte alte moduri de a rezolva anumite probleme. o pregătire ce permite accesul la poziții de calificare mai înaltă (arhitect, designer, etc.) 1 : 12 1 : 13 De ce? Sunt aceste paradigme relevante? evaluarea leneșă prezentă în Python (de la v3),.net (de la v4) funcții anonime prezente în C++ (de la v11), C#/.NET (de la v3.0/v3.5), Dart, Go, Java (de la JDK8), JS/ES, Perl (de la v5), PHP (de la v5.0.1), Python, Ruby, Swift. Prolog și programarea logică sunt folosite în software-ul modern de A.I., e.g. Watson. În industrie sunt utilizate limbaje puternic funcționale precum Erlang, Scala, F#, Clojure. De ce? O bună cunoaștere a paradigmelor alternative $$$ Developer Survey 2018 [ #technology-what-languages-are-associated-with-the-highest-salaries-worldwide] Developer Survey 2017 [https: //insights.stackoverflow.com/survey/2017/#top-paying-technologies] Limbaje multi-paradigmă adaptarea paradigmei utilizate la necesități. 1 : 14 1 : 15

3 Ce înseamnă paradigma de programare Ce diferă între paradigme? Paradigma de programare diferă sintaxa aceasta este o diferență între limbaje, dar este influențată și de natura paradigmei. ce poate reprezenta o expresie, ce operatori diferă modul de construcție putem aplica între expresii. al expresiilor diferă structura programului ce anume reprezintă programul. 1 : 16 1 : 17 Ce înseamnă paradigma de programare Ce caracterizează o paradigmă? Ce vom studia? Conținutul cursului valorile de prim rang modul de construcție a programului 1 Diverse perspective conceptuale asupra noțiunii de calculabilitate efectivă modele de calculabilitate. modul de tipare al valorilor ordinea de evaluare (generare a valorilor) modul de legare al variabilelor (managementul valorilor) 2 Influența perspectivei alese asupra procesului de modelare și rezolvare a problemelor paradigme de programare. controlul execuției Paradigma de programare este dată de stilul fundamental de construcție al structurii și elementelor unui program. 1 : 18 3 Limbaje de programare aferente paradigmelor, cu accent pe aspectul comparativ. 1 : 19 Modele paradigme limbaje Modele de calculabilitate C, Pascal procedural paradigma J, C++, Py orientat-obiect imperativă Mașina Turing Racket, Haskell Prolog paradigma funcțională paradigma logică Mașina λ FOL + Resolution echivalente! Istoric: Paradigme și limbaje de programare CLIPS paradigma asociativă Mașina Markov T Teza Church-Turing: efectiv calculabil = Turing calculabil 1 : 20 1 : 21 Istorie Istorie : 22 1 : 23

4 Istorie Istorie : 24 1 : 25 Istorie Istorie pe scurt 1 : 26 1 : 27 Istorie Resurse imagine navigabilă (slides precedente): [ poster (până în 2004): [ în Racket arbore din slide precedent și arbore extins: [ Wikipedia: [ [ 1 : 28 1 : 29 Lisp cycles [ Racket din 1975 [(CC) BY-NC Randall Munroe, xkcd.com] funcțional dialect de Lisp totul este văzut ca o funcție constante expresii neevaluate perechi / liste pentru structurarea datelor apeluri de funcții liste de apelare, evaluate evaluare aplicativă, funcții stricte, cu anumite excepții 1 : 30 1 : 31

5 Unde găsesc informații? Resurse de bază Organizare Regulament: Forumuri: acs.curs L-A2-S2-PP-CA-CC-CD Elementele cursului sunt comune la seriile CA, CC și CD. 1 : 32 1 : 33 Notare mai multe la Laborator: 1p Teme: 4p (3 1.33p) Teste la curs: 0.5p cu bonusuri, dar maxim 1p total (cu extensie până la 1.5 pentru performanță susținută) cu bonusuri, dar în limita a maxim 6p pe parcurs punctare pe parcurs, la curs Test din materia de laborator: 0.5p Examen: 4p limbaje + teorie L T tc tg Ex min parcurs min ex test grilă, de cunoaștere a limbajelor ( [ [(CC) BY-NC xkcd.com] 1 : 34 1 : 35 Cursul 2: 8 9 Discuție despre tipare 10 Legarea variabilelor 11 Evaluare 12 Construcția programelor prin recursivitate Tipare Variabile Evaluare Recursivitate 2 : 1 Tipare Variabile Evaluare Recursivitate 2 : 2 Racket vs. Scheme Cum se numește limbajul despre care discutăm? Analiza limbajului Racket Ce analizăm la un limbaj de programare? Racket este dialect de Lisp/Scheme (așa cum Scheme este dialect de Lisp); Racket este derivat din Scheme, oferind instrumente mai puternice; Racket (fost PLT Scheme) este interpretat de mediul DrRacket (fost DrScheme); [ [ Gestionarea valorilor modul de tipare al valorilor modul de legare al variabilelor (managementul valorilor) valorile de prim rang Gestionarea execuției ordinea de evaluare (generare a valorilor) controlul evaluării modul de construcție al programelor Tipare Variabile Evaluare Recursivitate 2 : 3 Tipare Variabile Evaluare Recursivitate 2 : 4

6 Tipuri în Racket În Racket avem: numere: 1, 2, 1.5 Discuție despre tipare simboli (literali): 'abcd, 'andrei valori booleene: #t, #f șiruri de caractere: "șir de caractere" perechi: (cons 1 2) '(1. 2) liste: (cons 1 (cons 2 '())) '(1 2) funcții: (λ (e f) (cons e f)) #<procedure> Cum sunt gestionate tipurilor valorilor (variabilelor) la compilare (verificare) și la execuție? Tipare Variabile Evaluare Recursivitate 2 : 5 Tipare Variabile Evaluare Recursivitate 2 : 6 Modalități de tipare Tipare statică vs. dinamică Rolul tipurilor: exprimare a intenției programatorului, abstractizare, documentare, optimizare, verificare + Tipare modul de gestionare a tipurilor. Ex Tipare dinamică Javascript: var x = 5; if(condition) x = "here"; print(x); ce tip are x aici?. Clasificare după momentul verificării: statică dinamică. Clasificare după rigiditatea regulilor: tare slabă Ex Tipare statică Java: int x = 5; if(condition) x = "here"; Eroare la compilare: x este int. print(x); Tipare Variabile Evaluare Recursivitate 2 : 7 Tipare Variabile Evaluare Recursivitate 2 : 8 Tipare statică vs. dinamică Caracteristici Tipare tare vs. slabă Exemple. Tipare statică La compilare Valori și variabile Rulare mai rapidă Rigidă: sancționează orice construcție Debugging mai facil Declarații explicite sau inferențe de tip Pascal, C, C++, Java, Haskell. Tipare dinamică La rulare Doar valori Rulare mai lentă (necesită verificarea tipurilor) Flexibilă: sancționează doar când este necesar Debugging mai dificil Permite metaprogramare (v. eval) Python, Scheme/Racket, Prolog, JavaScript, PHP Clasificare după libertatea de a agrega valori de tipuri diferite. Ex Tipare tare 1 + "23" Eroare (Haskell, Python) Ex Tipare slabă 1 + "23" = 24 (Visual Basic) 1 + "23" = "123" (JavaScript) Tipare Variabile Evaluare Recursivitate 2 : 9 Tipare Variabile Evaluare Recursivitate 2 : 10 Tiparea în Racket este dinamică 1 ( if # t 'something (+ 1 # t ) ) 'something 2 ( if # f 'something (+ 1 # t ) ) Eroare este tare Legarea variabilelor 1 (+ " 1 " 2) Eroare dar, permite liste cu elemente de tipuri diferite. Tipare Variabile Evaluare Recursivitate 2 : 11 Tipare Variabile Evaluare Recursivitate 2 : 12

7 Variabile (Nume) Proprietăți generale ale variabilelor Legarea variabilelor Definiții (1). Proprietăți identificator valoarea legată (la un anumit moment) domeniul de vizibilitate (scope) + durata de viață tip + Legarea variabilelor modalitatea de asociere a apariției unei variabile cu definiția acesteia (deci cu valoarea).. Stări declarată: cunoaștem identificatorul definită: cunoaștem și valoarea variabila a fost legată în Racket, variabilele (numele) sunt legate static prin construcțiile lambda, let, let*, letrec și define, și sunt vizibile în domeniul construcției unde au fost definite (excepție face define). Tipare Variabile Evaluare Recursivitate 2 : 13 + Domeniul de vizibilitate scope mulțimea punctelor din program unde o definiție (legare) este vizibilă. Tipare Variabile Evaluare Recursivitate 2 : 14 Legarea variabilelor Definiții (2) Legarea variabilelor în Racket + Legare statică Valoarea pentru un nume este legată o singură dată, la declarare, în contextul în care aceasta a fost definită. Valoarea depinde doar de contextul static al variabilei. Domeniu de vizibilitate al legării poate fi desprins la compilare. Variabile definite în construcții interioare legate static, local: lambda let let* letrec + Legare dinamică Valorile variabilelor depind de momentul în care o expresie este evaluată. Valoarea poate fi (re-)legată la variabilă ulterior declarării variabilei. Domeniu de vizibilitate al unei legări determinat la execuție. Tipare Variabile Evaluare Recursivitate 2 : 15 Variabile top-level legate static, global: define Tipare Variabile Evaluare Recursivitate 2 : 16 Construcția lambda Definiție & Leagă static parametrii formali ai unei funcții Sintaxă: 1 ( lambda ( p1... pk... pn ) expr ) Construcția lambda Semantică Aplicație: 1 (( lambda (p1... pn ) expr ) 2 a1... an ) Domeniul de vizibilitate al parametrului pk: mulțimea punctelor din expr (care este corpul funcției), puncte în care apariția lui pk este liberă. 1 Evaluare aplicativă: se evaluează argumentele ak, în ordine aleatoare (nu se garantează o anumită ordine). 2 Se evaluează corpul funcției, expr, ținând cont de legările pk valoare(ak). 3 Valoarea aplicației este valoarea lui expr, evaluată mai sus. Tipare Variabile Evaluare Recursivitate 2 : 17 Tipare Variabile Evaluare Recursivitate 2 : 18 Construcția let Definiție,, Semantică Leagă static variabile locale Sintaxă: 1 ( let ( ( v1 e1 )... ( vk ek )... ( vn en ) ) 2 expr ) Domeniul de vizibilitate a variabilei vk (cu valoarea ek): mulțimea punctelor din expr (corp let), în care aparițiile lui vk sunt libere. Ex 1 ( let (( x 1) ( y 2) ) (+ x 2) ) Atenție! Construcția (let ((v1 e1)...(vn en)) expr) echivalentă cu ((lambda (v1...vn) expr) e1...en) Construcția let* Definiție & Leagă static variabile locale Sintaxă: 1 ( let* (( v1 e1 )... ( vk ek )... ( vn en ) ) 2 expr ) Scope pentru variabila vk = mulțimea punctelor din restul legărilor (legări ulterioare) și corp expr în care aparițiile lui vk sunt libere. Ex 1 ( let* (( x 1) ( y x ) ) 2 (+ x 2) ) Tipare Variabile Evaluare Recursivitate 2 : 19 Tipare Variabile Evaluare Recursivitate 2 : 20

8 Construcția let* Semantică Construcția letrec Definiție 1 ( let* (( v1 e1 )... ( vn en ) ) 2 expr ) echivalent cu 1 ( let (( v1 e1 ) ) ( let (( vn en ) ) 4 expr )... ) Evaluarea expresiilor ei se face în ordine! Leagă static variabile locale Sintaxă: 1 ( letrec (( v1 e1 )... ( vk ek )... ( vn en ) ) 2 expr ) Domeniul de vizibilitate a variabilei vk = mulțimea punctelor din întreaga construcție, în care aparițiile lui vk sunt libere. Tipare Variabile Evaluare Recursivitate 2 : 21 Tipare Variabile Evaluare Recursivitate 2 : 22 Construcția letrec Construcția define Definiție & Ex Leagă static variabile top-level. 1 ( letrec (( factorial 2 ( lambda (n) 3 (if ( zero? n ) 1 4 (* n ( factorial (- n 1) ) ) ) ) ) ) 5 ( factorial 5) ) Avantaje: definirea variabilelor top-level în orice ordine definirea de funcții mutual recursive Ex Definiții echivalente: 1 ( define f1 2 ( lambda (x) 3 ( add1 x ) 4 ) ) 5 6 ( define (f2 x ) 7 ( add1 x ) 8 ) ) Tipare Variabile Evaluare Recursivitate 2 : 23 Tipare Variabile Evaluare Recursivitate 2 : 24 Evaluarea în Racket Evaluare aplicativă: evaluarea parametrilor înaintea aplicării funcției asupra acestora (în ordine aleatoare). Evaluare Funcții stricte (i.e.cu evaluare aplicativă) Excepții: if, cond, and, or, quote. Tipare Variabile Evaluare Recursivitate 2 : 25 Tipare Variabile Evaluare Recursivitate 2 : 26 Controlul evaluării quote sau ' funcție nestrictă întoarce parametrul neevaluat eval funcție strictă forțează evaluarea parametrului și întoarce valoarea acestuia Construcția programelor prin recursivitate Ex 1 ( define sum '(+ 2 3) ) 2 sum ; '(+ 2 3) 3 ( eval ( list ( car sum ) ( cadr sum ) ( caddr sum ) ) ) ; 5 Tipare Variabile Evaluare Recursivitate 2 : 27 Tipare Variabile Evaluare Recursivitate 2 : 28

9 Recursivitate Recursivitatea element fundamental al paradigmei funcționale Numai prin recursivitate (sau iterare) se pot realiza prelucrări pe date de dimensiuni nedefinite. Dar, este eficient să folosim recursivitatea? recursivitatea (pe stivă) poate încărca stiva. Recursivitate Tipuri pe stivă: factorial(n) = n factorial(n 1) timp: liniar spațiu: liniar (ocupat pe stivă) dar, în procedural putem implementa factorialul în spațiu constant. pe coadă: factorial(n) = fh(n,1) fh(n,p) = fh(n 1,p n), n > 1 ; p altfel timp: liniar spațiu: constant beneficiu tail call optimization Tipare Variabile Evaluare Recursivitate 2 : 29 Tipare Variabile Evaluare Recursivitate 2 : 30 Sfârșitul cursului 2 Elemente esențiale Cursul 3: Tipare: dinamică vs. statică, tare vs. slabă; Legare: dinamică vs statică; Racket: tipare dinamică, tare; domeniu al variabilelor; construcții care leagă nume în Racket: lambda, let, let*, letrec, define; evaluare aplicativă; construcția funcțiilor prin recursivitate Lambda-expresii 15 Reducere 16 Evaluare 17 Limbajul lambda-0 și incursiune în TDA 18 Racket vs. lambda-0 19 Recapitulare Calcul λ Tipare Variabile Evaluare Recursivitate 2 : 31 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 1 Modele de calculabilitate De ce? ne punem problema dacă putem realiza un calcul sau nu pentru a demonstra trebuie să avem un model simplu al calculului (cum realizăm calculul, în mod formal). un model de calculabilitate trebuie să fie cât mai simplu, atât ca număr de operații disponibile cât și ca mode de construcție a valorilor. corectitudinea unui program se demonstrează mai ușor dacă limbajul de programare este mai apropiat de mașina teoretică (modelul abstract de calculabilitate). λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 2 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 3 Calculul Lambda λ Model de calculabilitate (Alonzo Church, 1932) introdus în cadrul cercetărilor asupra fundamentelor matematicii. [ sistem formal pentru exprimarea calculului. Echivalent cu Mașina Turing (v. Teza Church-Turing) Axat pe conceptul matematic de funcție totul este o funcție Aplicații ale calculului λ Aplicații importante în programare demonstrarea formală a corectitudinii programelor, datorită modelului simplu de execuție Baza teoretică a numeroase limbaje: LISP, Scheme, Haskell, ML, F#, Clean, Clojure, Scala, Erlang etc. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 4 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 5

10 λ-expresii Exemple 1 x variabila (numele) x Lambda-expresii Ex 2 λx.x funcția identitate 3 λx.λy.x funcție selector 4 (λx.x y) aplicația funcției identitate asupra parametrului actual y 5 (λx.(x x) λx.x)? Intuitiv, evaluarea aplicației (λx.x y) presupune substituția textuală a lui x, în corp, prin y rezultat y. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 6 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 7 λ-expresii Definiție + λ-expresie Variabilă: o variabilă x este o λ-expresie; Funcție: dacă x este o variabilă și E este o λ-expresie, atunci λx.e este o λ-expresie, reprezentând funcția anonimă, unară, cu parametrul formal x și corpul E; Aplicație: dacă F și A sunt λ-expresii, atunci (F A) este o λ-expresie, reprezentând aplicația expresiei F asupra parametrului actual A. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 8 Evaluare Intuitiv ((λx.λy.x z) t) ( ( λx.λy.x z ) t) substituție (λy.z t) ( λy.z t ) substituție z parametru formal parametru actual parametru formal parametru actual λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 9 nu mai este nicio funcție de aplicat cum știm ce reducem, cum reducem, în ce β-redex ordine, și ce apariții ale variabilelor înlocuim? Cum arată (Formal, vedem mai târziu) Reducere β-redex: o λ-expresie de forma: (λx.e A) E λ-expresie este corpul funcției A λ-expresie este parametrul actual β-redexul se reduce la E [A/x] E cu toate aparițiile libere ale lui x din E înlocuite cu A prin substituție textuală. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 10 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 11 Apariții ale variabilelor Legate vs libere + Apariție legată O apariție x n a unei variabile x este legată într-o expresie E dacă: E = λx.f sau E =... λx n.f... sau E =... λx.f... și x n apare în F. + Apariție liberă O apariție a unei variabile este liberă într-o expresie dacă nu este legată în acea expresie. Atenție! În raport cu o expresie dată! λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 12 Apariții ale variabilelor Mod de gândire O apariție legată în expresie este o apariție a parametrului formal al unei funcții definite în expresie, în corpul funcției; o apariție liberă este o apariție a parametrului formal al unei funcții definite în exteriorul expresiei, sau nu este parametru formal al niciunei funcții. x <1> (λy. x <1> λ x <2> (λ x <2> apariție liberă z) apariție încă liberă, nu o leagă nimeni.(λy. x <1>.(λy. x z) } <1> {{ } corp λx 2.(λy. x z) λ x leagă apariția x <2> <1> x <3> apariția x 3 este liberă este în ) exteriorul corpului funcției cu parametrul formal x (λx 2 ) λ x.(λ x z) x ) λ x leagă apariția x <4> <3> <4> <2> <1> <3> λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 13

11 Variabile Legate vs libere Variabile și Apariții ale lor 1 + O variabilă este legată într-o expresie dacă toate aparițiile sale sunt legate în acea expresie. + O variabilă este liberă într-o expresie dacă nu este legată în acea expresie i.e. dacă cel puțin o apariție a sa este liberă în acea expresie. Atenție! În raport cu o expresie dată! Ex În expresia E = (λx.x x), evidențiem aparițiile lui x: (λ x. x x ). <1> <2> <3> }{{} F x <1>, x <2> legate în E x liberă în E <3> x liberă în F! <2> x liberă în E și F λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 14 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 15 Ex Variabile și apariții ale lor 2 În expresia E = (λx.λz.(z x) (z y)), evidențiem aparițiile: (λ x.λ z.( z x ) ( z y )). <1> <1> } <2> <2> {{} F <3> <1> x <1>, x <2>, z <1>, z <2> legate în E y, z libere în E <1> <3> z <1>, z <2> legate în F x liberă în F <2> x legată în E, dar liberă în F y liberă în E z liberă în E, dar legată în F Determinarea variabilelor libere și legate O abordare formală Variabile libere (free variables) FV (x) = {x} FV (λx.e) = FV (E) \ {x} FV ((E 1 E 2 )) = FV (E 1 ) FV (E 2 ) Variabile legate (bound variables) BV (x) = /0 BV (λx.e) = BV (E) {x} BV ((E 1 E 2 )) = BV (E 1 ) \ FV (E 2 ) BV (E 2 ) \ FV (E 1 ) λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 16 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 17 Expresii închise + O expresie închisă este o expresie care nu conține variabile libere. Ex (λx.x λx.λy.x) închisă (λx.x a) deschisă, deoarece a este liberă Variabilele libere dintr-o λ-expresie pot sta pentru alte λ-expresii Înaintea evaluării, o expresie trebuie adusă la forma închisă. Procesul de înlocuire trebuie să se termine. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 18 β-reducere Definiție + β-reducere: Evaluarea expresiei (λx.e A), cu E și A λ-expresii, prin substituirea textuală a tuturor aparițiilor libere ale parametrului formal al funcției, x, din corpul acesteia, E, cu parametrul actual, A: (λx.e A) β E [A/x] + β-redex Expresia (λx.e A), cu E și A λ-expresii o expresie pe care se poate aplica β-reducerea. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 19 β-reducere Exemple β-reducere Coliziuni Ex (λx.x y) β x [y/x] y (λx.λx.x y) β λx.x [y/x] λx.x (λx.λy.x y) β λy.x [y/x] λy.y Greșit! Variabila liberă y devine legată, schimbându-și semnificația. λy (a).y (b) Care este problema? Problemă: în expresia (λx.e A): dacă variabilele libere din A nu au nume comune cu variabilele legate din E: FV(A) BV(E) = /0 reducere întotdeauna corectă dacă există variabilele libere din A care au nume comune cu variabilele legate din E: FV(A) BV(E) /0 reducere potențial greșită Soluție: redenumirea variabilelor legate din E, ce coincid cu cele libere din A α-conversie. Ex (λx.λy.x y) α (λx.λz.x y) β λz.x [y/x] λz.y λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 20 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 21

12 Ex α-conversie Definiție + α-conversie: Redenumirea sistematică a variabilelor legate dintr-o funcție: λx.e α λy.e [y/x]. Se impun două condiții. λx.y α λy.y [y/x] λy.y Greșit! λx.λy.x α λy.λy.x [y/x] λy.λy.y Greșit!. Condiții y nu este o variabilă liberă, existentă deja în E orice apariție liberă în E rămâne liberă în E [y/x] λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 22 Ex α-conversie Exemple λx.(x y) α λz.(z y) Corect! λx.λx.(x y) α λy.λx.(x y) Greșit! y este liberă în λx.(x y) λx.λy.(y x) α λy.λy.(y y) Greșit! Apariția liberă a lui x din λy.(y x) devine legată, după substituire, în λy.(y y) λx.λy.(y y) α λy.λy.(y y) Corect! λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 23 Reducere Definiții + Pas de reducere: O secvență formată dintr-o α-conversie și o β-reducere, astfel încât a doua se produce fără coliziuni: E 1 E 2 E 1 α E 3 β E 2. + Secvență de reducere: Succesiune de zero sau mai mulți pași de reducere: E 1 E 2. Reprezintă un element din închiderea reflexiv-tranzitivă a relației. Ex Reducere Proprietăți. Reducere E 1 E 2 = E 1 E 2 un pas este o secvență E E zero pași formează o secvență E 1 E 2 E 2 E 3 E 1 E 3 tranzitivitate ((λx.λy.((y x) y) λx.x) (λz.(z y) λx.x) (λx.x y) y ((λx.λy.((y x) y) λx.x) y λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 24 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 25 Întrebări Pentru construcția unei mașini de calcul Evaluare Dacă am vrea să construim o mașină de calcul care să aibă ca program o λ-expresie și să aibă ca operație de bază pasul de reducere, ne punem câteva întrebări: 1 Când se termină calculul? Se termină întotdeauna? 2 Dacă mai multe secvențe de reducere se termină, obținem întotdeauna același rezultat? 3 Comportamentul depinde de secvența de reducere? 4 Dacă rezultatul este unic, cum îl obținem? λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 26 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 27 Ex Terminarea reducerii (reductibilitate) și definiție Ω = (λx.(x x) λx.(x x)) (λx.(x x) λx.(x x))... Ω nu admite nicio secvență de reducere care se termină. + Expresie reductibilă este o expresie care admite (cel puțin o) secvență de reducere care se termină. expresia Ω nu este reductibilă. Ex Secvențe de reducere și terminare Dar! E = (λx.y Ω) y sau E y sau E E y sau n y, n 0... E are o secvență de reducere care nu se termină; dar E are forma normală y E este reductibilă; lungimea secvențelor de reducere ale E este nemărginită. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 28 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 29

13 Forme normale Cum știm că s-a terminat calculul? Calculul se termină atunci când expresia nu mai poate fi redusă expresia nu mai conține β-redecși. + Forma normală a unei expresii este o formă (la care se ajunge prin reducere, care nu mai conține β-redecși i.e. care nu mai poate fi redusă. Forme normale Este necesar să mergem până la Forma Normală? + Forma normală funcțională FNF este o formă λx.f, în care F poate conține β-redecși. Ex (λx.λy.(x y) λx.x) FNF λy.(λx.x y) FN λy.y FN a unei expresii închise este în mod necesar FNF. într-o FNF nu există o necesitate imediată de a evalua eventualii β-redecși interiori (funcția nu a fost încă aplicată). λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 30 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 31 Unicitatea formei normale Rezultate T Teorema Church-Rosser / diamantului Dacă E E 1 și E E 2, atunci există E 3 astfel încât E 1 E 3 și E 2 E 3. E E 1 E 2 E 3 C Corolar Dacă o expresie este reductibilă, forma ei normală este unică. Ea corespunde valorii expresiei. Unicitatea formei normale Ex (λx.λy.(x y) (λx.x y)) λz.((λx.x y) z) λz.(y z) α λa.(y a) (λx.λy.(x y) y) λw.(y w) α λa.(y a) Forma normală corespunde unei clase de expresii, echivalente sub redenumiri sistematice. Valoarea este un anumit membru al acestei clase de echivalență. Valorile sunt echivalente în raport cu redenumirea. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 32 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 33 Modalități de reducere Cum putem organiza reducerea? Ce modalitate alegem? + Reducere stânga-dreapta: Reducerea celui mai superficial și mai din stânga β-redex. Ex ((λx.x λx.y) (λx.(x x) λx.(x x))) (λx.y Ω) y + Reducere dreapta-stânga: Reducerea celui mai adânc și mai din dreapta β-redex. Ex (λx.(λx.x λx.y) (λx.(x x) λx.(x x))) (λx.(λx.x λx.y) Ω)... λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 34 T Teorema normalizării Dacă o expresie este reductibilă, evaluarea stânga-dreapta a acesteia se termină. Teorema normalizării (normalizare = aducere la forma normală) nu garantează terminarea evaluării oricărei expresii, ci doar a celor reductibile! Dacă expresia este ireductibilă, nicio reducere nu se va termina. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 35 Răspunsuri la întrebări 1 Când se termină calculul? Se termină întotdeauna? se termină cu forma normală [funcțională]. NU se termină decât dacă expresia este reductibilă. 2 Comportamentul depinde de secvența de reducere? DA. 3 Dacă mai multe secvențe de reducere se termină, obținem întotdeauna același rezultat? DA. 4 Dacă rezultatul este unic, cum îl obținem? Reducere stânga-dreapta. 5 Care este valoarea expresiei? Forma normală [funcțională] (FN[F]). λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 36 Ordine de evaluare Tipuri + Evaluare aplicativă (eager) corespunde unei reduceri mai degrabă dreapta-stânga. Parametrii funcțiilor sunt evaluați înaintea aplicării funcției. + Evaluare normală (lazy) corespunde reducerii stânga-dreapta. Parametrii funcțiilor sunt evaluați la cerere. + Funcție strictă funcție cu evaluare aplicativă. + Funcție nestrictă funcție cu evaluare normală. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 37

14 Ordine de evaluare În practică Evaluarea aplicativă prezentă în majoritatea limbajelor: C, Java, Scheme, PHP etc. Ex (+ (+ 2 3) (* 2 3)) (+ 5 6) 11 Nevoie de funcții nestricte, chiar în limbajele aplicative: if, and, or etc. Ex (if (< 2 3) (+ 2 3) (* 2 3)) (< 2 3) #t (+ 2 3) 5 Limbajul lambda-0 și incursiune în TDA λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 38 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 39 Limbajul λ 0 Scop Am putea crea o mașină de calcul folosind calculul λ mașină de calcul ipotetică; Mașina folosește limbajul λ 0 calcul lambda; Programul λ-expresie; + Legări top-level de expresii la nume. Datele λ-expresii; Funcționarea mașinii reducere substituție textuală evaluare normală; terminarea evaluării cu forma normală funcțională; se folosesc numai expresii închise. Tipuri de date Cum reprezentăm datele? Cum interpretăm valorile? Putem reprezenta toate datele prin funcții cărora, convențional, le dăm o semnificație abstractă. Ex T def λx.λy.x F def λx.λy.y Pentru aceste tipuri de date abstracte (TDA) creăm operatori care transformă datele în mod coerent cu interpretarea pe care o dăm valorilor. Ex not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 40 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 41 TDA Definiție + Tip de date abstract TDA Model matematic al unei mulțimi de valori și al operațiilor valide pe acestea.. Componente constructori de bază: cum se generează valorile; operatori: ce se poate face cu acestea; axiome: cum lucrează operatorii / ce restricții există. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 42 TDA Bool Specificare Constructori: Operatori: Axiome: T : F : not : and : or : if : Bool Bool Bool Bool Bool 2 Bool Bool 2 Bool Bool A A A not : not(t ) = F not(f ) = T and : and(t,a) = a and(f,a) = F or : or(t,a) = T or(f,a) = a if : if (T,a,b) = a if (F,a,b) = b λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 43 TDA Bool Implementarea constructorilor de bază Intuiție bazat pe comportamentul necesar pentru if: selecția între cele două valori T def λx.λy.x F def λx.λy.y TDA Bool Implementarea operatorilor if def λc.λx.λy.((c x) y) and def λx.λy.((x y) F ) ((and T ) a) ((λx.λy.((x y) F ) T ) a) ((T a) F ) a ((and F ) a) ((λx.λy.((x y) F ) F ) a) ((F a) F ) F or def λx.λy.((x T ) y) ((or T ) a) ((λx.λy.((x T ) y) T ) a) ((T T ) a) T ((or F ) a) ((λx.λy.((x T ) y) F ) a) ((F T ) a) a not def λx.((x F ) T ) (not T ) (λx.((x F ) T ) T ) ((T F ) T ) F (not F ) (λx.((x F ) T ) F ) ((F F ) T ) T λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 44 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 45

15 TDA Pair Implementare Intuiție: pereche funcție ce așteaptă selectorul, pentru a-l aplica asupra membrilor fst def λp.(p T ) (fst ((pair a) b)) (λp.(p T ) λz.((z a) b)) (λz.((z a) b) T ) ((T a) b) a snd def λp(f ) (snd ((pair a) b)) (λp.(p F ) λz.((z a) b)) (λz.((z a) b) F ) ((F a) b) b pair def λx.λy.λz.((z x) y) ((pair a) b) (λx.λy.λz.((z x) y)ab )λz.((z a) b) λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 46 TDA List și Natural Implementare Intuiție: listă pereche (head, tail) nil def λx.t cons def pair ((cons e) L) ((λx.λy.λz.((z x) y) e) L) λz.((z e) L) car def fst cdr def snd Intuiție: număr listă cu lungimea egală cu valoarea numărului zero def nil succ def λn.((cons nil) n) pred def cdr vezi și [ λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 47 Absența tipurilor Chiar avem nevoie de tipuri? Rolul tipurilor Modalitate de exprimare a intenției programatorului; Documentare: ce operatori acționează asupra căror obiecte; Reprezentarea particulară a valorilor de tipuri diferite: 1, Hello, #t etc.; Optimizarea operațiilor specifice; Absența tipurilor Consecințe asupra reprezentării obiectelor Un număr, o listă sau un arbore, posibil desemnate de aceeași valoare! Valori și operatori reprezentați de funcții, semnificația fiind dependentă de context. Valoare aplicabilă asupra unei alte valori operator! Prevenirea erorilor; Facilitarea verificării formale; λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 48 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 49 Absența tipurilor Consecințe asupra corectitudinii calculului Incapacitatea Mașinii λde a interpreta semnificația expresiilor; asigura corectitudinea acestora (dpdv al tipurilor). Delegarea celor două aspecte programatorului; Orice operatori aplicabili asupra oricăror valori; Construcții eronate acceptate fără avertisment, dar calcule terminate cu valori fără semnificație sau expresii care nu sunt valori (nu au asociată o semnificație), dar sunt ireductibile instabilitate. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 50 Absența tipurilor Consecințe pozitive Flexibilitate sporită în reprezentare; Potrivită în situațiile în care reprezentarea uniformă obiectelor, ca liste de simboluri, este convenabilă.... vin cu prețul unei dificultăți sporite în depanare, verificare și mentenanță λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 51 Recursivitate Perspective asupra recursivității Cum realizăm recursivitatea în λ 0, dacă nu avem nume de funcții? Textuală: funcție care se autoapelează, folosindu-și numele; Semantică: ce obiect matematic este desemnat de o funcție recursivă, cu posibilitatea construirii de funcții recursive anonime. Implementare length Problemă Lungimea unei liste: length def λl.(if (null L) zero (succ (length (cdr L)))) Cu ce înlocuim zona subliniată, pentru a evita recursivitatea textuală? (expresia pentru length nu este închisă!) Putem primi ca parametru o funcție echivalentă computațional cu length? Length def λf L.(if (null L) zero (succ (f (cdr L)))) (Length length) = length length este un punct fix al lui Length! λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 52 Cum obținem punctul fix? λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 53

16 Combinator de punct fix mai multe la [ Ex Fix = λf.(λx.(f (x x)) λx.(f (x x))) (Fix F ) (λx.(f (x x)) λx.(f (x x))) (F (λx.(f (x x)) λx.(f (x x)))) (F (Fix F )) (Fix F ) este un punct fix al lui F. Fix se numește combinator de punct fix. Racket vs. lambda-0 length def (Fix Length) (Length (Fix Length)) λl.(if (null L) zero (succ ((Fix Length) (cdr L)))) Funcție recursivă, fără a fi textual recursivă! λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 54 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 55 Racket vs. λ 0 Construcția expresiilor / sintaxă λ Racket Variabilă/nume x x Funcție λx.corp (lambda (x) corp) uncurry λx y.corp (lambda (x y) corp) Aplicare (F A) (f a) uncurry (F A1 A2) (f a1 a2) Legare top-level - (define nume expr) Program λ-expresie închisă colecție de legări top-level (define) Valori λ-expresii / TDA valori de diverse tipuri (numere, liste, etc.) Racket vs. λ 0 Mai precis similar cu λ 0, folosește S-expresii (bază Lisp); tipat dinamic/latent variabilele nu au tip; valorile au tip (3, #f); verificarea se face la execuție, în momentul aplicării unei funcții; evaluare aplicativă; permite recursivitate textuală; avem legări top-level. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 56 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 57 Sfârșitul cursului 3 Elemente esențiale Baza formală a calculului λ: expresie λ, β-redex, variabile și apariții legate vs. libere, expresie închisă, α-conversie, β-reducere FN și FNF, reducere, reductibilitate, evaluare aplicativă și normală Recapitulare Calcul λ TDA și recursivitate pentru calcul lambda λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 58 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 59 λ-expresie Sintaxa pentru calcul λ β-redex Ce reducem? O λ-expresie poate fi: x λx.e E λ-expresie (F A) F,A λ-expresii Exemple: λx.x λx.λy.(x y) (λx.x λx.x) λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 60 Sursa pentru β-reducere și pasul de reducere. Este o funcție care se poate aplica. (λx. }{{} corp x: numele parametrului formal. }{{} ) parametru actual λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 61

17 β-reducere Cum reducem? Substituție Ce substituim? substituție textuală (λx. }{{} corp }{{} ) β }{{} parametru actual corp [parametru actual/x] aparițiile libere ale lui x din corp sunt substituite textual cu parametrul actual λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 62 λx. apariție liberă în corp λx. } {{ x } corp { corp 2 }} { } λx. {{ x } corp 1 leagă apariția în corp 1 (apariția este liberă în corp 2 ) O apariție x este legată de cea mai interioară definiție λx, care conține apariția în corpul său. Dacă λx care îl leagă este inclus în expresia E, apariția este legată în E, altfel este liberă în E. x are o apariție liberă în E x variabilă liberă în E (altfel legată). variabile libere în E E închisă. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 63 Condiții β-reducere pentru (λ x.e A) Când este corect să efectuăm substituția? Putem aplica β-reducerea dacă: Variabilele libere din A nu devin legate în E [A/x] Mai precis, numele variabilelor libere din A nu sunt nume de variabile care sunt legate în contextele din E în care apare x. : (λx.λy.(y x) λz.y) incorect să efectuăm β-reducere există puncte în corpul lui λx în care y este legată, dar y este variabilă liberă în parametrul actual. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 64 α-conversie în (λx.e A) Cum rezolvăm problema anterioară? când? când variabilele din A devin legate în E [A/x] ce redenumim? parametri formali ai tuturor funcțiilor din E care conțin apariții libere ale lui x în corp și au ca parametru formal numele unei variabile libere din A (redenumirea parametrilor formali implică folosirea noului nume în toate aparițiile libere ale parametrilor formali în corpurile funcțiilor respective). la ce redenumim? la un nume care nu este nume de variabilă liberă în A sau în propriul corp, și care nu devine legat în corp. λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 65 Pas de reducere Cum efectuăm o reducere corectă? Secvență de reducere Cum facem o reducere completă? [α-conversie] + β-reducere fără coliziuni 1 avem β-redex 2 dacă este cazul, efectuăm α-conversie Secvență de reducere = Dacă expresia este reductibilă (are o secvență de reducere care se termină), reducerea în ordine stânga-dreapta se va termina cu valoarea expresiei. 3 efectuăm β-reducere λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 66 λ-expresii Reducere Evaluare λ 0 și TDA Racket vs. lambda-0 Recapitulare Calcul λ 3 : 67 Cursul 4: II Sfârșitul cursului 4 Elemente esențiale Exemple mai avansate de legare în Racket Exemple mai avansate de utilizare Racket II 4 : 1 II 4 : 2

18 Cursul 5: 20 Întârzierea evaluării Întârzierea evaluării 21 Fluxuri 22 Căutare leneșă în spațiul stărilor 5 : 1 5 : 2 Motivație De ce? Luăm un exemplu Varianta 1 Încercare implementare directă Ex Să se implementeze funcția nestrictă prod, astfel încât al doilea parametru să fie evaluat doar dacă primul este true: prod(f,y) = 0 prod(t,y) = y(y + 1) Dar, evaluarea parametrului y al funcției să se facă numai o singură dată. Problema de rezolvat: evaluarea la cerere. 1 ( define prod 2 ( lambda (x y ) 3 ( if x (* y (+ y 1) ) 0) ) ) 4 5 ( define test 6 ( lambda (x) 7 ( let (( y 5) ) 8 ( prod x ( and ( display " y " ) y ) ) ) ) ) 9 ( test # f ) 10 ( test # t ) Output: y 0 y 30 Implementarea nu respectă specificația, deoarece ambii parametri sunt evaluați în momentul aplicării 5 : 3 5 : 4 Varianta 2 Încercare quote & eval Contexte computaționale Definiție 1 ( define prod 2 ( lambda (x y ) 3 ( if x (* ( eval y ) (+ ( eval y ) 1) ) 0) ) ) 4 5 ( define test 6 ( lambda (x) 7 ( let (( y 5) ) 8 ( prod x ( quote ( and ( display " y " ) y ) ) ) ) ) ) 9 ( test # f ) 10 ( test # t ) Output: 0 y undefined x = #f comportament corect: y neevaluat x = #t eroare: quote nu salvează contextul + Context computațional Contextul computațional al unui punct P, dintr-un program, la momentul t, este mulțimea variabilelor ale căror domenii de vizibilitate îl conțin pe P, la momentul t. Legare statică mulțimea variabilelor care îl conțin pe P în domeniul lexical de vizibilitate Legare dinamică mulțimea variabilelor definite cel mai recent, la momentul t, și referite din P 5 : 5 5 : 6 Contexte computaționale Închideri funcționale Definiție Ex Ce variabile locale conține contextul computațional al punctului P? 1 ( lambda (x y) 2 ( lambda (z) 3 ( let ((x ( car y ) ) ) 4 ;..P..) ) ) + Închidere funcțională: funcție care își salvează contextul, pe care îl va folosi, în momentul aplicării, pentru evaluarea corpului. Notație: închiderea funcției f în contextul C < f ; C > Ex < λx.z; {z 2} > 5 : 7 5 : 8

19 Varianta 3 Încercare închideri funcționale 1 ( define prod 2 ( lambda (x y ) 3 ( if x (* ( y ) (+ ( y ) 1) ) 0) ) ) ; ( y ) 4 5 ( define test 6 ( lambda (x) 7 ( let (( y 5) ) 8 ( prod x 9 ( lambda () ( and ( display " y " ) y ) ) ) ) ) ) 10 ( test # f ) 11 ( test # t ) Output: 0 y y 30 Comportament corect: y evaluat la cerere (deci leneș) x = #t y evaluat de 2 ori ineficient Varianta 4 Promisiuni: delay & force 1 ( define prod 2 ( lambda (x y ) 3 ( if x (* ( force y ) (+ ( force y ) 1) ) 0) ) ) 4 5 ( define test 6 ( lambda (x) 7 ( let (( y 5) ) 8 ( prod x 9 ( delay ( and ( display " y " ) y ) ) ) ) ) ) 10 ( test # f ) 11 ( test # t ) Output: 0 y 30 Rezultat corect: y evaluat la cerere, o singură dată evaluare leneșă eficientă 5 : 9 5 : 10 Promisiuni Descriere Promisiuni Proprietăți Rezultatul încă neevaluat al unei expresii Valori de prim rang în limbaj delay construiește o promisiune; funcție nestrictă. force forțează respectarea unei promisiuni, evaluând expresia doar la prima aplicare, și salvându-i valoarea; începând cu a doua invocare, întoarce, direct, valoarea memorată. Salvarea contextului computațional al expresiei a cărei evaluare este întârziată și evaluarea ei ulterioară în acel context asemănător cu închiderile funcționale. Salvarea rezultatului primei evaluări a expresiei. Distingerea primei forțări de celelalte efect lateral, dar acceptabil din moment ce legările se fac static nu pot exista valori care se schimbă între timp. 5 : 11 5 : 12 Evaluare întârziată Abstractizare a implementării cu promisiuni Ex Continuare a exemplului cu funcția prod Evaluare întârziată Abstractizare a implementării cu închideri Ex Continuare a exemplului cu funcția prod 1 ( d efine-syntax-rule ( pack expr ) ( delay expr ) ) 2 3 ( define unpack force ) 4 5 ( define prod ( lambda (x y ) 6 ( if x (* ( unpack y ) (+ ( unpack y ) 1) ) 0) ) ) 7 ( define test ( lambda (x) 8 ( let (( y 5) ) 9 ( prod x ( pack ( and ( display " y " ) y ) ) ) ) ) ) utilizarea nu depinde de implementare (am definit funcțiile pack și unpack care abstractizează implementarea concretă a evaluării întârziate. 1 ( d efine-syntax-rule ( pack expr ) ( lambda () expr ) ) 2 3 ( define unpack ( lambda ( p ) ( p ) ) ) 4 5 ( define prod ( lambda (x y ) 6 ( if x (* ( unpack y ) (+ ( unpack y ) 1) ) 0) ) ) 7 ( define test ( lambda (x) 8 ( let (( y 5) ) 9 ( prod x ( pack ( and ( display " y " ) y ) ) ) ) ) ) utilizarea nu depinde de implementare (același cod ca și anterior, altă implementare a funcționalității de evaluare întârziată, acum mai puțin eficientă). 5 : 13 5 : 14 Motivație Luăm un exemplu Ex Determinați suma numerelor pare 1 din intervalul [a,b]. Fluxuri 1 ( define even-sum-iter ; varianta 1 2 ( lambda (a b ) 3 ( let iter (( n a ) 4 ( sum 0) ) 5 ( cond ((> n b ) sum ) 6 (( even? n ) ( iter (+ n 1) (+ sum n ) ) ) 7 ( else ( iter (+ n 1) sum ) ) ) ) ) ) ( define even-sum-lists ; varianta 2 11 ( lambda (a b ) 12 ( foldl + 0 ( filter even? ( interval a b ) ) ) ) ) 1 stă pentru o verificare potențial mai complexă, e.g. numere prime 5 : 15 5 : 16

20 Motivație Observații Varianta 1 iterativă (d.p.d.v. proces): eficientă, datorită spațiului suplimentar constant; ne-elegantă trebuie să implementăm generarea numerelor. Varianta 2 folosește liste: ineficientă, datorită spațiului posibil mare, ocupat la un moment dat toate numerele din intervalul [a,b]. elegantă și concisă; Cum îmbinăm avantajele celor 2 abordări? Putem stoca procesul fără a stoca rezultatul procesului? Fluxuri Fluxuri Caracteristici Secvențe construite parțial, extinse la cerere, ce creează iluzia completitudinii structurii; Îmbinarea eleganței manipulării listelor cu eficiența calculului incremental; Bariera de abstractizare: componentele listelor evaluate la construcție (cons) componentele fluxurilor evaluate la selecție (cdr) Construcție și utilizare: separate la nivel conceptual modularitate; întrepătrunse la nivel de proces (utilizarea necesită construcția concretă). 5 : 17 5 : 18 Fluxuri Intuitiv Fluxuri Operatori: construcție și selecție o listă este o pereche; cons, car, cdr, nil, null? explorarea listei se face prin operatorii car primul element și cdr restul listei; 1 ( define-macro stream-cons ( lambda ( head tail ) 2 ` ( cons,head ( pack,tail ) ) ) ) 3 am dori să generăm cdr algoritmic, dar la cerere. 4 ( define stream-car car ) 5 6 ( define stream-cdr ( lambda (s) ( 1 ( 1 ) ) }{{}} {{ } car cdrunpacked cdr 7 ( unpack ( cdr s ) ) ) ) 8 9 ( define stream-nil '() ) ( define stream-null? null?) 5 : 19 5 : 20 Fluxuri Exemple Implementarea unui flux de numere 1 Fluxuri Exemple Flux de numere 1 discuție Definiție cu închideri: (define ones (lambda ()(cons 1 (lambda ()(ones))))) Definiție cu fluxuri: Ca proces: 1 1 ( ) ( define ones ( stream-cons 1 ones ) ) 2 ( stream-take 5 ones ) ; ( ) Structural: Definiție cu promisiuni: (define ones (delay (cons 1 ones))) Extinderea se realizează în spațiu constant: : 21 5 : 22 Fluxul numerelor naturale Formulare explicită Fluxul numerelor pare În două variante 1 ( define naturals-from ( lambda (n) 2 ( stream-cons n ( naturals-from (+ n 1) ) ) ) ) 3 1 ( define even-naturals 2 ( stream-filter even? naturals ) ) 4 ( define naturals ( naturals-from 0) ) 3 4 ( define even-naturals 1 ( define naturals 5 ( stream-zip-with + naturals naturals ) ) 2 ( stream-cons 0 3 ( stream-zip-with + ones naturals ) ) ) Atenție: Închideri: multiple parcurgeri ale fluxului determină reevaluarea porțiunilor deja explorate. Promisiuni: parcurgerea fluxului determină evaluarea dincolo de porțiunile deja explorate. 5 : 23 5 : 24

21 Fluxul numerelor prime Metodă Ciurul lui Eratostene. Pornim de la fluxul numerelor naturale, începând cu 2. Elementul curent din fluxul inițial aparține fluxului numerelor prime. Restul fluxului generat se obține eliminând multiplii elementului curent din fluxul inițial; continuând procesul de filtrare, cu elementul următor. 10 Fluxul numerelor prime Implementare 1 ( define sieve ( lambda (s) 2 (if ( stream-null? s ) s 3 ( stream-cons ( stream-car s ) 4 ( sieve ( stream-filter 5 ( lambda ( n ) ( not ( zero? 6 ( remainder n ( stream-car s ) ) ) ) ) 7 ( stream-cdr s ) 8 ) ) ) 9 ) ) ) 11 ( define primes ( sieve ( naturals-from 2) ) ) 5 : 25 5 : 26 Spațiul stărilor unei probleme Căutare leneșă în spațiul stărilor + Spațiul stărilor unei probleme Mulțimea configurațiilor valide din universul problemei. Ex Fie problema Pal n: Să se determine palindroamele de lungime cel puțin n, ce se pot forma cu elementele unui alfabet fixat. Stările problemei toate șirurile generabile cu elementele alfabetului respectiv. 5 : 27 5 : 28 Specificarea unei probleme Aplicație pe Pal n Căutare în spațiul stărilor Starea inițială: șirul vid Operatorii de generare a stărilor succesor ale unei stări: inserarea unui caracter la începutul unui șir dat Operatorul de verificare a proprietății de scop a unei stări: palindrom Spațiul stărilor ca graf: noduri: stări muchii (orientate): transformări ale stărilor în stări succesor Posibile strategii de căutare: lățime: completă și optimală adâncime: incompletă și suboptimală 5 : 29 5 : 30 Căutare în lățime Obișnuită Căutare în lățime Leneșă (1) fluxul stărilor scop 1 ( define b r e adth-search-goal 2 ( lambda ( init expand goal?) 3 ( letrec (( search ( lambda ( states ) 4 ( if ( null? states ) '() 5 ( let (( state ( car states ) ) ( states ( cdr states ) ) ) 6 (if ( goal? state ) state 7 ( search ( append states ( expand state ) ) ) 8 ) ) ) ) ) ) 9 ( search ( list init ) ) ) ) ) Generarea unei singure soluții Cum le obținem pe celelalte, mai ales dacă spațiul e infinit? 5 : 31 1 ( define l a z y-breadth-search ( lambda ( init expand ) 2 ( letrec (( search ( lambda ( states ) 3 (if ( stream-null? states ) states 4 ( let (( state ( stream-car states ) ) 5 ( states ( stream-cdr states ) ) ) 6 ( stream-cons state 7 ( search ( stream-append states 8 ( expand state ) ) ) 9 ) ) ) ) ) ) 10 ( search ( stream-cons init stream-nil ) ) 11 ) ) ) 5 : 32

22 Căutare în lățime Leneșă (2) Sfârșitul cursului 5 Elemente esențiale 1 ( define l a z y -breadth-search-goal 2 ( lambda ( init expand goal?) 3 ( stream-filter goal? 4 ( l a z y-breadth-search init expand ) ) 5 ) ) Evaluare întârziată variante de implementare Fluxuri implementare și utilizări Căutare într-un spațiu infinit Nivel înalt, conceptual: separare între explorarea spațiului și identificarea stărilor scop. Nivel scăzut, al instrucțiunilor: întrepătrunderea celor două aspecte. Aplicații: Palindroame Problema reginelor 5 : 33 5 : 34 Cursul 6: Programare funcțională în Haskell Sintaxă 25 Evaluare Sintaxă Evaluare Programare funcțională în Haskell 6 : 1 Sintaxă Evaluare Programare funcțională în Haskell 6 : 2 Haskell [ Paralelă între limbaje din 1990; GHC Glasgow Haskell Compiler (The Glorious Glasgow Haskell Compilation System) dialect Haskell standard de facto; compilează în/folosind C; Haskell Stack nume dat după logicianul Haskell Curry; Criteriu Racket Haskell Funcții Curry sau uncurry Curry Tipare Dinamică, tare (-liste) Statică, tare Legarea variabilelor Statică Statică Evaluare Aplicativă Normală (Leneșă) Transferul parametrilor Call by sharing Call by need Efecte laterale set!* Interzise aplicații: Pugs, Darcs, Linspire, Xmonad, Cryptol, sel4, Pandoc, web frameworks. Sintaxă Evaluare Programare funcțională în Haskell 6 : 3 Sintaxă Evaluare Programare funcțională în Haskell 6 : 4 Funcții toate funcțiile sunt Curry; Sintaxă aplicabile asupra oricâtor parametri la un moment dat. Ex : Definiții echivalente ale funcției add: 1 add1 = \x y -> x + y 2 add2 = \x -> \y -> x + y 3 add3 x y = x + y 4 5 result = add echivalent, (( add1 1) 2) 6 result2 = add echivalent, (( add3 1) 2) 7 inc = add1 1 Sintaxă Evaluare Programare funcțională în Haskell 6 : 5 Sintaxă Evaluare Programare funcțională în Haskell 6 : 6

23 Funcții vs operatori Pattern matching Aplicabilitatea parțială a operatorilor infixați Transformări operator funcție și funcție operator Ex Definiții echivalente ale funcțiilor add și inc: 1 add4 = (+) 2 result1 = (+) result2 = 1 `add4 ` inc1 = (1 +) 6 inc2 = (+ 1) 7 inc3 = (1 `add4 `) 8 inc4 = (`add4 ` 1) Definirea comportamentului funcțiilor pornind de la structura parametrilor traducerea axiomelor TDA. Ex 1 add5 0 y = y -- add add5 (x + 1) y = 1 + add5 x y 3 4 sumlist [] = 0 -- sumlist [1,2,3] 5 sumlist ( hd : tl ) = hd + sumlist tl 6 7 sumpair (x, y) = x + y -- sumpair (1,2) 8 9 sumtriplet (x, y, z@ ( hd :_)) = -- sumtriplet 10 x + y + hd + sumlist z -- (1,2,[3,4,5]) Sintaxă Evaluare Programare funcțională în Haskell 6 : 7 Sintaxă Evaluare Programare funcțională în Haskell 6 : 8 List comprehensions Definirea listelor prin proprietățile elementelor, ca într-o specificare matematică Ex 1 squares lst = [x * x x <- lst ] 2 3 quicksort [] = [] 4 quicksort (h:t) = quicksort [x x <- t, x <= h] 5 ++ [h] 6 ++ quicksort [x x <- t, x > h] 7 8 interval = [0.. 10] 9 eveninterval = [0, ] 10 naturals = [0..] Evaluare Sintaxă Evaluare Programare funcțională în Haskell 6 : 9 Sintaxă Evaluare Programare funcțională în Haskell 6 : 10 Evaluare Pași în aplicarea funcțiilor Evaluare leneșă: parametri evaluați la cerere, cel mult o dată, eventual parțial, în cazul obiectelor structurate Transferul parametrilor: call by need Funcții nestricte! Ex 1 f (x, y) z = x + x Evaluare: 1 f (2 + 3, 3 + 5) (5 + 8) 2 (2 + 3) + (2 + 3) reutilizăm rezultatul primei evaluări! 4 10 ceilalți parametri nu sunt evaluați Ex 1 frontsum (x:y: zs ) = x + y 2 frontsum [x] = x 3 4 notnil [] = False 5 notnil (_:_) = True 6 7 frontinterval m n 8 notnil xs = frontsum xs 9 otherwise = n 10 where 11 xs = [m.. n] Sintaxă Evaluare Programare funcțională în Haskell 6 : 11 Sintaxă Evaluare Programare funcțională în Haskell 6 : 12 Pași în aplicarea funcțiilor Ordine 1 Pattern matching: evaluarea parametrilor suficient cât să se constate (ne-)potrivirea cu pattern-ul; 2 Evaluarea gărzilor ( ); 3 Evaluarea variabilelor locale, la cerere (where, let). Pași în aplicarea funcțiilor revisited Ex execuția exemplului anterior 1 frontinterval 3 5 evaluare pattern 2?? notnil xs evaluare prima gardă 3?? where necesar xs evaluare where 4?? xs = [3.. 5] 5?? 3:[4.. 5] 6?? notnil (3:[4.. 5]) 7?? True 8 frontsum xs evaluare valoare gardă 9 where 10 xs = 3:[4.. 5] xs deja calculat 11 3:4:[5] 12 frontsum (3:4:[5]) Sintaxă Evaluare Programare funcțională în Haskell 6 : 13 Sintaxă Evaluare Programare funcțională în Haskell 6 : 14

24 Consecințe Evaluarea parțială a structurilor liste, tupluri etc. Listele sunt, implicit, văzute ca fluxuri! Ex 1 ones = 1 : ones 2 3 naturalsfrom n = n : ( naturalsfrom (n + 1) ) 4 naturals1 = naturalsfrom 0 5 naturals2 = 0 : ( zipwith (+) ones naturals2 ) 6 7 evennaturals1 = filter even naturals1 8 evennaturals2 = zipwith (+) naturals1 naturals fibo = 0 : 1 : ( zipwith (+) fibo (tail fibo )) Sfârșitul cursului 6 Elemente esențiale Haskell, diferențe față de Racket pattern matching și list comprehensions evaluare în Haskell Sintaxă Evaluare Programare funcțională în Haskell 6 : 15 Sintaxă Evaluare Programare funcțională în Haskell 6 : 16 Cursul 7: Tipuri în Haskell 26 Tipare Tipare 27 Sinteză de tip Tipare Tipuri în Haskell Sinteză de tip 7 : 1 Tipare Tipuri în Haskell Sinteză de tip 7 : 2 Tipuri Pentru toate valorile (inclusiv funcții) Tipuri ca mulțimi de valori: Bool = {True, False} Natural = {0, 1, 2,...} Char = {'a', 'b', 'c',...} Rolul tipurilor (vezi cursuri anterioare); Tipare statică: etapa de tipare anterioară etapei de evaluare; asocierea fiecărei expresii din program cu un tip; Tipare tare: absența conversiilor implicite de tip; Expresii de: program: 5, 2 + 3, x && (not y) tip: Integer, [Char], Char -> Bool, a Tipuri Exemple de valori Ex 1 5 :: Integer 2 'a ' :: Char 3 (+1) :: Integer -> Integer 4 [1,2,3] :: [ Integer ] -- liste de un singur tip! 5 ( True, " Hello ") :: ( Bool, [ Char ]) 6 etc. Tipurile de bază sunt tipurile elementare din limbaj: Bool, Char, Integer, Int, Float,... Reprezentare uniformă: 1 data Integer = data Char = 'a ' 'b ' 'c '... Tipare Tipuri în Haskell Sinteză de tip 7 : 3 Tipare Tipuri în Haskell Sinteză de tip 7 : 4 Constructori de tip tipuri noi pentru valori sau funcții Funcții de tip, ce îmbogățesc tipurile din limbaj. Ex Constructori de tip predefiniți 1 -- Constructorul de tip functie : -> 2 (-> Bool Bool ) Bool -> Bool 3 (-> Bool ( Bool -> Bool )) Bool -> ( Bool -> Bool ) Constructorul de tip lista : [] 6 ([] Bool ) [ Bool ] 7 ([] [ Bool ]) [[ Bool ]] Constructorul de tip tuplu : (,...,) 10 ((,) Bool Char ) ( Bool, Char ) 11 ((,,) Bool ((,) Char [ Bool ]) Bool ) 12 ( Bool, ( Char, [ Bool ]), Bool ) Constructori de tip Tipurile funcțiilor Constructorul -> este asociativ dreapta: Integer -> Integer -> Integer Integer -> (Integer -> Integer) Ex 1 add6 :: Integer -> Integer -> Integer 2 add6 x y = x + y 3 4 f :: ( Integer -> Integer ) -> Integer 5 f g = (g 3) idd :: a -> a -- functie polimorfica 8 idd x = x -- a: variabila de tip! Tipare Tipuri în Haskell Sinteză de tip 7 : 5 Tipare Tipuri în Haskell Sinteză de tip 7 : 6

25 Constructorul de tip Natural de definire TDA 1 Ex 1 data Natural = Zero 2 Succ Natural 3 deriving ( Show, Eq ) 4 5 unu = Succ Zero 6 doi = Succ unu 7 8 addnat Zero n = n 9 addnat (Succ m) n = Succ ( addnat m n) Constructorul de tip Natural Comentarii Constructor de tip: Natural nular; se confundă cu tipul pe care-l construiește. Constructori de date: Zero: nular Succ: unar Constructorii de date ca funcții, dar utilizabile în pattern matching. 1 Zero :: Natural 2 Succ :: Natural -> Natural Tipare Tipuri în Haskell Sinteză de tip 7 : 7 Tipare Tipuri în Haskell Sinteză de tip 7 : 8 Constructorul de tip Pair de definire TDA 2 Ex 1 data Pair a b = P a b 2 deriving ( Show, Eq ) 3 4 pair1 = P 2 True 5 pair2 = P 1 pair1 6 7 myfst (P x y) = x 8 mysnd (P x y) = y Constructorul de tip Pair Comentarii Constructor de tip: Pair polimorfic, binar; generează un tip în momentul aplicării asupra 2 tipuri. Constructor de date: P, binar: 1 P :: a -> b -> Pair a b Tipare Tipuri în Haskell Sinteză de tip 7 : 9 Tipare Tipuri în Haskell Sinteză de tip 7 : 10 Polimorfism + Polimorfism parametric Manifestarea aceluiași comportament pentru parametri de tipuri diferite. : id, Pair. Sinteză de tip + Polimorfism ad-hoc Manifestarea unor comportamente diferite pentru parametri de tipuri diferite. : ==. mai multe detalii în cursul următor. Tipare Tipuri în Haskell Sinteză de tip 7 : 11 Tipare Tipuri în Haskell Sinteză de tip 7 : 12 Sinteza de tip Definiție + Sinteză de tip type inference Determinarea automată a tipului unei expresii, pe baza unor reguli precise. Adnotările explicite de tip, deși posibile, nenecesare în majoritatea cazurilor Dependentă de: componentele expresiei contextul lexical al expresiei Reprezentarea tipurilor expresii de tip: constante de tip: tipuri de bază; variabile de tip: pot fi legate la orice expresii de tip; aplicații ale constructorilor de tip pe expresii de tip. Proprietăți induse de tipuri + Progres O expresie bine-tipată (căreia i se poate asocia un tip): este o valoare (nu este o aplicare de funcție) sau (este aplicarea unei funcții și) poate fi redusă (vezi β-redex). + Conservare Evaluarea unei expresii bine-tipate produce o expresie bine-tipată de obicei, cu același tip. dacă sinteza de tip pentru expresia E dă tipul t, atunci după reducere, valoarea expresiei E va fi de tipul t. Tipare Tipuri în Haskell Sinteză de tip 7 : 13 Tipare Tipuri în Haskell Sinteză de tip 7 : 14

26 Exemple de sinteză de tip Câteva reguli simplificate de sinteză de tip Exemple de sinteză de tip Transformare de funcție Formă: premisa-1... premisa-m concluzie-1... concluzie-n (nume) Ex l 1 1 f g = (g 3) + 1 Var :: a Expr :: b Funcție: (TLambda) \Var -> Expr :: a -> b Expr1 :: a -> b Expr2 :: a Aplicație: (TApp) (Expr1 Expr2) :: b Expr1 :: Int Expr2 :: Int Operatorul +: (T+) Expr1 + Expr2 :: Int g :: a (g 3) + 1 :: b f :: a -> b (TLambda) (g 3) :: Int 1 :: Int (T+) (g 3) + 1 :: Int b = Int g :: c -> d 3 :: c (TApp) (g 3) :: d a = c -> d, c = Int, d = Int f :: (Int -> Int) -> Int Literali întregi: 0, 1, 2,... :: Int (TInt) Tipare Tipuri în Haskell Sinteză de tip 7 : 15 Tipare Tipuri în Haskell Sinteză de tip 7 : 16 Exemple de sinteză de tip Combinator de punct fix Ex l 2 1 fix f = f ( fix f) f :: a f (fix f) :: b fix :: a -> b (TLambda) f :: c -> d (fix f) :: c (TApp) (f (fix f)) :: d a = c -> d, b = d fix :: e -> g f :: e (TApp) (fix f) :: g a -> b = e -> g, a = e, b = g, c = g fix :: (c -> d) -> b = (g -> g) -> g Exemple de sinteză de tip O funcție ne-tipabilă Ex l 3 1 f x = (x x) x :: a f :: a -> b x :: c -> d (x x) :: b (x x) :: d x :: c (TLambda) (TApp) Ecuația c -> d = c nu are soluție ( tipuri recursive) funcția nu poate fi tipată. Tipare Tipuri în Haskell Sinteză de tip 7 : 17 Tipare Tipuri în Haskell Sinteză de tip 7 : 18 Unificare Definiție Unificare Condiții la baza sintezei de tip: unificarea legarea variabilelor în timpul procesului de sinteză, în scopul unificării diverselor formule de tip elaborate. + Unificare Procesul de identificare a valorilor variabilelor din 2 sau mai multe formule, astfel încât substituirea variabilelor prin valorile asociate să conducă la coincidența formulelor. + Substituție O substituție este o mulțime de legări variabilă - valoare. O variabilă de tip a unifică cu o expresie de tip E doar dacă: E = a sau E a și E nu conține a (occurrence check). : a unifică cu b -> c dar nu cu a -> b. 2 constante de tip unifică doar dacă sunt egale; 2 aplicații de tip unifică doar dacă implică același constructor de tip și argumente ce unifică recursiv. Tipare Tipuri în Haskell Sinteză de tip 7 : 19 Tipare Tipuri în Haskell Sinteză de tip 7 : 20 Unificare Ex Pentru a unifica expresiile de tip: t1 = (a, [b]) t2 = (Int, c) putem avea substituțiile (variante): S1 = {a Int, b Int, c [Int]} S2 = {a Int, c [b] } Forme comune pentru S1 respectiv S2: t1/s1 = t2/s1 = (Int, [Int]) t1/s2 = t2/s2 = (Int, [b]) + Most general unifier MGU Cea mai generală substituție sub care formulele unifică. : S2. Tip principal și definiție Ex Tipurile: t1 = (a, [b]), t2 = (Int, c) MGU: S = {a Int, c [b]} Tipuri mai particulare (instanțe): (Integer, [Integer]), (Integer, [Char]), etc Funcția: \x -> x Tipuri corecte: Int -> Int, Bool -> Bool, a -> a + Tip principal al unei expresii Cel mai general tip care descrie complet natura expresiei. Se obține prin utilizarea MGU. Tipare Tipuri în Haskell Sinteză de tip 7 : 21 Tipare Tipuri în Haskell Sinteză de tip 7 : 22

27 Sfârșitul cursului 7 Elemente esențiale Cursul 8: Clase în Haskell tipuri în Haskell expresii de tip și construcție de tipuri sinteză de tip, unificare 28 Motivație 29 Clase Haskell 30 Aplicații ale claselor Tipare Tipuri în Haskell Sinteză de tip 7 : 23 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 1 Motivație Motivație Ex Să se definească operația show, capabilă să producă reprezentarea oricărui obiect ca șir de caractere. Comportamentul este specific fiecărui tip (polimorfism ad-hoc). 1 show 3 "3" 2 show True " True " 3 show 'a ' " 'a '" 4 show "a" " \" a \" " Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 2 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 3 Motivație Varianta 1 Funcții dedicate fiecărui tip Motivație Varianta 1 Funcții dedicate discuție 1 showbool True = " True " 2 showbool False = " False " 3 4 showchar c = " '" ++ [c] ++ " '" 5 6 showstring s = " \" " ++ s ++ " \" " Dorim să implementăm funcția shownewline, care adaugă caracterul linie nouă la reprezentarea ca șir: 1 shownewline x = ( show...? x) ++ "\n" shownewline nu poate fi polimorfică avem nevoie de shownewlinebool, shownewlinechar etc. Alternativ, trimiterea ca parametru a funcției show* corespunzătoare: 1 shownewline sh x = ( sh x) ++ "\n" 2 shownewlinebool = shownewline showbool Prea general, fiind posibilă trimiterea unei funcții cu alt comportament, în măsura în care respectă tipul. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 4 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 5 Motivație Varianta 2 Supraîncărcarea funcției funcție polimorfică ad-hoc Definirea mulțimii Show, a tipurilor care expun show 1 class Show a where 2 show :: a -> String Precizarea apartenenței unui tip la această mulțime (instanța aderă la clasă) 1 instance Show Bool where 2 show True = " True " 3 show False = " False " 4 5 instance Show Char where 6 show c = " '" ++ [c] ++ " '" Funcția shownewline polimorfică! 1 shownewline x = show x ++ "\n" Motivație Varianta 2 Supraîncărcare discuție (1) Ce tip au funcțiile show, respectiv shownewline? 1 show :: Show a => a -> String 2 shownewline :: Show a => a -> String Semnificație: Dacă tipul a este membru al clasei Show, (i.e. funcția show este definită pe valorile tipului a), atunci funcțiile au tipul a -> String. Context: constrângeri suplimentare asupra variabilelor din tipul funcției: Show a => }{{} context Propagarea constrângerilor din contextul lui show către contextul lui shownewline. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 6 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 7

28 Motivație Varianta 2 Supraîncărcare discuție (2) Contexte utilizabile și la instanțiere: 1 instance (Show a, Show b) => Show (a, b) where 2 show (x, y) = "(" ++ ( show x) 3 ++ ", " ++ ( show y) 4 ++ ")" Clase Haskell Tipul pereche reprezentabil ca șir doar dacă tipurile celor doi membri respectă aceeași proprietate (dată de contextul Show). Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 8 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 9 Clase Haskell vs. Clase în POO Haskell Tipurile sunt mulțimi de valori; Clasele sunt mulțimi de tipuri; tipurile aderă la clase; Instanțierea claselor de către tipuri pentru ca funcțiile definite în clasă să fie disponibile pentru valorile tipului; Operațiile specifice clasei sunt implementate în cadrul declarației de instanțiere. POO (e.g. Java) Clasele sunt mulțimi de obiecte (instanțe); Interfețele sunt mulțimi de clase; clasele implementează interfețe; Implementarea interfețelor de către clase pentru ca funcțiile definite în interfață să fie disponibile pentru instanțele clasei; Operațiile specifice interfeței sunt implementate în cadrul definiției clasei. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 10 Clase și instanțe Definiții + Clasa Mulțime de tipuri ce pot supraîncarca operațiile specifice clasei. Reprezintă o modalitate structurată de control asupra polimorfismului ad-hoc. : clasa Show, cu operația show. + Instanță a unei clase Tip care supraîncarcă operațiile clasei. : tipul Bool în raport cu clasa Show. clasa definește funcțiile suportate; clasa se definește peste o variabilă care stă pentru constructorul unui tip; instanța definește implementarea funcțiilor. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 11 Clase predefinite Show, Eq Clase predefinite Ord 1 class Show a where 2 show :: a -> String 3 4 class Eq a where 5 (==), (/=) :: a -> a -> Bool 6 x /= y = not (x == y) 7 x == y = not (x /= y) Posibilitatea scrierii de definiții implicite (v. liniile 6 7). Necesitatea suprascrierii cel puțin unuia din cei 2 operatori ai clasei Eq pentru instanțierea corectă. 1 class Eq a => Ord a where 2 ( <), ( <=), ( >=), ( >) :: a -> a -> Bool 3... contextele utilzabile și la definirea unei clase. clasa Ord moștenește clasa Eq, cu preluarea operațiilor din clasa moștenită. este necesară aderarea la clasa Eq în momentul instanțierii clasei Ord. este suficientă supradefinirea lui (<=) la instanțiere. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 12 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 13 Utilizarea claselor predefinite Pentru tipuri de date noi Anumite tipuri de date (definite folosind Data) pot beneficia de implementarea automată a anumitor funcționalități, oferite de tipurile predefinite în Prelude: Eq, Read, Show, Ord, Enum, Ix, Bounded. 1 data Alarm = Soft Loud Deafening 2 deriving (Eq, Ord, Show ) Aplicații ale claselor variabilele de tipul Alarm pot fi comparate, testate la egalitate, și afișate. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 14 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 15

29 invert Problemă Ex invert Fie constructorii de tip: 1 data Pair a = P a a 2 3 data NestedList a 4 = Atom a 5 List [ NestedList a] Să se definească operația invert, aplicabilă pe valori de tipuri diferite, inclusiv Pair a și NestedList a, comportamentul fiind specific fiecărui tip. invert Implementare 1 class Invertible a where 2 invert :: a -> a 3 invert = id 4 5 instance Invertible ( Pair a) where 6 invert (P x y) = P y x 7 8 instance Invertible a => Invertible ( NestedList a) where 9 invert (Atom x) = Atom ( invert x) 10 invert ( List x) = List $ reverse $ map invert x instance Invertible a => Invertible [a] where 13 invert lst = reverse $ map invert lst 14 instance Invertible Int... Necesitatea contextului, în cazul tipurilor [a] și NestedList a, pentru inversarea elementelor înselor. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 16 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 17 contents Problemă contents Varianta 1a Ex contents Să se definească operația contents, aplicabilă pe obiecte structurate, inclusiv pe cele aparținând tipurilor Pair a și NestedList a, care întoarce elementele din componență, sub forma unei liste Haskell. 1 class Container a where 2 contents :: a -> [...?] a este tipul unui container, e.g. NestedList b Elementele listei întoarse sunt cele din container Cum precizăm tipul acestora (b)? 1 class Container a where 2 contents :: a -> [a] 3 4 instance Container [x] where 5 contents = id Testăm pentru contents [1,2,3]: Conform definiției clasei: 1 contents :: Container [a] => [a] -> [[ a ]] Conform supraîncărcării funcției (id): 1 contents :: Container [a] => [a] -> [a] Ecuația [a] = [[a]] nu are soluție eroare. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 18 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 19 contents Varianta 1b 1 class Container a where 2 contents :: a -> [b] 3 4 instance Container [x] where 5 contents = id Testăm pentru contents [1,2,3]: Conform definiției clasei: 1 contents :: Container [a] => [a] -> [b] Conform supraîncărcării funcției (id): 1 contents :: Container [a] => [a] -> [a] Ecuația [a] = [b] are soluție pentru a = b, dar tipul [a] -> [a] insuficient de general (prea specific) în raport cu [a] -> [b] eroare! contents Varianta 2 Soluție clasa primește constructorul de tip, și nu tipul container propriu-zis (rezultat după aplicarea constructorului) includem tipul conținut de container în expresia de tip a funcției contents: 1 class Container t where 2 contents :: t a -> [a] 3 4 instance Container Pair where 5 contents (P x y) = [x, y] instance Container NestedList where 8 contents ( Atom x) = [x] 9 contents ( Seq x) = concatmap contents x 11 instance Container [] where contents = id Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 20 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 21 Contexte Câteva exemple Contexte Observații 1 fun1 :: Eq a => a -> a -> a -> a 2 fun1 x y z = if x == y then x else z 3 4 fun2 :: (Container a, Invertible (a b), 5 Eq (a b)) => (a b) -> (a b) -> [b] 6 fun2 x y = if ( invert x) == ( invert y) 7 then contents x 8 else contents y 9 10 fun3 :: Invertible a => [a] -> [a] -> [a] 11 fun3 x y = ( invert x) ++ ( invert y) fun4 :: Ord a => a -> a -> a -> a 14 fun4 x y z = if x == y then z else 15 if x > y then x else y Simplificarea contextului lui fun3, de la Invertible [a] la Invertible a. Simplificarea contextului lui fun4, de la (Eq a, Ord a) la Ord a, din moment ce clasa Ord este derivată din clasa Eq. Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 22 Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 23

30 Sfârșitul cursului 8 Elemente esențiale Cursul 9: Clase Haskell polimorfism ad-hoc, instanțiere de clase derivare a unei clase, context 31 Caracteristici ale paradigmelor de programare 32 Variabile și valori de prim rang 33 Legarea variabilelor 34 Modul de evaluare Motivatie Clase Haskell Aplicații clase Clase în Haskell 8 : 24 9 : 1 Paradigma de programare Impact în scrierea unui program Caracteristici ale paradigmelor de programare Paradigma de programare un mod de a: aborda rezolvarea unei probleme printr-un program; structura un program; reprezenta datele dintr-un program; implementa diversele aspecte dintr-un program (cum prelucrăm datele); Un limbaj poate include caracteristici dintr-una sau mai multe paradigme; în general există o paradigmă dominantă; Atenție! Paradigma nu are legătură cu sintaxa limbajului! 9 : 2 9 : 3 Paradigma de programare Legătura cu mașina de calcul paradigmele sunt legate teoretic de o mașină de calcul în care prelucrările caracteristice paradigmei se fac la nivelul mașinii; dar putem executa orice program, scris în orice paradigmă, pe orice mașină. Paradigma de programare Ce o definește În principal, paradigma este definită de elementele principale din sintaxa limbajului e.g. existența și semnificația variabilelor, semnificația operatorilor asupra datelor, modul de construire a programului; modul de construire al tipurilor variabilelor; modul de definire și statutul operatorilor elementele principale de prelucrare a datelor din program (e.g. obiecte, funcții, predicate); legarea variabilelor, efecte laterale, transparență referențială, modul de transfer al parametrilor pentru elementele de prelucrare a datelor. 9 : 4 9 : 5 Variabile Nume date unor valori Variabile și valori de prim rang în majoritatea limbajelor există variabile, ca NUME date unor valori rezultatul anumitor procesări (calcule, inferențe, substituții); variabilele pot fi o referință pentru un spațiu de memorie sau pentru un rezultat abstract; elementele de procesare a datelor pot sau nu să fie valori de prim rang (să poată fi asociate cu variabile). 9 : 6 9 : 7

31 Funcții ca valori de prim rang Definiție Funcții ca valori de prim rang: Compose C + Valoare de prim rang O valoare care poate fi: creată dinamic stocată într-o variabilă trimisă ca parametru unei funcții întoarsă dintr-o funcție 1 int compose ( int (* f)( int ), int (* g)( int ), int x) { 2 return (* f) ((* g)(x)); 3 } în C, funcțiile nu sunt valori de prim rang; pot scrie o funcție care compune două funcții pe o anumită valoare (ca mai sus) Ex Să se scrie funcția compose, ce primește ca parametri alte 2 funcții, f și g, și întoarce funcția obținută prin compunerea lor, f g. pot întoarce pointer la o funcție existentă dar nu pot crea o referință (pointer) la o funcție nouă, care să fie folosit apoi ca o funcție obișnuită 9 : 8 9 : 9 Funcții ca valori de prim rang: Java 1 abstract class Func <U, V> { 2 public abstract V apply (U u); 3 4 public <T> Func <T, V> compose ( final Func <T, U> f) { 5 final Func <U, V> outer = this ; 6 7 return new Func <T, V>() { 8 public V apply (T t) { 9 return outer. apply (f. apply (t)); 10 } 11 }; 12 } 13 } În Java, funcțiile nu sunt valori de prim rang pot crea rezultatul dar este complicat, și rezultatul nu este o funcție obișnuită, ci un obiect. 9 : 10 Funcții ca valori de prim rang: Compose Racket & Haskell Racket: 1 ( define compose 2 ( lambda (f g ) 3 ( lambda (x) 4 ( f ( g x ) ) ) ) ) Haskell: 1 compose = (.) În Racket și Haskell, funcțiile sunt valori de prim rang. mai mult, ele pot fi aplicate parțial, și putem avea funcționale funcții care iau alte funcții ca parametru. 9 : 11 Legarea variabilelor Impactul asupra programului Legarea variabilelor două posibilități esențiale: un nume este întotdeauna legat (într-un anumit context) la aceeași valoare / la același calcul numele stă pentru un calcul; legare statică. un nume poate fi legat la mai multe valori pe parcursul execuției numele stă pentru un spațiu de stocare fiecare element de stocare fiind identificat printr-un nume; legare dinamică. 9 : 12 9 : 13 Efecte laterale (side effects) Definiție Efecte laterale (side effects) Consecințe Ex În expresia 2 + (i = 3), subexpresia (i = 3): produce valoarea 3, conducând la rezultatul 5 al întregii expresii; are efectul lateral de inițializare a lui i cu 3. + Efect lateral Pe lângă valoarea pe care o produce, o expresie sau o funcție poate modifica starea globală. Inerente în situațiile în care programul interacționează cu exteriorul I/O! Ex În expresia x x, cu x = 0: evaluarea stânga dreapta produce = 0 evaluarea dreapta stânga produce = 2 dacă înlocuim cele două subexpresii cu valorile pe care le reprezintă, obținem x + (x + 1) = = 1 Importanța ordinii de evaluare! Dependențe implicite, puțin lizibile și posibile generatoare de bug-uri. 9 : 14 9 : 15

32 Efecte laterale (side effects) Consecințe asupra programării leneșe În prezența efectelor laterale, programarea leneșă devine foarte dificilă; Efectele laterale pot fi gestionate corect numai atunci când secvența evaluării este garantată garanție inexistentă în programarea leneșă. nu știm când anume va fi nevoie de valoarea unei expresii. 9 : 16 Transparență referențială Pentru expresii + Transparență referențială Confundarea unui obiect ( valoare ) cu referința la acesta. + Expresie transparentă referențial: posedă o unică valoare, cu care poate fi substituită, păstrând semnificația programului. Ex x x nu, valoarea depinde de ordinea de evaluare x = x + 1 nu, două evaluări consecutive vor produce rezultate diferite x ar putea fi, în funcție de statutul lui x (globală, statică etc.) 9 : 17 Transparență referențială Pentru funcții Transparență referențială Avantaje + Funcție transparentă referențial: rezultatul întors depinde exclusiv de parametri. Lizibilitatea codului; Ex int transparent ( int x) { } return x + 1; int g = 0; opaque(3) - opaque(3)!= 0! Funcții transparente: log, sin etc. Funcții opace: time, read etc. int opaque ( int x) { } return x + ++ g; Demonstrarea formală a corectitudinii programului mai ușoară datorită lipsei stării; Optimizare prin reordonarea instrucțiunilor de către compilator și prin caching; Paralelizare masivă, prin eliminarea modificărilor concurente. 9 : 18 9 : 19 Evaluare Mod de evaluare și execuția programelor modul de evaluare al expresiilor dictează modul în care este executat programul; Modul de evaluare este legat de funcționarea mașinii teoretice corespunzătoare paradigmei; ne interesează în special ordinea în care expresiile se evaluează; în final, întregul program se evaluează la o valoare; important în modul de evaluare este modul de evaluare / transfer a parametrilor. 9 : 20 9 : 21 Transferul parametrilor Call by value În evaluarea aplicativă Evaluare aplicativă parametrii sunt evaluați înainte de evaluarea corpului funcției. Call by value Call by sharing Call by reference Evaluare normală funcția este evaluată fără ca parametrii să fie evaluați înainte. Call by name Call by need Ex 1 // C sau Java 2 void f( int x) { 3 x = 3; 4 } 1 // C 2 void g( struct str s) { 3 s. member = 3; 4 } Efectul liniilor 3 este invizibil la apelant. Evaluarea parametrilor înaintea aplicației funcției și transferul unei copii a valorii acestuia Modificări locale invizibile la apelant C, C++, tipurile primitive Java 9 : 22 9 : 23

33 Call by sharing În evaluarea aplicativă Call by reference În evaluarea aplicativă Variantă a call by value; Trimiterea unei referințe la obiect; Trimiterea unei referințe la obiect; Modificări locale asupra referinței invizibile la apelant; Modificări locale asupra obiectului referit vizibile la apelant; Modificări locale asupra referinței și obiectului referit vizibile la apelant; Folosirea & în C++. Racket, Java; 9 : 24 9 : 25 Call by name În evaluarea normală Call by need În evaluarea normală Argumente neevaluate în momentul aplicării funcției substituție directă (textuală) în corpul funcției; Evaluare parametrilor la cerere, de fiecare dată când este nevoie de valoarea acestora; în calculul λ. Variantă a call by name; Evaluarea unui parametru doar la prima utilizare a acestuia; Memorarea valorii unui parametru deja evaluat și returnarea acesteia în cazul utilizării repetate a aceluiași parametru (datorită transparenței referențiale, o aceeași expresie are întotdeauna aceeași valoare) memoizare; în Haskell. 9 : 26 9 : 27 Sfârșitul cursului 9 Elemente esențiale caracteristicile unei paradigme; variabile, funcții ca valori de prim rang; legare, efecte laterale, transparență referențială; evaluare și moduri de transfer al parametrilor. Cursul 10: Prolog și logica cu predicate de ordinul I 35 în Prolog 9 : 28 în Prolog Prolog și logica cu predicate de ordinul I 10 : 1 Prolog Limbaj de programare logică introdus în anii 1970 ; în Prolog programul mulțime de propoziții logice în LPOI; mediul de execuție = demonstrator de teoreme care spune: dacă un fapt este adevărat sau fals; în ce condiții este un fapt adevărat. Resursă Prolog pe Wikibooks: [ în Prolog Prolog și logica cu predicate de ordinul I 10 : 2 în Prolog Prolog și logica cu predicate de ordinul I 10 : 3

34 Prolog Caracteristici fundamentare teoretică a procesului de raționament; Sfârșitul cursului 10 Elemente esențiale în Prolog motor de raționament ca unic mod de execuție; modalități limitate de control al execuției. căutare automată a valorilor pentru variabilele nelegate (dacă este necesar); posibilitatea demonstrațiilor și deducțiilor simbolice. în Prolog Prolog și logica cu predicate de ordinul I 10 : 4 în Prolog Prolog și logica cu predicate de ordinul I 10 : 5 Cursul 11: Logică 36 Logica propozițională 37 Evaluarea valorii de adevăr 38 Logica cu predicate de ordinul întâi 39 LPOI Semantică 40 Forme normale 41 Unificare și rezoluție formalism simbolic pentru reprezentarea faptelor și raționament. se bazează pe ideea de valoare de adevăr e.g. Adevărat sau Fals. permite realizarea de argumente (argumentare) și demonstrații deducție, inducție, rezoluție, etc. 11 : 1 11 : 2 Logica propozițională Context și elemente principale Logica propozițională Cadru pentru: descrierea proprietăților obiectelor, prin intermediul unui limbaj, cu o semantică asociată; deducerea de noi proprietăți, pe baza celor existente. Expresia din limbaj: propoziția, corespunzătoare unei afirmații, ce poate fi adevărată sau falsă. : Afară este frumos. Accepții asupra unei propoziții: secvența de simboluri utilizate sau înțelesul propriu-zis al acesteia, într-o interpretare. 11 : 3 11 : 4 Logica propozițională Sintaxă Logica propozițională Semantică 2 categorii de propoziții simple fapte atomice: Afară este frumos. compuse relații între propoziții mai simple: Telefonul sună și câinele latră. Propoziții simple: p,q,r,... Negații: α Conjuncții: (α β) Disjuncții: (α β) Implicații: (α β) Echivalențe: (α β) Scop: dezvoltarea unor mecanisme de prelucrare, aplicabile independent de valoarea de adevăr a propozițiilor într-o situație particulară. Accent pe relațiile între propozițiile compuse și cele constituente. Pentru explicitarea propozițiilor utilizarea conceptului de interpretare. 11 : 5 11 : 6

35 Semantică Interpretare Semantică Propoziții compuse (1) + Interpretare Mulțime de asocieri între fiecare propoziție simplă din limbaj și o valoare de adevăr. Ex Interpretarea I: p I = false q I = true r I = false Interpretarea J: p J = true q J = true r J = true cum știu dacă p este adevărat sau fals? Pot ști dacă știu interpretarea p este doar un nume pe care îl dau unei propoziții concrete. 11 : 7 Sub o interpretare fixată dependența valorii de adevăr a unei propoziții compuse de valorile de adevăr ale celor constituente { true dacă Negație: ( α) I α I = false = false altfel Conjuncție: { true dacă (α β) I α I = true și β I = true = false altfel Disjuncție: { false dacă α I = false și β I = false (α β) I = true altfel 11 : 8 Semantică Propoziții compuse (2) Implicație: { false dacă (α β) I α I = true și β I = false = true altfel Echivalență: { true dacă (α β) I α β β α = false altfel Evaluarea valorii de adevăr 11 : 9 11 : 10 Ex Evaluare Cum determinăm valoarea de adevăr? + Evaluare Determinarea valorii de adevăr a unei propoziții, sub o interpretare, prin aplicarea regulilor semantice anterioare. Interpretarea I: p I = false q I = true r I = false Propoziția: φ = (p q) (q r) φ I = (false true) (true false) = false false = false 11 : 11 Valoarea de adevăr în afara interpretării Satisfiabilitate, Valididate, Nesatisfiabilitate + Satisfiabilitate Proprietatea unei propoziții care este adevărată sub cel puțin o interpretare. Acea interpretare satisface propoziția. + Validitate Proprietatea unei propoziții care este adevărată în toate interpretările. Propoziția se mai numește tautologie. Ex Propoziția p p este validă. + Nesatisfiabilitate Proprietatea unei propoziții care este falsă în toate interpretările. Propoziția se mai numește contradicție. Ex Propoziția p p este nesatisfiabilă. 11 : 12 Valoarea de adevăr în afara interpretării Metoda tabelei de adevăr Derivabilitate Definiție Ex Metoda tabelei de adevăr p q r (p q) (q r) true true true true true true false true true false true true true false false true false true true true false true false false false false true false false false false false Propoziția (p q) (q r) este satisfiabilă. Ex + Derivabilitate logică Proprietatea unei propoziții de a reprezenta consecința logică a unei mulțimi de alte propoziții, numite premise. Mulțimea de propoziții derivă propoziția φ ( = φ) dacă și numai dacă orice interpretare care satisface toate propozițiile din satisface și φ. {p} = p q {p,q} = p q {p} = p q {p,p q} = q 11 : : 14

36 Derivabilitate Verificare Derivabilitate Formulări echivalente Ex Verificabilă prin metoda tabelei de adevăr: toate intrările pentru care premisele sunt adevărate trebuie să inducă adevărul concluziei. Demonstrăm că {p,p q} = q. p q p q true true true true false false false true true false false true Singura intrare în care ambele premise, p și p q, sunt adevărate, precizează și adevărul concluziei, q. {φ 1,...,φ n } = φ sau Propoziția φ 1... φ n φ este validă sau Propoziția φ 1... φ n φ este nesatisfiabilă 11 : : 16 Inferența Motivație Creșterea exponențială a numărului de interpretări în raport cu numărul de propoziții simple. De aici, diminuarea valorii practice a metodelor semantice, precum cea a tabelei de adevăr. Alternativ, metode sintactice, care manipulează doar reprezentarea simbolică. Inferență Derivare mecanică demers de calcul, în scopul verificării derivabilității logice. folosind metodele de inferență, putem construi o mașină de calcul. 11 : 17 Inferența Definiție + Inferența Derivarea mecanică a concluziilor unui set de premise. + Regulă de inferență Procedură de calcul capabilă să deriveze concluziile unui set de premise. Derivabilitatea mecanică a concluziei φ din mulțimea de premise, utilizând regula de inferență inf, se notează inf φ. Ex Modus Ponens (MP) : Ex Modus Tollens : α β β α α β α β 11 : 18 Inferența Proprietăți ale regulilor + Consistență (soundness) Regula de inferență determină numai propoziții care sunt, într-adevăr, consecințe logice ale premiselor. inf φ = φ. + Completitudine (completeness) Regula de inferență determină toate consecințele logice ale premiselor. = φ inf φ. Logica cu predicate de ordinul întâi Ideal, ambele proprietăți nici în plus, nici în minus = φ inf φ Incompletitudinea regulii Modus Ponens, din imposibilitatea scrierii oricărei propoziții ca implicație. 11 : : 20 First Order Predicate Logic (FOL sau FOPL) Context Sintaxă Simboluri utilizate Extensie a logicii propoziționale, cu explicitarea: obiectelor din universul problemei; relațiilor dintre acestea. Logica propozițională: p: Andrei este prieten cu Bogdan. q: Bogdan este prieten cu Andrei. p q pot ști doar din interpretare. Opacitate în raport cu obiectele și relațiile referite. FOPL: Generalizare: prieten(x,y): x este prieten cu y. x. y.(prieten(x,y) prieten(y,x)) Aplicare pe cazuri particulare. Transparență în raport cu obiectele și relațiile referite. 11 : 21 + Constante obiecte particulare din universul discursului: c, d, andrei, bogdan,... + Variabile obiecte generice: x, y,... + Simboluri funcționale succesor, +, abs... + Simboluri relaționale (predicate) relații n-are peste obiectele din universul discursului: prieten = {(andrei,bogdan),(bogdan,andrei),...}, impar = {1,3,...},... + Conectori logici,,,, + Cuantificatori, 11 : 22

37 Sintaxă Termeni Sintaxă Atomi + Termeni (obiecte): Constante; + Atomi (relații): atomul p(t 1,...,t n ), unde p este un predicat n-ar și t 1,...,t n sunt termeni. Variabile; Aplicații de funcții: f (t 1,...,t n ), unde f este un simbol funcțional n-ar și t 1,...,t n sunt termeni. Ex Exemple succesor(4): succesorul lui 4, și anume 5. +(2,x): aplicația funcției de adunare asupra numerelor 2 și x, și, totodată, suma lor. Ex Exemple impar(3) varsta(ion,20) = (+(2,3),5) 11 : : 24 Sintaxă Propoziții Sintaxă + Propoziții (fapte) dacă x variabilă, A atom, și α și β propoziții, atunci o propoziție are forma: Fals, Adevărat:, Atomi: A Negații: α Conectori: α β, α β,... Cuantificări: x.α, x.α Ex Sora Ioanei are un prieten deștept termen {}}{ X.prieten( }{{} X,sora( ioana) ) destept(x ) }{{}}{{} } termen {{ termen } atom/propoziție } atom/propoziție {{ } propoziție 11 : : 26 Semantică Interpretare + Interpretarea constă din: Un domeniu nevid, D, de concepte (obiecte) LPOI Semantică Pentru fiecare constantă c, un element c I D Pentru fiecare simbol funcțional, n-ar f, o funcție f I : D n D Pentru fiecare predicat n-ar p, o funcție p I : D n {false,true}. 11 : : 28 Semantică Elemente Atom: (p(t 1,...,t n )) I = p I (t I 1,...,tI n) Negație, conectori, implicații: v. logica propozițională Cuantificare { universală: false dacă d D. α ( x.α) I I = [d/x] = false true altfel Cuantificare { existențială: true dacă d D. α ( x.α) I I = [d/x] = true false altfel Semantică Cuantificatori Ex Exemple cu cuantificatori 1 Vrabia mălai visează. x.(vrabie(x) viseaza(x,malai)) 2 Unele vrăbii visează mălai. x.(vrabie(x) viseaza(x,malai)) 3 Nu toate vrăbiile visează mălai. x.(vrabie(x) viseaza(x,malai)) 4 Nicio vrabie nu visează mălai. x.(vrabie(x) viseaza(x,malai)) 5 Numai vrăbiile visează mălai. x.(viseaza(x,malai) vrabie(x)) 11 : : 30

38 Cuantificatori Greșeli frecvente Cuantificatori Proprietăți x.(vrabie(x) viseaza(x,malai)) corect: Toate vrăbiile visează mălai. x.(vrabie(x) viseaza(x,malai)) greșit: Toți sunt vrăbii și toți visează mălai. x.(vrabie(x) viseaza(x,malai)) corect: Unele vrăbii visează mălai. x.(vrabie(x) viseaza(x,malai)) greșit: probabil nu are semnificația pe care o intenționăm. Este adevărată și dacă luăm un x care nu este vrabie (fals implică orice). 11 : 31 Necomutativitate: x. y.viseaza(x,y) Toți visează la ceva anume. x. y.viseaza(x,y) Există cineva care visează la orice. Dualitate: ( x.α) x. α ( x.α) x. α 11 : 32 Aspecte legate de propoziții Analoage logicii propoziționale Satisfiabilitate. Validitate. Derivabilitate. Forme normale Inferență. 11 : : 34 Forme normale Definiții + Literal Atom sau negația unui atom. Ex prieten(x,y), prieten(x,y). + Clauză Mulțime de literali dintr-o expresie clauzală. Ex {prieten(x,y), doctor(x)}. + Forma normală conjunctivă FNC Reprezentare ca mulțime de clauze, cu semnificație conjunctivă. + Forma normală implicativă FNI Reprezentare ca mulțime de clauze cu clauzele în forma grupată { A 1,..., A m,b 1,...,B n }, (A 1... A m ) (B 1... B n ) Forme normale Clauze Horn + Clauză Horn Clauză în care cel mult un literal este în formă pozitivă: { A 1,..., A n,a}, corespunzătoare implicației A 1... A n A. Ex Transformarea propoziției x.vrabie(x) ciocarlie(x) pasare(x) în formă normală, utilizând clauze Horn: FNC: { vrabie(x),pasare(x)},{ ciocarlie(x),pasare(x)} 11 : : 36 Conversia propozițiilor în FNC (1) Eliminare implicații, împingere negații, redenumiri Conversia propozițiilor în FNC (2) Skolemizare 1 Eliminarea implicațiilor ( ) 2 Împingerea negațiilor până în fața atomilor ( ) 3 Redenumirea variabilelor cuantificate pentru obținerea unicității de nume (R): x.p(x) x.q(x) x.r(x) x.p(x) y.q(y) z.r(z) 4 Deplasarea cuantificatorilor la începutul expresiei, conservându-le ordinea (forma normală prenex) (P): x.p(x) y.q(y) z.r(z) x. y. z.(p(x) q(y) r(z)) 5 Eliminarea cuantificatorilor existențiali (skolemizare) (S): Dacă nu este precedat de cuantificatori universali: înlocuirea aparițiilor variabilei cuantificate printr-o constantă (bine aleasă): x.p(x) p(c x ) Dacă este precedat de cuantificatori universali: înlocuirea aparițiilor variabilei cuantificate prin aplicația unei funcții unice asupra variabilelor anterior cuantificate universal: x. y. z.(p(x) q(y) r(z)) x. y.(p(x) q(y) r(f z(x,y))) 11 : : 38

39 Conversia propozițiilor în FNC (3) Cuantificatori universali, Distribuire, Clauze 6 Eliminarea cuantificatorilor universali, considerați, acum, impliciți ( ): x. y.(p(x) q(y) r(f z (x,y))) p(x) q(y) r(f z (x,y)) 7 Distribuirea lui față de ( / ): α (β γ) (α β) (α γ) 8 Transformarea expresiilor în clauze (C). Conversia propozițiilor în FNC Ex Cine rezolvă toate laboratoarele este apreciat de cineva. x.( y.(lab(y) rezolva(x,y)) y.apreciaza(y,x)) x.( y.( lab(y) rezolva(x,y)) y.apreciaza(y,x)) x.( y. ( lab(y) rezolva(x,y)) y.apreciaza(y,x)) x.( y.(lab(y) rezolva(x,y)) y.apreciaza(y,x)) R x.( y.(lab(y) rezolva(x,y)) z.apreciaza(z,x)) P x. y. z.((lab(y) rezolva(x,y)) apreciaza(z,x)) S x.((lab(f y (x)) rezolva(x,f y (x))) apreciaza(f z (x),x)) (lab(f y (x)) rezolva(x,f y (x))) apreciaza(f z (x),x) / (lab(f y (x)) apr(f z (x),x)) ( rez(x,f y (x)) apr(f z (x),x)) C {lab(f y (x)),apr(f z (x),x)},{ rez(x,f y (x)),apr(f z (x),x)} 11 : : 40 Rezoluție O regulă de inferență completă și consistentă Regulă de inferență foarte puternică. Unificare și rezoluție Baza unui demonstrator de teoreme consistent și complet. Spațiul de căutare mai mic decât în alte sisteme. Se bazează pe lucrul cu propoziții în forma clauzală (clauze): propoziție = mulțime de clauze (semnificație conjunctivă) clauză = mulțime de literali (semnificație disjunctivă) literal = atom sau atom negat atom = propoziție simplă 11 : : 42 Rezoluție Principiu de bază pasul de rezoluție Ideea (în LP): {p q} { p r} {q,r} Anularea lui p p falsă p adevărată r adevărată p adevărată q adevărată p p Cel puțin una dintre q și r adevărată (q r) Forma generală a pasului de rezoluție: {p 1,...,r,...,p m } {q 1,..., r,...,q n } {p 1,...,p m,q 1,...,q n } Rezoluție Cazuri speciale Clauza vidă indicator de contradicție între premise { p} {p} {} = /0 Mai mult de 2 rezolvenți posibili se alege doar unul: {p,q} { p, q} {p, p} sau {q, q} 11 : : 44 Rezoluție Demonstrare Rezoluție în LP Demonstrarea nesatisfiabilității derivarea clauzei vide. Demonstrarea derivabilității concluziei φ din premisele φ 1,...,φ n demonstrarea nesatisfiabilității propoziției φ 1... φ n φ. Demonstrarea validității propoziției φ demonstrarea nesatisfiabilității propoziției φ. Ex Demonstrăm că {p q,q r} p r, i.e. mulțimea {p q,q r, (p r)} conține o contradicție. 1. { p,q} Premisă 2. { q,r} Premisă 3. {p} Concluzie negată 4. { r} Concluzie negată 5. {q} Rezoluție 1, 3 6. {r} Rezoluție 2, 5 7. {} Rezoluție 4, 6 clauza vidă 11 : : 46

40 Rezoluție Consistență și completitudine T Teorema Rezoluției: Rezoluția propozițională este consistentă și completă, i.e. = φ rez φ. Terminare garantată a procedurii de aplicare a rezoluției: număr finit de clauze număr finit de concluzii. 11 : 47 Unificare Utilizată pentru rezoluția în LPOI vezi și sinteza de tip în Haskell cum știm dacă folosind ipoteza om(marcel) și propoziția om(x) are_inima(x) putem demonstra că are_inima(marcel) unificând om(marcel) și om(x). reguli: o propoziție unifică cu o propoziție de aceeași formă două predicate unifică dacă au același nume și parametri care unifică (om cu om, x cu Marcel) o constantă unifică cu o constantă cu același nume o variabilă unifică cu un termen ce nu conține variabila (x cu Marcel) 11 : 48 Unificare Observații Unificare Rolul în rezoluție Problemă NP-completă; Posibile legări ciclice; : prieten(x,coleg_banca(x)) și prieten(coleg_banca(y),y) MGU: S = {x coleg_banca(y),y coleg_banca(x)} x coleg_banca(coleg_banca(x)) imposibil! Soluție: verificarea apariției unei variabile în valoarea la care a fost legată (occurrence check); Rezoluția pentru clauze Horn: A 1... A m A B 1... A... B n B unificare(a,a ) = S subst(s,a 1... A m B 1... B n B) unificare(α,β) substituția sub care unifică propozițiile α și β; subst(s,α) propoziția rezultată în urma aplicării substituției S asupra propoziției α. 11 : : 50 Ex Rezoluție Horses and hounds 1 Horses are faster than dogs. 2 There is a greyhound that is faster than any rabbit. 3 Harry is a horse and Ralph is a rabbit. 4 Is Harry faster than Ralph? 11 : 51 Rezoluție Horses and Hounds 1 x. y.horse(x) dog(y) faster(x,y) horse(x) dog(y) faster(x,y) 2 x.greyhound(x) ( y.rabbit(y) faster(x,y)) greyhound(greg) ; rabbit(y) faster(greg,y) 3 horse(harry) ; rabbit(ralph) 4 faster(harry,ralph) (concluzia negată) 5 greyhound(x) dog(x) (common knowledge) 6 faster(x,y) faster(y,z) faster(x,z) (tranzitivitate) a dog(y) faster(harry,y) (cu {Harry/x}) 8 2a + 5 dog(greg) (cu {Greg/x}) faster(harry,greg) (cu {Greg/y}) 10 2b + 3b faster(greg,ralph) (cu {Ralph/y}) faster(harry,ralph) {Harry/x,Greg/y,Ralph/z} q.e.d. 11 : 52 Sfârșitul cursului 11 Ce am învățat Cursul 12: Programare logică în Prolog sintaxa și semantica în LPOI Forme normale, Unificare, Rezoluție în LPOI 42 Procesul de demonstrare 43 Controlul execuției 11 : 53 Demonstrare Programare logică în Prolog Controlul execuției 12 : 1

41 Pași în demonstrare (1) 1 Inițializarea stivei de scopuri cu scopul solicitat; Procesul de demonstrare 2 Inițializarea substituției (utilizate pe parcursul unificării) cu mulțimea vidă; 3 Extragerea scopului din vârful stivei și determinarea primei clauze din program cu a cărei concluzie unifică; 4 Îmbogățirea corespunzătoare a substituției și adăugarea premiselor clauzei în stivă, în ordinea din program; 5 Salt la pasul 3. Demonstrare Programare logică în Prolog Controlul execuției 12 : 2 Demonstrare Programare logică în Prolog Controlul execuției 12 : 3 Pași în demonstrare (2) 6 În cazul imposibilității satisfacerii scopului din vârful stivei, revenirea la scopul anterior (backtracking), și încercarea altei modalități de satisfacere; 7 Succes la golirea stivei de scopuri; 8 Eșec la imposibilitatea satisfacerii ultimului scop din stivă. Un exemplu de program Prolog Ex 1 parent ( andrei, bogdan ). 2 parent ( andrei, bianca ). 3 parent ( bogdan, cristi ). 4 5 grandparent (X, Y) :- parent (X, Z), parent (Z, Y). true parent(andrei,bogdan) true parent(andrei,bianca) true parent(bogdan,cristi) x. y. z.(parent(x,z) parent(z,y) grandparent(x,y)) Demonstrare Programare logică în Prolog Controlul execuției 12 : 4 Demonstrare Programare logică în Prolog Controlul execuției 12 : 5 l genealogic (1) S = /0 G = {gp(x,y )} gp(x1, Y1) :- p(x1, Z1), p(z1, Y1) S = {X = X1,Y = Y 1} G = {p(x1,z 1),p(Z 1,Y 1)}; p(andrei, bogdan) p(andrei, bianca) p(bogdan, cristi) l genealogic (2) Ramura p(andrei, bogdan) S = {X = X1,Y = Y 1,X1 = andrei,z 1 = bogdan} G = {p(bogdan,y 1)}; p(bogdan, cristi) S = {X = X1,Y = Y 1,X1 = andrei,z 1 = bogdan,y 1 = cristi} G = /0; success gp(andrei, cristi) Demonstrare Programare logică în Prolog Controlul execuției 12 : 6 Demonstrare Programare logică în Prolog Controlul execuției 12 : 7 l genealogic (3) Ramura p(andrei, bianca) S = {X = X1,Y = Y 1,X1 = andrei,z 1 = bianca} G = {p(bianca,y 1)}; eșec l genealogic (4) Ramura p(bogdan, cristi) S = {X = X1,Y = Y 1,X1 = bogdan,z 1 = cristi} G = {p(cristi,y 1)}; eșec Demonstrare Programare logică în Prolog Controlul execuției 12 : 8 Demonstrare Programare logică în Prolog Controlul execuției 12 : 9

42 Observații Ordinea evaluării / încercării demonstrării scopurilor Ordinea clauzelor în program; Ordinea premiselor în cadrul regulilor. Recomandare: premisele mai ușor de satisfăcut și mai specifice primele exemplu: axiome. Strategii de control Ale demonstrațiilor Forward chaining (data-driven) Derivarea tuturor concluziilor, pornind de la datele inițiale; Oprire la obținerea scopului (scopurilor); Backward chaining (goal-driven) Utilizarea exclusivă a regulilor care pot contribui efectiv la satisfacerea scopului; Determinarea regulilor a căror concluzie unifică cu scopul; Încercarea de satisfacere a premiselor acestor reguli ș.a.m.d. Demonstrare Programare logică în Prolog Controlul execuției 12 : 10 Demonstrare Programare logică în Prolog Controlul execuției 12 : 11 Strategii de control Algoritm Backward chaining 1. BackwardChaining(rules,goals,subst) lista regulilor din program, stiva de scopuri, substituția curentă, inițial vidă. returns satisfiabilitatea scopurilor 2. if goals = /0 then 3. return SUCCESS 4. goal head(goals) 5. goals tail(goals) 6. for-each rule rules do // în ordinea din program 7. if unify(goal,conclusion(rule),subst) bindings 8. newgoals premises(rule) goals // adâncime 9. newsubst subst bindings 10. if BackwardChaining(rules,newGoals,newSubst) 11. then return SUCCESS 12. return FAILURE Controlul execuției Demonstrare Programare logică în Prolog Controlul execuției 12 : 12 Demonstrare Programare logică în Prolog Controlul execuției 12 : 13 Minimul a două numere Cod Prolog Ex Minimul a două numere 1 min (X, Y, M) :- X =< Y, M is X. 2 min (X, Y, M) :- X > Y, M is Y. 3 4 min2 (X, Y, M) :- X =< Y, M = X. 5 min2 (X, Y, M) :- X > Y, M = Y. 6 7 % Echivalent cu min2. 8 min3 (X, Y, X) :- X =< Y. 9 min3 (X, Y, Y) :- X > Y. Minimul a două numere Utilizare 1?- min (1+2, 3+4, M). 2 M = 3 ; 3 false. 4 5?- min (3+4, 1+2, M). 6 M = ?- min2 (1+2, 3+4, M). 9 M = 1+2 ; 10 false ?- min2 (3+4, 1+2, M). 13 M = 1+2. Demonstrare Programare logică în Prolog Controlul execuției 12 : 14 Demonstrare Programare logică în Prolog Controlul execuției 12 : 15 Minimul a două numere Observații Minimul a două numere Îmbunătățire Condiții mutual exclusive: X =< Y și X > Y cum putem elimina redundanța? Ex 1 min4 (X, Y, X) :- X =< Y. 2 min4 (X, Y, Y). 1?- min4 (1+2, 3+4, M). 2 M = 1+2 ; 3 M = 3+4. Greșit! Soluție: oprirea recursivității după prima satisfacere a scopului. Ex 1 min5 (X, Y, X) :- X =< Y,!. 2 min5 (X, Y, Y). 1?- min5 (1+2, 3+4, M). 2 M = 1+2. Demonstrare Programare logică în Prolog Controlul execuției 12 : 16 Demonstrare Programare logică în Prolog Controlul execuției 12 : 17

43 Operatorul cut Definiție La prima întâlnire satisfacere; La a doua întâlnire în momentul revenirii (backtracking) eșec, cu inhibarea tuturor căilor ulterioare de satisfacere a scopului care a unificat cu concluzia regulii curente; Utilitate în eficientizarea programelor. Operatorul cut Ex 1 girl ( mary ). 2 girl ( ann ). 3 4 boy ( john ). 5 boy ( bill ). 6 7 pair (X, Y) :- girl (X), boy (Y). 8 pair ( bella, harry ) pair2 (X, Y) :- girl (X),!, boy (Y). 11 pair2 ( bella, harry ). Demonstrare Programare logică în Prolog Controlul execuției 12 : 18 Demonstrare Programare logică în Prolog Controlul execuției 12 : 19 Operatorul cut Utilizare 1?- pair (X, Y). 2 X = mary, 3 Y = john ; 4 X = mary, 5 Y = bill ; 6 X = ann, 7 Y = john ; 8 X = ann, 9 Y = bill ; 10 X = bella, 11 Y = harry. 1?- pair2 (X, Y). 2 X = mary, 3 Y = john ; 4 X = mary, 5 Y = bill. Negația ca eșec Ex 1 nott (P) :- P,!, fail. 2 nott (P). P: atom exemplu: boy(john) dacă P este satisfiabil: eșecul primei reguli, din cauza lui fail; abandonarea celei de-a doua reguli, din cauza lui!; rezultat: nott(p) nesatisfiabil. dacă P este nesatisfiabil: eșecul primei reguli; succesul celei de-a doua reguli; rezultat: nott(p) satisfiabil. Demonstrare Programare logică în Prolog Controlul execuției 12 : 20 Demonstrare Programare logică în Prolog Controlul execuției 12 : 21 Sfârșitul cursului 12 Elemente esențiale Cursul 13: Prolog: structura unui program, funcționarea unei demonstrații ordinea evaluării, algoritmul de control al demonstrației tehnici de control al execuției Aplicații Demonstrare Programare logică în Prolog Controlul execuției 12 : 22 Aplicații 13 : 1 Model de calculabilitate efectivă, echivalent cu Mașina Turing și Calculul Lambda; Principiul de funcționare: pattern matching + substituție; Fundamentul teoretic al paradigmei asociative și al limbajelor bazate pe reguli (de forma dacă-atunci). Aplicații 13 : 2 Aplicații 13 : 3

44 Paradigma asociativă Caracteristici Potrivită mai ales în cazul problemelor ce nu admit o soluție precisă algoritmică (ieftină); Codificarea cunoștințelor specifice unui domeniu și aplicarea lor într-o manieră euristică; Descrierea proprietăților soluției, prin contrast cu pașii care trebuie realizați pentru obținerea acesteia (ce trebuie obținut vs. cum); Absența unui flux explicit de control, deciziile fiind determinate, implicit, de cunoștințele valabile la un anumit moment data-driven control. Aplicații 13 : 4 Aplicații 13 : 5 Exemple de implementare Structura Mașinii Markov Perspectivă generală (implementări fără variabile generice) Windows / Wine: [ mai multe: [ RD SA S UC AM Aplicații 13 : 6 Registrul de date, RD, cu secvența de simboluri, S RD nemărginit la dreapta S (A b A l ),A b A l = /0 alfabet de bază și de lucru Unitatea de control, UC Spațiul de stocare a algoritmului, SA, ce conține algoritmul Markov, AM format din reguli. Aplicații 13 : 7 Structura Mașinii Markov Reguli Structura Mașinii Markov Variabile generice Unitatea de bază a unui algoritm Markov regula asociativă de substituție: șablon identificare (LHS) șablon substituție (RHS) : ag 1 c -> ac șabloanele secvențe de simboluri: constante: simboluri din A b variabile locale: simboluri din A l variabile generice: simboluri speciale, din mulțimea G, legați la simboluri din A b Dacă RHS este. regulă terminală, ce încheie execuția mașinii (halt). De obicei, notate cu g, urmat de un indice; Mulțimea valorilor pe care le poate lua o variabilă domeniul variabilei Dom(g) A b A l ; Legate la exact un simbol la un moment dat; Durata de viață (scope) timpul aplicării regulii sunt legate la identificarea șablonului și legarea se pierde după înlocuirea șablonului de identificare cu cel de substituție; Utilizabile în RHS doar în cazul apariției în LHS. Aplicații 13 : 8 Aplicații 13 : 9 Structura Mașinii Markov Algoritm Markov Reguli Aplicabilitate Mulțime ordonată de reguli, îmbogățite cu declarații: de partiționare a mulțimii A b de variabile generice Ex Eliminarea din dintr-un șir de simboluri din mulțimea A B simbolurilor ce aparțin mulțimii B: 1 setdiff1 (A, B); A g 1 ; B g 2 ; 2 ag 2 -> a; 3 ag 1 -> g 1 a; 4 a ->.; 5 -> a; 6 end 1 setdiff2 (A, B); B g 2 ; 2 g 2 -> ; 3 ->.; 4 end A, B A b g 1, g 2 variabile generice a nedeclarată variabilă locală (a A l ) + Aplicabilitatea unei reguli Regula r : a 1...a n b 1...b m este aplicabilă dacă și numai dacă există un subșir c 1...c n, în RD, astfel încât i = 1,n exact 1 condiție din cele de mai jos este îndeplinită: a i A b A l a i =c i a i G c i Dom(a i ) ( j=1,n. a j =a i c j =c i ), oriunde mai apare aceeași variabilă generică în șablonul de identificare, în poziția corespunzătoare din subșir avem același simbol. Aplicații 13 : 10 Aplicații 13 : 11

45 Reguli Aplicare + Aplicarea regulii r : a 1...a n b 1...b m asupra unui subșir s : c 1...c n, în raport cu care este aplicabilă, constă în substituirea lui s prin subșirul q 1...q m, calculat astfel încât pentru i = 1,n: b i A b A l q i =b i b i G ( j=1,n. b i =a j ) q i =c j Reguli de aplicare Ex A b = {1, 2, 3} A l = {x, y} Dom(g 1 ) = {2} Dom(g 2 ) = A b S = x2y31111 r : 1g 1 xg 1 yg 2 1g 2 x S = x 2 y r : 1 g 1 x g 1 y g 2 1g 2 x S' = x1111 Aplicații 13 : 12 Aplicații 13 : 13 Unitatea de control Aplicabilitate vs. aplicare Unitatea de control Funcționare Cazuri speciale: aplicabilitatea: unei reguli pentru mai multe subșiruri; mai multor reguli pentru același subșir. La un anumit moment, putem aplica propriu-zis o singură regulă asupra unui singur subșir; Nedeterminism inerent, ce trebuie exploatat, sau rezolvat; Convenție care poate fi făcută: aplicarea primei reguli aplicabile, asupra celui mai din stânga subșir asupra căreia este aplicabilă Regula 1... înapoi la Regula 1 Regula k : S aplicare S' prima regulă aplicabilă... Regula n Aplicații 13 : 14 Aplicații 13 : 15 Ex Inversarea intrării Ideea: mutarea, pe rând, a fiecărui element în poziția corespunzătoare. Mutarea se face prin pași incrementali de interschimbare a elementelor învecinate. 1 Reverse (A); A g 1, g 2 ; 2 ag 1g 2 -> g 2 ag 1 ; 3 ag 1 -> bg 1 ; 4 abg 1 -> g 1 a; 5 a ->.; 6 -> a; 7 end Aplicații DOP 6 adop 2 OaDP 2 OPaD 3 OPbD 6 aopbd 2 PaObD 3 PbObD 6 apbobd 3 bpbobd 6 abpbobd 4 PabObD 4 POabD 4 PODa 5. Aplicații 13 : 16 Aplicații 13 : 17 CLIPS C Language Integrated Production System ; Sistem bazat pe reguli producție = regulă; Principiu de funcționare similar cu al mașinii Markov; Dezvoltat la NASA în anii 1980; CLIPS : Minimul a două numere reprezentare individuală Ex 1 ( deffacts numbers 2 ( number 1) 3 ( number 2) ) 4 5 ( defrule min 6 ( number?m) 7 ( number?x) 8 ( test (<?m?x)) 9 => 10 ( assert ( min?m))) Aplicații 13 : 18 Aplicații 13 : 19

46 CLIPS Fapte CLIPS Reguli 1 > ( facts ) Reprezentarea datelor prin fapte similare simbolurilor mașinii Markov; Afirmații despre atributele obiectelor; Date simbolice, construite conform unor șabloane; Mulțimea de fapte baza de cunoștințe (factual knowledge base) 2 f -0 ( initial - fact ) 3 f -1 ( number 1) 4 f -2 ( number 2) 5 For a total of 3 facts. Similare regulilor mașinii Markov; Șablon de identificare secvență de fapte parametrizate (vezi variabilele generice ale algoritmilor Markov) și restricții; Șablon de acțiune secvență acțiuni (assert, retract); Pattern matching secvențial pe faptele din șablonul de identificare; Domeniul de vizibilitate a unei variabile restul regulii, după prima apariție a variabilei, în șablonul de identificare. Aplicații 13 : 20 Aplicații 13 : 21 Înregistrări de activare Definiție Înregistrări de activare reluat de mai devreme: minimul a 2 numere Tuplul regulă, fapte asupra cărora este aplicabilă înregistrare de activare (activation record); Reguli posibil aplicabile asupra diferitelor porțiuni ale acelorași fapte; Muțimea înregistrărilor de activare agenda. 1 > ( facts ) 2 f -0 ( initial - fact ) 3 f -1 ( number 1) 4 f -2 ( number 2) 5 For a total of 3 facts. 6 7 > ( agenda ) 8 0 min : f-1,f-2 9 For a total of 1 activation > ( run ) 12 FIRE 1 min : f -1,f == > f -3 ( min 1) Aplicații 13 : 22 Aplicații 13 : 23 Terminarea programelor CLIPS Exemple Minimul a două numere Reprezentare agregată (1) Principiul refracției: Aplicarea unei reguli o singură dată asupra acelorași fapte și acelorași porțiuni ale acestora; Altfel, programe care nu s-ar termina. Terminare: Aplicarea unui număr maxim de reguli (run n); Întâlnirea acțiunii (halt); Golirea agendei. Ex 1 ( deffacts numbers 2 ( numbers 1 2) ) 3 4 ( defrule min 5 ( numbers $??m $?) 6 ( numbers $??x $?) 7 ( test (<?m?x)) 8 => 9 ( assert ( min?m))) Observați utilizarea $? pentru potrivirea unei secvențe, potențial vidă. Aplicații 13 : 24 Aplicații 13 : 25 CLIPS Exemple Minimul a două numere Reprezentare agregată (2) CLIPS Exemple Suma oricâtor numere (1) Ex 1 ( deffacts numbers ( numbers ) ) 1 > ( facts ) 2 f -0 ( initial - fact ) 3 f -1 ( numbers 1 2) 4 For a total of 2 facts. 5 6 > ( agenda ) 7 0 min : f-1,f-1 8 For a total of 1 activation. 2 3 ( defrule init 4 ; implicit, ( initial - fact ) 5 => 6 ( assert ( sum 0) )) 7 8 ( defrule sum 9?f <- ( sum?s) 10 ( numbers $??x $?) 11 => 12 ( retract?f) 13 ( assert ( sum (+?s?x)))) Aplicații 13 : 26 Aplicații 13 : 27

47 CLIPS Exemple Suma oricâtor numere (2) Interogare CLIPS Exemple Suma oricâtor numere (3) Interogare 1 > ( facts ) 2 f -0 ( initial - fact ) 3 f -1 ( numbers ) 4 For a total of 2 facts. 5 6 > ( agenda ) 7 0 init : * 8 For a total of 1 activation > ( run 1) 11 FIRE 1 init : * 12 == > f -2 ( sum 0) 1 > ( agenda ) 2 0 sum : f -2,f sum : f -2,f sum : f -2,f sum : f -2,f sum : f -2,f -1 7 For a total of 5 activations. 8 9 > ( run ) 10 cicleaz! Aplicații 13 : 28 Aplicații 13 : 29 CLIPS Exemple Suma oricâtor numere (4) Observații Eroarea: adăugarea unui nou fapt sum induce aplicabilitatea repetată a regulii, asupra elementelor deja însumate; Corect: consultarea primului număr din listă și eliminarea acestuia. CLIPS Exemple Suma oricâtor numere (5) Implementare corectă Ex 1 ( deffacts numbers ( numbers ) ) 2 ( defrule init 3 => 4 ( assert ( sum 0) )) 5 6 ( defrule sum 7?f <- ( sum?s) 8?g <- ( numbers?x $?rest ) 9 => 10 ( retract?f) 11 ( assert (sum (+?s?x))) 12 ( retract?g) 13 ( assert ( numbers $?rest ))) Aplicații 13 : 30 Aplicații 13 : 31 CLIPS Exemple Suma oricâtor numere (6) Interogare pe implementarea corectă CLIPS Exemple Suma oricâtor numere (7) Interogare pe implementarea corectă 1 > ( run ) 2 FIRE 1 init : * 3 == > f -2 ( sum 0) 4 FIRE 2 sum : f -2,f -1 5 <== f -2 ( sum 0) 6 == > f -3 ( sum 1) 7 <== f -1 ( numbers ) 8 == > f -4 ( numbers ) 9 FIRE 3 sum : f -3,f <== f -3 ( sum 1) 11 == > f -5 ( sum 3) 12 <== f -4 ( numbers ) 13 == > f -6 ( numbers 3 4 5) 1 FIRE 4 sum : f -5,f -6 2 <== f -5 ( sum 3) 3 == > f -7 ( sum 6) 4 <== f -6 ( numbers 3 4 5) 5 == > f -8 ( numbers 4 5) 6 FIRE 5 sum : f -7,f -8 7 <== f -7 ( sum 6) 8 == > f -9 ( sum 10) 9 <== f -8 ( numbers 4 5) 10 == > f -10 ( numbers 5) 11 FIRE 6 sum : f -9,f <== f -9 ( sum 10) 13 == > f -11 ( sum 15) 14 <== f -10 ( numbers 5) 15 == > f -12 ( numbers ) Aplicații 13 : 32 Aplicații 13 : 33 XSLT Transformarea fișierelor XML Ex 1 <? xml version =" 1.0 "? > 2 < persons > 3 < person username =" JS1 " > 4 < name > John </ name > 5 < family - name > Smith </ family - name > 6 </ person > 7 < person username =" MI1 " > 8 < name > Morka </ name > 9 < family - name > Ismincius </ family - name > 10 </ person > 11 </ persons > XSLT 1 <? xml version=" 1.0 " encoding="utf -8 "? > 2 < root > 3 < name username =" JS1 " > John </ name > 4 < name username =" MI1 " > Morka </ name > 5 </ root > Aplicații 13 : 34 XSLT Transformarea fișierelor XML : sursa 1 <? xml version =" 1.0 " encoding =" UTF-8 "? > 2 < xsl:stylesheet xmlns:xsl ="http: //... " version ="1.0 "> 3 < xsl:output method =" xml " indent =" yes "/ > < xsl:template match ="/ persons "> 6 < root > 7 < xsl:apply-templates select =" person "/> 8 </ root > 9 </ xsl:template > 11 < xsl:template match =" person "> 12 < name username }"> 13 < xsl:value-of select =" name " / > 14 </ name > 15 </ xsl:template > 16 </ xsl:stylesheet > Aplicații 13 : 35

48 Sfârșitul cursului 13 Ce am învățat Ce este și cum funcționează mașina algoritmică Markov: structură, variabile, reguli, algoritmul unității de control. în CLIPS fapte, reguli, execuție. de fișier XSLT. + Succes la examen și nu uitați să dați feedback la curs. Aplicații 13 : 36

Paradigme de Programare

Paradigme de Programare Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 3 : 1 / 60 Cursul 3 Calcul Lambda 3 : 2 / 60 Cursul 3: Calcul Lambda 1 Introducere

Mai mult

Paradigme de Programare

Paradigme de Programare Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 1 : 1 / 38 Cursul 1 Introducere 1 : 2 / 38 Cursul 1: Introducere 1 Exemplu

Mai mult

Paradigme de programare

Paradigme de programare Curs 4 Transparență referențială. Legare statică / dinamică. Modelul contextual de evaluare. Transparență referențială Cuprins Efecte laterale Transparență referențială 2 Efecte laterale Efecte laterale

Mai mult

Paradigme de Programare

Paradigme de Programare Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 9 : 1 / 38 Cursul 9 Concluzie Paradigma Funcțională 9 : 2 / 38 Cursul 9:

Mai mult

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

LOGICA MATEMATICA SI COMPUTATIONALA  Sem. I, LOGICA MATEMATICĂ ŞI COMPUTAŢIONALĂ Sem. I, 2017-2018 Ioana Leustean FMI, UB Partea III Calculul propoziţional clasic Consistenţă şi satisfiabilitate Teorema de completitudine Algebra Lindenbaum-Tarski

Mai mult

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Logică și structuri discrete Logică propozițională Marius Minea   marius/curs/lsd/ 3 noiembrie 2014 Logică și structuri discrete Logică propozițională Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 3 noiembrie 2014 Unde aplicăm verificarea realizabilității? probleme de căutare și

Mai mult

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Logică și structuri discrete Limbaje regulate și automate Marius Minea   marius/curs/lsd/ 24 noiembrie 2014 Logică și structuri discrete Limbaje regulate și automate Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 24 noiembrie 2014 Un exemplu: automatul de cafea acțiuni (utilizator): introdu

Mai mult

Analiză statică Analiza fluxului de date 23 octombrie 2014

Analiză statică Analiza fluxului de date 23 octombrie 2014 Analiză statică Analiza fluxului de date 23 octombrie 2014 Analiză statică: definiție O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăți ale programului sursă. (in

Mai mult

Analiză de flux de date 29 octombrie 2012

Analiză de flux de date 29 octombrie 2012 Analiză de flux de date 29 octombrie 2012 Analiză statică: definiţie O analiză a codului sursă (fără a executa programul), cu scopul de a determina proprietăţi ale programului sursă. (in principal corectitudinea,

Mai mult

E_d_Informatica_sp_SN_2014_bar_10_LRO

E_d_Informatica_sp_SN_2014_bar_10_LRO Examenul de bacalaureat naţional 2014 Proba E. d) Informatică Varianta 10 Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu. Timpul de lucru efectiv este de 3 ore. În rezolvările cerute,

Mai mult

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx SDA (PC2) Curs 9 Liste / Grafuri / Arbori Iulian Năstac Lista dublu înlănțuită Recapitulare Într-o astfel de listă fiecare nod conţine doi pointeri: unul spre nodul următor şi unul spre nodul precedent.

Mai mult

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja far Mohammed ibn Musâ al- Khowârizmî în cartea sa intitulată

Mai mult

PowerPoint Presentation

PowerPoint Presentation Circuite Integrate Digitale Conf. Monica Dascălu Curs Seminar Laborator notă separată Notare: 40% seminar 20% teme // + TEMA SUPLIMENTARA 40% examen 2014 CID - curs 1 2 Bibliografie Note de curs Cursul

Mai mult

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Logică și structuri discrete Relații. Funcții parțiale Marius Minea   marius/curs/lsd/ 20 octombrie 2014 Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius@cs.upt.ro http://www.cs.upt.ro/ marius/curs/lsd/ 20 octombrie 2014 Relații în lumea reală și informatică Noțiunea matematică de

Mai mult

PROGRAMARE ORIENTATA PE OBIECTE

PROGRAMARE ORIENTATA PE OBIECTE Curs 2 Principiile Programării Orientate pe Obiecte Programare Orientată pe Obiecte Tehnici de programare Programarea procedurală Modul în care este abordată programarea, din punct de vedere al descompunerii

Mai mult

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL 0 8.. Aspecte generale Programarea neliniară are o foarte mare importanţă în rezolvarea problemelor de optimizări,

Mai mult

Microsoft Word - Algoritmi genetici.docx

Microsoft Word - Algoritmi genetici.docx 1.1 Generalităţi Algoritmii genetici fac parte din categoria algoritmilor de calcul evoluționist și sunt inspirați de teoria lui Darwin asupra evoluției. Idea calculului evoluționist a fost introdusă în

Mai mult

E_d_Informatica_sp_MI_2015_bar_02_LRO

E_d_Informatica_sp_MI_2015_bar_02_LRO Examenul de bacalaureat naţional 2015 Proba E. d) Informatică Varianta 2 Filiera teoretică, profilul real, specializările: matematică-informatică matematică-informatică intensiv informatică Toate subiectele

Mai mult

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine numărul de operaţii efectuate de către un algoritm care determină

Mai mult

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc Transmiterea parametrilor unei funcții Parametrii se transmit de la funcţia apelantă la funcţia apelată prin intermediul stivei. La apelul unei funcţii, pe stivă se crează o înregistrare de activare, care

Mai mult

Microsoft Word - Curs_09.doc

Microsoft Word - Curs_09.doc Capitolul 7. Proiectarea conceptuală Scop: reprezentarea cerinţelor informale ale aplicaţiei în termenii descrierii complete şi formale dar independent de criteriul folosit pentru reprezentare în sistemul

Mai mult

Microsoft PowerPoint - Prezentarea_programelor_de_studii_de_licenta_2019

Microsoft PowerPoint - Prezentarea_programelor_de_studii_de_licenta_2019 Universitateadin București Facultatea de Matematică și Informatică Programele de studii de licență - descriere și admitere - Scurt istoric 1864 Se înființează Facultateade Științe, cu o secție de Matematică

Mai mult

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 000 standard 3 10 PP Algebră Capitolul I. NUMERE REALE Competenţe specifice: Determinarea

Mai mult

ExamView Pro - Untitled.tst

ExamView Pro - Untitled.tst Class: Date: Subiecte logica computationala licenta matematica-informatica 4 ani Multiple Choice Identify the letter of the choice that best completes the statement or answers the question. 1. Fie formula

Mai mult

Proiectarea Sistemelor Software Complexe

Proiectarea Sistemelor Software Complexe Proiectarea Sistemelor Software Complexe Curs 4 Arhitecturi de Sistem Software Bazate pe Tehnologii Middleware. Obiecte Distribuite. Rolul unui arhitect software este foarte asemănător cu cel al unui arhitect

Mai mult

tehnologii web

tehnologii web Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Tehnologii Web Lector univ. dr. Adrian Runceanu 1 Curs 7 Limbajul PHP (partea II) 2

Mai mult

Managementul Resurselor Umane

Managementul Resurselor Umane Universitatea Politehnica București Catedra de Calculatoare Laborator 4 Cereri SQL Autori Conf. Dr. Ing. Alexandru Boicea Ș.L. Dr. Ing. Ciprian-Octavian Truică Cuprins Cereri SQL Cereri simple 10.03.2019

Mai mult

Microsoft Word - cap1p4.doc

Microsoft Word - cap1p4.doc Algebră liniară, geometrie analitică şi diferenţială.6 Subspaţii vectoriale Fie V un spaţiu vectorial peste corpul K. În cele ce urmează vom introduce două definiţii echivalente pentru noţiunea de subspaţiu

Mai mult

SUBPROGRAME

SUBPROGRAME SUBPROGRAME Un subprogram este un ansamblu ce poate conţine tipuri de date, variabile şi instrucţiuni destinate unei anumite prelucrări (calcule, citiri, scrieri). Subprogramul poate fi executat doar dacă

Mai mult

DOMENIUL: Matematica

DOMENIUL: Matematica PLAN DE ÎNVĂŢĂMÂNT valabil începând cu anul universitar 2013-2014 Program postuniversitar de conversie profesională Facultatea: MATEMATICĂ ȘI INFORMATICĂ Programul de studii: MATEMATICĂ Forma de învățământ:

Mai mult

Logică și structuri discrete Mulțimi Casandra Holotescu

Logică și structuri discrete Mulțimi Casandra Holotescu Logică și structuri discrete Mulțimi Casandra Holotescu casandra@cs.upt.ro https://tinyurl.com/lectureslsd Mulțimi aspecte teoretice Ce sunt mulțimile? Mulțimea e un concept matematic fundamental. Definiție

Mai mult

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursul precedent am prezentat modelul de spaţiu vectorial

Mai mult

Limbaje Formale, Automate si Compilatoare

Limbaje Formale, Automate si Compilatoare Limbaje Formale, Automate şi Compilatoare Curs 1 2018-19 LFAC (2018-19) Curs 1 1 / 45 Prezentare curs Limbaje Formale, Automate şi Compilatoare - Curs 1 1 Prezentare curs 2 Limbaje formale 3 Mecanisme

Mai mult

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx SDA (PC2) Curs 10 Arbori Iulian Năstac Definiția 1: Arbori Recapitulare Arborele este un graf orientat, aciclic și simplu conex. Definiția 2: Un arbore este un ansamblu de structuri de date de natură recursivă

Mai mult

Microsoft Word - Curs_08.doc

Microsoft Word - Curs_08.doc Partea a II-a. Proiectarea bazelor de date Capitolul 6. Tehnici de proiectare şi modele În capitolele precedente s-au analizat modele de baze de date şi limbaje, presupunând în cele mai multe cazuri că

Mai mult

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Limbaje de Programare   Curs 6 – Functii de intrare-iesire Limbaje de Programare Curs 6 Funcţii de intrare-ieşire Dr. Casandra Holotescu Universitatea Politehnica Timişoara Ce discutăm azi... 1 Citire formatată 2 Citirea şirurilor de caractere 3 Citirea unor linii

Mai mult

proiectarea bazelor de date

proiectarea bazelor de date Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie şi Dezvoltare Durabilă Departamentul de Automatică, Energie, Mediu şi Dezvoltare Durabilă Proiectarea bazelor de date Lect.dr. Adrian

Mai mult

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi Calculatoare Universitatea Politehnica Bucureşti PAS

Mai mult

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac

Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a ac Cursul 8 Funcţii analitice Vom studia acum comportarea şirurilor şi seriilor de funcţii olomorfe, cu scopul de a dezvălui o proprietate esenţială a acestor funcţii: analiticitatea. Ştim deja că, spre deosebire

Mai mult

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Curs 3  Permutari cu repetitie. Combinari.  Algoritmi de ordonare si generare Curs 3 Permutări cu repetiţie. Combinări. Algoritmi de ordonare şi generare Octombrie 2015 Cuprins Algoritmi de ordonare şi generare pentru permutări cu repetiţie Reprezentarea binară a submulţimilor Algoritmi

Mai mult

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Testare automata: exista un mecanism pentru executia fara

Mai mult

programă şcolară pentru clasa a 11a, liceu

programă şcolară pentru clasa a 11a, liceu Anexă la OMECI nr. 5099 din 09.09.2009 MINISTERUL EDUCAŢIEI, CERCETĂRII ŞI INOVĂRII PROGRAME ŞCOLARE TEHNOLOGIA INFORMAŢIEI ŞI A COMUNICAŢIILOR (Sisteme de gestiune a bazelor de date) CLASA A XII-A CICLUL

Mai mult

Retele Petri si Aplicatii

Retele Petri si Aplicatii Reţele Petri şi Aplicaţii Curs 4 RPA (2019) Curs 4 1 / 45 Cuprins 1 Analiza structurală a reţelelor Petri Sifoane Capcane Proprietăţi 2 Modelarea fluxurilor de lucru: reţele workflow Reţele workflow 3

Mai mult

Laborator 3

Laborator 3 Laborator 3 Programare III săptămâna 8-12.10.2018 OBIECTIVE: - Folosirea modificatorilor unei clase (public, abstract, final) - Folosirea modificatorilor de acces în declaraţiile membrilor unei clase Noţiuni:

Mai mult

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică şi Informatică Academiei 4, RO 0004, Bucureşti, România

Mai mult

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Preprocesorul C. stdarg.h 2 Preprocesorul C extensii (macro-uri) pentru scrierea mai concisǎ a programelor preprocesorul efectueazǎ

Mai mult

Microsoft Word - 2 ES RO.doc

Microsoft Word - 2 ES RO.doc 2 MULTITASKING 2.1. Preliminarii Este deja foarte bine cunoscut faptul că o programare eficientă în domeniul sistemelor în timp real, în mod evident, vizând aici sistemele în timp real încorporate, este

Mai mult

Microsoft Word - Curs1.docx

Microsoft Word - Curs1.docx 1. REPREZENTAREA INFORMAȚIILOR ÎN CALCULATOR 1.1. CONCEPTUL DE DATĂ ȘI INFORMAȚIE Datele desemnează elementele primare, provenind din diverse surse, fără o formă organizată care să permită luarea unor

Mai mult

Top

Top PROGRAMARE ORIENTATĂ PE OBIECTE Tratarea excepțiilor O excepție este o eroare care poate să apară la rularea unui program. Exemple: încercarea de deschidere a unui fișier ce nu există depășirea limitelor

Mai mult

B

B F.I.A. Laboratorul numărul 3 Cătălin Stoean Unificarea şi recursivitatea Unificarea Unificarea reprezintă modul în care Prologul realizează potrivirile între termeni. La prima vedere, procesul de unificare

Mai mult

Tablouri (continuare)

Tablouri (continuare) Vector Dinamic DYNAMIC ARRAY Observații 1. Un tablou este static: nu pot fi inserate sau şterse celule. 2. Vector - tablou unidimensional 3. Reprezentarea vectorilor este secvenţială, adică elementele

Mai mult

Curs7

Curs7 Analizor sintactic LL(1) S A { a a 1 i-1 a i Algoritm liniar LL(k) L = left (secvența este parcursă de la stânga la dreapta L = left (se folosesc derivări de stânga) Predicția are lungimea k S A { Principiu

Mai mult

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; paranteze: (, ); simbolul de egalitate =; cuantificatorul

Mai mult

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor booleene Definiţia 4.1 Se numeşte algebră Boole (booleană)

Mai mult

OPERATII DE PRELUCRAREA IMAGINILOR 1

OPERATII DE PRELUCRAREA IMAGINILOR 1 OPERATII DE PRELUCRAREA IMAGINILOR Prelucrarea imaginilor 2 Tipuri de operatii de prelucrare Clasificare dupa numarul de pixeli din imaginea initiala folositi pentru calculul valorii unui pixel din imaginea

Mai mult

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da Probleme proiect TP 2016 1. BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard dacă reprezentarea binară a unuia dintre numere poate

Mai mult

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor Universitatea Constantin Brâncuşi din Târgu-Jiu Facultatea de Inginerie Departamentul de Automatică, Energie şi Mediu Programarea calculatoarelor Lect.dr. Adrian Runceanu Curs 6 Instrucţiunile limbajului

Mai mult

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011 Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011 I. NOŢIUNI TEORETICE A. Suprascrierea metodelor O clasă derivată

Mai mult

Ingineria Sistemelor de Programare

Ingineria Sistemelor de Programare Ingineria Sistemelor de Programare Agregarea si Mostenirea mihai.hulea@aut.utcluj.ro 2019 Compozitia si agregarea Relatia dintre obiecte raspunde afirmativ la intrebarea are un/are o Exemple: Telefonul

Mai mult

1

1 Contents 1 Automate finite... 2 1.1 Probleme cu AF... 2 1.2 Structuri de date pentru automate finite... 4 2 Gramatici si limbaje; gram. indep. de context... 5 2.1 Limbaje... 5 2.2 Gramatici si limbaje...

Mai mult

Microsoft Word - TIC5

Microsoft Word - TIC5 CAPACITATEA CANALELOR DE COMUNICAŢIE CAPITOLUL 5 CAPACITATEA CANALELOR DE COMUNICAŢIE În Capitolul 3, am văzut că putem utiliza codarea sursă pentru a reduce redundanţa inerentă a unei surse de informaţie

Mai mult

MergedFile

MergedFile PROIECT DIDACTIC Clasa a V-a Informatică și T.I.C. Proiect didactic realizat de Anișoara Apostu, profesor Digitaliada, revizuit de Radu Tăbîrcă, inspector școlar Informatică Textul și ilustrațiile din

Mai mult

Microsoft Word - Curs_07.doc

Microsoft Word - Curs_07.doc 5.3 Modificarea datelor în SQL Pentru modificarea conţinutului unei baze de date SQL pune la dispoziţie instrucţiunile insert, delete şi update. 5.3.1 Inserări în baza de date Sintaxa instrucţiunii insert

Mai mult

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa a două funcţii care au acelaşi nume În C++ acest lucru

Mai mult

Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29

Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29 Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29 Definiţie. Şiruri mărginite. Şiruri monotone. Subşiruri ale

Mai mult

PLAN DE ÎNVĂŢĂMÂNT

PLAN DE ÎNVĂŢĂMÂNT PLAN DE ÎNVĂŢĂMÂNT Valabil începând cu anul universitar 2018-2019 UNIVERSITATEA LUCIAN BLAGA DIN SBIU FACULTATEA DE ŞTIINŢE Programul de studii universitare de licenţă: INFORMATICĂ Domeniul de licenţă:

Mai mult

ROMÂNIA MINISTERUL EDUCAŢIEI NAȚIONALE Domeniul fundamental: Matematică și știinţe ale naturii Domeniul de licenţă: Informatică Ciclu de studii: 1 Pro

ROMÂNIA MINISTERUL EDUCAŢIEI NAȚIONALE Domeniul fundamental: Matematică și știinţe ale naturii Domeniul de licenţă: Informatică Ciclu de studii: 1 Pro ROMÂNIA MINISTERUL EDUCAŢIEI NAȚIONALE Domeniul fundamental: Matematică și știinţe ale naturii Domeniul de licenţă: Informatică Ciclu de studii: 1 Programul de studii (Specializarea): Informatică Durata

Mai mult

Notiuni de algebra booleana

Notiuni de algebra booleana Noţiuni de algebră booleană (în lucru) Definiţie Algebră booleană = o structură algebrică formată din: O mulţime B Două operaţii binare notate cu (+) şi (.) O operaţie unară notată cu ( ) pentru care sunt

Mai mult

Baze de date Anul 2 Teorie Examen 1. Diagrama entitate/relatie si diagrama conceptuala (curs 2-5) 2. Arbore algebric si expresie algebrica (curs 6-10)

Baze de date Anul 2 Teorie Examen 1. Diagrama entitate/relatie si diagrama conceptuala (curs 2-5) 2. Arbore algebric si expresie algebrica (curs 6-10) Baze de date Anul 2 Teorie Examen 1. Diagrama entitate/relatie si diagrama conceptuala (curs 2-5) 2. Arbore algebric si expresie algebrica (curs 6-10) 3. Forme normale (curs 6-10) 4. Notiuni teoretice

Mai mult

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (vezi Program C) - BUILD: operație complexă prin care

Mai mult

Utilizare Internet

Utilizare Internet Curs 14 2014/2015 1 Functionalitate La toate temele 1p din nota este obtinut de indeplinirea functionalitatii cerute. orice tehnologie, orice metoda, sa faca ceea ce trebuie Forma paginii prezinta importanta

Mai mult

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de clasă C 1. Vom considera sistemul diferenţial x = f(x),

Mai mult

Microsoft Word - O problema cu bits.doc

Microsoft Word - O problema cu bits.doc O problemă cu bits 1 Tiberiu Socaciu Enunţul Pe pagina Proful de Mate de pe Facebook 2 am primit de la un elev de clasa a IX-a următoarea provocare 3 : Vom oferi două soluţii, una folosind manipulări de

Mai mult

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1 Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1 Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort)

Mai mult

Microsoft Word - Mihailesc Dan_Test logica (1).doc

Microsoft Word - Mihailesc Dan_Test logica (1).doc Variantă subiecte bacalaureat 2018 Proba E. d) Logică, argumentare şi comunicare Conform modelului publicat Toate subiectele sunt obligatorii. Se acordă 10 puncte din oficiu. Timpul de lucru efectiv este

Mai mult

PPSD

PPSD Modele paralele SPMD Modelul SPMD Comunicarea prin mesaje Message Passing Interface Modelul SPMD Modelul SPMD (Single Program Multiple Data) Acesta este un model adecvat calculatoarelor MIMD In cele ce

Mai mult

Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f cont

Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f cont Cursul 7 Formula integrală a lui Cauchy Am demonstrat în cursul precedent că, dacă D C un domeniu simplu conex şi f : D C o funcţie olomorfă cu f continuă pe D, atunci, pe orice curbă rectificabilă şi

Mai mult

Limbaje de Programare Curs 8 – Fisiere

Limbaje de Programare   Curs 8 – Fisiere Limbaje de Programare Curs 8 Fişiere Dr. Casandra Holotescu Universitatea Politehnica Timişoara Ce discutăm azi... 1 Lucrul cu fişiere 2 Fişiere de tip text 3 Funcţii pentru cazuri de eroare 4 Fişiere

Mai mult

Subiectul 1

Subiectul 1 Subiectul 1 În fişierul Numere.txt pe prima linie este memorat un număr natural n (n

Mai mult

Coman Marinela Furnizor program formare acreditat: CCD BRĂILA Denumire program: INFORMATICĂ ŞI TIC PENTRU GIMNAZIU Clasa a V-a Categorie: 1; Tip de co

Coman Marinela Furnizor program formare acreditat: CCD BRĂILA Denumire program: INFORMATICĂ ŞI TIC PENTRU GIMNAZIU Clasa a V-a Categorie: 1; Tip de co Furnizor program formare acreditat: CCD BRĂILA Denumire program: INFORMATICĂ ŞI TIC PENTRU GIMNAZIU Clasa a V-a Categorie: 1; Tip de competențe: de predare-învățare-evaluare la clasa a V-a pt. disciplina

Mai mult

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t), CURE ÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t), y(t), z(t)) cu x, y, z polinoame de grad n. Maximul

Mai mult

Aggregating Data

Aggregating Data Subinterogări. Subinterogări multi-row. Formatarea rezultatelor unei interogări Obiective Prin parcurgerea acestui referat studentul va dobândi cunoştinţele necesare: identificării funcţiilor grup disponibile;

Mai mult

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc Introducere în limbajul de programare C - C este un limbaj de programare ale cărui caracteristici sunt economia de expresie, structuri moderne de control al fluxului şi de date, precum şi un set bogat

Mai mult

Slide 1

Slide 1 Prolog vs. Lisp prin Exemple Ruxandra Stoean http://inf.ucv.ro/~rstoean ruxandra.stoean@inf.ucv.ro Numarul elementelor dintr-o lista Dacă lista este vidă, numarul elementelor sale este zero: aceasta este

Mai mult

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1 Curs : Tehnica divizării (I) 1 In cursul anterior am văzut cum se analizează eficiența algoritmilor recursivi Se scrie relația de recurență corespunzătoare timpului de execuție Se rezolvă relația de recurență

Mai mult

Curs8

Curs8 Curs 8 Analiză sintactică LR(k) Termeni Predicție vezi LL(1) Manșa = simboluri din vârful stivei de lucru care formează (în ordine) pdp Analizor de tip deplasare - reducere: deplasează simboluripentru

Mai mult

Microsoft Word - Mapa 0.doc

Microsoft Word - Mapa 0.doc ACADEMIA ROMÂNĂ INSTITUTUL DE FILOSOFIE ŞI PSIHOLOGIE CONSTANTIN RĂDULESCU-MOTRU PROBLEME DE LOGICĂ VOL. XIII Dragoş POPESCU Coordonatori: Ştefan-Dominic GEORGESCU EDITURA ACADEMIEI ROMÂNE Bucureşti, 2010

Mai mult

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor Platformăde e-learning și curriculăe-content pentru Sisteme de operare 13. Planificarea proceselor Suport curs OSC MOS Capitolul 5 CPU Scheduling Capitolul 2 Processes and Threads Secțiunea 5 Scheduling

Mai mult

PLAN DE ÎNVĂŢĂMÂNT

PLAN DE ÎNVĂŢĂMÂNT PLAN DE ÎNVĂŢĂMÂNT Valabil începând cu anul universitar 2013-2014 UNIVERSITATEA LUCIAN BLAGA DIN SBIU FACULTATEA DE ŞTIINŢE Programul de studii universitare de licenţă: INFORMATICĂ Domeniul fundamental:

Mai mult

Electricitate II

Electricitate II Electricitate II Circuitul electric. Legile circuitului electric. Sumar Circuitul electric simplu Legile lui Ohm Legile lui Kirchhoff Gruparea rezistorilor Transformarea stea-triunghi Gruparea generatoarelor

Mai mult

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Matematică şi Informatică 1.3 Departamentul Departamentul

Mai mult

Diapositive 1

Diapositive 1 Tablouri Operatii pe tablouri bidimensionale Lectii de pregatire pentru Admitere 09 / 03 / 2019 1 Cuprins Operatii pe tablouri bidimensionale 0. Tablouri unidimensionale scurta recapitulare 1.Tablouri

Mai mult

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII-

Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA 45 Matematică. Clasa a VII- Gheorghe IUREA Adrian ZANOSCHI algebră geometrie clasa a VII-a ediţia a V-a, revizuită mate 2000 standard 3 Algebră Capitolul I. MULŢIMEA NUMERELOR RAŢIONALE Identificarea caracteristicilor numerelor raţionale

Mai mult

ALGORITHMICS

ALGORITHMICS CURS 2: Descrierea algoritmilor în pseudocod =Exemple= 1 Structura Descrierea unor algoritmi simpli Specificarea și utilizarea subalgoritmilor 2 Exemplu 1 Considerăm un tabel cu informații despre studenți

Mai mult

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X un spaţiu topologic. Următoarele afirma-ţii sunt echivalente:

Mai mult

Document2

Document2 O NOUA TEORIE A STABILITATII ASCHIERII, CARE SE BAZEAZA PE DINAMICA HAOTICA A PROCESULUI, PRECUM SI APLICAREA ACESTEIA LA CONTROLUL INTELIGENT AL STABILITATII Obiectivele proiectului Ideile cheie care

Mai mult

MergedFile

MergedFile PROIECT DIDACTIC Clasa a VI-a Matematică Proiect didactic realizat de Nicoleta Popa, profesor Digitaliada, revizuit de Ioan Popa, profesor Digitaliada Textul și ilustrațiile din acest document începând

Mai mult

PowerPoint Presentation

PowerPoint Presentation Forme Normale 4 Redundanţa Redundanţa este cauza principală a majorităţii problemelor legate de structura bazelor de date relaţionale: spaţiu utilizat, anomalii de inserare / stergere / actualizare. Redundanţa

Mai mult

Slide 1

Slide 1 SCTR -SZOKE ENIKO - Curs 4 continuare curs 3 3. Componentele hard ale unui sistem de calcul in timp real 3.1 Unitatea centrala de calcul 3.1.1 Moduri de adresare 3.1.2 Clase de arhitecturi ale unitatii

Mai mult