39
D. Lucanu – Programare Algebrica Curs 3 Sorturi ordonate (OSEL) Asertiuni de apartenenta (MEL) Specificatii structurate

Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Curs 3

• Sorturi ordonate (OSEL)• Asertiuni de apartenenta (MEL)• Specificatii structurate

Page 2: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Order-Sorted Equational Logic (OSEL): problema• definirea operatiei predecesor peste numerele naturale

p : Nat -> Natp s N = N .p 0 = ?

• solutie:sorts NzNat Nat .subsort NzNat < Nat .op s : Nat -> NzNat .op p : NzNat -> Nat .

• relatia NzNat < Nat este interpretata ca incluziune ⊆

Page 3: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Signaturi ordonat-sortate

Page 4: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Liste à la Lispfmod LIST is

including NAT .sorts NeList List .subsort NeList < List .op nil : -> List .op cons : Nat List -> NeList .op car : NeList -> Nat .op cdr : NeList -> List .var N : Nat . var L : List .eq car(cons(N,L)) = N .eq cdr(cons(N,L)) = L .

endfm

Page 5: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Reprezentarea relatiei de ordine ca dag-uri

Nat

NzNat

List

NeList

Page 6: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Monotonicitatea in detail

op _;_ : NeList NeList -> Listop _;_ : NeList List -> NeList

• signatura nu mai este regulata deoareceNeList NeList < NeList List si List > NeList

• daca L1,L2:NeList, atunci L1;L2 ar putea fi si listavida conform primei declaratii si “musai” nevida conform celei de a doua declaratie

Page 7: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Termi ordonat-sortati

orice term de sort NzNat este un term de sort Nat

orice term de sort NeList este un term de sort List

Page 8: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Ecuatii ordonat-sortate

Page 9: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Algebre ordonat-sortate

Page 10: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Algebre ordonat-sortate: exempluop _+_ : NzNat NzNat -> NzNat .op _+_ : Nat NzNat -> NzNat .op _+_ : NzNat Nat -> NzNat .op _+_ : Nat Nat -> Nat .

[[Nat]] = N[[NzNat]] = N* = N – {0}

[[+Nat,Nat]] N*xN* = [[+NzNat,NzNat]] [[+Nat,Nat]] NxN* = [[+Nat,NzNat]][[+Nat,Nat]] N*xN = [[+NzNat,Nat]]

Page 11: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Membership Equational Logic (MEL): problema• drumuri in grafuri

th GRAPH issorts Node Edge .ops s t : Edge -> Node .

sort Path .subsorts Node Edge < Path .op _;_ : Path Path -> Path ....

endth

Page 12: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: problema (continuare)operatia _;_ este partial definita

P;Q ∈ Path

P ∈ Path Q ∈ Path t(P) = s(Q)

Page 13: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: problema• limbaje de programare: mai multe tipuri

x ∈ IntVar

int x;

b ∈ BoolVar

bool b;

eval(mem, x) ∈ Int

x ∈ IntVar

eval(mem, b) ∈ Bool

b ∈ BoolVar

• Notatie: x : S in loc de x ∈ S

Page 14: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: cvasi-sorturi (kinds)

• drumuri in grafuri– consideram un cvasi-sort [Path] ([Path] este un fel

de Path)– definim:

_;_ : [Path] [Path] -> [Path]– spunem ca sortul Path este de cvasi-sort (are asociat

cvasi-sortul) [Path]

– impunem restrictia:(P ; Q) : Path if (P : Path and Q : Path and t(P) == s(Q))

Page 15: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: signaturi

Page 16: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: propozitii atomice

Page 17: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: propozitii conditionale

Page 18: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: modele

Page 19: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL si OSEL

• relatia de subsort: s ≤ s'X : s' if X : s .

• operatii: w = s1...sn ≤ w’ = s’1...s’n(w,s) ≤ (w’,s’) f : w -> sf : w’ -> s’

– poate fi modelata prin:f : w? -> s? (w? = w’?, s? = s’?)f(X1,...,Xn) : s if X1 : s1 and ... Xn : snf(X1,...,Xn) : s' if X1 : s'1 and...Xn : s'n

Page 20: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Maude: module functionale

• Modulele functionale in Maude sunt specificatii in MELfmod NAT is

sorts Nat .op 0 : -> [Nat] . op s_ : [Nat] -> [Nat] .op _+_ : [Nat] [Nat] -> [Nat] .vars M N : [Nat] .eq M + 0 = M .eq M + s N = s(M + N) .mb 0 : Nat .cmb s N : Nat if N : Nat .

endfm

Page 21: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

MEL: inductiefmod NAT-PROOF is

protecting NAT . ops m n : -> [Nat] .mb m : Nat .mb n : Nat .mb (m + n) : Nat . *** inductive hypothesis

endfmred (m + 0) :: Nat .red (m + s n) :: Nat .

Maude> red (m + 0) :: Nat .reduce in NAT-PROOF : (m + 0) :: Nat .rewrites: 4 in ...result Bool: trueMaude> red (m + s n) :: Nat .reduce in NAT-PROOF : (m + s n) :: Nat .rewrites: 7 in ...result Bool: true

Page 22: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Module cu semantica relaxata (teorii)th TRIV is

sort Elt .endth

semantica: categoria multimilor

th MON is sort Elt .op e : -> Elt .op _*_ : Elt Elt -> Elt [assoc id: e] .

endth

semantica: categoria monoizilor

Page 23: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Importul de specificatii: exemplufmod NAT-PEANO issort Nat . op 0 : -> Nat .op s_ : Nat -> Nat .

endfm

fmod NAT3 isincluding NAT-PEANO . eq s s s 0 = 0 .

endfm

Page 24: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Importul de specificatii: exemplu (continuare)• NAT3 este echivalenta cu:

fmod NAT3 issort Nat . op 0 : -> Nat .op s_ : Nat -> Nat .eq s s s 0 = 0 .

endfm

elemente distincte in NAT-PEANO sunt identificate in NAT3

Page 25: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Importul protejat de specificatii: exemplu I

fmod MYBOOL is sort MyBool .op tt : -> MyBool .op ff : -> MyBool .

endfm

fmod NATLT isprotecting MYBOOL.sort Nat . op 0 : -> Nat .op s_ : Nat -> Nat .op _<_ : Nat Nat -> MyBool .eq N < s(N) = tt .

endfm

Page 26: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Importul protejat de specificatii: exemplu I (cont)fmod NATLT issort MyBool .sort Nat . op tt : -> MyBool .op ff : -> MyBool . op 0 : -> Nat .op s_ : Nat -> Nat .op _<_ : Nat Nat -> MyBool .eq N < s(N) = tt .

endfm

semantica: (N, {tt, ff}, 0, s, <)elementele din MYBOOL sunt pastrate intacte

Page 27: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Importul protejat de specificatii: exemplu II

th MON# is protecting NAT .sort Elt .op e : -> Elt .op _*_ : Elt Elt -> Elt [assoc id: e] .op #_ : Elt -> Nat .vars X Y : Elt .eq # e = 0 .eq #(X * Y) = (# X)+(# Y) .

endthsemantica: categoria structurilor (M, N, *, e, +, 0, #) a.i. (M, *, e) monoid si # : (M, *, e) → (N, +, 0) este un homomorfism de monoizi

Page 28: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Morfisme de signaturi (perspective): exemple• algebra nr. nat. ca monoid – versiunea 1view NAT-AS-MON-VER1 from MON to NAT is

sort Elt to Nat .op e to 0 .op _*_ to _+_ .

endv

• algebra nr. nat. ca monoid – versiunea 2view NAT-AS-MON-VER2 from MON to NAT is

sort Elt to Nat .op e to 1 .op _*_ to _*_ .

endv

Page 29: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Morfisme de signaturi (perspective): exemple (cont.)

Page 30: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Specificatii parametrizate: multimi genericefmod BASIC-SET{X :: TRIV} isprotecting BOOL .sorts Set{X} NeSet{X} .subsorts X$Elt < NeSet{X} < Set{X} .op empty : -> Set{X} .op _,_ : Set{X} Set{X} -> Set{X} [assoc comm id: empty] .op _,_ : NeSet{X} NeSet{X} -> NeSet{X} [ditto] .op _in_ : X$Elt Set{X} -> Bool .op _\_ : Set{X} Set{X} -> Set{X} . *** set difference

var E : X$Elt .vars S S' : Set{X} .eq E, E = E .eq E in E, S = true .eq E in S = false [owise] .eq (E, S) \ (E, S') = S \ (E, S') .eq S \ S' = S [owise] .

endfm

Page 31: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Specificatii parametrizate: stive genericefmod STACK{X :: TRIV} is

protecting BOOL .sorts NeStack{X} Stack{X} .subsort NeStack{X} < Stack{X} .op empty : -> Stack{X} [ctor] .op push : X$Elt Stack{X} -> NeStack{X} [ctor] .op pop : NeStack{X} -> Stack{X} .op top : NeStack{X} -> X$Elt .op isEmpty : Stack{X} -> Bool .

var S : Stack{X} .var E : X$Elt .

eq pop(push(E, S)) = S .eq top(push(E, S)) = E .eq isEmpty(empty) = true .eq isEmpty(push(E, S)) = false .

endfm

Page 32: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Specificatii parametrizate: liste genericefmod LIST-CONS{X :: TRIV} is

protecting NAT .

sorts NeList{X} List{X} .subsort NeList{X} < List{X} .

op [] : -> List{X} [ctor] .op _:_ : X$Elt List{X} -> NeList{X} [ctor] .op tail : NeList{X} -> List{X} .op head : NeList{X} -> X$Elt .

var E : X$Elt .var N : Nat .vars L L' : List{X} .

eq tail(E : L) = L .eq head(E : L) = E .

op _++_ : List{X} List{X} -> List{X} .op length : List{X} -> Nat .op reverse : List{X} -> List{X} .

eq [] ++ L = L .eq (E : L) ++ L' = E : (L ++ L') .eq length([]) = 0 .eq length(E : L) = 1 + length(L) .eq reverse([]) = [] .eq reverse(E : L) = reverse(L) ++ (E : []) .

endfm

Page 33: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Specificatii parametrizate: definitie

Page 34: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Instantiere: exemplu• multimi de numere naturaleview NAT-AS-TRIV from TRIV to NAT is

sort Elt to Nat . endv

fmod NATSET is protecting SET{NAT-AS-TRIV} .

endfm

• anumite elemente (sorturi, operatii) pot fi redenumite

fmod NATSET is protecting SET{NAT-AS-TRIV} *

(sort Set{NAT-AS-TRIV} to NatSet) .endfm

Page 35: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Instantiere: exemplu (continuare)• NATSET se obtine ca ``pushout''-ul perechii formate din

parametru si instanta:

TRIV SET{X}

NAT NATSET

X

NAT-AS-TRIV

Page 36: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Redenumire

fmod INT-BARE isprotecting(NAT-PEANO * (sort Nat to Int)) .op p_ : Int -> Int .var I : Int .eq s p I = I .eq p s I = I .

endfm

Page 37: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Suma partajata: exemplufmod NLS is

protecting LIST{Nat} .protecting STACK{Nat} .

endm

NAT

NLSSTACK{Nat}

LIST{Nat}

Page 38: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Suma partajata: exemplu (continuare)Maude> show all NLS .fmod NLS is

sorts Bool Zero NzNat Nat NeList{Nat} List{Nat} NeStack{Nat} Stack{Nat} .subsorts Zero NzNat < Nat .subsort Nat < NeList{Nat} .subsort NeList{Nat} < List{Nat} .subsort NeStack{Nat} < Stack{Nat} .op if_then_else_fi :

Bool Universal Universal -> Universal...

endfm

Page 39: Curs 3 • Sorturi ordonate (OSEL) • Asertiuni de ...dlucanu/cursuri/progalg/resurse/curs3.pdf · D. Lucanu – Programare Algebrica Curs 3 • Sorturi ordonate (OSEL) • Asertiuni

D. Lucanu – Programare Algebrica

Expresii de module⟨expr-mod⟩ ::= ⟨nume-modul ⟩ |

⟨nume-modul⟩[⟨lista-perspective⟩] |⟨nume-modul⟩*(⟨lista-redenumiri⟩) |⟨expr-mod⟩ + ⟨expr-mod⟩ |(⟨expr-mod⟩)