Specifiche Algebriche Specifiche Loose o Property- oriented Versione 1.0 Gianna Reggio
Versione 1.0 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,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 F s 1 …s n,s indicheremo f: s 1 … s n s –una famiglia P di simboli di predicati, indiciata su S* se p P s 1 …s n indicheremo p: s 1 … s n
Versione 1.0 Esempio: list segnatura per le liste di interi S = { int, list } F consiste di –0: int [zerario, costante] –S: int int –empty: list –push: int list list –pop: list list –top: list int P consiste di –isempty: list –isIn: int list Esercizio 1: definire lista aggiungendo a list la concatenazione di liste e l’operazione che ritorna l’insieme degli elementi di una lista
Versione 1.0 Algebra parziale con predicati Data una segnatura = (S,F,P) una - algebra 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 … s n A s A per ogni f: s 1 … s n s F, detta interpretazione di f in A –un insieme p A s 1 A … s n A per ogni p: s 1 … s n 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 list : –carriers int L = N list L = N* –interpretazione funzioni 0 L = 0 S L (x) = x+1 empty L = push L (n,l) = n l pop L (n l) = l e pop L ( ) indefinito top L (n l) = n e top L ( ) indefinito –interpretazione predicati isempty L ={ } isIn L ={ (n,x) | i [1,|x|]. x(i)=n }
Versione 1.0 Esercizi Esercizio 2: estendere L per ottenere una lista -algebra (vedere Esercizio 1). Esercizio 3: definire una list- algebra L2 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,F,P) ed una famiglia X indiciata su S di insiemi di variabili –i -termini sono definiti come per la segnatura (S,F) –precisamente, la famiglia di tali termini, indiciata su S, si indica T (X), è definita come segue X s T (X) s per ogni s S f(t 1,…,t n ) T (X) s per ogni f: s 1 … s n s F, t 1 T (X) s 1,…, t n T (X) s n Esercizio 4: dare alcuni esempi di termini corretti su list e di alcune stringhe che non corrispondono ad alcun termine, precisando le variabili usate.
Versione 1.0 Formule Le formule logiche, L (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,…,t n ) L (X), per ogni p: s 1 … s n P, e termini t i T (X) s i [formule atomiche] –se e L (X), x X s, allora , , , , x:s. e x:s. L (X)
Versione 1.0 Esempi di formule su list isEmpty(pop(push(n,empty))) x: list. isEmpty(x) isIn(top(x),x) isEmpty(l) isEmpty(pop(l)) Esercizio 5: dare esempi di formule sulla segnatura lista 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 V s : X s s A Data una valutazione V: X A, l’ interpretazione dei termini, indicata _ A,V : T (X) A, è una famiglia di funzioni parziali _ A,V : T (X) s s A definita per induzione sui termini come segue –x A,V = V s (x) se x X s –se t 1 A,V = a 1 s 1 A, …, t n A,V = a n s n A, f A (a 1,…,a n ) = a s A, allora f(t 1,…,t n ) A,V = a affinché un termine sia definito e i rispettivi valori devono appartenere al dominio di f devono essere definiti, con tutti i loro sottotermini sono sempre definiti
Versione 1.0 Esempio (solita segnatura list 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), )) = pop L (V(n) ) = 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 L (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,…,t n ) e (t 1 A,V,…,t n 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 list ed algebra L, valutazione V qualsiasi) –L | = V isEmpty(pop(push(n,empty))) ?? –pop(push(n,empty)) L,V = –isempty L = { } –pertanto isEmpty(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 T (X ) se e solo se – t è x – t è f(t 1,…,t n ) e x occorre libera in t i con 1 ≤ i ≤ n x X occorre libera in L (X ) se e solo se – F è p(t 1,…,t n ) e x occorre libera in t i 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 è 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 X s X occorre libera in z }. F (chiusura universale di F)
Versione 1.0 Esempio (solita segnatura list ed algebra L) –L | = isEmpty(pop(push(0,l))) ?? –l occore libera nella formula (ed è l’unica) –V1(l) = L | = V1 isEmpty(pop(push(0,l))) (*) –V2(l) = 0 L | ≠ V2 isEmpty(pop(push(0,l))) (**) –pertanto L | ≠ isEmpty(pop(push(0,l))) Esercizio 10: Dimostrare con tutti i dettagli (*) e (**). Esercizio 11: Esibire una formula valida in L. Esercizio 12: 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 T (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 Def s :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 L (X) e per includere le nuove formule e dare la corrispondente validità.
Versione 1.0 Esempi “nuove” formule su list 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 1 * data V 2 t.c. V 2 (l) = L |≠ V 2 * –Invece isEmpty(l) push(top(l),pop(l)) = l è valida in L Esercizio 15: dettagliare le affermazioni precedenti. Esercizio 16: Esibire delle formula con ugualianza e definitezza valide e non valide in L.
Versione 1.0 Strettezza Funzioni (e predicati) in quest’approccio sono stretti, cioè restituiscono un valore (sono veri) solo su argomenti definiti Prop. Fissate una segnatura = (S,F,P), una S-famiglia X di variabili, dei termini t i T (X) s i, una -algebra A ed una valutazione V: X A. 1) Per ogni f: s 1 … s n s F, A | = V Def(f(t 1,…,t n )) implica A | = V Def(t i ) 2) Per ogni p: s 1 … s n P, A | = V p(t 1,…,t n ) implica A | = V Def(t i ) Prova 1) A | = V Def(f(t 1,…,t n )) se e solo se f(t 1,…,t n ) A,V s A cioè, per definizione di interpretazione, se e solo se t 1 A,V = a 1 s 1 A,…,t n A,V = a n s n A e f(t 1,…,t n ) A,V = f A (a 1,…,a n ) s A, allora t i A,V s i A e quindi A | = V Def(t 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 ( ,Ax), dove Ax L (X) –gli elementi di Ax sono detti assiomi di Sp I modelli di Sp (semantica di Sp) sono tutte le - algebre che soddisfano tutti gli assiomi di Sp, cioè Mod(Sp) = {A | A -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 Sp list =( list,PROP list ) list PROP list –Def(0), Def(succ(x)) -- 0, succ totali –0 ≠ succ(x), x ≠ succ(x) t1 ≠ t2 equiv. a t1 = t2 Ci sono assiomi inutili ? * * è una proprietà di ogni funzione –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
Versione 1.0 Esempio: specifica di “liste di interi” 2 Definizione di isEmpty A) isEmpty(empty), isEmpty(push(x,l)) B) isEmpty(l) l = empty F1 F2 equiv. a F1 F2 F2 F1 Esercizio 17: dare un ulteriore insieme di assiomi/ proprietà che riguardino isEmpty. Esercizio 18: dare tutte le proprietà del predicato isIn. Esercizio 18bis: definire ulteriori combinatori logici derivati che si pensa possano essere utili. C) isEmpty(l) l ≠ empty Sono equivalenti le tre definizioni ? –B e C yes –A e B no In una list -algebra esistono elementi che non sono rappresentati nè da empty nè da push(x,l)
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 -algebra A è detta term-generated se _ A, : T ( ) 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 list Assumendo che i predicati isEmpty ed isIn rappresentino le due ovvie condizioni sulle liste –Dire usando la lingua italiana/inglese che proprietà sulle liste esprimono le seguenti formule isEmpty(l) isIn(x,l) isEmpty(l) x:int. isIn(x,l) x:int. (isEmpty(l) isIn(x,l)) isEmpty(l) x:int. isIn(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 è proprio tale numero
Versione 1.0 Model-checking Data una specifica Sp = ( ,Ax), ed una - algebra 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 list ed algebra L L | = isIn(x,l) isIn(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 isIn(x,l) isIn(x,push(y,l)) sse L |≠ V isIn(x,l) o L |= V isIn(x,push(y,l)) L |≠ V isIn(x,l) sse (x L,V,l L,V ) isIn L sse ….. Esercizio 19: completare la verifica della validità della formula. Esercizio 20: L | = isIn(y,l) isIn(y,push(x,l)) Esercizio 21: L | = isIn(x,l) isIn(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 L (X) e F L (X), – = F (F segue da ) ses per ogni -algebra A e per ogni valutazione v di X in A ( A = V G per ogni G ) implica A = V F Esercizio 23: Dire se è equivalente definire la conseguenza semantica come “ = F ses(per ogni -algebra A A = per ogni ) implica (per ogni -algebra A A = )”
Versione 1.0 Sistemi deduttivi Un sistema deduttivo è una relazione fra insiemi di formule (gli assiomi assunti veri) e formule (le formule dedotte a partire dagli assiomi) indicato F Un sistema deduttivo per la nostra logica è sound (corretto) se F implica | = F. Un sistema deduttivo è completo rispetto ad una classe di formule se | = F implica F per ogni 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 T (Y) –applicare una sostituzione t T (X), t[ ] T (Y) F L (X), F[ ] L (Y) potrebbe essere indefinito, nei casi in cui una variabile libera diventi legata ( , ) Esercizio 24: definire t[ ] e [ ] indicando quando quest’ultima non è definita.
Versione 1.0 Il sistema (1) F _______ F F G _____________ F G F _______ F G G _______ F G G _____________________________ F G F false G Assumption -introduction -left elimination -right elimination Tertium non datur false formula atomica sempre falsa
Versione 1.0 Il sistema (2) G 1 … G i-1 F 1 … F n G i+1 … G k H ___________________________________________ F 1 … F n G i G 1 … G k H Absurdity Cut F _________ false F 1 … F n G __________________ F 1, …, F n G -introduction F _________ x. F -elimination -introduction x. F _________ F se x non occorre libero in
Versione 1.0 Il sistema (3) Reflexivity Congruence x = e x _________ per x X ( x in F x = e (x)) F[ ] ____________________ F sostituzione, F[ ] definito Function strictness Def(t 1 ) ___________ Def(t) t 1 sottotermine di t Predicate strictness Def(t i ) ______________ p(t 1,…, t n ) 1 ≤ I ≤ n Substitution [ ] ( x in F Def( (x))) F[ ] ________________________ F sostituzione, F[ ] e [ ] definiti
Versione 1.0 Teorema Assumendo che le algebre considerate abbiano carriers non vuoti dati L (X) e F L (X), = F ses 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 t = t _________ per t T (X) Equality 1 t 1 = t 2 __________ t 1 = e t 2 Equality 2 t 1 = e t 2 ___________________ Def(t 1 ) t 1 = t 2 Equality 3 t 1 = t 2 ________________________________ Def(t 1 ) false Def(t 2 ) false Congruence ( x in F x = (x)) F[ ] ____________________ 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)