Ordini Parziali - Reticoli
Insiemi parzialmente ordinati Nell’analisi di programmi ordini parziali e reticoli giocano un ruolo importantissimo Dato un insieme L, un ordine parziale su L è una relazione £: L ´ L ® {vero, falso} che gode delle proprietà: riflessiva: " l Î L : l £ l transitiva: " l1, l2, l3 Î L : l1£ l2 Ù l2£ l3 Þ l1£ l3 antisimmetrica: " l1, l2 Î L : l1£ l2 Ù l2£ l1 Þ l1= l2 Un insieme parzialmente ordinato (L, £) è un insieme L sul quale è definito un ordine parziale £. Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio a b c d e f g L= {a,b,c,d,e,f,g} £ ={(a,c), (a,e), (b,d), (b,f), (c,g), (d,g), (e,g), (f,g)}T (L, £) è un insieme parzialmente ordinato (finito) Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio 6 L= N £ ={(0,1), (1,2), (2,3), (3,4), (4,5),…}T (L, £) è un insieme totalmente ordinato (infinito) 5 4 3 2 1 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio 9 8 7 L= N £ ={(n,m): $ k tale che m=n*k} (L, £) è un insieme parzialmente ordinato (infinito) 6 5 4 3 2 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio A partire dallo stesso insieme E={1,2,3,4,6,12} possono essere definiti diversi ordini parziali: 1 2 3 4 6 12 12 1 2 4 3 6 12 6 4 2 3 1 Ordine usuale Ordine indotto dalla divisibilità Numeri dispari minori dei pari Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio Tutti i possibili insiemi parzialmente ordinati con tre elementi: Tino Cortesi Tecniche di Analisi di Programmi
Composizione di ordini parziali Prodotto cartesiano Dati due ordini parziali (P, £p ) ed (T, £t ), il prodotto cartesiano (P ´ T, £P ´ T) ha come elementi le coppie in {(p,t)) | p Î P, t Î T} L’ordine parziale: (x,y) £P ´ T (x2,y2) Û x1£P x2 Ù y1£T y2 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio N ´ N a £N ´ N c b c b £N ´ N c a (x1,y1) £N ´ N (x2,y2) Û x1£N x2 Ù y1£N y2 (N ´ N, £N ´ N) è un insieme parzialmente ordinato (infinito) Tino Cortesi Tecniche di Analisi di Programmi
Composizione di ordini parziali Unione disgiunta Dati due ordini parziali (P, £p ) ed (T, £t ), l’unione disgiunta (P e T, £P e T) ha come elementi {x | x Î P oppure x Î T} L’ordine parziale: x£ P e T y Û x,y Î P e x £P y oppure x,y Î t e x £t y Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio P T (P e T, £P e T) Tino Cortesi Tecniche di Analisi di Programmi
Composizione di ordini parziali Somma lineare Dati due ordini parziali (P, £p ) ed (T, £t ), la somma lineare (P t T, £P e T) ha come elementi {x | x Î P oppure x Î T} L’ordine parziale: x£ P t T y Û x,y Î P e x £P y Oppure x,y Î t e x £t y Oppure x Î P e y Î t . Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio P T P t T Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi lub e glb Dato un insieme parzialmente ordinato (L, £), un insieme Y di L ha un elemento l come upper bound se " l’ Î Y : l’ £ l un insieme Y di L ha un elemento l come lower bound se " l’ Î Y : l £ l’ Un least upper bound (lub) di Y è un upper bound l0 di Y che soddisfa la seguente proprietà: l’ è un upper bound di Y Þ l0 £ l’ Un greatest lower bound (glb) di Y è un lower bound l0 di Y che soddisfa la seguente proprietà: l’ è un lower bound di Y Þ l’ £ l0 Se un sottoinsieme Y di L ha un least upper bound, questo è unico (per la proprietà antisimmetrica dell’ordine parziale £) Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio N ´ N upper bounds di Y Y lub(Y) glb(Y) lower bounds di Y (x1,y1) £N ´ N (x2,y2) Û x1£N x2 Ù y1£N y2 Tino Cortesi Tecniche di Analisi di Programmi
Esempio ^ c d b a g j i h f e T lub({b,c})= ? Gli upper bounds dell’insieme {b,c} sono {h,i,T} T i h e questo insieme non ha un minimo elemento: Il lub non c’è ! Tino Cortesi Tecniche di Analisi di Programmi
Esempio ^ lub({a,b})= ? c d b a g j i h f e T Gli upper bounds dell’insieme {a,b} sono {T,h,i,f} i h f T e questo insieme ha un f come minimo elemento: lub({a,b})= f Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Down-sets e Up-sets Dato un insieme parzialmente ordinato P, Un sottoinsieme D di P è un down-set se per ogni x Î D, e per ogni y Î P, se y £ x allora y Î D. Un sottoinsieme D di P è un up-set se per ogni x Î D, e per ogni y Î P, se x £ y allora y Î D. {a,b,d} è un down-set {b,c,d} è un up-set {a,b} è un up-set ma non un down-set c d b a Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Down-sets e up-sets In particolare, se Q è un qualsiasi sottoinsieme di P, definiamo iQ = {y Î P | (esiste x Î Q) y £ x } è un down-set hQ = {y Î P | (esiste x Î Q) x £ y } up-set Se x è un qualsiasi elemento di P, definiamo ix = {y Î P | y £ x } hy = {y Î P | x £ y } In questo caso si chiamano down-sets e up-sets principali Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Down-sets e Up-sets i{b,d} = {a,b,d} h{c,d} = {b,c,d} ib = {a,d} ic = {d} hd = {b,c} ha = {b} hb = {b} b c a d Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio Consideriamo l’insieme dei numeri razionali positivi Q. L’insieme S={q Î P | q2 £ 2 } è un insieme chiuso verso il basso (down-set) che non è principale. Infatti non esiste nessun numero razionale q tale che S= iq. Tino Cortesi Tecniche di Analisi di Programmi
L’ordine parziale dei down-sets di P Dato un insieme parzialmente ordinato P, la famiglia O(P) di tutti i down-sets di P è un insieme parzialmente ordinato. {a,b,c,d} {a,b,d} {a, c,d} c d b a {a,d} {c,d} {a} {d} Æ a Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Lemma Sia P un ordine parziale e x,y due suoi elementi. Sono equivalenti: x £ y ix Í iy " Q Î O(P). y Î Q _ x Î Q Esercizio: dimostrarlo! Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Catene Dato un insieme parzialmente ordinato (L,£), un sottoinsieme Y di L è una catena se " l1, l2 Î Y : (l1£ l2) Ú (l2£ l1) ovvero una catena è un sottoinsieme di L totalmente ordinato. Un insieme parzialmente ordinato (L,£) ha altezza finita se e solo se tutte le catene di L sono finite Una sequenza (ln)nÎN di elementi di L è una catena ascendente se n £ m Þ ln£ lm Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio: catene c d b a g j i h f e T ^ c d b a g j i h f e T ^ Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Insiemi Diretti Sia (P,£P) un insieme parzialmente ordinato. Un sottoinsieme S di P si dice diretto se per ogni sottoinsieme finito F di S esiste un elemento di S che appartiene all’insieme degli upper bounds di F. Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempi S2 S1 L’insieme S1 è diretto L’insieme S2 non è diretto Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio 2 3 4 1 -1 -2 -3 -4 ^ T F S L= Z È {T,^} " n Î Z : ^ £ n £ T S non è un insieme diretto: non esiste un elemento di S che appartiene all’insieme degli upper bounds di F Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio S 2 3 4 1 -1 -2 -3 -4 ^ T F L= Z È {T,^} " n Î Z : ^ £ n £ T S è un insieme diretto: per ogni F finito esiste un elemento di S che appartiene all’insieme degli upper bounds di F Tino Cortesi Tecniche di Analisi di Programmi
Insiemi diretti e catene b a g j i h f e T ^ Sia (P,£P) un insieme parzialmente ordinato. Ogni catena non vuota di P è un insieme diretto. Esercizio: dimostrarlo! 6 5 4 3 2 1 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Insiemi diretti In (Ã(N),Í) l’insieme S={X Í N | X è finito} è diretto? Dim: Sia F Í S, F finito. Devo dimostrare che esiste un upper bound di F che appartiene a S. Prendo come upper bound di F l’unione degli insiemi in F. L’unione finita di insiemi finiti è finita (la cardinalità è al più la somma delle cardinalità degli insiemi), e quindi appartiene a S. In (Ã(N),Í) l’insieme S={X Í N | N-X è finito} è diretto? Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Reticoli Un reticolo è un insieme parzialmente ordinato (L, £) tale che per ogni coppia di elementi di L esiste il least upper bound ed il greatest lower bound. Se L è un insieme parzialmente ordinato non vuoto, e x£y, allora lub({x,y}) = y glb({x,y}) = x. Per dimostrare che L è un reticolo basterà quindi verificare che per ogni coppia di elementi incomparabili esistano sia lub che glb. Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio Rivediamo tutti i possibili insiemi ordinati con tre elementi: sono reticoli? SI NO NO NO NO Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio a b c d e f g Y L= {a,b,c,d,e,f,g} £ ={(a,c), (a,e), (b,d), (b,f), (c,g), (d,g), (e,g), (f,g)}T (L,£) non è un reticolo: sia a che b sono lower bounds di Y, ma a e b sono incomparabili Tino Cortesi Tecniche di Analisi di Programmi
Il reticolo dei down-sets Se P è un insieme ordinato e A e B sono due down-sets di P, allora: A È B è un down-set A Ç B è un down-set L’insieme O(P) dei down-sets di P è un reticolo: lub(A,B)= A È B e glb(A,B)= A Ç B. Il bottom del reticolo O(P) è l’insieme vuoto Il top del reticolo O(P) è l’insieme P Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Il reticolo O(P) Esempio {a,b,c,d} {a,b,d} {a, c,d} c d b a {a,d} {c,d} {a} {d} Æ Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esercizi Costruire il reticolo O(P) quando P è il seguente ordine parziale: b c e a d Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi CPO Un insieme parzialmente ordinato (P,£P) si dice CPO (insieme completo parzialmente ordinato) se: Esiste un elemento minimo (bottom) Per ogni sottoinsieme diretto S di P esiste lub(S). Tino Cortesi Tecniche di Analisi di Programmi
Esempio E’ un CPO (c’è il bottom e ogni sottoinsieme diretto ha lub), ma non è un reticolo Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Reticoli completi Un reticolo completo è un insieme parzialmente ordinato (L, £) tale che tutti i sottoinsiemi di L hanno least upper bound e greatest lower bound. Se (L, £) è un reticolo completo, si denotano: ^ = lub(Æ) bottom element T = glb(L) top element Ogni reticolo finito è un reticolo completo Ogni reticolo completo è un CPO Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio {1,2,3} {1,2} {1,3} {2,3} {1} {2} {3} L= Ã({1,2,3}) £ = Í lub(Y) = ÈY glb(Y) = ÇY Æ Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio {1,2,3} lub(Y) {1,2} {1,3} {2,3} Y {1} {2} {3} L= Ã({1,2,3}) £ = Í lub(Y) = ÈY glb(Y) = ÇY Æ glb(Y) Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio T -4 -3 -2 -1 1 2 3 4 ^ L= Z È {T,^} " n Î Z : ^ £ n £ T Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio L= Z+ £ ordine totale su Z+ lub = max glb = min E’ un reticolo, ma non completo: Ad es. l’insieme dei pari non ha lub 6 5 4 3 2 1 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio T L= Z+ È {T} £ ordine totale su Z+ È {T} lub = max glb = min E’ un reticolo completo 6 5 4 3 2 1 Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempi L=R (numeri reali) con £ ordine totale (R, £ ) non è un reticolo completo: ad esempio {x Î R | x > 2} non ha lub Per ogni x<y in R, ([x,y], £ ) è un reticolo completo L=Q (numeri razionali) con £ ordine totale (Q, £ ) non è un reticolo completo E non basta aggiungere un top ed un bottom per ottenere la completezza: l’insieme {x Î Q | x2 < 2} ha upper bounds ma non ha un least upper bound. Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Teorema: Se (L, £) è un insieme parzialmente ordinato, sono equivalenti: L è un reticolo completo ogni sottoinsieme di L ha un least upper bound ogni sottoinsieme di L ha un greatest lower bound Dimostrazione: 1 Þ 2 e 1 Þ 3 seguono immediatamente dalla definizione Per mostrare che 2 Þ 1, basta definire per ogni Y Í L glb(Y) = lub({lÎ L | " l’ Î Y : l £ l’}) Tutti gli elementi dell’insieme a destra sono lower bounds dell’insieme Y. Quindi lub({...}) definisce un lower bound di Y. Poiché tutti i lower bound di Y appartengono all’insieme a destra, lub({...}) definisce il greatest lower bound di Y. Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio upper bounds di Z {1,2,3} glb(Y)= lub({lÎ L | " l’ Î Y : l £ l’}) Y {1,2} {1,3} {2,3} lub(Z) {1} {2} {3} Z= {lÎ L | " l’ Î Y : l £ l’} Æ Tino Cortesi Tecniche di Analisi di Programmi
Tecniche di Analisi di Programmi Esempio Si consideri l’insieme dei numeri interi non negativi, ordinati per divisione: n £d m se $ h tale che m=n*h Ricordiamo che k è il massimo comun divisore di due interi se: k divide sia n che m (e quindi k £d n e k £d m) Se j divide sia m che n, allora j divide k (cioè j £d k per tutti i lower-bounds j di {m,n}. Allora il massimo comun divisore di m ed n è proprio il greatest lower bound di m ed n (e dualmente, il minimo comune multiplo è il least upper bound). Si può dimostrare che è un reticolo completo. Tino Cortesi Tecniche di Analisi di Programmi