Specifiche Algebriche Specifiche Loose o Propertyoriented Versione 1
Specifiche Algebriche Specifiche Loose o Propertyoriented Versione 1. 0 Gianna Reggio reggio@disi. unige. it
Indice • Logica del prim’ordine, many-sorted, parziale con uguaglianza – Segnatura many-sorted del prim’ordine – Algebra many-sorted parziali del prim’ordine – Formule – Interpretazione e validità – Sistema deduttivo sound e completo • Specifiche loose o property-oriented Versione 1. 0
Segnatura many-sorted del prim’ordine • Una segnatura S = (S, F, P) consiste di – un insieme S di nomi dei tipi, o sort – una famiglia F di simboli di funzioni, indiciata su S* S • se f Fs 1…sn, s indicheremo f: s 1 … sn s – una famiglia P di simboli di predicati, indiciata su S* • se p Ps 1…sn indicheremo p: s 1 … sn Versione 1. 0
Esempio: Slist • segnatura per le liste di interi • S = { int, list } • F consiste di – 0: int [zerario, costante] – S: int – empty: list – push: int list – pop: list – top: list int • P consiste di – isempty: list – is. In: int list • Esercizio 1: S S definire lista aggiungendo a list la concatenazione di liste e l’operazione che ritorna Versione 1. 0 l’insieme degli elementi di una lista
Algebra parziale con predicati • Data una segnatura S = (S, F, P) una Salgebra A (parziale con predicati) consiste di – un insieme s. A per ogni s S, detto carrier o supporto di tipo s in A – una funzione parziale f. A: s 1 A … sn. A s. A per ogni f: s 1 … sn s F, detta interpretazione di f in A – un insieme p. A s 1 A … sn. A per ogni p: s 1 … sn P, detto insieme di verità, o interpretazione di p in A • Se tutte le funzioni di un’algebra sono totali, l’algebra si dice totale Versione 1. 0
Esempio: L • Algebra sulla segnatura Slist: – carriers • int. L = N • list. L = N* – interpretazione funzioni • 0 L = 0 • SL(x) = x+1 • empty. L = L • push. L(n, l) = n l • pop. L(n l) = l e pop. L(L) indefinito • top. L(n l) = n e top. L(L) indefinito – interpretazione predicati • isempty. L ={L} • is. In. L ={ (n, x) | i [1, |x|]. x(i)=n } Versione 1. 0
Esercizi • Esercizio 2: estendere L per Slista-algebra (vedere Esercizio 1). • Esercizio 3: ottenere una S definire una list- algebra L 2 dove il carrier di int è Z e l’interpretazione di pop è un’operazione totale. Versione 1. 0
Termini su una segnatura • Data una segnatura S = (S, F, P) ed una famiglia X indiciata su S di insiemi di variabili – i S-termini sono definiti come per la segnatura (S, F) – precisamente, la famiglia di tali termini, indiciata su S, si indica TS(X), è definita come segue • Xs TS(X)s per ogni s S • f(t 1, …, tn) TS(X)s per ogni f: s 1 … sn s F, t 1 TS(X)s , …, tn TS(X)s 1 n • Esercizio 4: dare alcuni esempi di termini corretti su Slist e di alcune stringhe che non corrispondono ad alcun termine, precisando le variabili usate. Versione 1. 0
Formule • Le formule logiche, LS(X), sono definite come nel caso della logica del prim’ordine sui simboli funzionali F e predicativi P, ovvero per induzione come segue: – p(t 1, …, tn) LS(X), per ogni p: s 1 … sn P, e termini ti TS(X)s i [formule atomiche] – se e LS(X), x Xs , allora , , x: s. e x: s. LS(X) Versione 1. 0
Esempi di formule su Slist • is. Empty(pop(push(n, empty))) • x: list. is. Empty(x) is. In(top(x), x) • is. Empty(l) is. Empty(pop(l)) • Esercizio 5: dare esempi di formule sulla segnatura Slista precisando le variabili usate (vedere Esercizio 1). Versione 1. 0
Interpretazione e validità • La validità delle formule logiche in un’algebra parziale con predicati A è definita come nel caso della logica classica, per induzione sulla forma delle formule, basandosi sul concetto di interpretazione t. A, V di un termine t in un’algebra A rispetto ad una valutazione V (almeno) delle variabili che vi compaiono in A Versione 1. 0
Interpretazione “nel mondo parziale” • Una valutazione V: X A è una famiglia di funzioni totali Vs: Xs s. A • Data una valutazione V: X A, l’ interpretazione dei termini, indicata _A, V: TS(X) A, è una famiglia di funzioni parziali _A, V: TS(X)s s. A definita per induzione sui termini come segue sono sempre definiti – x. A, V = Vs(x) se x Xs – se t 1 A, V= a 1 s 1 A, …, tn. A, V = an sn. A, f. A(a 1, …, an) = a s. A, allora f(t 1, …, tn)A, V = a devono essere definiti, con tutti i loro sottotermini e i rispettivi valori devono appartenere al dominio di f affinché un termine sia definito Versione 1. 0
Esempio • (solita segnatura Slist ed algebra L, V valutazione qualsiasi) – – – (pop(push(n, empty)))L, V = pop. L((push(n, empty))L, V) = pop. L(push. L(n. L, V, empty. L, V)) = pop. L(push. L(V(n), empty. L)) = pop. L(push. L(V(n), L)) = pop. L(V(n) L) = L • Esercizio 6: interpretare i termini introdotti dalle precedenti parti esempio ed esercizi, utulizzando almeno due differenti valutazioni. • Esercizio 7: Dare esempi di termini la cui interpretazione risulti indefinita per una data valutazione. Versione 1. 0
Validità 1 • Sia V: X A una valutazione ed F una formula in LS(X) F vale (o è valida) in A [A soddisfa F] rispetto a V, indicato A|=V F se e solo se: F è p(t 1, …, tn) e (t 1 A, V, …, tn. A, V) p. A F è G e A|≠V G F è G H e sia A |=V G che A |=V H F è G H e A |=V G oppure A |=V H F è G H e A |=V H oppure A|≠V G F è x: s. G ed esiste V’: X A t. c. V’(y) = V(y) se y≠x, t. c. A |=V’ G – F è x: s. G e per ogni V’: X A t. c. V’(y) = V(y) se y≠x, A |=V’ G Versione 1. 0 – – –
Esempio • (solita segnatura Slist ed algebra L, valutazione V qualsiasi) – – L |=V is. Empty(pop(push(n, empty))) ? ? pop(push(n, empty))L, V = L isempty. L = { L } pertanto is. Empty(pop(push(n, empty))) vale in L rispetto a V ed ad ogni altra valutazione • Esercizio 8: Dire se le altre formule usate negli esempi precedenti sono valide in L per una qualche valutazione. • Esercizio 9: Dare esempi di formule che siano valide in L per una qualche valutazione e non valide per qualche altra valutazione. Versione 1. 0
Validità 2 • x X occorre libera in t TS(X) se e solo se – tèx – t è f(t 1, …, tn) e x occorre libera in ti con 1 ≤ i ≤ n • x X occorre libera in z LS(X) se e solo se – F è p(t 1, …, tn) e x occorre libera in ti con 1 ≤ i ≤ n – F è G e x occorre libera in G – F è G H e x occorre libera in G o in H – F è v H e x occorre libera in G o in H – F è y: s. G ed y ≠x e x occorre libera in G – F è y: s. G ed y ≠x e x occorre libera in G Versione 1. 0
Validità 3 • Una formula F è valida in un’algebra A, indicato A|= F – se e solo se A|=V F per ogni valutazione delle variabili libere di F in A, – cioè se e solo se A|=V { x: s | x Xs X occorre libera in z }. F (chiusura universale di F) Versione 1. 0
Esempio • (solita segnatura Slist ed algebra L) – L |= is. Empty(pop(push(0, l))) ? ? – l occore libera nella formula (ed è l’unica) – V 1(l) = L L |=V 1 is. Empty(pop(push(0, l))) (*) – V 2(l) = 0 L L |≠V 2 is. Empty(pop(push(0, l))) (**) – pertanto L |≠ is. Empty(pop(push(0, l))) • Esercizio 10: Dimostrare con tutti i dettagli (*) e • Esercizio 11: • Esercizio 12: Esibire una formula valida in L. (**). Che cosa manca, secondo voi, alla logica introdotta fino ad ora per esprimere tutte le ragionevoli proprietà dele strutture dati ? Versione 1. 0
Uguaglianza • Vogliamo aggiungere il simbolo di uguaglianza alla nostra logica. • Per poter esprimere formule di qualsiasi tipo con uguaglianze, basta aggiungere l’uguaglianza come formula atomica e darne l’interpretazione semantica in una generica algebra rispetto ad una valutazione delle formule. Poi essendo sia le formule che la loro validità definita per induzione, si propagheranno senza problemi. • Nel caso totale due termini sono uguali se denotano (sono rappresentazioni sintattiche di) lo stesso valore, ovvero se la loro valutazione porta allo stesso risultato. Versione 1. 0
Uguaglianza nel mondo parziale • Nel caso parziale, le due frasi non sono più equivalenti perché c’è il caso in cui le due valutazioni portano allo stesso risultato: indefinito. • Quindi nel caso parziale ci sono naturalmente due nozioni di uguaglianza • t = t’ (uguaglianza forte) A|=V t=t’ se e solo se t. A, V = t’A, V (cioè entrambi indefiniti, oppure entrambi definiti e rappresentanti lo stesso valore) • • t =e t’ (uguaglianza esistenziale) A|=V t =e t’ se e solo se esiste a s. A t. c. t. A, V = a = t’A, V Versione 1. 0
Definitezza • Vogliamo poter richiedere la “definitezza” delle funzioni • introduciamo nuovi atomi Def(t) con t TS(X) la cui validità vuol dire che t è definito in A rispetto a V, cioè t. A, V s. A • Oppure per ogni sort s S introduciamo un – predicato standard Defs: s – con interpretazione fissa e coincidente con tutto il carrier di s • Si ha che – t 1 =e t 2 equivalente a t 1 = t 2 Def(t 1) – Def(t) equivalente a t =e t • Esercizio 13: Precisare cosa significa l’“equivalente” usato sopra. Provare poi le due affermazioni. Versione 1. 0
La logica • Completiamo la nostra logica con l’uguaglianza esistenziale. Come derivati abbiamo l’uguaglianza forte e atomi per richiedere la definitezza dei termini. • Esercizio 14: Completare la definizione di LS(X) e per includere le nuove formule e dare la corrispondente validità. Versione 1. 0
Esempi • “nuove” formule su Slist e X = {x: int, l: list} – – Def(0), Def(empty) top(push(x, l)) = x top(push(x, l)) =e x top(empty) = 0, pop(empty) = empty push(top(l), pop(l)) = l (*) • * è valida in L (L |= * ) ? – No, poiché • data V 1 t. c. V 1(l) = 0 L V 2 t. c. V 2(l) = L L |=V 1 * L |≠V 2 * – Invece is. Empty(l) push(top(l), pop(l)) = l è valida in L • Esercizio 15: • Esercizio 16: dettagliare le affermazioni precedenti. Esibire delle formula con ugualianza e Versione 1. 0 definitezza valide e non valide in L.
Strettezza • Funzioni (e predicati) in quest’approccio sono stretti, cioè restituiscono un valore (sono veri) solo su argomenti definiti • Prop. Fissate una segnatura S = (S, F, P), una S-famiglia X di variabili, dei termini ti TS(X)si, una S-algebra A ed una valutazione V: X A. 1) Per ogni f: s 1 … sn s F, A|=V Def(f(t 1, …, tn)) implica A|=V Def(ti) 2) Per ogni p: s 1 … sn P, A|=V p(t 1, …, tn) implica A |=V Def(ti) • Prova 1) A|=V Def(f(t 1, …, tn)) se e solo se f(t 1, …, tn)A, V s. A cioè, per definizione di interpretazione, se e solo se t 1 A, V= a 1 s 1 A, …, tn. A, V = an sn. A e f(t 1, …, tn)A, V = f A(a , …, a ) s. A, allora t A, V s A e quindi A|= Def(t ). 1 n i i V i 2) Analogamente (per esercizio) • Quindi l’uguaglianza forte (che vale anche quando entrambi i lati non sono definiti) non può essere un predicato, mentre l’uguaglianza esistenziale sì. Versione 1. 0
Osservazioni • La logica parziale del prim’ordine ha lo stesso potere espressivo di quella totale. • Nel definire la validità di una formula abbiamo scelto di allontanarci il meno possibile dalla logica classica (totale). – Per questo non abbiamo cambiato il dominio di valutazione delle formule, che possono essere solo vere o false: Logica a due valori – Quindi abbiamo scelto che un’applicazione di predicato ad un termine indefinito valesse falso. Attenzione: questo non vuol dire che tutte le formule in cui compare un termine indefinito sono false, per esempio A|≠V Def(t) implica A|=V Def(t) Versione 1. 0
Logiche a tre valori • Una scelta più radicale sarebbe stata passare ad una logica a 3 valori, in cui una formula può essere vera, falsa o indefinita. • Logiche a 3 valori permettono di discriminare situazioni che le logiche a 2 valori inevitabilmente identificano. • Però ai fini delle specifiche del sw funzionale e sequenziale, non sono strettamente necessarie (e quindi non le facciamo) Versione 1. 0
Specifiche • Una specifica Sp è una coppia (S, Ax), dove Ax LS(X) – gli elementi di Ax sono detti assiomi di Sp • I modelli di Sp (semantica di Sp) sono tutte le Salgebre che soddisfano tutti gli assiomi di Sp, cioè Mod(Sp) = {A | A S-algebra e A|= ax per ogni ax Ax} • Questo approccio è detto – LOOSE • nessuna restrizione/costrizione sui modelli della specifica (si prendono tutti) – o PROPERTY-ORIENTED • specificare = dare tutte e sole le proprietà Versione 1. 0
Esempio: specifica di “liste di interi” 1 • Splist =(Slist, PROPlist) t 1 ≠ t 2 • PROPlist equiv. a – Def(0), Def(succ(x)) -- 0, succ totali t 1 = t 2 – 0 ≠ succ(x), x ≠ succ(x) – x = y succ(x) = succ(y) * – x ≠ y succ(x) ≠ succ(y) -- succ iniettiva – Def(empty), Def(push(x, l)) -- empty, push totali – -- pop e top parziali • l ≠ empty Def(pop(l)) Def(top(l)) • Def(pop(empty)) Def(top(empty)) – pop(push(x, l)) = l top(push(x, l)) = x • Ci sono assiomi inutili ? * è una proprietà di ogni funzione Versione 1. 0
Esempio: specifica di “liste di interi” 2 • Definizione di is. Empty A) is. Empty(empty), is. Empty(push(x, l)) B) is. Empty(l) <=> l = empty C) is. Empty(l) <=> l ≠ empty F 1 <=> F 2 equiv. a F 1 F 2 F 1 • Sono equivalenti le tre definizioni ? – B e C yes – A e B no • In una Slist-algebra esistono elementi che non sono rappresentati nè da empty nè da push(x, l) Esercizio 17: dare un ulteriore insieme di assiomi/ proprietà che riguardino is. Empty. Esercizio 18: dare tutte le proprietà del predicato is. In. Esercizio 18 bis: definire ulteriori combinatori logici derivati che si pensa possano essere utili. Versione 1. 0
Modelli term-generated • Fra i modelli di una specifica sono particolarmente interessanti i modelli term-generated (generati dai termini), cioè quei modelli in cui ogni elemento dei carrier è interpretazione di un termine senza variabili. • Una S-algebra A è detta term-generated se _A, : TS( ) A surgettiva • GMod(Sp) = { A | A Mod(Sp) e A è term-generated } – Ci sono solo gli elementi necessari per interpretare le asserzioni sull segnatura – Viceversa, ogni elemento in tali modelli è rappresentabile utilizzando la segnatura – Permettono di utilizzare tecniche induttive Versione 1. 0
Occorre saper • Leggere/comprendere una specifica ? Padronanza della semantica • Controllare se un’algebra è un modello di una specifica model-checking • Ragionare sulle formule – Proprietà derivate • Se un’algebra soddisfa una formula, allora deve soddisfare anche altre formule – Assiomi della logica • formule che valgono in ogni algebra Sistemi deduttivi • Controllare se una specifica verifica una certa proprietà (tutti i suoi modelli la verificano) Sistemi deduttivi • Trovare le proprietà di una struttura dati (assiomi di una specifica) ? guidelines Versione 1. 0
Esercizi • Si consideri la solita segnatura Slist • Assumendo che i predicati is. Empty ed is. In rappresentino le due ovvie condizioni sulle liste – Dire usando la lingua italiana/inglese che proprietà sulle liste esprimono le seguenti formule • is. Empty(l) ˚ is. In(x, l) • is. Empty(l) ˚ x: int. is. In(x, l) • x: int. (is. Empty(l) ˚ is. In(x, l)) • is. Empty(l) ˚ x: int. is. In(x, l) – Dare una formula che richieda che • se un numero diverso da zero appartenesse ad una lista, allora anche 0 apparterebbe alla medesima lista • il top di una lista appartenga alla lista stessa • Se un numero appartiene ad una lista, allora esiste una lista il cui top è Versione 1. 0 proprio tale numero
Model-checking • Data una specifica Sp = (S, Ax), ed una Salgebra A come si fa a verificare se A è un modello di Sp? • Basta usare la definizione – Si controlla se ogni assioma in Ax è valido in A – Controllando se è valido per ogni valutazione delle sue variabili libere Versione 1. 0
Esempio • solita segnatura Slist ed algebra L • L |= is. In(x, l) is. In(x, push(y, l)) – – Le variabili libere sono FV ={ x, y: int, l: list } Si fissa una valutazione V per FV in A Siano V(x), V(y) N e V(l) N* Si applica la definizione di validità e di interpretazione un passo alla volta • L |=V is. In(x, l) is. In(x, push(y, l)) sse L |≠V is. In(x, l) o L |=V is. In(x, push(y, l)) • L |≠V is. In(x, l) sse (x. L, V, l. L, V) is. In. L sse • …. . • Esercizio 19: completare la verifica della validità della formula. • Esercizio 20: L |= is. In(y, l) is. In(y, push(x, l)) • Esercizio 21: L |= is. In(x, l) is. In(x, push(x, l)) Versione 1. 0
Conseguenza semantica • Quando dalla soddisfazione di un insieme di formule consegue la soddisfazione di un’altra formula • Siano G LS(X) e F LS(X) , – G |= F (F segue da G) ses per ogni S-algebra A e per ogni valutazione v di X in A (A|=V G per ogni G G) implica A |=V F • Esercizio 23: Dire se è equivalente definire la conseguenza semantica come “G |= F ses (per ogni S-algebra A A|= x per ogni x G) implica (per ogni S-algebra A A |= )” Versione 1. 0
Sistemi deduttivi • Un sistema deduttivo è una relazione fra insiemi di formule G (gli assiomi assunti veri) e formule (le formule dedotte a partire dagli assiomi) indicato G |- F • Un sistema deduttivo per la nostra logica è sound (corretto) se G |- F implica G |= F. • Un sistema deduttivo è completo rispetto ad una classe di formule F se G |= F implica G |- F per ogni F F • Perché abbia un’utilità pratica un sistema deduttivo deve essere: • Sound (non vogliamo dedurre falsità) • Completo rispetto ad una classe ragionevolmente ampia di formule • Descritto in modo effettivo, cioè in modo da poter essere usato come mezzo di calcolo * Di solito un sistema deduttivo si presenta mediante un insieme di regole di inferenza Versione 1. 0
Un sistema deduttivo per la nostra logica • stile deduzione naturale • non considera i combinatori derivati • Esercizio 23 bis: trovare un insieme di combinatori minimali per la nostra logica. • sound e completo, se consideriamo algebre con carriers non vuoti • preliminari – sostizuzione (di variabili con termini) : X TS(Y) – applicare una sostituzione t TS(X), t[ ] TS(Y) F LS(X), F[ ] LS(Y) • potrebbe essere indefinito, nei casi in cui una variabile libera diventi legata ( , ) • Esercizio 24: definire t[ ] e [ ] indicando quest’ultima non è definita. Versione 1. 0
Il sistema |- (1) • • Assumption -introduction -left elimination -right elimination • Tertium non datur _______ F |- F F 1 |- F F 2 |- G _______ F 1 F 2 | - F G F |- F G _______ F |- F G false formula atomica sempre falsa _______ F |- G F 1 { F } |- G F 2 {F false} |- G _______________ F 1 F 2 | - G Versione 1. 0
Il sistema |- (2) F |- false _____ • Absurdity • Cut F |- F F 1 |- F 1 … F n G i F 2 |- G 1 … G k H ______________________ F 1 F 2 |- G 1 … Gi-1 F 1 … Fn Gi+1 … Gk H F {F 1, …, Fn } |- G • -introduction _________ • -elimination _____ • -introduction F |- F 1 … F n G F |- x. F F |- F _____ F |- x. F se x non occorre libero in F Versione 1. 0
Il sistema |- (3) _____ • Reflexivity • Congruence F |- x = e x per x X F |- F __________ F |- ( x in F x =e (x)) F[ ] sostituzione, F[ ] definito F |- F • Substitution ____________ F[ ] |- ( x in F Def( (x))) F[ ] • Function strictness • Predicate strictness F |- Def(t) ______ F |- Def(t 1) F |- p(t 1, …, tn) t 1 sottotermine di t _______ F |- Def(ti) sostituzione, F[ ] e F[ ] definiti 1≤I≤n Versione 1. 0
Teorema • Assumendo che le algebre considerate abbiano carriers non vuoti • dati G LS(X) e F LS(X), G |= F ses G |- F può essere provato utilizzando il sistema deduttivo presentato nelle slide precedenti • Dimostrazione in M. Cerioli, T. Mossakowski, H, Reichel From total equational to partial first-order logic in Algebraic Foundations of Systems Specification a cura di E. Astesiano, H. -J. Kreowski, B. Krieg-Bruckner IFIP State of the Art Reports, Springer 1999 Versione 1. 0
Estensione per uguaglianza forte regole derivate _____ • Reflexivity F |- t = t • Equality 1 • Equality 2 per t TS(X) F |- t 1 = e t 2 _____ F |- t 1 = t 2 |- Def(t ) |- t = t F F 1 1 2 __________ F |- t 1 = e t 2 • Equality 3 F |- Def(t 1) false F |- Def(t 2) false ________________ • Congruence __________ F |- t 1 = t 2 F |- F F |- ( x in F x = (x)) F[ ] sostituzione, F[ ] definito Versione 1. 0
Notare • il sistema è importante per aiutarvi a ragionare sulle formule • niente esercizi che richiedino di fare una prova completa • esistono tools per aiutare a fare/automatizzare le prove (chiedere se interessati) Versione 1. 0
- Slides: 43