Specifiche Algebriche ESERCIZI Versione 0.0 Gianna Reggio reggio@disi.unige.it
Esercizio 1 Quali di questi assiomi su S sono condizionali positivi? Sig S = Sort tipo, cosa Opns a, b: tipo c: tipo -> cosa d: cosa -> tipo Preds prop: cosa Quali di questi assiomi su S sono condizionali positivi? a = b c(Y) = d(X) def(a) def(b) a = b d(c(X)) = c(d(X)) def(a) X:cosa. d(X) = a prop(X) prop(a) prop(b) prop(a) Dare esempi di assiomi positivi condizionali riguardanti la verità di prop. Dare esempi di assiomi del prim’ordine definenti il predicato prop. Definire il predicato prop con assiomi del prim’ordine in modo tale che sia vero solamente sugli elementi rappresentabili usando a e c.
Esercizio 2 Si considerino le seguenti specifiche, dove S è la segnatura definita nel foglio precedente SP1 = sig S axiom def(a) def(b) a = b SP2 = sig S axiom X:tipo.d(c(X))=X SP3 = sig S axioms def(c(X)) def(d(Y)) d(c(X)) = X def(a) def(b) prop(b) prop(a) SP4 = sig S axioms def(c(X)) def(d(Y)) ( X:tipo. Y:cosa. d(c(X))= X) def(a) def(b) Quali sono condizionali positive ? Quali ammettono il modello iniziale ? Per quelle soluzione del punto precedente caratterrizzare tale modello Per i =1,…,4, dire quali delle seguenti affermazioni sono vere Mod(SPi) |= prop(a) def(a) Mod(SPi) |= d(c(a)) = a Mod(SPi) |= d(c(X)) = X a = d(c(a))
Esercizio 3 Caratterizzare il modello iniziale di SEQ (se esiste) spec SEQ = Sort seq, nat Opns 0: nat succ: nat -> nat _+_: nat x nat -> nat L: seq _ :: _: nat x seq -> seq size: seq -> nat _ & _: seq x seq -> seq Preds isEmpty: seq what: seq x nat axioms def(0) def(succ(x)) def(n+m) 0 + n = n succ(n)+ m = succ(n+m) def(L) def(n :: s) isEmpty(L) Caratterizzare il modello iniziale di SEQ (se esiste) aggiungere degli assiomi a SEQ in modo che nel modello iniziale (deve esistere) size sia l’operazione che ritorna il numero di elementi contenuti in una sequenza & sia l’operazione di concatenazione di due sequenze what(s,n) sia il predicato che controlla se la sequenza s ha almeno n elementi
Esercizio 4 spec SEQFancy = Sort seq, nat Opns 0: nat succ: nat -> nat _+_: nat x nat -> nat diff: nat x nat L: seq _ :: _: nat x seq -> seq axioms def(0) def(succ(x)) def(n+m) 0 + n = n succ(n)+ m = succ(n+m) diff(0, succ(n)) diff(n,m) diff(succ(n),succ(m)) diff(n,m) diff(m,n) def(L) def(n :: s) estendere SEQFancy intesa con semantica iniziale aggiungendo operazioni/predicati ed assiomi in modo da arrichire le sequenze con la seguente funzionalità controllare se un naturale appartiene ad una sequenza ritornare l’iseimo elemento di una sequenza (se esiste) controllare se una sequenza è un prefisso iniziale di un’altra cancellare un naturale da una sequenza
Esercizio 5 dire per quali i = 1,.., 3 la seguente affermazione è vera spec SEQFirsti = Sort seq, nat Opns 0: nat succ: nat -> nat _+_: nat x nat -> nat L: seq _ :: _: nat x seq -> seq axioms def(0) def(succ(x)) def(n+m) 0 + n = n succ(n)+ m = succ(n+m) def(L) def(n :: s) AXi AX1 = { s = s’ } AX2 = { n :: s = s } AX3 = { s = L } dire per quali i = 1,.., 3 la seguente affermazione è vera mod(SEQFirsti) |= s,s’:seq. (s = s’ <=> ((s=L s’=L ) ( n: nat, s: seq. s= n::s s’ = n::s)) )
Esercizio 6 Quali delle seguenti affermazioni sono vere? spec SEQFancy2 = extend SEQ Fancy Opns op: seq x seq -> seq axioms diff(n,m) op(n::s,m::s’) = op(s,s’) op(L,s) = L op(n::s,n::s’) = op(s,s’) op(s,L) = L Quali delle seguenti affermazioni sono vere? nel modello iniziale di SEQFancy2 op ritorna il massimo postfisso comune alle due sequenze prese come argomento nel modello iniziale di SEQFancy2 op è totale esiste un modello di SEQFancy2 dove op è parziale spec SEQFancy3 = extend SEQ Fancy Preds pr: seq x nat diff(n,0) pr(n::s,n) diff(m,0) diff(n,m) pr(s,m) pr(n::s,m) nel modello iniziale di SEQFancy3 pr controlla se un naturale diverso da 0 appartiene ad una sequenza nel modello iniziale di SEQFancy3 vale pr(s,0) nel modello iniziale di SEQFancy3 vale pr(s,0) in Mod( SEQFancy3) vale pr(s,0)