Definitezza Vogliamo poter richiedere la definitezza delle funzioni

  • Slides: 14
Download presentation
Definitezza • Vogliamo poter richiedere la “definitezza” delle funzioni • introduciamo nuovi atomi Def(t)

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.

La logica • Completiamo la nostra logica con l’uguaglianza esistenziale. Come derivati abbiamo l’uguaglianza

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à.

Esempi • “nuove” formule su Slist e X = {x: int, l: list} –

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é • 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: dettagliare le affermazioni precedenti. • Esercizio 16: Esibire delle formula con ugualianza e definitezza valide e non valide in L.

Strettezza • Funzioni (e predicati) in quest’approccio sono stretti, cioè restituiscono un valore (sono

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, termini ti TS(X)si, una S-algebra A e 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 1, …, an) s. A, allora ti. A, V si. A e quindi A|=V Def(ti). 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ì.

Osservazioni • La logica parziale del prim’ordine ha lo stesso potere espressivo di quella

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)

Logiche a tre valori • Una scelta più radicale sarebbe stata passare ad una

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)

Specifiche • Una specifica Sp è una coppia (S, Ax), dove Ax LS(X), detti

Specifiche • Una specifica Sp è una coppia (S, Ax), dove Ax LS(X), detti assiomi di Sp. • I modelli di Sp (semantica di Sp) sono tutte le S-algebre che soddisfano tutti gli assiomi di Sp, cioè Mod(Sp) = {A | A S-algebra e A|= ax per ogni ax Ax}

Esempio: specifica di “liste di interi” 1 • Splist =(Slist, PROPlist) t 1 ≠

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 ? Proprietà di ogni funzione

Esempio: specifica di “liste di interi” 2 • Definizione di is. Empty A) is.

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 che definisca is. Empty. Esercizio 18: definire il predicato is. In. Esercizio 18 bis: definire ulteriori combinatori derivati che si pensa possano essere utili.

Modelli term-generated • Fra i modelli di una specifica sono particolarmente interessanti i modelli

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

Occorre saper • Leggere/comprendere una specifica ? Padronanza della semantica • Controllare se un’algebra

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

Esercizi • solita segnatura Slist • Assumendo che I predicati is. Empty ed is.

Esercizi • solita segnatura Slist • Assumendo che I predicati is. Empty ed is. In rappresentino le due ovvie condizioni – 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 è proprio tale numero

Model-checking • Data una specifica Sp = (S, Ax), ed una Salgebra A come

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

Esempio • solita segnatura Slist ed algebra L • L |= is. In(x, l)

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))