1 / 14

SPECIFICA DELLE MAPPE FINITE

SPECIFICA DELLE MAPPE FINITE. Gianna Reggio reggio@disi.unige.it. Applicazione/esempio grande. Madre di tutti gli esercizi/esempi la più usata specifica nelle applicazioni vere dare la specifica della struttura dati mappe finite, per semplicità da stringhe di caratteri in naturali

eyal
Télécharger la présentation

SPECIFICA DELLE MAPPE FINITE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SPECIFICA DELLE MAPPE FINITE Gianna Reggio reggio@disi.unige.it

  2. Applicazione/esempio grande • Madre di tutti gli esercizi/esempi • la più usata specifica nelle applicazioni vere • dare la specifica della struttura dati mappe finite, per semplicità da stringhe di caratteri in naturali • si richiedono operazioni per rappresentare tutti i dati (caratteri, stringhe, naturali, mappe) costruttori • operazioni sulle mappe: • mappa vuota (nessuna associazione) • aggiungere/eliminare/modificare una associazione • trovare il numero associato ad una stringa • dominio/codominio di una mappa • controllare se una mappa è vuota/è iniettiva

  3. Come procedere • scomporre modularmente il compito in • specificare i naturali • specificare le stringhe di caratteri • specificare la mappe basiche (cioè solo i costruttori e l’operazione per ritrovare il numero associato ad una stringa) “operazioni necessarie per costruire i termini per rappresentare tutti i valori di interesse” • specificare una ad una le ulteriori operazioni e predicati

  4. Linguaggio di specifica • Utilizzeremo un semplicissimo linguaggio di specifica per presentare le varie specifiche • Esercizio 24.5: individuare I vari costrutti di tale linguaggio, mano a mano che li utilizzeremo, precisandone sintassi e semantica.

  5. Naturali spec NAT = Sorts nat Opns 0:nat succ: nat -> nat Axioms Def(0) Def(succ(x)) • Consideriamo solo i modelli term-generated di NAT specG NATg = generated { NAT } • Esercizio 25: aggiungere a NAT le 5 operazioni (somma, sottrazione, moltiplicazione, divisione intera e resto della divisione intera). • Esercizio 26: aggiungere il predicato ≤.

  6. Aggiunta di < spec NAT1 = extend NAT Preds _<_: nat x nat Axioms x < succ(x) x < y  x < succ(y) • Esercizio 27: • 0 < succ(x) è valida in NAT1 ? • 0 < succ(x) è valida in generated { NAT1 } ?

  7. Stringhe di caratteri spec STRING = Sorts char, string Opns L: string -- stringa vuota _:_ :char x string -> string -- aggiunta elemento in testa ’A’,…,’Z’: char -- le 26 lettere -- permettono di rappresentare tutte le stringhe Axioms -- tutte le operazioni sono totali Def(L) Def(c:s) Def(’A’) … Def(’Z’)

  8. Esercizi • Esercizio 28:Si consideri spec STRING1 = extend STRING Axioms c = ‘A’  …  ‘Z’ s = L ( c:char.  s’:string. s = c:s’) è vero che i modelli di STRING1 e quelli di generated {STRING} sono gli stessi ? • Soluzione. No, infatti l’algebra DOPPIA definita come segue charDOPPIA = { A, …., Z } stringDOPPIA = { *, + } ‘A’DOPPIA = A ... ‘B’DOPPIA = B LDOPPIA = * _:_DOPPIA(c,s) = s è un modello di STRING1 ma non è term-generated. Verificare per esercizio quanto affermato sopra.

  9. Esercizi • Esercizio 29:Ogni modello di generated {STRING} rappresenta ottimamente la struttura dati delle stringhe ? • Soluzione. No, infatti un’algebra banale (cioè dove ogni carrier contiene esattamente un singolo elemento, e dove le operazioni sono totali e definite nel modo ovvio) è un modello di tale specifica, e non rappresenta per niente le stringhe.

  10. Stringhe di caratteri 2 spec STRING2 = extend STRING Axioms ‘A’≠‘B’ … ‘A’≠‘Z’ … ‘W’≠‘Z’ L≠ c:s c1≠c2 s1≠s2 c1:s1 ≠ c2:s2 • Esercizio 30:Ogni modello di generated {STRING2} rappresenta ottimamente la struttura dati delle stringhe ?

  11. Mappe basiche (1) spec MAP = extend NAT, STRING2 Sorts map Opns []: map -- mappa che non contiene alcuna associazione _[_/_]: map x nat x string -> map -- aggiunta associazione o modifica associazione __[_]:map x string -> nat -- ritorna il naturale associato ad una stringa -- se esiste Axioms -- tutte le operazioni sono totali Def([]) Def(m[n/s]) [] ≠ m[n/s] (m1 ≠ m2 n1 ≠ n2 s1 ≠ s2) m1[n1/s1] ≠ m2[n2/s2] è accettabile ??? NO!

  12. Mappe basiche (2) • è possibile dare assiomi che richiedano tutte le possibili identificazioni sugli elementi rappresentati da [] e _[_/_] • Esercizio 31:Dare tali assiomi. • oppure è possibile definire prima l’operazione _[_] e poi richiedere che due mappe sono uguali ses associano gli stessi naturali alle stesse stringhe

  13. Mappe basiche (3) -- continuazione degli assiomi di MAP -- definizione di _[_] Def([][s]) m[n/s][s] = n s ≠ s’  m[n/s][s’] = m[s’] -- identificazioni sulle mappe ( s:string . m[s] = m’[s])  m = m’

  14. Operazione xxxx sulle mappe

More Related