dorel lucanu - profs.info.uaic.rodlucanu/cursuri/progalg/resurse/curs1.pdf · d. lucanu –...
TRANSCRIPT
D. Lucanu – Programare Algebrica
Programare algebrica
Dorel Lucanu
D. Lucanu – Programare Algebrica
BibliografieW. Wechler, Universal Algebra for Computer Scientists,
Springer Verlag,1992J. Goguen, G. Malcolm, Algebraic Semantics of
Imperative Programs, MIT Press, 1996J. Goguen, T. Winkler, J. Meseguer, K. Futatsugi, J. P.
Jouannaud, Introducing OBJ,Technical Report, SRI International
M. Clavel, F. Durán, S. Eker, P. Lincoln, N. Martí-Oliet, J. Meseguer, and J. Quesada. A Maude Tutorial. Manuscript, March 2000.
Pagina cursuluihttp://www.infoiasi.ro/~dlucanu/cursuri/progalg/progalg.htm
D. Lucanu – Programare Algebrica
Curs 1• Introducere in limbaje de specificare algebrica
– module • sintaxa• semantica
–denotationala–operationala
• exemple in Maude
D. Lucanu – Programare Algebrica
Limbaje de specificare algebrica• OBJ3
– bazat pe logica ecuationala cu sorturi ordonate (OSEL)– primul limbaj de specificare algebrica care a
implementat complet programarea parametrizata• BOBJ
– bazat pe logica comportamentala ("hidden logic", HL)– include OBJ3
• Maude– bazat logica ecuationala a apartenentei (MEL) si logica
rescrierii (RWL)– permite lucrul la nivelul meta (proprietatea de
reflectare)• CafeOBJ• CASL (CoFI)
D. Lucanu – Programare Algebrica
Module• modul = specificatie
– signatura• sorturi• simboluri operationale (functionale)
– proprietati ale operatiilor• ecuatii simple (MSEL, OSEL, HL)• ecuatii conditionale (MSEL, OSEL, HL)• asertiuni de apartenenta (MEL)• specificatii de tranzitii (reguli de rescriere) (RWL)
D. Lucanu – Programare Algebrica
Tipuri de module• module obiect (functionale)
– semantica initiala (stransa)– descriu tipuri de date abstracte
• teorii– semantica relaxata ("loose")– descriu "tipul" parametrilor
• module sistem (numai in Maude)– descriu sisteme bazate pe reguli de tranzitie (RWL)
• module orientate-obiect (numai in Maude)– descriu obiecte si comunicarea intre obiecte (RWL)
• module comportamentale (numai in BOBJ)– descriu comportamentul independent de modul de
reprezentare a starilor
D. Lucanu – Programare Algebrica
Specificarea numerelor naturale (Peano)
fmod NAT-PEANO is sort Nat .op 0 : -> Nat . op s_ : Nat -> Nat .
endfm
Maude
Reprezentarea numerelor naturale:0 ~ 01 ~ s 02 ~ s s 0etc
D. Lucanu – Programare Algebrica
Specificarea numerelor naturale (op de baza)
fmod NAT-BASIC is sort Nat .op 0 : -> Nat . op s_ : Nat -> Nat .op _+_ : Nat Nat -> Nat .op _*_ : Nat Nat -> Nat .vars M N : Nat .eq M + 0 = M .eq M + s N = s(M + N) .eq M * 0 = 0 .eq M * s N = (M * N) + M .
endfm
Maude
D. Lucanu – Programare Algebrica
Specificarea valorilor booleene
fmod BOOL issort Bool .op true : -> Bool .op false : -> Bool .op not_ : Bool -> Bool .op _or_ : Bool Bool -> Bool .op _and_ : Bool Bool -> Bool .vars X Y : Bool .eq not true = false .eq not false = true .eq X and true = X .eq X and false = false .eq X or Y = not((not X) and (not Y)) .
endfm
Maude
D. Lucanu – Programare Algebrica
Model• model = algebra
– sorturile desemneaza multimiModelul 1 (M1) Modelul 2 (M2)[[Nat]] = N [[Nat]] = {a,b}*
– simbolurile operationale desemneaza operatii[[0]] = 0 [[0]] = [][[s]] (x) = x + 1 [[s]](w) = wa[[+]](x,y) = x+y [[+]](w,w') = ww'
– ecuatiile sunt satisfacute[[+]](x,0) = x [[+]](w, []) = w[[+]](x, y+1) = (x+y)+1 [[+]](w, w'a) = (ww')a
D. Lucanu – Programare Algebrica
Semantica denotationala a modulelor obiect (funct.)
• fiecare modul obiect (functional) desemneaza modelulinitial al specificatiei descrise de el:
Module obiect (functionale)
fmod ⟨nume_modul⟩ is ⟨sorturi⟩⟨operatii⟩⟨proprietati⟩
endfm
Maude
D. Lucanu – Programare Algebrica
Semantica operationala• ecuatiile sunt de fapt reguli de rescriere
• relatia de rescriere
D. Lucanu – Programare Algebrica
Rescriere: exemplu
X or true ⇒not((not X) and (not true)) ⇒not((not X) and false) ⇒not false ⇒true
D. Lucanu – Programare Algebrica
Experimente cu numere naturale in MaudeMaude> select NAT-BASIC .Maude> red s s 0 + s s s 0 .reduce in NAT-BASIC : s s 0 + s s s 0 .rewrites: 4 in -10ms cpu (10ms real) (~ rewrites/second)result Nat: s s s s s 0Maude> red s s 0 * s s s 0 .reduce in NAT-BASIC : s s 0 * s s s 0 .rewrites: 13 in -10ms cpu (0ms real) (~ rewrites/second)result Nat: s s s s s s 0Maude>
D. Lucanu – Programare Algebrica
Rescriere: notatii
D. Lucanu – Programare Algebrica
Rescriere: forme normale
Exemplu: in NAT-BASIC0 este ireductibils s 0 este forma normala a lui s 0 + s 0
D. Lucanu – Programare Algebrica
Rescriere: corectitudine si completitudine
D. Lucanu – Programare Algebrica
Rescriere: terminare• Problema
• E are proprietatea de terminare (este Noetherian) daca nu exista secvente infinite de forma:
D. Lucanu – Programare Algebrica
Rescriere: confluenta• Problema:
D. Lucanu – Programare Algebrica
Rescriere: confluenta (continuare)
D. Lucanu – Programare Algebrica
Rescriere: local confluenta
D. Lucanu – Programare Algebrica
Rescriere: lema lui Newman (de diamant)• Lema
Daca E are proprietatea de terminare, atunci E este confluent daca si numai daca este local
confluent.
Exemplu
X+s(Y+0)
X+sY s(X+(Y+0))
s(X+Y)
D. Lucanu – Programare Algebrica
Rescriere canonica (convergenta)• E canonic ddaca are proprietatea de terminare si este
confluent– propritatea de terminare exista cel putin o forma
norma– confluenta exista cel mult o forma norma– canonic forma normala unica
D. Lucanu – Programare Algebrica
Predicatul == in OBJ3BOBJ> red s s 0 + s s 0 == s s 0 * s s 0 .==========================================reduce in NAT-BASIC : (s (s 0)) + (s (s 0)) == (s (s 0)) * (s (s 0))result Bool: truerewrite time: 156ms parse time: 62msBOBJ>
• algoritm de evaluare pentru t1 == t21. calculeaza t1' = fn(t1)2. calculeaza t2' = fn(t2)3. daca t1' coincide cu t2' atunci intoarce true4. altfel intoarce false
• == intoarce rezultat corect numai daca E este canonic• daca E nu este canonic atunci == intoarce rezultat corect
numai daca intoarce true