11.06.2013 Views

università degli studi di siena facoltà di scienze matematiche, fisiche ...

università degli studi di siena facoltà di scienze matematiche, fisiche ...

università degli studi di siena facoltà di scienze matematiche, fisiche ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

UNIVERSITÀ DEGLI STUDI DI SIENA<br />

FACOLTÀ DI SCIENZE MATEMATICHE,<br />

FISICHE E NATURALI<br />

Corso <strong>di</strong> Laurea in Matematica<br />

Tesi <strong>di</strong> Laurea<br />

Una presentazione algebrica delle Basi <strong>di</strong> Dati.<br />

Relatore Correlatore<br />

Chiar.mo Prof. L. Chiantini Dott. S. Rinal<strong>di</strong><br />

A.A. 2001/2002<br />

<strong>di</strong> Paolo Pin


In<strong>di</strong>ce<br />

Presentazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1 . Un esempio introduttivo . . . . . . . . . . . . . . . . . . . . . . 5<br />

2 . Una presentazione algebrica delle basi <strong>di</strong> dati . . . . . . . . . . 9<br />

3 . Operatori sulle istanze . . . . . . . . . . . . . . . . . . . . . . . 13<br />

4 . Vincoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

5 . Operatori binarî su {0, 1} e quantificatori . . . . . . . . . . . . . 23<br />

6 . Vincoli sulle istanze . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

7 . L’algebra relazionale classica . . . . . . . . . . . . . . . . . . . . 46<br />

Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />

2


Presentazione<br />

L’algebra relazionale è una materia abbastanza recente nella storia della<br />

matematica. É nata e trova applicazione nello <strong>stu<strong>di</strong></strong>o teorico <strong>di</strong> come organizzare<br />

e interrogare le informazioni immagazzinate nelle memorie elettroniche<br />

dei calcolatori elettronici.<br />

Il presente <strong>stu<strong>di</strong></strong>o nasce da alcune considerazioni su questa materia, che qui<br />

viene affrontata da un punto <strong>di</strong> vista prettamente matematico.<br />

La nostra attenzione si è focalizzata su quelle particolari funzioni che in<br />

algebra relazionale sono chiamate vincoli, dalle quali derivano operatori altrettanto<br />

comuni in questa teoria: le selezioni.<br />

Abbiamo definito i vincoli come funzioni da un qualsiasi insieme nella<br />

coppia {0, 1} . É intuitivo come un vincolo su <strong>di</strong> un insieme possa determinare<br />

una cernita dei suoi elementi, una selezione appunto.<br />

L’organizzazione dei dati all’interno dei databases (letteralmente: basi <strong>di</strong><br />

dati) dei computers viene <strong>di</strong> solito rappresentata con matrici, nelle quali è<br />

considerato irrilevante l’or<strong>di</strong>ne delle righe. Cosí essi si trasformano in insiemi<br />

finiti e non or<strong>di</strong>nati (istanze) <strong>di</strong> ennuple (records) su <strong>di</strong> un qualsiasi prodotto<br />

cartesiano composto da un numero finito <strong>di</strong> insiemi (domini).<br />

In tal modo abbiamo semplificato, in modo algebrico, l’architettura <strong>di</strong> questo<br />

modello, altrimenti assai articolata.<br />

Dal nostro punto <strong>di</strong> vista, quin<strong>di</strong>, le istanze <strong>di</strong> basi <strong>di</strong> dati <strong>di</strong>ventano sottoinsiemi<br />

finiti <strong>di</strong> un prodotto cartesiano D1 × D2 × . . . × Dn , dove i singoli Di<br />

sono semplicemente insiemi qualsiasi.<br />

Calcolare un vincolo su una istanza è un proce<strong>di</strong>mento la cui complessità (ed<br />

anche il costo computazionale) <strong>di</strong>pende dalla natura del vincolo stesso, oltre<br />

che dall’estensione dell’istanza cui è applicato.<br />

Per definire una scala <strong>di</strong> complessità dei vincoli ci siamo rifatti alla matrice<br />

che identifica l’istanza. Se pensiamo a tale rappresentazione, un oggetto bi<strong>di</strong>mensionale,<br />

è possibile classificare i vincoli come:<br />

- <strong>di</strong>mensione 0: vincoli che <strong>di</strong>pendono dall’esame, record per record, <strong>di</strong> una<br />

sola casella;<br />

- <strong>di</strong>mensione 1: vincoli che comportano un confronto fra varie caselle dello<br />

stesso record;<br />

- <strong>di</strong>mensione 2: tutti gli altri vincoli.<br />

Abbiamo riprodotto in modo matematico questa struttura, ricorrendo allo<br />

<strong>stu<strong>di</strong></strong>o <strong>degli</strong> operatori sul codominio della funzione vincolo: {0, 1} . La<br />

ridotta car<strong>di</strong>nalità <strong>di</strong> questo insieme ha permesso <strong>di</strong> analizzare in maniera<br />

3


dettagliata tutti gli operatori unarî e binarî su <strong>di</strong> esso, le loro proprietà e<br />

caratteristiche, evidenziando quelle che ci potessero risultare più utili.<br />

Uno dei punti chiave è stato il problema <strong>di</strong> estendere un vincolo alla potenza<br />

finita <strong>di</strong> un insieme: un problema che abbiamo definito <strong>di</strong> quantificazione.<br />

In pratica si sono sfruttati quegli operatori binarî che permettessero <strong>di</strong> ottenere<br />

dagli elementi <strong>di</strong> un insieme un risultato in<strong>di</strong>pendente dall’or<strong>di</strong>ne <strong>di</strong><br />

composizione.<br />

Ci è venuta in soccorso una particolare proprietà <strong>degli</strong> operatori binarî, che<br />

abbiamo definito semi-associatività: (a ◦ b) ◦ c = (a ◦ c) ◦ b ; ∀ a, b, c .<br />

Dagli operatori binarî semi-associativi su {0, 1} nascono cosí 14 possibili<br />

quantificatori generalizzati: 14 mo<strong>di</strong> <strong>di</strong>versi <strong>di</strong> estendere un vincolo da un<br />

insieme alla sua potenza finita. Questi quantificatori sono stati <strong>stu<strong>di</strong></strong>ati e<br />

classificati nella tesi.<br />

Questi particolari risultati costituiscono il nucleo centrale della nostra<br />

trattazione, lo abbiamo inserito in un quadro più esteso <strong>di</strong> definizioni ed esempi<br />

che ci permettesse <strong>di</strong> illustrarne varie premesse e conseguenze.<br />

La tesi ha questa struttura: nel paragrafo introduttivo, abbiamo presentato<br />

un particolare esempio <strong>di</strong> istanza: lo <strong>stu<strong>di</strong></strong>o <strong>di</strong> una gara, riprodotta in<br />

un database <strong>di</strong> tempi (nello specifico ci siamo occupati del Palio dell’Agosto<br />

2001).<br />

Nei primi tre paragrafi veri e proprî, con una serie <strong>di</strong> definizioni, abbiamo<br />

presentato oggetti e funzioni che caratterizzano l’algebra relazionale. Nel<br />

quarto abbiamo analizzato approfon<strong>di</strong>tamente gli operatori binarî sull’insieme<br />

{0, 1} .<br />

Abbiamo poi focalizzato l’attenzione sui vincoli sulle istanze (che sono, ricor<strong>di</strong>amo,<br />

insiemi finiti <strong>di</strong> ennuple). Li abbiamo <strong>di</strong>stinti nelle tre categorie, che<br />

abbiamo chiamato <strong>di</strong>mensioni: 0 quelli che derivano (per quantificazione) da<br />

vincoli su un elemento delle ennuple, 1 quelli che derivano da vincoli sulle<br />

intere ennuple, 2 quelli che considerano l’istanza nel suo insieme.<br />

Fra questi ultimi ne abbiamo costruiti alcuni come vincoli <strong>di</strong> <strong>di</strong>mensione 1<br />

sul prodotto cartesiano delle istanze per sé stesse, abbiamo anche visto che<br />

non tutti sono esprimibili cosí.<br />

I vincoli <strong>di</strong> <strong>di</strong>mensione 2 che sono rappresentabili come vincoli <strong>di</strong> <strong>di</strong>mensione<br />

1 su un prodotto cartesiano sono comunque ”trattabili”, nel senso che il loro<br />

costo computazionale è inferiore a quello <strong>degli</strong> altri vincoli puri <strong>di</strong> <strong>di</strong>mensione<br />

2.<br />

Solo in conclusione abbiamo riassunto brevemente l’algebra relazionale classica,<br />

cosí da evidenziare i punti <strong>di</strong> contatto e le <strong>di</strong>fferenze rispetto al nostro<br />

modello.<br />

4


1 . Un esempio introduttivo.<br />

Incominciamo con l’introduzione <strong>di</strong> un esempio, tratto dal Palio. Consideriamo<br />

la seguente tabella:<br />

Contrada 1 o giro 2 o giro 3 o giro<br />

Aquila 6”4 12”7 21”7 38”5 47”5 1’04”0<br />

Chiocciola 6”7 12”3 20”6 36”0 45”5 1’02”0<br />

Civetta 6”8 13”1 21”3 36”6 46”5 1’03”0<br />

Drago 7”0 12”1 20”0 35”0 44”0 1’00”0 1’10”0 1’15”0<br />

Giraffa 6”5 12”6 20”7 35”8 45”0 1’01”0 1’11”5<br />

Istrice 6”0 12”0 20”3 35”3 44”5 1’00”5 1’11”0<br />

Montone 7”4 13”2 22”0 37”5 48”0 1’04”5<br />

Nicchio 6”3 12”8 21”5 38”0 48”5 1’05”5<br />

Tartuca 7”1 13”5 22”3 37”0 46”0 1’02”5<br />

Torre 6”9 12”5 21”1 36”5 47”0 1’05”0<br />

Si riferisce al Palio del 16 Agosto 2001 e rappresenta, per ognuna delle<br />

<strong>di</strong>eci contrade partecipanti, alcuni riferimenti cronometrici lungo i tre giri<br />

del percorso: la Fonte Gaia per il primo, le due curve <strong>di</strong> San Martino e del<br />

Casato per tutti e tre, ed il ban<strong>di</strong>erino finale d’arrivo.<br />

I tempi sono stati rilevati per mezzo <strong>di</strong> un cronometro manuale, basandosi<br />

sul filmato delle riprese televisive.<br />

Tralasciamo qualsiasi considerazione sull’effettiva accuratezza dei valori, e<br />

limitiamoci alla conoscenza <strong>di</strong> questi dati come unica informazione a noi<br />

nota: ipotizziamo <strong>di</strong> non sapere nient’altro sulla corsa se non questi tempi.<br />

Diventa anche irrilevante <strong>di</strong>squisire sul numero dei riferimenti presi, che sono<br />

effettivamente pochi per una descrizione accurata <strong>degli</strong> eventi, però, per ora,<br />

non ci è concesso un maggiore affinamento.<br />

Ammettiamo cioè un ipotetico osservatore dei dati in questione, il quale<br />

non solo sia del tutto all’oscuro della corsa specifica, ma ad<strong>di</strong>rittura delle<br />

modalità <strong>di</strong> <strong>di</strong>sputa del Palio <strong>di</strong> Siena, ed al quale venisse chiesto <strong>di</strong> trarre<br />

alcune conclusioni dall’analisi <strong>di</strong> questa scarna tabella. Proviamo in pratica<br />

a metterci nei suoi panni.<br />

Cosa si può dedurre dai dati contenuti nelle tabella?<br />

È subito evidente come i tempi siano, per ogni contrada, progressivi, non<br />

esiste cioè nessuna riga per la quale un rilevamento successivo (più a destra)<br />

5


<strong>di</strong> un altro sia inferiore od uguale ad esso.<br />

Cosí l’ignaro osservatore, in mancanza <strong>di</strong> qualsiasi ulteriore commento, potrebbe<br />

comunque pensare che la tabella si riferisca ad una gara <strong>di</strong> velocità.<br />

Se ad<strong>di</strong>rittura omettessimo tutte le <strong>di</strong>citure: i nomi delle contrade, ma anche<br />

la <strong>di</strong>stinzione in giri ed i riferimenti specifici, per altro noti solo a chi conosca<br />

Piazza del Campo, sarebbe abbastanza intuitivo pensare appunto ad una<br />

attività <strong>di</strong> cui ci interessa sapere la rapi<strong>di</strong>tà <strong>di</strong> esecuzione per <strong>di</strong>eci <strong>di</strong>versi<br />

soggetti.<br />

6,4 12,7 21,7 38,5 47,5 64<br />

6,7 12,3 20,6 36 45,5 62<br />

6,8 13,1 21,3 36,6 46,5 63<br />

7 12,1 20 35 44 60 70 75<br />

6,5 12,6 20,7 35,8 45 61 71,5<br />

6 12 20,3 35,3 44,5 60,5 71<br />

7,4 13,2 22 37,5 48 64,5<br />

6,3 12,8 21,5 38 48 5 65,5<br />

7,1 13,5 22,3 37 46 62,5<br />

6,9 12,5 21,1 36,5 47 65<br />

Un’altra cosa salta ancor prima all’occhio: la tabella è incompleta, vi sono<br />

caselle vuote: non sono stati presi i tempi per alcune contrade nell’ultima,<br />

o nelle ultime due, colonne. Cosí l’ipotetico osservatore, privo <strong>di</strong> ulteriori<br />

conoscenze, potrebbe pensare, per le contrade senza più rilevamenti, ad una<br />

brusca frenata, o ad una squalifica, o perfino ad un guasto nel sistema <strong>di</strong><br />

cronometraggio.<br />

La soluzione più semplice per questo osservatore sarà comunque quella <strong>di</strong> ipotizzare<br />

che quelle nove contrade si siano in qualche modo fermate anzitempo<br />

sul percorso, e tralascerebbe <strong>di</strong> indovinarne il motivo.<br />

Si può dedurre che l’unica contrada ad avere valori per tutte le colonne sia<br />

la vincitrice.<br />

Nel nostro caso si tratta (appunto) del Drago, e questa ipotesi sarebbe rafforzata<br />

dal fatto che comunque in tutti i riferimenti precedenti, ad esclusione<br />

dei primi due, ad essa corrispondeva il tempo minore.<br />

Da queste premesse, e dalla sola analisi dei dati, cos’altro apparirebbe?<br />

Si potrebbe, per ognuna delle nostre ”postazioni <strong>di</strong> rilevamento” sul percorso,<br />

stilare in base agli intertempi una classifica parziale. Cosí nell’ultima<br />

colonna completa che ci è data (San Martino, terzo giro) il Drago metteva<br />

6


in riga (per quanto possa apparire or<strong>di</strong>nata la <strong>di</strong>sputa <strong>di</strong> un Palio) Istrice,<br />

Giraffa, Chiocciola, Tartuca ... e via <strong>di</strong> seguito.<br />

Queste liste istantanee saranno via via <strong>di</strong>verse l’una dall’altra, ci saranno<br />

cioè <strong>degli</strong> scavalcamenti nelle posizioni <strong>di</strong> classifica: dei sorpassi.<br />

Abbiamo detto che il Drago è rimasto in testa dal Casato del primo giro (per<br />

quel che ne sappiamo dalla tabella) ma non lo era prima; alla Fonte e a San<br />

Martino conduceva l’Istrice. Ne deduciamo che fra San Martino ed il Casato,<br />

durante questo primo giro, il Drago ha sorpassato l’Istrice.<br />

Certo potrebbero esserci stati altri avvicendamenti alla testa della corsa, tutti<br />

però falliti nell’intervallo fra due riferimenti successivi. Fra il penultimo<br />

Casato e l’ultimo San Martino (e questo è un intervallo veramente lungo) la<br />

Giraffa potrebbe aver superato il Drago ed esserne nuovamente scavalcata.<br />

A questa incertezza rime<strong>di</strong>erebbe un maggiore infittimento dei rilevamenti.<br />

Se tutti i tempi fossero stati presi ad una <strong>di</strong>stanza proporzionale ai <strong>di</strong>stacchi<br />

fra i cavalli (un paio <strong>di</strong> secon<strong>di</strong> nel primo giro e cinque nell’ultimo, ad esempio),<br />

sarebbe molto arduo ipotizzare quei doppi sorpassi <strong>di</strong> cui sopra, ed<br />

avremmo qualche certezza in più dalla nostra tabella.<br />

Ci possiamo allora chiedere quanti altri sorpassi siano rilevabili.<br />

Basterà fare qualche confronto per trovarne molti, solo per citarne qualcuno,<br />

fra la prima Fonte ed il successivo San Martino: Chiocciola, Drago, Giraffa e<br />

Torre su Aquila, e fra loro Drago e Torre su Chiocciola e Giraffa, cosí come<br />

Drago su Torre e Chiocciola su Giraffa.<br />

Tralasciando in questa introduzione la regola matematica, o meglio l’algoritmo,<br />

rimane tuttavia intuitivo il metodo per in<strong>di</strong>viduare qualsiasi ”sorpasso”.<br />

Possiamo passare ad una maggiore astrazione. Tutto quello che per ora<br />

ci serve è una tabella, o più propriamente, per usare termini attinenti al<br />

linguaggio matematico, una matrice.<br />

Una matrice m×n <strong>di</strong> numeri naturali, laddove m sia il numero dei partecipanti<br />

ed n quello dei riferimenti, chiamiamola G (da ”gara”):<br />

Con t k i<br />

⎛<br />

⎜<br />

G = ⎜<br />

⎝<br />

t1 1 t1 2 · · · t1 n<br />

t2 1 t2 2 · · · t2 n<br />

.<br />

.<br />

. ..<br />

t m 1 t m 2 · · · t m n<br />

si è in<strong>di</strong>cato l’i-esimo tempo del k-esimo partecipante. La parola<br />

7<br />

.<br />

⎞<br />

⎟<br />


”tempo”, cosí come le già introdotte ”partecipante” e ”riferimento”, derivano<br />

dall’idea iniziale, che voleva il modello applicato ad una competizione <strong>di</strong> velocità.<br />

Torniamo alla tabella sul Palio <strong>di</strong> pagina 6, quella con soli numeri e caselle<br />

vuote. Per interpretare questi valori nulli, piuttosto che attribuire loro valore<br />

0, aggiungeremo a Q l’elemento null, cosí da non confonderlo con un numero.<br />

Viene data per assunta l’unica legge:<br />

∀ 1 ≤ k ≤ m, 2 ≤ i ≤ n, tk i = null ∨ tki ≥ tki−1 , .<br />

Per poter effettuare tutti i confronti proposti nell’esempio, certo, dovrebbe<br />

essere possibile riconoscere una singola riga in una data tabella. Potremmo<br />

aggiungere una ulteriore colonna con dei nomi <strong>di</strong> riferimento, identificativi,<br />

che sarebbero poi i nominativi dei partecipanti. Questo è quanto viene fatto<br />

normalmente, per non lasciare il lettore <strong>di</strong> fronte a <strong>di</strong>sorientanti insiemi <strong>di</strong><br />

numeri. Resta il dubbio su quale sia l’insieme che comprende e definisce i<br />

nomi, o, più propriamente, le parole.<br />

Dovremmo anche definire una parola, sempre <strong>di</strong>versa, per ogni specifica matrice.<br />

Cosí avremmo delle ”coor<strong>di</strong>nate” precise che ci permetterebbero, volendo,<br />

<strong>di</strong> creare nuove tabelle, mescolando gli elementi delle vecchie.<br />

Ad esempio potremmo estrarre tutti i vincitori dei singoli Palii presi in<br />

considerazione.<br />

Sorgono nuovi problemi. Quella che era semplicemente una matrice <strong>di</strong><br />

numeri naturali dovrà contenere nuovi elementi: nomi? Dovrà essa stessa<br />

essere identificata con un nome, o con un numero? E come formalmente?<br />

Tutte queste domande sono risolte dalla materia che <strong>stu<strong>di</strong></strong>a la <strong>di</strong>sposizione<br />

e l’or<strong>di</strong>namento delle informazioni in basi <strong>di</strong> dati, l’algebra relazionale. Dallo<br />

<strong>stu<strong>di</strong></strong>o <strong>di</strong> questa teoria, largamente <strong>di</strong>ffusa ed accettata ormai ovunque, sono<br />

emerse alcune piccole incongruenze per quelli che erano i nostri scopi. Questa<br />

”analisi critica” ci ha portato a considerare l’algebra relazionale sotto aspetti<br />

matematici un po’ più rigorosi del consueto.<br />

8


2 . Una presentazione algebrica delle basi <strong>di</strong><br />

dati.<br />

Fin dalla formulazione teorica delle basi <strong>di</strong> dati, <strong>di</strong> qualche anno precedente<br />

alla loro realizzazione effettiva, si è cercato <strong>di</strong> dare coerenza teorica alla loro<br />

rappresentazione e alle operazioni possibili su <strong>di</strong> esse. Col tempo queste<br />

operazioni sono aumentate <strong>di</strong> numero e complessità, ed anche la rappresentazione<br />

stessa dei dati nelle memorie dei calcolatori, grazie all’evolversi delle<br />

tecnologie, si è andata adattando alle nuove esigenze.<br />

Ora, nonostante questa notevole evoluzione, i modelli originali sono rimasti<br />

pressoché inalterati. Cercheremo <strong>di</strong> fornire un nuovo modello algebrico,<br />

partendo da semplici definizioni proprie dell’algebra e della geometria, e<br />

da alcune loro conseguenze.<br />

Alcuni dei termini adottati saranno presi a prestito dall’informatica, per alleggerire<br />

la trattazione successiva <strong>di</strong> eccessivi sinonimi. É questo il caso, ad<br />

esempio, <strong>di</strong> dominio, selezione, istanza ...per citarne solo alcuni; solo successivamente<br />

spiegheremo quale ne è l’interpretazione classica in informatica,<br />

e le analogie con quella da noi adottata.<br />

Le prime definizioni potranno sembrare banali, ma serviranno appunto<br />

ad introdurre la terminologia.<br />

Definizione 1 . Dominio D: qualsiasi insieme, <strong>di</strong> qualsiasi car<strong>di</strong>nalità.<br />

♦<br />

In<strong>di</strong>cheremo i dominî con le lettere D, D1, D2 . . . ;<br />

i sottoinsiemi <strong>di</strong> un dominio con le lettere maiuscole A, B, C . . . ;<br />

gli elementi dei dominî con le lettere minuscole a, b, c . . . ;<br />

Quando invece vorremo riferirci genericamente ad un insieme, senza considerarlo<br />

un dominio, useremo le lettere U, U1, U2 . . .<br />

La definizione 1, nella sua evidente semplicità, va presa per quello che è:<br />

esclusivamente l’introduzione <strong>di</strong> un sinonimo per la parola ”insieme”. Sinonimo<br />

che noi useremo sempre, d’ora in poi, per in<strong>di</strong>care gli insiemi alla base<br />

della nostra teoria.<br />

Per il momento non ci soffermiamo sulle proprietà che ogni singolo dominio<br />

può avere, <strong>di</strong> questo ci occuperemo solo in un secondo tempo.<br />

9


Esempio 1 . Gli esempi <strong>di</strong> possibili dominî che vengono subito in mente,<br />

in ambiente matematico, sono quelli numerici: come ad esempio l’insieme<br />

N dei numeri naturali, o il suo sovrainsieme Q dei numeri razionali. Come<br />

detto non ci interessano per ora le proprietà <strong>di</strong> questi insiemi, ci limiteremo<br />

a riprendere soprattutto il primo, come possibile dominio utile. ♦<br />

Esempio 2 . Dato un qualsiasi insieme finito A, detto alfabeto, definiamo<br />

stringa ogni insieme or<strong>di</strong>nato e finito <strong>di</strong> elementi <strong>di</strong> A.<br />

Cosí, se per alfabeto pren<strong>di</strong>amo l’insieme dei <strong>di</strong>eci simboli ”arabi” 0, 1, ...,9,<br />

ad ogni stringa corrisponderà banalmente un numero naturale (la corrispondenza<br />

non è biunivoca, a ”0012” e ”12” corrisponde lo stesso numero).<br />

Se invece, come alfabeto, abbiamo l’insieme delle ventuno (o ventisei) lettere<br />

del nostro alfabeto, qualsiasi sequenza finita <strong>di</strong> lettere sarà una stringa,<br />

potremmo definirla ”parola” anche in assensa <strong>di</strong> un senso compiuto, e ”nome”<br />

quando serve ad identificare un altro oggetto.<br />

D’ora in poi useremo arbitrariamente le stringhe <strong>di</strong> qualsiasi alfabeto come<br />

possibili dominî. ♦<br />

In seguito daremo per scontato il concetto <strong>di</strong> prodotto cartesiano fra due<br />

dominî: D1 × D2.<br />

Di conseguenza parleremo anche <strong>di</strong> prodotto cartesiano fra un numero finito<br />

n <strong>di</strong> dominî: D1 × D2 × . . . × Dn.<br />

É <strong>di</strong> notevole importanza notare come all’interno del prodotto cartesiano lo<br />

stesso dominio, lo stesso insieme, possa essere ripetuto. Niente vieta, ad esempio,<br />

<strong>di</strong> trattare il prodotto cartesiano <strong>di</strong> un unico dominio per sé stesso<br />

n volte.<br />

Quando uno stesso dominio D sarà ripetuto nello stesso prodotto cartesiano,<br />

potremo scrivere D 1 per in<strong>di</strong>care la sua prima presenza, D i per in<strong>di</strong>care la<br />

sua i-esima.<br />

Definizione 2 . Record su D1 × D2 × . . . × Dn:<br />

ogni elemento del prodotto cartesiano D1 × D2 × . . . × Dn <strong>di</strong> n dominî. ♦<br />

Spesso in algebra si usa la parola ennupla per definire gli elementi <strong>di</strong> un<br />

prodotto cartesiano, la <strong>di</strong>fferenza fra ennupla e record sarà comunque solo<br />

lessicale. Riutilizzeremo il termine ”ennupla” quando ci riferiremo più propriamente<br />

all’algebra classica, che comunque non esula dalla nostra trattazione,<br />

ma ne è anzi il fondamentale punto <strong>di</strong> partenza.<br />

Definizione 3 . Istanza su D1 × D2 × . . . × Dn:<br />

ogni insieme finito <strong>di</strong> records, sottoinsieme finito <strong>di</strong> D1 × D2 × . . . × Dn. ♦<br />

10


Chiameremo i records con le lettere minuscole s, t, u, v . . .<br />

se vorremo specificare anche i singoli elementi del record scriveremo:<br />

s[d1, d2, . . .,dn].<br />

Chiameremo le istanze con le lettere maiuscole J, H, I, L . . .<br />

il numero n dei dominî sarà detto grado <strong>di</strong> records ed istanze.<br />

Esempio 3 . Un metodo semplice e comune <strong>di</strong> rappresentare un’istanza è<br />

per mezzo <strong>di</strong> una tabella in cui, nella prima riga, sono rappresentati i dominî<br />

del prodotto cartesiano, mentre le restanti righe elencano tutti i records<br />

appartenenti all’istanza. ♦<br />

Va tenuta ben presente la <strong>di</strong>fferenza fra le istanze ed i sottoinsiemi <strong>di</strong><br />

D1 × D2 × . . . × Dn; le prime sono esclusivamente <strong>di</strong> car<strong>di</strong>nalità finita.<br />

Un altro aspetto da non trascurare è che considereremo le istanze come insiemi<br />

non or<strong>di</strong>nati, questa <strong>di</strong>stinzione non è banale da un punto <strong>di</strong> vista<br />

informatico, laddove per forza <strong>di</strong> cose una memoria elettronica ha se non<br />

altro un or<strong>di</strong>ne <strong>di</strong> <strong>di</strong>sposizione delle proprie informazioni.<br />

Il fatto <strong>di</strong> ritenere non or<strong>di</strong>nate le istanze implica due aspetti: fra tutti i<br />

record <strong>di</strong> appartenenza non ce ne sarà mai uno preferibile o antecedente ad<br />

un altro; non sarà in alcun caso possibile avere due record uguali, in tutti i<br />

loro elementi, appartenenti alla stessa istanza.<br />

Un’ultima importante puntualizzazione: le istanze comprendono anche l’insieme<br />

vuoto.<br />

Esempio 4 . Pren<strong>di</strong>amo in considerazione un elenco telefonico, con poche<br />

semplificazione lo possiamo accomunare ad un insieme <strong>di</strong> ennuple sui seguenti<br />

quattro dominî:<br />

Nomi × Cognomi × In<strong>di</strong>rizzi × Numeri <strong>di</strong> telefono.<br />

Per quanto esteso, ogni elenco telefonico riporta un numero finito <strong>di</strong><br />

ennuple, ed è quin<strong>di</strong> un’istanza <strong>di</strong> grado 4 sui dominî considerati. ♦<br />

Esempio 5 . La tabella sul Palio <strong>di</strong> pagina 5 rappresenta un’istanza sui<br />

dominî:<br />

8 volte<br />

<br />

Contrade × Tempi × . . . × Tempi.<br />

11


Qui possiamo identificare il dominio ”Tempi” con l’insieme Q dei numeri<br />

razionali, cui va aggiunto l’elemento ”null” che rappresenta l’assenza <strong>di</strong> rilevamento.<br />

Naturalmente il numero <strong>di</strong> riferimenti cronometrici può essere variato senza<br />

mo<strong>di</strong>ficare il modello. Avevamo posto inoltre la regola per cui i tempi<br />

fossero progressivi. Questa è una limitazione sui records, in seguito vedremo<br />

come formalizzarla. A ben vedere esistono altre limitazioni, questa volta sulle<br />

istanze, se vogliamo ottenere la corretta rappresentazione <strong>di</strong> un Palio: la stessa<br />

contrada non potrà correre due volte lo stesso Palio (a questo si potrebbe<br />

ovviare inserendo il dominio con le date delle carriere), le contrade devono<br />

essere al massimo <strong>di</strong>eci.<br />

Anche queste ultime sono limitazioni, ma non sui singoli records, bensí sull’istanza<br />

considerata nel suo insieme. Anche <strong>di</strong> queste ci occuperemo in seguito.<br />

♦<br />

Riproponiamo anche il concetto <strong>di</strong> potenza <strong>di</strong> un insieme U: P(U). La<br />

potenza <strong>di</strong> un dominio D è l’insieme <strong>di</strong> tutti i suoi possibili sottoinsiemi, potrà<br />

essere applicata anche al loro prodotto cartesiano: P(D1 × D2 × . . . × Dn).<br />

Le istanze su D1 × D2 × . . . × Dn rappresentano un sottoinsieme <strong>di</strong> P(D1 ×<br />

D2 ×. . .×Dn), questo sottoinsieme coinciderà con la potenza solo nel caso in<br />

cui tutti i dominî abbiano car<strong>di</strong>nalità finita. Altrimenti sarà utile una nuova<br />

definizione.<br />

Definizione 4 . Dato un insieme U, chiameremo potenza finita <strong>di</strong> U<br />

l’insieme formato da tutti i sottoinsiemi finiti <strong>di</strong> U : Pf(U) . ♦<br />

La definizione data è molto utile ai nostri scopi: quale che sia la car<strong>di</strong>nalità<br />

dei dominî, Pf(D1 × D2 × . . . × Dn) rappresenta sempre l’insieme <strong>di</strong> tutte le<br />

possibili istanze su D1 × D2 × . . . × Dn .<br />

Definizione 5 . Schema su D1 × D2 × . . . × Dn:<br />

un insieme, non necessariamente finito, <strong>di</strong> istanze su D1 ×D2 ×... ×Dn. ♦<br />

Anche per gli schemi il numero n dei dominî sarà detto grado.<br />

Vista la <strong>di</strong>fferenza fra le istanze e i sottoinsiemi <strong>di</strong> D1 × D2 × . . . × Dn c’è<br />

<strong>di</strong>fferenza anche fra gli schemi e i sottoinsiemi <strong>di</strong> P(D1 × D2 × . . . × Dn).<br />

In entrambi i casi, istanze e schemi, siamo <strong>di</strong> fronte a sottoinsiemi del caso<br />

generale.<br />

Esempio 6 . Pren<strong>di</strong>amo un esempio simile al 6:<br />

12


Nomi × Numeri <strong>di</strong> telefono.<br />

I due dominî hanno potenzialmente car<strong>di</strong>nalità infinita, ma a ben vedere<br />

potremmo imporre un limite al numero <strong>di</strong> caratteri e cifre per nomi e numeri.<br />

Con questa limitazione i due dominî, sebbene enormi, resteranno confinati<br />

in ambito finito. Cosí, a rigor <strong>di</strong> logica, anche il numero <strong>di</strong> tutte le possibili<br />

ennuple sarà finito, ed anche la car<strong>di</strong>nalità <strong>di</strong> qualsiasi elemento dell’insieme<br />

potenza P(Nomi × Numeri <strong>di</strong> telefono). Con le suddette restrizioni l’insieme<br />

potenza è uno schema. ♦<br />

Naturalmente l’esempio proposto è pretestuoso, viste le sue <strong>di</strong>mensioni,<br />

e nella pratica sarà buona regola assimilare insiemi <strong>di</strong> car<strong>di</strong>nalità finita, ma<br />

molto alta, ad insiemi infiniti. Questo è in effetti quanto avviene considerando<br />

i ”numeri <strong>di</strong> macchina” come se fossero numeri reali.<br />

3 . Operatori sulle istanze.<br />

Una volta introdotti tutti gli elementi che caratterizzano la nostra teoria,<br />

dominî, records ed istanze, cerchiamo <strong>di</strong> costruire con essi e su <strong>di</strong> essi un’algebra.<br />

Cerchiamo cioè <strong>di</strong> definire alcuni operatori che abbiano come operan<strong>di</strong> e risultato<br />

questi stessi elementi.<br />

Più specificatamente ci preoccuperemo quasi esclusivamente delle istanze, e<br />

proprio su <strong>di</strong> esse andremo a costruire le nostre prime operazioni.<br />

Chiaramente le istanze sono insiemi finiti <strong>di</strong> records, varranno per esse i più<br />

comuni operatori insiemistici, fino a che ci si mantenga nell’ambito del finito.<br />

Potremo quin<strong>di</strong> parlare tranquillamente <strong>di</strong> unione, intersezione, <strong>di</strong>fferenza e,<br />

se i dominî sono tutti finiti, <strong>di</strong> complementare.<br />

Esempio 7 . Siano definiti i dominî: A = {a1, a2, a3}, B = {b1, b2, b3},<br />

C = {c1, c2} e D = {d1, d2}.<br />

Ve<strong>di</strong>amo il risultato <strong>degli</strong> operatori ∪, ∩, − (<strong>di</strong>fferenza) e ¬ (complementare),<br />

applicati alle seguenti istanze (la rappresentazione delle istanze è quella proposta<br />

nell’esempio 3 <strong>di</strong> pagina 11):<br />

13


♦<br />

J ∪ H =<br />

J =<br />

A B C<br />

a1 b1 c1<br />

a1 b1 c2<br />

a2 b1 c1<br />

a3 b1 c1<br />

a1 b2 c2<br />

A B C<br />

a1 b1 c1<br />

a1 b1 c2<br />

a2 b1 c1<br />

a3 b1 c1<br />

J ∩ H =<br />

H =<br />

A B C<br />

a1 b1 c1<br />

A B C<br />

a1 b1 c1<br />

a1 b2 c2<br />

J − H =<br />

A B C<br />

a1 b1 c2<br />

a2 b1 c1<br />

a3 b1 c1<br />

¬J è composto invece dalle 14 possibili terne che non appartengono a J.<br />

Continuiamo a considerare le istanze per quella che è la loro struttura:<br />

elementi della potenza finita <strong>di</strong> un prodotto cartesiano. Il prodotto cartesiano<br />

suggerisce imme<strong>di</strong>atamente un altro semplice operatore insiemistico, quello<br />

<strong>di</strong> proiezione.<br />

Definizione 6 . Dato un record s sul prodotto cartesiano D1×D2×. . .×Dn<br />

ed un dominio Di ∈ {D1, D2, . . ., Dn}, si definisce proiezione <strong>di</strong> s su Di<br />

l’elemento <strong>di</strong> ∈ Di appartenente ad s, cioè l’i-esimo elemento <strong>di</strong> s. Scriveremo:<br />

πDi (s[d1, . . .<strong>di</strong>−1, <strong>di</strong>, <strong>di</strong>+1, . . ., dn]) = <strong>di</strong> . ♦<br />

In seguito useremo anche l’operatore inverso della proiezione:<br />

π −1<br />

Di : Di −→ P(D1 × D2 × . . . × Dn) .<br />

Non è assolutamente detto che il risultato <strong>di</strong> questa funzione sia un’istanza,<br />

anzi, se uno solo <strong>degli</strong> altri dominî, oltre a Di, ha car<strong>di</strong>nalità infinita, anche<br />

il risultato <strong>di</strong> π −1<br />

sarà un insieme infinito <strong>di</strong> records.<br />

Di<br />

Una volta definito un operatore dai records agli elementi dei dominî,<br />

proseguiamo con uno da records a records.<br />

Definizione 7 . Dato un record s sul prodotto cartesiano D1 × D2 × . . . ×<br />

Dn ed un insieme <strong>di</strong> dominî {Di1, Di2, . . .,Dim} ⊂ {D1, D2, . . .,Dn}, si<br />

definisce proiezione <strong>di</strong> s su {Di1, Di2, . . .,Dim} il record:<br />

14


π{Di ,Di ,...,Dim 1 2 } (s[d1, d2, . . .dn]) = s[πDi (s), πDi (s), . . .,πDim (s)] ∈<br />

1 2<br />

∈ Di1 × Di2 × . . . × Dim . ♦<br />

Adesso possiamo definire un operatore fra istanze.<br />

Definizione 8 . Data un’istanza I sul prodotto cartesiano D1 ×D2 ×. . . ×<br />

Dn ed un insieme <strong>di</strong> dominî {Di1, Di2, . . .,Dim} ⊂ {D1, D2, . . .,Dn}, si<br />

definisce proiezione <strong>di</strong> I su {Di1, Di2, . . .,Dim} l’istanza su Di1 × Di2 ×<br />

. . . × Dim :<br />

π{Di 1 ,Di 2 ,...,Dim } I = {π{Di 1 ,Di 2 ,...,Dim } (s); ∀s ∈ I} . ♦<br />

Chiaramente il grado del risultato è inferiore o uguale a quello dell’istanza<br />

originale.<br />

Inoltre non è detto, per via <strong>di</strong> possibili ripetizioni, inammissibili in un insieme<br />

non or<strong>di</strong>nato, che l’istanza risultante abbia la stessa car<strong>di</strong>nalità (lo stesso<br />

numero <strong>di</strong> records) <strong>di</strong> quella originale.<br />

Esempio 8 . Abbiamo già visto istanze, come gli elenchi del telefono, che<br />

rappresentano lunghe liste <strong>di</strong> persone. Immaginiamone una (I) in cui fra<br />

tanti dati relativi ad ogni in<strong>di</strong>viduo ci sia anche il sesso, avremo cioè un dominio:<br />

Sesso = {M, F }.<br />

Ora, per quanto esteso sia la nostra istanza, la nostra banca dati, e per<br />

quante informazioni su migliaia <strong>di</strong> persone possa contenere, è chiaro che<br />

una proiezione sul dominio avrà solo tre esiti possibili:<br />

σSesso = {M, F } , ma anche σSesso = {M} o σSesso = {F } .<br />

Ogni possibile risultato ci fornirà comunque un’informazione sull’istanza I,<br />

ma è chiaro che, quale che sia la sua car<strong>di</strong>nalità, il risultato della proiezione<br />

avrà solo 1 o 2 elementi. ♦<br />

Un altro importante operatore l’abbiamo già visto in merito ai dominî, è<br />

il prodotto cartesiano.<br />

Per applicarlo alle istanze è comunque necessario un lieve adattamento. L’unica<br />

<strong>di</strong>fferenza formale rispetto al già noto prodotto cartesiano è che, per i<br />

nostri successivi scopi, i records dell’istanza risultante dovranno essere ancora<br />

singoli records, e non coppie <strong>di</strong> records.<br />

Definizione 9 . Date due istanze, I su D1 × D2 × . . . × Dn e J su<br />

Di+1 × Di+2 × . . . × Dm, il loro prodotto cartesiano è definito:<br />

I × J = {(d1, . . .,dn, dn+1, . . .,dm) ∈ D1 × . . . × Dn × Dn+1 × . . . ×<br />

Dm | (d1, . . .,dn) ∈ I ∧ (dn+1, . . .,dm) ∈ J} . ♦<br />

15


Esempio 9 . Ripren<strong>di</strong>amo le due istanze dell’esempio 7 per applicare loro<br />

anche quest’ultimo operatore:<br />

J × H =<br />

A B C A B C<br />

a1 b1 c1 a1 b1 c1<br />

a1 b1 c1 a1 b2 c2<br />

a1 b1 c2 a1 b1 c1<br />

a1 b1 c2 a1 b2 c2<br />

a2 b1 c1 a1 b1 c1<br />

a2 b1 c1 a1 b2 c2<br />

a3 b1 c1 a1 b1 c1<br />

a3 b1 c1 a1 b2 c2<br />

Il fatto che gli stessi dominî siano ripetuti non crea problemi, l’or<strong>di</strong>namento<br />

dei records elimina qualsiasi ambiguità. ♦<br />

Conclu<strong>di</strong>amo con un semplice risultato, che non necessita nemmeno una<br />

<strong>di</strong>mostrazione, ma si rileverà utile quando estenderemo il prodotto cartesiano<br />

ad un gran numero <strong>di</strong> istanze.<br />

Proposizione 1 . Il prodotto cartesiano è associativo. ♦<br />

4 . Vincoli.<br />

Tralasciamo per un po’ records ed istanze per tornare a parlare genericamente<br />

<strong>di</strong> insiemi. I risultati che otterremo saranno molto utili in seguito.<br />

Definizione 10 . Vincolo n-ario V, su un insieme U, è una qualsiasi<br />

funzione:<br />

V : U −→ {0, . . ., n − 1} . ♦<br />

I vincoli saranno contrassegnati dalle lettere V, V1, V2 . . .<br />

16


Esempio 10 . Poniamo un problema banale, un vincolo <strong>di</strong> arietà 220<br />

potrebbe dare, per ogni in<strong>di</strong>viduo la sua statura in centimetri.<br />

Pren<strong>di</strong>amo un caso più attinente alla matematica, un vincolo n-ario può<br />

contare gli elementi <strong>di</strong> tutti gli insiemi che hanno fino a n − 2 elementi:<br />

V (U) = #(U) (car<strong>di</strong>nalità <strong>di</strong> U) se #(U) ≤ n − 2, n − 1 altrimenti.<br />

Il vincolo appena proposto, se binario, si limiterà a riconoscere l’insieme<br />

vuoto; se ternario <strong>di</strong>stinguerà l’insieme vuoto e i singoletti.<br />

Facciamo un ultimo esempio applicabile all’insieme N dei numeri naturali:<br />

il resto modulo n è un vincolo n-ario. ♦<br />

D’ora in poi, per tutto il seguito della trattazione, ad esclusione delle<br />

considerazioni finali, ammetteremo solo vincoli binarî, cioè vincoli del tipo:<br />

V : U −→ {0, 1} .<br />

Li chiameremo semplicemente vincoli senza bisogno <strong>di</strong> specificare altro.<br />

É chiaro come ogni vincolo V su U identifica il sottoinsieme <strong>di</strong> U:<br />

A = {a ∈ U|V (a) = 1}<br />

Allo stesso modo qualsiasi A ⊆ U identifica il vincolo:<br />

V (a) =<br />

<br />

1 se a ∈ A;<br />

0 se a ∈ A.<br />

Pertanto esiste una corrispondenza biunivoca fra i vincoli su <strong>di</strong> un insieme<br />

U ed i suoi sottoinsiemi: scriveremo V A per in<strong>di</strong>care il vincolo corrispondente<br />

al sottoinsieme A, ed AV per la corrispondenza inversa.<br />

In<strong>di</strong>cheremo sempre i vincoli con le lettere maiuscole V , V1, V2, ...<br />

Sarà possibile scrivere anche V[ϕ], laddove ϕ è la con<strong>di</strong>zione che implica il<br />

risultato 1.<br />

Esempio 11 . In N, l’insieme dei numeri naturali, sono molte e note le<br />

proprietà che ne possono caratterizzare un sottoinsieme:<br />

essere <strong>di</strong>visibile per 2 è ad esempio un vincolo vero solo e soltanto per i numeri<br />

pari;<br />

essere <strong>di</strong>visibile solo per sé stesso ed 1 è il vincolo dell’insieme dei numeri<br />

primi;<br />

per finire con qualcosa <strong>di</strong> un po’ meno comune, essere la somma <strong>di</strong> tutti i<br />

propri <strong>di</strong>visori è la proprietà che con<strong>di</strong>zione l’insieme dei numeri perfetti.<br />

Allo stesso modo, dato un sottoinsieme, esiste sempre un vincolo che lo identifica,<br />

se non altro per l’appartenenza o meno al sottoinsieme in questione:<br />

17


i quadrati perfetti sono tali se esiste un numero <strong>di</strong> cui sono quadrati,<br />

ma è possibile anche prendere in considerazione tutti i numeri <strong>di</strong> un elenco<br />

telefonico (ignorando gli 0 iniziali), in questo caso il vincolo corrispondente<br />

si definisce per tautologia: essere scritto su quell’elenco. ♦<br />

Nella definizione <strong>di</strong> vincolo l’insieme U è molto generico, questo ci permette<br />

<strong>di</strong> adattarla agli specifici insiemi illustrati nel paragrafo precedente:<br />

dominî, prodotto cartesiano <strong>di</strong> dominî, schemi.<br />

Esempio 12 . Nell’esempio 5 <strong>di</strong> pagina 11 abbiamo visto come rappresentare<br />

il Palio <strong>di</strong> una contrada con il record (scriviamo T per in<strong>di</strong>care<br />

l’insieme (Q ∪ {null}) ):<br />

8 volte<br />

<br />

Contrade × T × . . . × T .<br />

Inoltre abbiamo detto che il record può rappresentare un Palio solo se<br />

gli otto tempi, rappresentati da numeri razionali appartenenti a Q, sono<br />

progressivi o uguali a ”null” (se non è stato possibile il rilevamento o la<br />

contrada non lo ha mai raggiunto).<br />

Questa esigenza è naturalmente un vincolo, informalmente possiamo scrivere<br />

anche, chiamando r i records e ti l’i-esima comparizione <strong>di</strong> un elemento del<br />

dominio T :<br />

V tempi (r) =<br />

<br />

1 se ti = null ∨ ti ≥ ti−1, ∀ 2 ≤ i ≤ 8;<br />

0 altrimenti. ♦<br />

Definizione 11 . Selezione del vincolo V su un insieme U: è l’operatore<br />

da P(U) in P(U) che associa, ad ogni sottoinsieme A ⊆ U, il sottoinsieme<br />

<strong>di</strong> U: A ∩ AV . ♦<br />

Ogni selezione è pertanto caratterizzata da un vincolo, e scriveremo SV<br />

per in<strong>di</strong>care la selezione imposta dal vincolo V .<br />

A ben vedere abbiamo definito anche un nuovo operatore unario sulle<br />

istanze.<br />

Definizione 12 . Data un’istanza I su D1 × D2 × . . . × Dn, un vincolo V<br />

sui record <strong>di</strong> D1 × D2 × . . . × Dn, il sottoinsieme AV <strong>di</strong> D1 × D2 × . . . × Dn,<br />

la selezione corrispondente a V è un operatore tale che:<br />

σV (I) = I ∩ AV . ♦<br />

18


La selezione è cosí un operatore unario su Pf(Di1 × Di2 × . . . × Din)<br />

(definizione 4 a pagina 12), cioè da istanze ad istanze sullo stesso prodotto<br />

cartesiano.<br />

Il risultato <strong>di</strong> una selezione avrà sempre un numero <strong>di</strong> records minore od<br />

uguale all’istanza originale. Avrà pertanto car<strong>di</strong>nalità finita e sarà anch’esso<br />

un’istanza.<br />

Naturalmente un altro modo <strong>di</strong> definire la selezione è:<br />

σV (I) = {r ∈ I | V (r) = 1} .<br />

Per le selezioni è banale la composizione: σV1 ◦ σV2. Essa non è infatti<br />

altro che la normale composizione <strong>di</strong> funzioni.<br />

Dalle proprietà dell’intersezione <strong>di</strong> insiemi deriva che la composizione <strong>di</strong><br />

selezioni è un operatore associativo e commutativo.<br />

Esempio 13 . Ripren<strong>di</strong>amo la nostra istanza sul Palio <strong>di</strong> Agosto del 2001,<br />

rappresentata con una tabella, cosí come l’abbiamo formalizzata negli esempi<br />

5 e 12:<br />

P =<br />

Contrada T1 T2 T3 T4 T5 T6 T7 T8<br />

Aquila 6, 4 12, 7 21, 7 38, 5 47, 5 64 null null<br />

Chiocciola 6, 7 12, 3 20, 6 36 45, 5 62 null null<br />

Civetta 6, 8 13, 1 21, 3 36, 6 46, 5 63 null null<br />

Drago 7 12, 1 20 35 44 60 70 75<br />

Giraffa 6, 5 12, 6 20, 7 35, 8 45 61 71, 5 null<br />

Istrice 6 12 20, 3 35, 3 44, 5 60, 5 71 null<br />

Montone 7, 4 13, 2 22 37, 5 48 64, 5 null null<br />

Nicchio 6, 3 12, 8 21, 5 38 48, 5 65, 5 null null<br />

Tartuca 7, 1 13, 5 22, 3 37 46 62, 5 null null<br />

Torre 6, 9 12, 5 21, 1 36, 5 47 65 null null<br />

Ipotizziamo tre possibili selezioni su P, derivanti da altrettanti vincoli<br />

(chiamiamo r i records, ti i tempi):<br />

σV1 con V1(r) =<br />

σV2 con V2(r) =<br />

σV3 con V3(r) =<br />

<br />

<br />

<br />

1 se t2 ≤ 13;<br />

0 altrimenti.<br />

1 se t7 = null;<br />

0 altrimenti.<br />

1 se (t2 − t1) ≤ 6;<br />

0 altrimenti.<br />

19


Abbiamo trattato con <strong>di</strong>sinvoltura gli elementi dei dominî, ed è chiaro che<br />

le operazioni possibili <strong>di</strong>pendono dalle loro caratteristiche intrinsiche.<br />

É comunque evidente che la composizione delle tre selezioni darà il solito<br />

risultato con qualsiasi or<strong>di</strong>ne <strong>di</strong> precedenza <strong>di</strong> un vincolo rispetto all’altro.<br />

Si verifica facilmente che il risultato <strong>di</strong> (σV1 ◦ σV2 ◦ σV3) applicato a P è<br />

l’istanza formata dai due records che descrivono la corsa <strong>di</strong> Drago e Giraffa.<br />

♦<br />

Nonostante la grande analogia fra selezioni e vincoli, per questi ultimi<br />

non è altrettanto intuitiva la definizione <strong>di</strong> composizione.<br />

Infatti per poter comporre vincoli è necessario stabilire le possibili operazioni<br />

fra <strong>di</strong> essi.<br />

I vincoli sono applicabili a qualsiasi insieme, sono cioè funzioni su qualsiasi<br />

dominio, ma hanno sempre lo stesso codominio (nei limiti che ci siamo imposti):<br />

l’insieme <strong>di</strong> due elementi {0, 1}.<br />

Parlare <strong>di</strong> composizione <strong>di</strong> vincoli equivale a parlare <strong>di</strong> operatori sul loro<br />

codominio. Data la limitatezza <strong>di</strong> quest’ultimo è facile restringere la cernita<br />

a tutti i casi possibili.<br />

Cominceremo dal caso generale (operatori n-arî su {0, 1}) per restringerci<br />

poi ai casi <strong>di</strong> interesse pratico (operatori unarî e binarî).<br />

Definizione 13 . Sia ◦ un’operazione n-aria su {0, 1}, V1, V2, . . .,Vn vincoli<br />

su <strong>di</strong> uno stesso insieme U (con generico elemento u), chiameremo composizione<br />

<strong>di</strong> vincoli rispetto a ◦ il vincolo ◦(V1, V2, . . .,Vn) tale che:<br />

◦(V1, V2, . . .,Vn) (u) = ◦(V1(u), V2(u), . . ., Vn(u)) , ∀ u ∈ U . ♦<br />

Esempio 14 . Immaginiamo un insieme A sul quale siano definiti tre<br />

vincoli <strong>di</strong>stinti, V1, V2 e V3, ed il seguente operatore ternario su {0, 1} :<br />

∀ a, b, c ∈ {0, 1}, = ◦ (a, b, c) =<br />

<br />

1 se a = b = c;<br />

0 altrimenti.<br />

Questo operatore, applicato a V1, V2 e V3, darà 1 se e solo se danno<br />

originariamente tutti e tre 1 o tutti e tre 0. ♦<br />

Come anticipato in seguito ci occuperemo esclusivamente <strong>di</strong> operatori<br />

unarî (in questo paragrafo) e binarî (approfon<strong>di</strong>tamente nel prossimo).<br />

Le operazioni unarie su {0, 1} sono tutte quelle del tipo:<br />

◦<br />

0 (◦0)<br />

1 (◦1)<br />

20


I casi possibili sono quattro: l’identità, i due operatori fissi che vanno a<br />

0 e ad 1, e la negazione. In simboli: id ◦, 0 ◦, 1 ◦ e ¬ ◦ .<br />

Definizione 14 Per ogni vincolo V : U −→ {0, 1}, chiameremo ¬ ◦ (V ) il<br />

vincolo opposto <strong>di</strong> V . ♦<br />

Sarà possibile scrivere ¬V per ¬ ◦ (V ).<br />

Gli operatori binarî saranno oggetto del prossimo paragrafo, per ora limitiamoci<br />

a vedere con un esempio quella composizione <strong>di</strong> vincoli che corrisponde<br />

alla composizione <strong>di</strong> selezioni.<br />

Esempio 15 . Abbiamo definito la composizione <strong>di</strong> selezioni come la normale<br />

composizione <strong>di</strong> funzioni.<br />

Consideriamo i vincoli, la composizione <strong>di</strong> vincoli più ovvia è quella che<br />

mantiene la corrispondenza con le selezioni.<br />

É chiaro come ad ogni selezioni si associ un vincolo. Il risultato <strong>di</strong> una<br />

sovrapposizione <strong>di</strong> selezioni è dato da quegli elementi che sod<strong>di</strong>sfano tutti i<br />

vincoli, per i quali cioè ogni vincolo ha per risultato 1.<br />

Il vincolo composto è uguale a 1 se e solo se tutti i vincoli considerati danno<br />

1, abbiamo a che fare con il normale quantificatore logico universale: ∀.<br />

L’operatore binario corrispondente (commutativo e associativo) è il normale<br />

prodotto aritmetico: il risultato è 1 se e solo se nessun fattore è uguale a 0.<br />

Vedremo in seguito come questo non sia comunque l’unico operatore possibile,<br />

nè l’unico utile. ♦<br />

Continuiamo la nostra analisi dei vincoli, nel tentativo <strong>di</strong> applicarli con<br />

la maggiore accuratezza possibile agli elementi algebrici che abbiamo definito<br />

(records e istanze).<br />

Per cominciare cercheremo <strong>di</strong> vedere come sia possibile derivare un vincolo<br />

dal codominio <strong>di</strong> una funzione al suo dominio.<br />

Definizione 15 . Siano X e Y due insiemi, V : X −→ {0, 1} un vincolo<br />

e f : Y −→ X una funzione. Chiameremo vincolo derivato <strong>di</strong> V tramite<br />

f il vincolo (in questo caso ◦ è la classica composizione <strong>di</strong> funzioni):<br />

δf(V ) = V ◦ f : Y −→ {0, 1} . ♦<br />

Naturalmente il vincolo derivato è esso stesso un vincolo.<br />

La definizione 15 ci interessa soprattutto per la sua applicazione all’unico<br />

operatore che abbiamo citato da dominî a insiemi <strong>di</strong> records: la funzione<br />

inversa della proiezione (pagina 14).<br />

21


Definizione 16 . Dato un prodotto cartesiano D1 × D2 × . . . × Dn ed<br />

(V ), e lo<br />

un vincolo V su un suo dominio Di, scriveremo δ×(V ) per δ π −1<br />

D i<br />

chiameremo vincolo derivato sul prodotto cartesiano. ♦<br />

Esempio 16 . Nell’esempio 13 <strong>di</strong> pagina 19 avevamo la nostra istanza sul<br />

Palio e tre selezioni derivanti da tre vincoli sui records:<br />

V1(r) =<br />

<br />

1 se t2 ≤ 13;<br />

0 altrimenti.<br />

e V3(r) =<br />

<br />

, V2(r) =<br />

<br />

1 se (t2 − t1) ≤ 6;<br />

0 altrimenti.<br />

1 se t7 = null;<br />

0 altrimenti.<br />

Di questi i primi due derivano chiaramente sul prodotto cartesiano, è<br />

facile riconoscere i vincoli originali sui dominî T2 e T7.<br />

V3 invece non è derivabile da alcun vincolo su <strong>di</strong> un singolo dominio, in<br />

quanto coinvolge, con un operatore binario (la <strong>di</strong>fferenza, operatore possibile<br />

fra gli elementi <strong>di</strong> Q), due dominî <strong>di</strong>stinti (anche se sono lo stesso insieme).<br />

♦<br />

Chiu<strong>di</strong>amo il paragrafo con una considerazione. La logica dei pre<strong>di</strong>cati<br />

è una teoria applicata comunemente all’informatica e per molti versi si può<br />

adattare anche ai vincoli.<br />

I pre<strong>di</strong>cati (come nella logica classica) sono affermazione con due possibili<br />

valori <strong>di</strong> verità, vero o falso, a seconda del soggetto loro attribuito.<br />

Per i pre<strong>di</strong>cati, come per gli operatori, si parla poi <strong>di</strong> arietà a seconda del<br />

numero <strong>di</strong> elementi a cui si riferiscono.<br />

Chiaramente il pre<strong>di</strong>cato corrispondente ad un vincolo derivato sul prodotto<br />

cartesiano è un pre<strong>di</strong>cato unario, per forza <strong>di</strong> cose coinvolgerà solo l’unico<br />

elemento del dominio da cui il vincolo deriva.<br />

É possibile inoltre comporre i pre<strong>di</strong>cati per mezzo <strong>di</strong> connettivi, questi<br />

non sono altro che i comuni simboli <strong>di</strong> negazione, congiunzione e <strong>di</strong>sgiunzione:<br />

¬, ∧, ∨ .<br />

Si parla <strong>di</strong> formule quando, tramite i connettivi, si compongono varî pre<strong>di</strong>cati,<br />

cosí da ottenerne nuove affermazione, più articolate, ma sempre vere o<br />

false a seconda <strong>degli</strong> elementi cui si riferiscono.<br />

Esempio 17 . Ripren<strong>di</strong>amo i tre vincoli sul Palio (esempio 16), ad ognuno<br />

corrisponde un pre<strong>di</strong>cato, che è poi quello corrispondente al risultato<br />

1, chiamiamoli P1 (t2 ≤ 13), P2 (t7 = null) e P3 ((t2 − t1) ≤ 6).<br />

22<br />

.


Nell’esempio 13 abbiamo composto le selezioni corrispondenti in un’unica selezione.<br />

Qual è la formula del vincolo relativo?<br />

La formula sarà quella che compone col connettivo <strong>di</strong> congiunzione i tre<br />

pre<strong>di</strong>cati: P1 ∧ P2 ∧ P3 . ♦<br />

Dai connettivi <strong>di</strong>scendono poi i quantificatori: quello universale (∀) da<br />

∧, e quello esistenziale (∃) da ∨.<br />

Nel prossimo paragrafo approfon<strong>di</strong>remo l’argomento, troveremo nuovi quantificatori<br />

e cercheremo <strong>di</strong> ampliare le possibilità offerte dalla logica dei pre<strong>di</strong>cati<br />

classica.<br />

5 . Operatori binarî su {0, 1} e quantificatori.<br />

Immaginiamo un vincolo su <strong>di</strong> un ipotetico insieme U, è possibile estenderlo<br />

ad un vincolo sulla sua potenza finita Pf(U) cosí come abbiamo derivato i<br />

vincoli da un singolo dominio ad un prodotto cartesiano?<br />

Il metodo più intuitivo potrebbe essere, chiamando Vu il vincolo originale:<br />

{ A ∈ Pf(U) | V (A) = 1} = { A ∈ Pf(U) | ∀ a ∈ A, Vu(a) = 1}.<br />

Però potrebbe essere altrettanto valida un’altra soluzione, che mo<strong>di</strong>fica il<br />

quantificatore:<br />

{ A ∈ Pf(U) | V (A) = 1} = { A ∈ Pf(U) | ∃ a ∈ A t.c. Vu(a) = 1}.<br />

Esempio 18 . Cerchiamo <strong>di</strong> applicare ad un caso un po’ banale il problema<br />

appena posto.<br />

Immaginiamo un gruppo <strong>di</strong> amici (l’insieme U il cui generico elemento chiameremo<br />

con la lettera u), desiderosi <strong>di</strong> compiere un viaggio ma indecisi sul<br />

mezzo <strong>di</strong> trasporto.<br />

Ammettiamo che decidano <strong>di</strong> usare delle biciclette, in questo caso avremo un<br />

vincolo sui singoli in<strong>di</strong>vidui: Vu(u) = 1 se e solo se u sa andare in bicicletta.<br />

É chiaro che il vincolo V esteso ad U ( V (U) = 1 se e solo se il viaggio è<br />

possibile) è del tipo:<br />

V (U) = 1 se e solo se ∀ u ∈ U, Vu(u) = 1.<br />

Ammettiamo che invece decidano <strong>di</strong> affittare un autobus capace <strong>di</strong> contenerli<br />

23


tutti, in questo caso Vu(u) = 1 se e solo se u sa guidare un autobus. Il vincolo<br />

che decide sulla possibilità del viaggio sarà:<br />

V(U) = 1 se e solo se ∃ u ∈ U, Vu(u) = 1. ♦<br />

É lecito preferire un tipo <strong>di</strong> derivazione del vincolo sulla potenza? Ce ne<br />

sono altri oltre a quelli visti finora?<br />

In realtà, a seconda delle necessità, potrebbero essere accettabili entrambe<br />

quelli viste, e ne potremmo richiedere <strong>di</strong> nuove.<br />

Esempio 19 . Ripren<strong>di</strong>amo gli amici dell’esempio 18, ammettiamo che<br />

abbiano deciso <strong>di</strong> usare delle motociclette. In questo caso, per ogni persona<br />

che non sa guidare la moto ne sarà necessaria un’altra che ne sia capace e<br />

possa accogliere un passeggero. Il vincolo sui singoli è sempre Vu(u) = 1 se e<br />

solo se u sa guidare la moto. Il vincolo esteso dovrebbe essere (il simbolo #<br />

sta ad in<strong>di</strong>care la car<strong>di</strong>nalità <strong>di</strong> un insieme, il numero dei suoi elementi):<br />

V (U) = 1 se e solo se #({u | Vu(u) = 1}) ≥ #({u | Vu(u) = 0}). ♦<br />

Per rispondere a queste domande sarà necessario aprire un’ampia parentesi<br />

ed analizzare più accuratamente le caratteristiche della funzione che<br />

abbiamo chiamato ”vincolo”.<br />

Per passare da una funzione su <strong>di</strong> un singolo elemento (il vincolo su U) ad<br />

una funzione su insiemi finiti (il vincolo su Pf(U) ) si può definire un operatore<br />

fra gli elementi del codominio della funzione (nel nostro caso l’insieme<br />

{0, 1}).<br />

Abbiamo scelto fin dall’inizio (pagina 16) <strong>di</strong> considerare solo vincoli binarî,<br />

ma anche in questo caso non sono poche le operazioni binarie fra i due elementi<br />

0 e 1.<br />

Un operatore binario su <strong>di</strong> un insieme U è una funzione: U × U −→ U.<br />

{0, 1} ha car<strong>di</strong>nalità 2 e, per definire un operatore, chiamiamolo genericamente<br />

◦, basterà riempire con i dovuti risultati una tabella 2 × 2:<br />

0 1<br />

0 (0 ◦ 0) (0 ◦ 1)<br />

1 (1 ◦ 0) (1 ◦ 1)<br />

Una volta cosí definito l’operatore, la giusta scrittura (informale) <strong>di</strong> estensione<br />

per un vincolo sarà:<br />

∀A ∈ P(U), V (A) = a1 ◦ a2 ◦ . . . ; ∀ ai ∈ A .<br />

24


Per ora la definizione è solo intuitiva (non considera la finitezza <strong>di</strong> A, il<br />

suo mancato or<strong>di</strong>namento, né l’eventualità che sia vuoto), ma ve<strong>di</strong>amo come<br />

può funzionare.<br />

Esempio 20 . Immaginiamo <strong>di</strong> avere un vincolo V sull’insieme U, ed un<br />

sottoinsieme A ⊆ U, vogliamo un operatore da cui derivi un vincolo che <strong>di</strong>a<br />

1 se e solo se V (a) = 1 ∀ a ∈ A. É questo il caso dell’operatore:<br />

0 1<br />

0 0 0<br />

1 0 1<br />

Non appena incontrerà un elemento per cui V <strong>di</strong>a risultato 0, il risultato<br />

delle operazioni sarà irrime<strong>di</strong>abilmente 0. ♦<br />

Esempio 21 Come sopra, solo che il vincolo su A deve dare 1 se ∃ a ∈ A<br />

tale che V (a) = 1 :<br />

0 1<br />

0 0 1<br />

1 1 1<br />

Il risultato delle operazioni sarà 0 solo se per nessun elemento <strong>di</strong> A avremo<br />

V (a) = 1. ♦<br />

É bene approfon<strong>di</strong>re l’argomento in merito ai possibili operatori binarî<br />

sull’insieme {0, 1}.<br />

Si è già visto come costruirli ed è subito evidente che in tutto potremo avere<br />

solo 2 4 possibilità <strong>di</strong> permutazioni. Scriviamole tutte, in<strong>di</strong>candole per ora solo<br />

con numeri romani e riservandoci <strong>di</strong> analizzarne le proprietà in un secondo<br />

momento.<br />

Definizione 17 . Definiamo tutti i possibili operatori binarî sull’insieme<br />

{0, 1}:<br />

I<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 0 0<br />

II<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 0 1<br />

25<br />

III<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 1 0<br />

IV ◦ =<br />

0 1<br />

0 0 0<br />

1 1 1


V ◦ =<br />

IX ◦ =<br />

XIII<br />

◦ =<br />

♦<br />

0 1<br />

0 0 1<br />

1 0 0<br />

0 1<br />

0 1 0<br />

1 0 0<br />

0 1<br />

0 1 1<br />

1 0 0<br />

V I<br />

◦ =<br />

X ◦ =<br />

XIV<br />

◦ =<br />

0 1<br />

0 0 1<br />

1 0 1<br />

0 1<br />

0 1 0<br />

1 0 1<br />

0 1<br />

0 1 1<br />

1 0 1<br />

V II<br />

◦ =<br />

XI<br />

◦ =<br />

XV<br />

◦ =<br />

0 1<br />

0 0 1<br />

1 1 0<br />

0 1<br />

0 1 0<br />

1 1 0<br />

0 1<br />

0 1 1<br />

1 1 0<br />

V III<br />

◦ =<br />

XII<br />

◦ =<br />

XV I<br />

◦ =<br />

0 1<br />

0 0 1<br />

1 1 1<br />

0 1<br />

0 1 0<br />

1 1 1<br />

0 1<br />

0 1 1<br />

1 1 1<br />

A questo punto, una volta scritta la sfilza <strong>di</strong> tutte le possibilità, cerchiamo<br />

<strong>di</strong> applicare a questi operatori le normali regole algebriche, e <strong>di</strong> introdurne<br />

una nuova, che sarà utile ai nostri scopi.<br />

Perché sia rispettata la proprietà commutativa (a ◦b = b ◦a) è necessario che<br />

0 ◦ 1 sia uguale a 1 ◦ 0, si vede subito che questo è il caso solo della metà dei<br />

nostri 16 operatori: quelli relativi a matrici simmetriche.<br />

Un’altra proprietà abbastanza facile da verificare è l’esistenza o meno <strong>di</strong> un<br />

elemento neutro (∃ e t.c. a ◦ e = a, e ◦ a = a). Questo corrisponde a matrici<br />

simmetriche che abbiano una riga uguale a (0, 1): due operatori ( II<br />

◦ e X ◦)<br />

hanno 1 come elemento neutro, e due (<br />

V II<br />

◦ e<br />

V III<br />

◦ ) hanno 0.<br />

L’elemento neutro può essere anche solo sinistro o destro (sinistro: ∃ e t.c.<br />

e ◦ a = a; destro: ∃ e t.c. a ◦ e = a).<br />

Per i nostri scopi successivi saranno importanti soprattutto gli elementi neu-<br />

tri sinistri, riconoscibili nella matrice per una riga uguale a (0, 1).<br />

Hanno questo particolare elemento altri tre operatori: V ◦ (0), XIV<br />

◦ (1), e<br />

che ne ha ad<strong>di</strong>rittura due.<br />

É più <strong>di</strong>fficile invece verificare la proprietà associativa ((a◦b)◦c = a◦(b◦c)),<br />

ma con un po’ <strong>di</strong> pazienza si può vedere che sono solo sei operatori a non<br />

sod<strong>di</strong>sfare questa proprietà: III<br />

◦ , V ◦, IX ◦ , XII<br />

◦ , XIV<br />

◦ e XV<br />

◦ .<br />

Per come avevamo presentato, informalmente, la sequenza <strong>di</strong> operazioni<br />

da effettuare su tutti gli elementi <strong>di</strong> un insieme, si può pensare che siano<br />

accettabili solo le operazioni commutative ed associative (sono solo sei): I ◦,<br />

26<br />

V I<br />

◦ ,


II V II V III<br />

◦, ◦ ,<br />

◦ , X ◦ e<br />

XV I<br />

◦ .<br />

In realtà si può essere molto meno restrittivi, cominciando col definire una<br />

nuova proprietà:<br />

Definizione 18 . Un operatore binario ◦ su <strong>di</strong> un insieme A si definisce<br />

semi-associativo se:<br />

∀a, b, c ∈ A (a ◦ b) ◦ c = (a ◦ c) ◦ b . ♦<br />

Ve<strong>di</strong>amo l’utilità <strong>di</strong> questa proprietà.<br />

Proposizione 2 . Sia dato un operatore binario semi-associativo ◦ su <strong>di</strong><br />

un insieme A, e una formula del tipo:<br />

(a0 ◦ a1) ◦ a2) ◦ . . . ◦)an) , con a1, . . .an ∈ A.<br />

Allora per ogni permutazione σ : {1, 2, . . ., n} −→ {σ(1), σ(2), . . ., σ(n)} :<br />

(a0 ◦ a1) ◦ a2) ◦ . . . ◦)an) = (a0 ◦ aσ(1)) ◦ aσ(2)) ◦ . . . ◦)aσ(n))<br />

Dimostrazione - Ogni permutazione deriva da permutazioni semplici,<br />

è sufficiente verificare che, ∀i ∈ {1, 2, . . ., n − 1} :<br />

(a0 ◦ a1) ◦ . . .) ◦ ai−1) ◦ ai) ◦ ai+1) ◦ . . .) ◦ an =<br />

(a0 ◦ a1) ◦ . . .) ◦ ai−1) ◦ ai+1) ◦ ai) ◦ . . .) ◦ an .<br />

E questo è vero proprio per la semi-associatività. ♦<br />

Grazie a questo risultato, quin<strong>di</strong>, un operatore semi-associativo può essere<br />

applicato ad un insieme <strong>di</strong>sor<strong>di</strong>nato (ma finito) <strong>di</strong> elementi, senza possibilità<br />

<strong>di</strong> alterare il risultato a seconda <strong>di</strong> come gli sono proposti gli operan<strong>di</strong>, ad<br />

eccezione del primo.<br />

D’ora in poi scriveremo a0 ◦ (a1 ◦ a2 ◦ . . . ◦ an) , intendendo <strong>di</strong> poter svolgere<br />

le operazioni fra parentesi in un or<strong>di</strong>ne qualsiasi.<br />

Proposizione 3 . Un operatore commutativo e associativo è anche semiassociativo.<br />

♦<br />

Dimostrazione - (a◦b)◦c ass.<br />

= a◦(b◦c) comm.<br />

= a◦(c◦b) ass.<br />

= (a◦c)◦b .<br />

Proposizione 4 . Un operatore commutativo e semi-associativo è anche<br />

associativo.<br />

♦<br />

Dimostrazione - (a◦b)◦c comm.<br />

= (b◦a)◦c semi<br />

= (b◦c)◦a comm.<br />

= a◦(b◦c) .<br />

27


Proposizione 5 . Se ◦ ha elemento neutro sinistro ed è semi-associativo,<br />

allora è anche commutativo e associativo.<br />

Dimostrazione - Sia e l’elemento neutro sinistro:<br />

(a ◦ b) = ((e ◦ a) ◦ b) = ((e ◦ b) ◦ a) = (b ◦ a) . Quin<strong>di</strong> ◦ è commutativo, ed è<br />

associativo per la 4. ♦<br />

A questo punto possiamo definire rigorosamente come passare da un<br />

vincolo su <strong>di</strong> un insieme U ad un vincolo sulla sua potenza.<br />

Definizione 19 . Dato un insieme U e un vincolo V : U → {0, 1} ,<br />

chiamiamo quantificatore Q ogni coppia (b, ◦), con b ∈ {0, 1}, e ◦ un<br />

operatore semi-associativo.<br />

Si definisce poi vincolo quantificato sulla potenza finita, rispetto<br />

a ◦, il vincolo su Pf(U):<br />

QPf(b,◦) V (A) = b ◦ a∈A<br />

○ V (a) . ♦<br />

L’elemento b all’inizio dell’espressione (che sarà 0 o 1) serve ad affrontare<br />

l’insieme vuoto.<br />

La proposizione 2 permette <strong>di</strong> considerare ininfluente l’or<strong>di</strong>ne con cui gli elementi<br />

<strong>di</strong> A verranno sottoposti all’operatore.<br />

A questo punto ve<strong>di</strong>amo quali sono gli operatori semi-associativi fra tutti i<br />

se<strong>di</strong>ci possibili.<br />

Con la pazienza <strong>di</strong> effettuare qualche conto se ne scoprono <strong>di</strong>eci, ve<strong>di</strong>amoli<br />

uno per uno, commentando anche il risultato della loro applicazione alla<br />

derivazione <strong>di</strong> vincoli, a seconda che si inizi con 1 o con 0.<br />

D’ora in poi daremo per scontata l’applicazione <strong>di</strong> un vincolo V ad un insieme<br />

finito A, chiameremo ”1” o ”0” gli elementi <strong>di</strong> A a seconda dell’esito del<br />

vincolo su <strong>di</strong> loro.<br />

Un’osservazione: adotteremo nuovi simboli per in<strong>di</strong>care i possibili quantificatori,<br />

useremo lo stesso simbolo per quantificatori <strong>di</strong>versi che <strong>di</strong>ano però<br />

lo stesso risultato per qualsiasi insieme finito e qualsiasi vincolo.<br />

Ve<strong>di</strong>amo, uno per uno, tutti gli operatori semi-associativi ed i possibili quantificatori<br />

su <strong>di</strong> essi.<br />

I<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 0 0<br />

Iniziando con 0 l’operatore è banale, lo in<strong>di</strong>cheremo con Q0.<br />

Cominciando invece con un ”1”, il quantificatore è equivalente alla domanda:<br />

28


A è vuoto?<br />

Scriveremo: Q∅ per Q Pf(1 I ◦) .<br />

II<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 0 1<br />

Si tratta della normale moltiplicazione aritmetica.<br />

Inizializzato con ”1” equivale al quantificatore logico ∀: Q∀ per Q Pf(1 II ◦ ) .<br />

Se inizializzato con ”0” è il già noto e banale Q0.<br />

III<br />

◦ =<br />

0 1<br />

0 0 0<br />

1 1 0<br />

Partendo con ”0” è Q0.<br />

Iniziando con ”1” equivale a ∃: Q∃ per Q Pf(1 III<br />

◦ ) .<br />

IV ◦ =<br />

0 1<br />

0 0 0<br />

1 1 1<br />

Questo operatore equivale all’identità del primo operando. Il quantificatore<br />

derivato sarà sempre uguale all’elemento scelto come inizializzatore: Q0<br />

per Q Pf(0 IV ◦ ) e Q1 per Q Pf(1 IV ◦ ) .<br />

V II<br />

◦ =<br />

0 1<br />

0 0 1<br />

1 1 0<br />

Questo operatore è la somma modulo 2. Cominciando con ”1” risponde<br />

alla richiesta: gli ”1” sono in numero pari? Q1 per Q V II<br />

Pf(1 ◦ ) .<br />

Cominciando con ”0”: gli ”1” sono in numero <strong>di</strong>spari? Q|1 per Q V II<br />

Pf(0 ◦ ) .<br />

V III<br />

◦ =<br />

0 1<br />

0 0 1<br />

1 1 1<br />

Ci troviamo <strong>di</strong> fronte al classico quantificatore logico ∃, se inizializzato<br />

con ”0”: Q∃ per Q V III<br />

Pf(0 ◦ ) .<br />

Cominciando con ”1” abbiamo il quantificatore banale Q1 .<br />

29


X ◦ =<br />

0 1<br />

0 1 0<br />

1 0 1<br />

V II<br />

Qui vale il <strong>di</strong>scorso fatto per ◦ in merito agli ”1”, solo che valuta parità<br />

o <strong>di</strong>sparità <strong>degli</strong> ”0”. Scriveremo: Q0 per Q<br />

Pf(1 X ◦) e Q|0 per Q V II<br />

Pf(0 ◦ ) .<br />

XII<br />

◦ =<br />

0 1<br />

0 1 0<br />

1 1 1<br />

É simile a III<br />

◦ , inizializzato con ”1” è banale ed è Q1 .<br />

Cominciando con ”0” invece <strong>di</strong>venta: ( ∃ ∧ = ∅). Q∃¬∅ per Q Pf(0 XII<br />

◦ ) .<br />

Quest’ultimo quantificatore è utile per evitare alcuni paradossi logici (ve<strong>di</strong><br />

l’esempio 23 nella prossima pagina).<br />

XIII<br />

◦ =<br />

0 1<br />

0 1 1<br />

1 0 0<br />

Questo operatore è equivalente alla negazione ( ¬ ) del primo operando.<br />

V II<br />

In realtà può avere la stessa utilità <strong>di</strong> ◦ e X ◦, che contavano la parità o la<br />

<strong>di</strong>sparità <strong>di</strong> ”1” e ”0”, solo che qui il conteggio avviene su tutti gli elementi<br />

dell’insieme.<br />

Inizializzato a ”1” risponde alla domanda: A ha car<strong>di</strong>nalità pari? Q per<br />

Q<br />

Pf(1 XIII<br />

◦ ) .<br />

Inizializzato a ”0”: A ha car<strong>di</strong>nalità <strong>di</strong>spari? Q| per Q<br />

Pf(0 XIII<br />

◦ ) .<br />

XV I<br />

◦ =<br />

0 1<br />

0 1 1<br />

1 1 1<br />

Quest’ultimo caso si rifà al primo, può sembrare banale (iniziando con 1<br />

si ha Q1, ma cominciando con ”0” ci <strong>di</strong>ce se l’insieme è <strong>di</strong>verso dal vuoto.<br />

Scriveremo: Q¬∅ per Q XIV .<br />

P0 ◦<br />

Cosí, grazie a questo elenco ed alla definizione 19, abbiamo trovato in<br />

tutto 14 mo<strong>di</strong> algebrici per derivare un vincolo su <strong>di</strong> un insieme alla potenza<br />

<strong>di</strong> quello stesso insieme:<br />

Q∅ , Q∀ , Q∃ , Q1 , Q|1 , Q∃ , Q0 , Q|0 , Q∃¬∅ , Q , Q| e Q¬∅ , oltre ai<br />

banali Q0 e Q1 .<br />

30


Esempio 22 . Diventa imme<strong>di</strong>ato applicare la definizione 19 <strong>di</strong> pagina 28<br />

ad un qualsiasi sottoinsieme finito, e con uno qualsiasi dei nostri quantificatori.<br />

Immaginiamo <strong>di</strong> avere l’insieme A = {1, 2, 4, 5, 6, 7, 8} ed il vincolo su A:<br />

V (a) = 1 se a è un numero primo, V (a) = 0 altrimenti. Vogliamo vedere se<br />

i numeri primi <strong>di</strong> A sono in numero pari.<br />

Adotteremo su V il quantificatore Q1:<br />

V (6)<br />

V II<br />

◦ V (1)<br />

V II V II<br />

◦ V (7) ◦ V (8) =<br />

Q1 V (A) = 1<br />

= (1<br />

= (1<br />

= (0<br />

= (1<br />

= (0<br />

V II<br />

◦ V (2)<br />

V II<br />

◦ V (3)<br />

V II V II V II V II V II V II V II V II<br />

◦ 0) ◦ 1 ◦ 1 ◦ 0 ◦ 1 ◦ 0 ◦ 1 ◦ 0 =<br />

V II V II V II V II V II V II V II<br />

◦ 1) ◦ 1 ◦ 0 ◦ 1 ◦ 0 ◦ 1 ◦ 0 =<br />

V II V II V II V II V II V II<br />

◦ 1) ◦ 0 ◦ 1 ◦ 0 ◦ 1 ◦ 0 =<br />

V II<br />

◦ V (4)<br />

V II<br />

◦ V (5)<br />

V II V II V II V II V II V II V II V II V II<br />

◦ 0) ◦ 1 ◦ 0 ◦ 1 ◦ 0 = (1 ◦ 1) ◦ 0 ◦ 1 ◦ 0 =<br />

V II V II V II V II V II V II<br />

◦ 0) ◦ 1 ◦ 0 = (0 ◦ 1) ◦ 0 = 1 ◦ 0 = 1 .<br />

I numeri primi <strong>di</strong> A sono in numero pari. L’or<strong>di</strong>ne con cui abbiamo<br />

<strong>di</strong>sposto gli elementi <strong>di</strong> A è ininfluente ai fini del risultato. ♦<br />

Esempio 23 . Ve<strong>di</strong>amo un caso in cui è preferibile il quantificatore Q∃¬∅<br />

rispetto al più consueto Q∃ .<br />

Immaginiamo <strong>di</strong> avere un’istanza I che riassuma tutti i rigori concessi in un<br />

dato campionato <strong>di</strong> calcio. L’istanza è sul prodotto cartesiano:<br />

Giocatore × Squadra × Squadra × Minuto × Esito .<br />

Giocatore è l’insieme <strong>di</strong> tutti i calciatori <strong>di</strong> tutte le squadre.<br />

Squadra è l’insieme <strong>di</strong> tutte le squadre, alla seconda riassume tutte le possibili<br />

partite del campionato.<br />

Minuto è il minuto in cui la massima punizione è stata concessa.<br />

Esito comprende le varie possibilità: Goal, Parata, Palo, Fuori.<br />

Adesso vogliamo vedere se un dato calciatore è, o meno, un rigorista infallibile.<br />

Dovremo dapprima fare una selezione sull’istanza con il nome (X) del<br />

nostro uomo: σ (Giocatore=X) (I) .<br />

Poi a questa nuova istanza potremo derivare il semplice vincolo sui records:<br />

V (Esito=Goal)) . Salteranno fuori tutti coloro che non hanno mai sbagliato<br />

la massima punizione.<br />

31<br />

V II<br />


Se però, per la derivazione, usassimo semplicemente Q∃ risulterebbero ”rigoristi<br />

infallibili” anche tutti i giocatori che non ne hanno mai tirato uno.<br />

L’unico modo perché il vincolo funzioni solo per chi ha calciato almeno un<br />

rigore è la derivazione del vincolo originale per mezzo <strong>di</strong> Q∃¬∅. ♦<br />

Si può notare un’altra particolarità, quasi ogni derivazione ha la sua inversa<br />

(vale a <strong>di</strong>re la derivazione che dà ”0” tutte le volte che nella prima si<br />

ha ”1”, e viceversa): Q0 è chiaramente l’inversa <strong>di</strong> Q1, Q∅ <strong>di</strong> Q¬∅, cosí come<br />

Q∃ <strong>di</strong> Q∃, e lo stesso <strong>di</strong>casi per le sei che valutano parità o <strong>di</strong>sparità.<br />

Rimangono escluse due derivazioni (Q∀ e Q∃¬∅) per le quali non esiste una<br />

negazione.<br />

In realtà alcuni <strong>di</strong> questi quantificatori presentano caratteristiche che<br />

li rendono poco pratici in alcune circostanze. Esistono alcune con<strong>di</strong>zioni<br />

aggiuntive che possono limitare il numero dei quantificatori.<br />

Definizione 20 . Un quantificatore Q è coerente se per ogni vincolo V<br />

e per ogni singoletto {a} si ha:<br />

(Q V )({a}) = V (a) . ♦<br />

Esempio 24 . Non è poi tanto strano che certi quantificatori si comportino<br />

<strong>di</strong>versamente coi singoletti rispetto al vincolo da cui derivano.<br />

Alcuni quantificatori si <strong>di</strong>sinteressano completamente <strong>di</strong> quale sia l’elemento<br />

del singoletto, si comportano allo stesso modo con qualsiasi insieme <strong>di</strong> car<strong>di</strong>nalità<br />

1. Oltre a quelli banali, fra questi c’è Q∅ , e chiaramente i due che<br />

considerano se l’insieme ha car<strong>di</strong>nalità pari o <strong>di</strong>spari.<br />

Altri sono esattamente ”anti-coerenti”, nel senso che se il vincolo dà 1 sull’elemento<br />

del singoletto, il quantificatore darà 0, e viceversa. Questi sono<br />

Q∃ e Q∃¬∅ .<br />

Q , Q| , Q0 e Q1 non sono coerenti e si comportano con i singoletti secondo<br />

le loro particolari caratteristiche. ♦<br />

Si vede come un quantificatore Q(b, ◦) è coerente se e solo se ◦ possiede<br />

un elemento neutro sinistro e questo è b.<br />

Infatti deve valere b ◦ V (a) = V (a) sia che V (a) sia 1 o 0.<br />

Proposizione 6 . Esistono solo quattro quantificatori coerenti: Q∃ , Q∀ ,<br />

Q|0 e Q|1 . ♦<br />

Definizione 21 . Un quantificatore Q è universale se, comunque preso<br />

un vincolo V su X, una funzione f : Y −→ X, ed un sottoinsieme finito<br />

A ∈ Pf(Y ), si ha:<br />

(Q V )( {f(a), ∀a ∈ A} ) = (Q Vf)( A ) ,<br />

laddove Vf è il chiaro vincolo su Y indotto da f . ♦<br />

32


Esempio 25 . Ripren<strong>di</strong>amo la definizione 16 <strong>di</strong> pagina 22, quella che deriva<br />

i vincoli dai singoli dominî ad un intero record.<br />

Immaginiamo <strong>di</strong> avere un’istanza I su un prodotto cartesiano in cui compaia<br />

come dominio l’insieme N dei numeri naturali. Sui records <strong>di</strong> I possiamo<br />

derivare il vincolo su N: V1(n) = 1 se n = 1, altrimenti V1(n) = 0 .<br />

Immaginiamo che (Q1 δ×V1)(I) = 1, cioè che i records in cui l’elemento <strong>di</strong><br />

D sia un 1 sono in numero pari, e che ce ne siano effettivamente almeno<br />

due.<br />

La proiezione πD(I) darà un sottoinsieme dei numeri naturali in cui il numero<br />

1 comparirà una ed una sola volta. Cioè (Q1 V1)(πD(I)) = 0.<br />

Q1 non è un quantificatore universale. ♦<br />

Proposizione 7 . Gli unici quantificatori non universali sono: Q , Q| ,<br />

Q0 , Q|0 , Q1 e Q|1 . ♦<br />

Cosí, fra tutti i quantificatori derivanti da operatori binarî, gli unici coerenti<br />

ed universali sono Q∃ e Q∀ .<br />

In base alla definizione 19, per la natura <strong>degli</strong> operatori binarî, i quantificatori<br />

si adattano benissimo ad essere interpretati come algoritmi dalle macchine<br />

calcolatrici. Il computer si limiterà a prendere uno per uno gli elementi<br />

dell’insieme da analizzare, applicando le regole dell’operatore in questione.<br />

C’è però un caso in cui le cose si fanno ancora più semplici.<br />

Definizione 22 . Dato un operatore ◦ su un insieme X, <strong>di</strong>remo che d ∈ X<br />

è un elemento finale <strong>di</strong> ◦ se d ◦ x = d , ∀x ∈ X , ♦<br />

Esempio 26 . Un ”elemento finale” può essere molto utile per snellire<br />

l’esecuzione <strong>di</strong> un algoritmo che calcoli un quantificatore.<br />

Dovendo ad esempio riconoscere se un insieme è vuoto o meno ci si può<br />

sempre fermare subito, al primo elemento.<br />

Anche i comuni quantificatori ∀ ed ∃ possono fornire la soluzione non appena<br />

trovano uno 0 (il primo) o un 1 (il secondo). ♦<br />

Quando in un insieme A c’è un elemento finale d, un algoritmo per la<br />

determinazione <strong>di</strong> Q V (A) può essere troncato non appena incontra d.<br />

Nella matrice dell’operatore un elemento finale sarà riconoscibile per avere<br />

una riga <strong>di</strong> elementi tutti uguali a sé stesso.<br />

Anche qui, fra i quantificatori binarî non banali, gli unici a non avere un<br />

elemento finale sono gli stessi che non sono universali: quelli che valutano<br />

parità e <strong>di</strong>sparità.<br />

33


Cambiamo argomento per vedere come sia possibile costruire ”algoritmi”<br />

più complessi.<br />

Premettiamo innanzitutto la constatazione, fin qui sottintesa, che un vincolo<br />

applicato ad un elemento, cosí come un quantificatore <strong>di</strong> un vincolo su un<br />

insieme, sono entrambi pre<strong>di</strong>cati logici.<br />

Nella definizione 13 <strong>di</strong> pagina 20 avevamo considerato la composizione <strong>di</strong><br />

pre<strong>di</strong>cati per mezzo <strong>di</strong> generici operatori n-arî. Allo stesso modo sarà possibile<br />

comporre i vincoli ed i vincoli quantificati.<br />

A questo scopo saranno molto utili i nostri 14 operatori binarî: I ◦ , II<br />

◦ , . . . e<br />

XV I<br />

◦ .<br />

É possibile quin<strong>di</strong> costruire formule complesse con i pre<strong>di</strong>cati (siano essi<br />

vincoli, come in questo paragrafo, o pre<strong>di</strong>cati sui records, come nel precedente)<br />

dando pari <strong>di</strong>gnità a tutti gli operatori binarî.<br />

Useremo le lettere greche (ϕ, ψ, . . .) per in<strong>di</strong>care le formule.<br />

Esempio 27 . Solitamente gli unici connettivi logici ammessi nella costruzione<br />

<strong>di</strong> formule sono i classici ∧, ∨ e ¬. I primi due sono equivalenti agli operatori<br />

II V III<br />

◦ e ◦ , la negazione invece è formalmente un operatore unario, ma<br />

esistono due operatori che equivalgono alla negazione del primo o del secondo<br />

XIII<br />

XI<br />

operando: P1 ◦ P2 = ¬P1 mentre P1 ◦ P2 = ¬P2.<br />

In questo modo è facile trasformare qualsiasi tipo <strong>di</strong> formula con connettivi:<br />

(P1 ∨ P2) ∧ ¬P3 equivale a (P1<br />

V III<br />

◦ P2) II XIII<br />

◦ (P3 ◦ 1) . ♦<br />

Esempio 28 . Nell’esempio precedente abbiamo citato solo quattro dei<br />

nostri quattor<strong>di</strong>ci possibili operatori, tanto da far sembrare inutili tutti gli<br />

altri, non è cosí.<br />

V II<br />

L’operatore ◦ equivale al drastico AUT AUT latino, è vero se solo uno<br />

dei due operan<strong>di</strong> è vero, con i normali connettivi la sua scrittura non è cosí<br />

V II<br />

semplice: P1 ◦ P2 = (P1 ∧ ¬P2) ∨ (P2 ∧ ¬P1) .<br />

Proponiamo un altro caso significativo, scrivere P1 =⇒ P2 è equivalente a<br />

porre ¬(¬P2 ∧ P1); cioè non può essere che P1 = 1 mentre P2 = 0, tutti<br />

gli altri casi vanno bene. Questa esigenza è sod<strong>di</strong>sfatta dall’operatore XIV<br />

◦ :<br />

XIV<br />

(P1 =⇒ P2) = (P1 ◦ P2) .<br />

Questi due casi per evidenziare come in realtà quasi ogni operatore abbia una<br />

sua precisa utilità. ♦<br />

Conclu<strong>di</strong>amo il paragrafo con una constatazione.<br />

34


Proposizione 8 . Nell’esempio 19 <strong>di</strong> pagina 24 avevamo proposto un<br />

vincolo derivato sulla potenza che desse 1 se la maggioranza <strong>degli</strong> elementi<br />

dava 1 con il vincolo originale. Non esiste un operatore binario che possa<br />

risolvere questo vincolo per derivazione sulla potenza.<br />

Dimostrazione - Ammettiamo che esista (chiamiamo la sua derivazione<br />

Q?). Chiamiamo V il vincolo originale e immaginiamo <strong>di</strong> avere un sottoinsieme<br />

A con gli ”1” che superano <strong>di</strong> più <strong>di</strong> una unità gli ”0”, avremo<br />

Q?(A) = 1.<br />

Pren<strong>di</strong>amo due nuovi insiemi: A a cui si è aggiunto uno ”0” (chiamiamo il<br />

nuovo insieme A0), ed A con un ”1” (A1), se Q? funziona, avremo sempre<br />

Q?(A0) = 1 e Q?(A0) = 0 , cioè:<br />

Q? V (A0) = b ? ◦ (<br />

a∈A<br />

?<br />

e Q? V (A1) = b ? ◦ (<br />

○ V (a) ) ? ◦ 0 = 1 ? ◦ 0 = 1 ,<br />

a∈A<br />

?<br />

○ V (a) ) ? ◦ 1 = 1 ? ◦ 1 = 1 .<br />

Allora 1 è un elemento finale <strong>di</strong> ? ◦ . Potremo aggiungere ad A un numero<br />

indefinito <strong>di</strong> ”0” senza alterare il risultato <strong>di</strong> Q?. Assurdo! ♦<br />

6 . Vincoli sulle istanze.<br />

A questo punto, una volta introdotti i vincoli e tutte le loro possibili derivazioni<br />

ed estensioni, possiamo tornare specificatamente ai dominî, ai records ed alle<br />

istanze.<br />

In particolare, per cominciare, riprenderemo le due definizioni sulla derivazione<br />

e la quantificazione dei vincoli (la 16 <strong>di</strong> pagina 22, e la 19 <strong>di</strong> pagina 28) per<br />

vedere come sia possibile passare da un vincolo su <strong>di</strong> un singolo dominio, ad<br />

un vincolo su <strong>di</strong> un’intera istanza.<br />

Definizione 23 . Dati: un dominio Di ∈ {D1, D2, . . .,Dn}, un vincolo<br />

V su Di, un quantificatore Q, ed un’istanza I sul prodotto cartesiano<br />

D1 × D2 × . . . × Dn , si definisce vincolo quantificato dal dominio<br />

35


all’istanza, tramite il quantificatore Q, il vincolo:<br />

Q×(V ) = Q(δ×(V )) . ♦<br />

Esempio 29 . Negli esempi 5, 12 e 13 abbiamo visto come sia possibile<br />

rappresentare un Palio ed abbiamo imposto un vincolo affinché l’istanza I<br />

avesse senso: che i tempi fossero progressivi o nulli da un certo punto in poi.<br />

In realtà non sarebbe sbagliato pretendere che almeno una contrada vinca,<br />

abbia cioè un tempo sull’ultimo rilevamento T8 . Questo equivale a derivare<br />

dal dominio all’istanza, tramite il quantificatore Q∃ , il vincolo, sul dominio<br />

T8 , che vale 1 se t8 = null :<br />

VV ittoria = Q∃(V[t8=null]) (I) = (Q∃(δ×(V[t8=null]))) (I) . ♦<br />

Per come è definito il vincolo derivato dal dominio all’istanza potrebbe<br />

sembrare che Q× sia equivalente alla più semplice applicazione Q(π). Cosí si<br />

passa <strong>di</strong>rettamente dai dominî alle istanze, senza passare attraverso i records.<br />

Nell’esempio 25 <strong>di</strong> pagina 33 abbiamo visto però che questo è possibile solo<br />

per i quantificatori universali.<br />

Focalizziamo adesso l’attenzione sulle istanze e sui loro vincoli. In pratica,<br />

dato un prodotto cartesiano <strong>di</strong> dominî D1 × D2 × . . . × Dn andremo ad<br />

analizzare tutte le possibili funzioni da Pf(D1 × D2 × . . . × Dn) in {0, 1} .<br />

Cominciamo con una loro <strong>di</strong>stinzione dal sapore geometrico.<br />

Definizione 24 . Dato un prodotto cartesiano D1 × D2 × . . . × Dn, un<br />

vincolo V sulle sue istanze si <strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 0 se esiste un dominio<br />

Di ∈ {D1, D2, . . ., Dn} , un vincolo VDi su <strong>di</strong> esso, e un quantificatore Q,<br />

tali che:<br />

V = Q(δ×(VDi )) .<br />

Si <strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 0 anche se è dato dalla composizione <strong>di</strong> vincoli <strong>di</strong><br />

<strong>di</strong>mensione 0, per mezzo <strong>di</strong> qualsiasi operatore binario. ♦<br />

Definizione 25 . Dato un prodotto cartesiano D1 × D2 × . . . × Dn, un<br />

vincolo V sulle sue istanze si <strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 1 se non è <strong>di</strong> <strong>di</strong>mensione 0<br />

ed esiste un vincolo Vr su D1 ×D2 ×. . .×Dn, ed un quantificatore Q, tali che:<br />

V = Q(Vr) .<br />

Si <strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 1 anche se è dato dalla composizione <strong>di</strong> vincoli <strong>di</strong><br />

<strong>di</strong>mensione 0 e 1 (almeno uno), per mezzo <strong>di</strong> qualsiasi operatore binario. ♦<br />

36


Definizione 26 . Dato un prodotto cartesiano D1 × D2 × . . . × Dn, un<br />

vincolo V sulle sue istanze si <strong>di</strong>ce <strong>di</strong> <strong>di</strong>mensione 2 se non è <strong>di</strong> <strong>di</strong>mensione<br />

0 né <strong>di</strong> <strong>di</strong>mensione 1. ♦<br />

Nella definizione 5 <strong>di</strong> pagina 12 abbiamo introdotto gli schemi, che sono<br />

insiemi <strong>di</strong> istanze.<br />

É chiaro che ogni vincolo sulle istanze corrisponde ad uno schema, e viceversa.<br />

Si vede anche come, per definizione, la <strong>di</strong>mensione <strong>di</strong> un vincolo composto è<br />

il massimo delle <strong>di</strong>mensioni dei suoi componenti.<br />

Esempio 30 . Consideriamo la <strong>di</strong>mensione 0, il caso più comune è quello<br />

in cui il quantificatore è Q∀, si richiede cioè che tutti i valori <strong>di</strong> una ”colonna”<br />

rispettino una certa caratteristica.<br />

Ma un vincolo <strong>di</strong> <strong>di</strong>mensione 0 può essere anche molto <strong>di</strong>verso, avremo sempre<br />

a che fare con una sola colonna, ma la ampia <strong>di</strong>sponibilità <strong>di</strong> quantificatori<br />

<strong>di</strong>versi ci permette varie soluzioni.<br />

Q e Q|, ad esempio, si <strong>di</strong>sinteressano completamente del vincolo cui sono<br />

applicati, valutano solo se l’istanza ha car<strong>di</strong>nalità pari o <strong>di</strong>spari; ma proprio<br />

per questo la loro <strong>di</strong>mensione può essere considerata nulla.<br />

Lo stesso <strong>di</strong>casi per Q∅, che si limita a riconoscere l’istanza vuota.<br />

Invece i quantificatori Q0 , Q|0 , Q1 e Q|1 , se composti con vincoli sui<br />

singoli dominî, possono dare luogo a vincoli abbastanza complessi. Solo apparentemente<br />

però, abbiamo già notato come un algoritmo consideri alla stessa<br />

stregua tutti i quantificatori. ♦<br />

Esempio 31 . Può sembrare che, con tutti i quantificatori a <strong>di</strong>sposizione,<br />

siano molto rari i vincoli <strong>di</strong> <strong>di</strong>mensione 2. Quando abbiamo trattato l’istanza<br />

sul Palio ne abbiamo già trovato uno: avere al massimo 10 records (il numero<br />

<strong>di</strong> contrade partecipanti).<br />

In effetti qualsiasi vincolo che limiti il numero dei records (a meno <strong>di</strong> volerne<br />

valutare parità o <strong>di</strong>sparità) non può essere ottenuto con alcun quantificatore<br />

binario. Vedremo in seguito (esempio 38) come ”costruire” questo genere <strong>di</strong><br />

vincoli. ♦<br />

Esempio 32 . Un vincolo sulle istanze molto comune in informatica è la<br />

chiave su alcuni dominî. La limitazione imposta è che i valori <strong>di</strong> quei dominî<br />

(un sottoinsieme <strong>di</strong> quelli componenti il prodotto cartesiano, spesso solo<br />

uno) siano <strong>di</strong>versi per ogni ennupla: non devono cioè esistere due records<br />

<strong>di</strong>versi per i quali i valori su quei dominî siano uguali. Questo permetterà <strong>di</strong><br />

riconoscere tutti i records da quei soli elementi, si potrà anche operare una<br />

proiezione su quei dominî, mantenendo invariata la car<strong>di</strong>nalità dell’istanza.<br />

37


Pren<strong>di</strong>amo ad esempio il caso dell’elenco telefonico (numero 6 a pagina 12),<br />

qui si hanno solo due dominî: Nomi × Numeri <strong>di</strong> telefono.<br />

Entrambi sono ”chiavi” accettabili: possiamo non volere omonimie, ma è<br />

altrettanto sensato aspettarsi che allo stesso numero telefonico corrisponda<br />

un’unica persona.<br />

Anche nella nostra istanza sul Palio il nome della contrada può essere considerato<br />

una chiave (la stessa non può correre due volte lo stesso Palio).<br />

♦<br />

Cerchiamo <strong>di</strong> spiegare il motivo che ci ha portato a parlare <strong>di</strong> <strong>di</strong>mensione,<br />

a proposito <strong>di</strong> vincoli su insiemi finiti <strong>di</strong> records (le istanze, appunto).<br />

Una soluzione grafica per rappresentare un’istanza I <strong>di</strong> grado n e car<strong>di</strong>nalità<br />

m può essere la matrice m × n:<br />

⎛<br />

⎜<br />

I = ⎜<br />

⎝<br />

d1 1 d1 2 d1 3 . . . d1 n<br />

d2 1 d2 2 d2 3 . . . d2 n<br />

.<br />

.<br />

.<br />

. ..<br />

d m 1 d m 2 d m 3 . . . d m n<br />

Questa è in effetti la rappresentazione solitamente preferita dagli informatici,<br />

per la sua intuitività, e per la facilità grafica con cui vi si possono<br />

rappresentare gli operatori. Infatti proiezioni e selezioni corrispondono alla<br />

estrapolazione <strong>di</strong> alcune righe o <strong>di</strong> alcune colonne (per le colonne bisogna<br />

stare attenti alle possibili ripetizioni) dalla matrice originale.<br />

Come controlleremo se un vincolo è verificato da questa istanza?<br />

Un vincolo <strong>di</strong> <strong>di</strong>mensione 0 è tale se esiste un vincolo VDi<br />

.<br />

⎞<br />

⎟<br />

⎠<br />

su <strong>di</strong> un dominio<br />

Di, per verificare il vincolo derivato dal dominio all’istanza basterà controllare,<br />

uno per uno, i singoli d 1 i, d 2 i, ...e cosí via fino d m i , componendo i risultati<br />

con le regole del quantificatore scelto.<br />

Immaginando la matrice come una tabella rettangolare, i nostri controlli<br />

saranno sempre su <strong>di</strong> una singola cella, quasi che fosse un unico punto <strong>di</strong> un<br />

rettangolo in un piano <strong>di</strong>screto.<br />

Questo è il motivo per il quale parliamo <strong>di</strong> <strong>di</strong>mensione nulla.<br />

Invece per verificare un vincolo <strong>di</strong> <strong>di</strong>mensione 1 dovremo considerare, sempre<br />

una alla volta, intere righe della nostra tabella, i records.<br />

Cosí un vincolo <strong>di</strong> <strong>di</strong>mensione 2 considererà tutta la tabella nel suo insieme,<br />

un intero ”rettangolo” <strong>di</strong> elementi, appartenenti a dominî e records <strong>di</strong>versi.<br />

Proseguiamo cercando <strong>di</strong> analizzare in maniera un po’ più approfon<strong>di</strong>ta i<br />

vincoli <strong>di</strong> <strong>di</strong>mensione 2, che fino ad ora sono sfuggiti ai nostri esempi.<br />

A questo scopo iniziamo con il recupero <strong>di</strong> un noto operatore che avevamo<br />

adattato alle istanze a pagina 15: il prodotto cartesiano. Lo avevamo definito<br />

38


come operatore binario, ma può essere chiaramente applicato ad un’unica<br />

istanza ripetuta due volte: scriveremo I 2 per I × I.<br />

Allo stesso modo I n in<strong>di</strong>cherà il prodotto cartesiano <strong>di</strong> I per sé stesso n volte<br />

(il prodotto cartesiano è associativo, non crea problemi il passaggio da un<br />

operatore binario ad uno n-ario).<br />

Come avevamo già fatto, se D è un dominio <strong>di</strong> I, chiameremo D i la sua<br />

i-esima comparizione nei records <strong>di</strong> I n .<br />

Esempio 33 . Consideriamo un’istanza I <strong>di</strong> grado n e car<strong>di</strong>nalità h, come<br />

sarà l’istanza Im m volte<br />

<br />

= I × . . . × I ?<br />

Avrà grado n · m, ma è il numero dei records che cresce in maniera esponenziale,<br />

saranno infatti hm .<br />

Vedremo in seguito l’utilità dell’istanza Im per effettuare vincoli e selezioni<br />

in merito a I. Si valuti comunque che, da un punto <strong>di</strong> vista computazionale,<br />

per m elevato, il prodotto cartesiano non è assolutamente un’operazione economica.<br />

♦<br />

I m è anch’essa un’istanza, vi si potranno applicare anche altri operatori.<br />

Definizione 27 . Data un’istanza I (<strong>di</strong> grado n), un numero naturale m<br />

ed un vincolo V sui records <strong>di</strong> I m (<strong>di</strong> grado m · n), si definisce selezione<br />

sul prodotto cartesiano la selezione: σV (I m ).<br />

m è detta molteplicità della selezione. ♦<br />

Queste selezioni offrono risultati apparentemente inutili, records <strong>di</strong> grado<br />

molto maggiore rispetto al grado originale dell’istanza.<br />

In realtà sono applicabili ad una vasta gamma <strong>di</strong> problemi.<br />

Esempio 34 . Nel primo paragrafo, dopo aver proposto quella che sarebbe<br />

<strong>di</strong>ventata l’istanza <strong>di</strong> un Palio, abbiamo posto alcuni problemi: come stabilire<br />

l’or<strong>di</strong>ne delle contrade ad un dato riferimento? Come riconoscere i sorpassi?<br />

Pren<strong>di</strong>amo la solita tabella (esempio 13: Palio del 16/8/2001):<br />

39


P =<br />

Contrada T1 T2 T3 T4 T5 T6 T7 T8<br />

Aquila 6, 4 12, 7 21, 7 38, 5 47, 5 64 null null<br />

Chiocciola 6, 7 12, 3 20, 6 36 45, 5 62 null null<br />

Civetta 6, 8 13, 1 21, 3 36, 6 46, 5 63 null null<br />

Drago 7 12, 1 20 35 44 60 70 75<br />

Giraffa 6, 5 12, 6 20, 7 35, 8 45 61 71, 5 null<br />

Istrice 6 12 20, 3 35, 3 44, 5 60, 5 71 null<br />

Montone 7, 4 13, 2 22 37, 5 48 64, 5 null null<br />

Nicchio 6, 3 12, 8 21, 5 38 48, 5 65, 5 null null<br />

Tartuca 7, 1 13, 5 22, 3 37 46 62, 5 null null<br />

Torre 6, 9 12, 5 21, 1 36, 5 47 65 null null<br />

Ammettiamo <strong>di</strong> voler conoscere l’or<strong>di</strong>ne delle contrade alla curva del primo<br />

San Martino (T2). Possiamo effettuare su P 10 la selezione che richieda:<br />

T 1<br />

2 < T 2<br />

2 < . . . < T 10<br />

2 .<br />

Il risultato sarà l’istanza formata dall’unico record che mette in or<strong>di</strong>ne tutte<br />

e <strong>di</strong>eci le contrade, dalla prima all’ultima sul riferimento scelto, nel nostro<br />

caso: Istrice, Drago, ..., Montone, Tartuca.<br />

Il record avrà un grado altissimo (9 · 10 dominî), per avere un risultato più<br />

sintetico sarà possibile effettuare una proiezione sui 10 dominî ”Contrada”.<br />

♦<br />

Esempio 35 . L’esempio precedente ci ha fornito un metodo utile per<br />

trovare l’or<strong>di</strong>ne, ma solo se è noto con precisione il numero dei partecipanti<br />

ad una gara. Se le contrade fossero state un<strong>di</strong>ci (!) la selezione scelta avrebbe<br />

prodotto un’istanza formata da tanti records, tutte le possibili decuple <strong>di</strong> contrade<br />

in or<strong>di</strong>ne <strong>di</strong> posizione.<br />

Esiste un metodo per valutare l’or<strong>di</strong>namento in una ”gara”, in<strong>di</strong>pendentemente<br />

dal numero <strong>di</strong> partecipanti?<br />

Per definizione una relazione d’or<strong>di</strong>ne è un sottoinsieme del prodotto carte-<br />

siano. Sarà possibile effettuare su P 2 la selezione: T 1<br />

2 < T 2<br />

2 .<br />

Cosí avremo tutte le coppie <strong>di</strong> contrade in cui la prima precede la seconda<br />

al rilevamento T2 : 9 con in testa l’Istrice, 8 con il Drago, e cosí via per un<br />

totale <strong>di</strong> 45 records.<br />

Il risultato è molto meno intuitivo ma ha il vantaggio <strong>di</strong> essere valido per un<br />

numero n qualsiasi <strong>di</strong> partecipanti: fornirà ((n − 1) · n)/2 coppie. ♦<br />

Esempio 36 . Poniamoci adesso il problema <strong>di</strong> trovare i sorpassi fra San<br />

Martino e il Casato nel primo giro (T2 e T3).<br />

Agiremo sul prodotto cartesiano P 2 con una selezione un po’ più articolata:<br />

40


( T 1<br />

2 > T 2<br />

2 ) ∧ ( T 1<br />

3 < T 2<br />

3 ) .<br />

Avremo tutti i casi in cui un concorrente che inseguiva si ritroverà in testa<br />

al secondo rilevamento (in<strong>di</strong>pendentemente dal numero dei partecipanti).<br />

Nello specifico le coppie (immaginiamo <strong>di</strong> aver già fatto una proiezione sui<br />

dominî ”Contrada 1 ” e ”Contrada 2 ”) saranno:<br />

(Drago, Istrice), (Giraffa, Torre), (Civetta, Nicchio), (Civetta, Aquila)<br />

e (Aquila, Nicchio) . ♦<br />

Ve<strong>di</strong>amo come sfruttare i prodotti cartesiani <strong>di</strong> un’istanza per formalizzare<br />

alcuni vincoli su <strong>di</strong> essa.<br />

Definizione 28 . Data un’istanza I (<strong>di</strong> grado n), un numero naturale m,<br />

un vincolo V <strong>di</strong> <strong>di</strong>mensione 1 sui records <strong>di</strong> I m (<strong>di</strong> grado m·n), un quantificatore<br />

Q, si definisce vincolo quantificato sul prodotto cartesiano<br />

<strong>di</strong> I il vincolo dato da:<br />

(Q m V I) = (Q V )(I m ).<br />

m è detta molteplicità del vincolo. ♦<br />

In questo modo si passa da un vincolo su records <strong>di</strong> grado m · n, ad un<br />

vincolo su istanze <strong>di</strong> grado n.<br />

Grazie a quest’ultima definizione sarà possibile scrivere formalmente un gran<br />

numero <strong>di</strong> vincoli <strong>di</strong> <strong>di</strong>mensione 2, trasformandoli in vincoli <strong>di</strong> <strong>di</strong>mensione<br />

1, che sono altamente più trattabili, ancorché siano definiti sul prodotto<br />

cartesiano.<br />

Esempio 37 . A pagina 37 (esempio 32) abbiamo visto i vincoli chiave,<br />

<strong>di</strong> <strong>di</strong>mensione 2. Si è visto che non ci devono essere due records <strong>di</strong>stinti in<br />

cui gli elementi dei dominî ”chiave” siano uguali.<br />

Ripren<strong>di</strong>amo il caso dell’elenco telefonico, e immaginiamo <strong>di</strong> voler fissare<br />

come chiave il dominio ”Nome”.<br />

Sia I l’istanza originaria sul prodotto cartesiano Nome ×Numero, poniamo<br />

allora su I 2 il vincolo VChiave derivato dalla formula:<br />

(Nome 1 = Nome 2 ) −→ (Numero 1 = Numero 2 ) , che possiamo anche scrivere<br />

¬ ( ¬(Numero 1 = Numero 2 ) ∧ (Nome 1 = Nome 2 ) ),<br />

oppure (Nome 1 = Nome 2 ) XIV<br />

◦ (Numero 1 = Numero 2 ) (esempio 28 a pagina<br />

34).<br />

Avremo il ”vincolo quantificato sul prodotto cartesiano” richiesto, grazie al<br />

quantificatore Q∀: Q2 ∀ VChiave (I) .<br />

Nel caso in cui la chiave sia applicata a più <strong>di</strong> un dominio, non cambia<br />

formalmente la sua formulazione. ♦<br />

41


Esempio 38 . Nell’esempio 31 a pagina 37 abbiamo parlato del vincolo<br />

che impone restrizioni al numero dei records, a meno <strong>di</strong> non volere imporre<br />

che questi siano pari o <strong>di</strong>spari, si tratta <strong>di</strong> un vincolo <strong>di</strong> <strong>di</strong>mensione 2.<br />

Possiamo però esprimerlo grazie ai ”vincoli quantificati sul prodotto cartesiano”.<br />

Per semplificare un po’ le cose consideriamo istanze <strong>di</strong> grado 1 (su un unico<br />

dominio), si vedrà come questa riduzione non vada a scapito della generalità.<br />

Innanzitutto ve<strong>di</strong>amo come stabilire un limite minimo al numero dei records,<br />

immaginiamo <strong>di</strong> accettare solo istanze I con almeno 3 records, imporremmo<br />

sui records <strong>di</strong> I 3 il vincolo <strong>di</strong> avere tutti e 3 gli elementi <strong>di</strong>versi (la formula<br />

corrispondente considera le 3 coppie possibili), poi lo estenderemo all’istanza<br />

I 3 tramite il quantificatore Q∃, chiamiamo il vincolo ottenuto V≥3 . É chiaro<br />

che se I ha car<strong>di</strong>nalità inferiore a 3 il vincolo V≥3 non sarà sod<strong>di</strong>sfatto.<br />

Se invece volessimo solo istanze con al massimo 3 records dovremmo andare<br />

a considerare sui records <strong>di</strong> I 4 il vincolo che impone <strong>di</strong> avere almeno due elementi<br />

uguali (non tutti <strong>di</strong>versi, considerando le 6 possibili coppie), a questo<br />

vincolo adatteremo il quantificatore Q∀, cosí da ottenere su I il vincolo V≤3 .<br />

Per mezzo <strong>di</strong> questi vincoli si possono costruire tutti gli intervalli sull’insieme<br />

dei numeri naturali, ad esempio il vincolo (V≥3 ∧ V≤3) accetterà solo istanze<br />

con tre elementi.<br />

Il metodo proposto rispetta i limiti dell’algebra relazionale ma ha un costo<br />

molto elevato, il fatto <strong>di</strong> dover considerare tutte le possibili coppie fa crescere<br />

in maniera esponenziale il numero <strong>di</strong> controlli da effettuare. Oltretutto avevamo<br />

semplificato il tutto limitando a 1 il grado <strong>di</strong> I, altrimenti il controllo<br />

sarebbe stato, uno per uno, su tutti i dominî <strong>di</strong> I.<br />

É chiaro che con meto<strong>di</strong> meno ortodossi (semplicemente contando i records)<br />

si potrebbero avere algoritmi molto più efficaci.<br />

Meto<strong>di</strong> poi assai più efficaci si possono ottenere considerando la costruzione<br />

<strong>di</strong>namica <strong>di</strong> prodotti cartesiani in relazione con l’esistenza <strong>di</strong> elementi finali.<br />

♦<br />

Come abbiamo fatto nell’esempio precedente, sarà possibile comporre anche<br />

i vincoli quantificati sul prodotto cartesiano, cosí come gli altri vincoli,<br />

per mezzo delle formule possibili con tutti i 14 operatori binarî.<br />

Una formula con vincoli quantificati sul prodotto cartesiano sarà tale se ne<br />

conterrà almeno uno.<br />

Esempio 39 . Nei varî esempi abbiamo trovato alcuni vincoli per l’ormai<br />

arcinota istanza sul palio (Contrade × T1 × T2 × . . . × T8):<br />

la richiesta <strong>di</strong> avere almeno un vincitore: VV ittoria = Q∃×V[t8=null] ;<br />

il vincolo sulle istanze che impone <strong>di</strong> avere tempi progressivi:<br />

42


Q∀×VT , con VT = 1 se ( ti = null ∨ ti ≥ tj, ∀ 1 ≤ i < j ≤ 8 ) ;<br />

la ”chiave” sulle contrade: VChiave[Contrade] ;<br />

il limite massimo <strong>di</strong> 10 al numero dei records: V≤10 .<br />

Il primo è un vincolo <strong>di</strong> <strong>di</strong>mensione 0, il secondo <strong>di</strong> <strong>di</strong>mensione 1, gli altri due<br />

<strong>di</strong> <strong>di</strong>mensione 2, esprimibili come vincoli quantificati sul prodotto cartesiano.<br />

La semplice formula che ne consegue è:<br />

( VV ittoria ∧ VT ∧ VChiave[Contrade] ∧ V≤10 ) .<br />

L’intera formula può essere vista come un unico vincolo <strong>di</strong> <strong>di</strong>mensione 2.<br />

♦<br />

A questo punto è doveroso un riepilogo. In sostanza la nostra analisi ci<br />

porta a classificare i vincoli sulle istanze nella seguente gerarchia:<br />

- vincoli <strong>di</strong> <strong>di</strong>mensione 0: si ottengono da vincoli Vi su dominî Di derivando<br />

rispetto alle proiezioni πDi e quantificando rispetto a quantificatori Qi ;<br />

- vincoli <strong>di</strong> <strong>di</strong>mensione 1: si ottengono da un vincolo V sul prodotto cartesiano<br />

D1 × D2 × . . . × Dn (che non sia ottenibile, tramite derivazione,<br />

da una proiezione) me<strong>di</strong>ante un quantificatore Q, o da composizioni <strong>di</strong><br />

tali vincoli (almeno uno) e <strong>di</strong> vincoli <strong>di</strong> <strong>di</strong>mensione 0;<br />

- vincoli <strong>di</strong> <strong>di</strong>mensione 2: tutti gli altri. Fra questi <strong>di</strong>stinguiamo:<br />

- vincoli quantificati sul prodotto cartesiano: sono i vincoli Q m V <strong>di</strong><br />

<strong>di</strong>mensione 2 che provengono da vincoli V <strong>di</strong> <strong>di</strong>mensione 1 sul<br />

prodotto cartesiano I m <strong>di</strong> una istanza, quantificati rispetto a un<br />

quantificatore Q;<br />

- tutti gli altri, che saranno detti vincoli ”puri” <strong>di</strong> <strong>di</strong>mensione 2.<br />

Rimanendo agganciati agli aspetti pratici <strong>di</strong> ogni vincolo, se interpretato<br />

come un algoritmo, è spontaneo ritenere che il costo computazionale <strong>di</strong> un<br />

vincolo sia strettamente connesso alla sua <strong>di</strong>mensione.<br />

Per ora tutti i vincoli <strong>di</strong> <strong>di</strong>mensione 2 che abbiamo visto sono esprimibili<br />

grazie a formule con vincoli quantificati sul prodotto cartesiano. Nasce allora<br />

spontaneo un interrogativo: dato un vincolo <strong>di</strong> <strong>di</strong>mensione 2 sulle istanze,<br />

è sempre possibile trovare una formula, con vincoli quantificati sul prodotto<br />

cartesiano, che lo esprima?<br />

Il ché vuol <strong>di</strong>re: esistono vincoli ”puri” <strong>di</strong> <strong>di</strong>mensione 2?<br />

Limitiamoci a rispondere a questa domanda riducendo il numero dei quantificatori,<br />

eliminiamo quei sei che valutano parità e <strong>di</strong>sparità: Q0 , Q|0 , Q1 ,<br />

Q|1 , Q e Q| .<br />

43


La loro influenza è infatti <strong>di</strong>fficilmente valutabile con l’aumento esponenziale<br />

dei records nel prodotto cartesiano.<br />

Rimaniamo cosí con i 6 non banali: Q∀ , Q∃ , Q∃ , Q∃¬∅ , Q∅ e Q¬∅ . Ma ne<br />

possiamo eliminare ancora uno.<br />

Lemma 1 . Ogni vincolo V col quantificatore Q∃ impone lo stesso vincolo<br />

quantificato del vincolo ¬V col quantificatore Q∀ :<br />

Q∃(V ) = Q∀(¬V ) . ♦<br />

Possiamo cosí eliminare, in una qualsiasi formula, il quantificatore Q∃ .<br />

Nella prossima <strong>di</strong>mostrazione, come si vedrà non compare mai neanche l’insieme<br />

vuoto: possiamo eliminare anche Q∃¬∅ , Q∅ e Q¬∅ .<br />

Proposizione 9 . Se ci si limita ai quantificatori Q∃ , Q∀ , esiste almeno<br />

un vincolo ”puro” <strong>di</strong> <strong>di</strong>mensione 2, cioè un vincolo sulle istanze per il quale<br />

non esiste una formula, con vincoli quantificati sul prodotto cartesiano, che<br />

lo esprime.<br />

Dimostrazione - Consideriamo records <strong>di</strong> grado 1 sul solo dominio N<br />

dei numeri naturali, le istanze saranno insiemi finiti <strong>di</strong> numeri naturali.<br />

Immaginiamo il seguente vincolo sulle istanze: tutti i numeri sono consecutivi,<br />

non vi appartengono cioè due numeri, n ed n+2, senza che vi sia anche<br />

n + 1.<br />

Immaginiamo per assurdo che esista una formula ϕ, con vincoli quantificati<br />

sul prodotto cartesiano, che sod<strong>di</strong>sfa questo vincolo.<br />

Questa formula ϕ sarà composta da un numero finito h <strong>di</strong> vincoli quantificati<br />

con Q∃, e da un numero finito k <strong>di</strong> vincoli quantificati con Q∀, ognuno con<br />

la sua molteplicità, e da operatori binarî.<br />

Scriviamo ϕ ( Q m1<br />

∃ 1 (V1), . . ., Q mh<br />

∃ h (Vh), Q mh+1<br />

∀ h+1 (Vh+1), . . ., Q mh+k<br />

∀ h+k (Vh+k) )<br />

per in<strong>di</strong>carla.<br />

Per ogni vincolo quantificato Q mj<br />

∃ j (Vj) (con 1 ≤ j ≤ h) ci sono due possibi-<br />

lità:<br />

Vj è banale e Q mj<br />

∃ j (Vj) = 0 per ogni mj-upla <strong>di</strong> numeri naturali;<br />

esiste una mj-upla (a j<br />

1, . . .,a j mj ) per la quale Vj = 1 , chiamiamo aj =<br />

max{a j<br />

1, . . .,a j mj } .<br />

Analogamente, per ogni Q mj<br />

∀ j (Vj) (con h + 1 ≤ j ≤ h + k), o Vj è banale e si<br />

ha sempre 1, oppure esiste una mj-upla (a j<br />

1, . . .,a j mj ) per la quale Vj = 0 , e<br />

chiamiamo aj = max{a j<br />

1, . . .,a j mj } .<br />

Consideriamo l’istanza I = {1, 2, . . ., (a − 1), a} con a = max{a1 , . . .,a j },<br />

questa istanza sod<strong>di</strong>sfa il vincolo proposto (elementi tutti consecutivi), la formula<br />

<strong>di</strong> vincoli ϕ applicata ad I deve dare come risultato 1 (ϕ(I) = 1).<br />

44


I è tale che, per ogni j, Q mj<br />

∃ j (Vj)(I) = 0 se e solo se Vj è banale, altrimenti<br />

Q mj<br />

∃ j (Vj)(I) = 1, cosí come Q mj<br />

∀ j (Vj)(I) = 1 se e solo se Vj è banale, altri-<br />

menti Q mj<br />

∀ j (Vj)(I) = 0.<br />

La stessa cosa <strong>di</strong> I vale però anche per I ′ = {1, 2, . . ., (a −1), a, (a+2)}, cioè<br />

ϕ(I ′ ) = ϕ(I) = 1. Ma gli elementi <strong>di</strong> I ′ non sono tutti consecutivi.<br />

Assurdo! ♦<br />

Un’ultima considerazione finale. Noi ci siamo imposti fin dall’inizio <strong>di</strong><br />

considerare solo vincoli ed operatori binarî.<br />

Questa scelta è dovuta a coerenza con il funzionamento dei calcolatori elettronici,<br />

la cui algebra <strong>di</strong> base è, per forza <strong>di</strong> cose, <strong>di</strong>cotomica.<br />

Esempio 40 . Con un vincolo ed un operatore ternario si potrebbe ad<br />

esempio ottenere il resto modulo 3 del numero <strong>di</strong> elementi <strong>di</strong> un insieme,<br />

cosí come avevamo trovato il quantificatore Q| (che può essere visto anche<br />

come il resto modulo 2).<br />

Si consideri infatti il seguente operatore ternario:<br />

◦ =<br />

0 1 2<br />

0 1 1 1<br />

1 2 2 2<br />

2 0 0 0<br />

Il quantificatore inizializzato a 0, chiamiamolo Qmod3, sod<strong>di</strong>sferà l’esigenza<br />

richiesta, impossibile per una formula binaria, se non altro per il numero<br />

<strong>di</strong> risposte possibili. ♦<br />

Si ricaverebbe un vero salto <strong>di</strong> qualità qualora si accettassero vincoli ed<br />

operatori N-arî, cioè non ristretti ad un numero finito <strong>di</strong> possibilità.<br />

In effetti quando (esempio 38 a pagina 42) abbiamo parlato della possibilità<br />

<strong>di</strong> contare la car<strong>di</strong>nalità <strong>di</strong> un’istanza, ci riferivamo proprio a questo, ed è<br />

quanto normalmente fanno molti software per la gestione <strong>di</strong> databases.<br />

Esempio 41 Immaginiamo una funzione dalle istanze ad N che conta il numero<br />

dei records, chiamiamo questa funzione count (come è spesso definita<br />

nei gestori <strong>di</strong> databases in commercio).<br />

Se poi ammettiamo <strong>di</strong> costruire vincoli binarî inserendo nelle formule il risultato<br />

<strong>di</strong> count, si possono ottenere risultati molto più ampi.<br />

Molti vincoli si potevano ottenere anche senza questo ausilio, come (count(I)<br />

è pari) o (count(I) ≤ 10) , altri no: (count(I) è multiplo <strong>di</strong> 3) .<br />

Con l’aggiunta <strong>di</strong> count nelle formule si può facilmente costruire un vincolo<br />

45


anche per il problema posto nella proposizione 9 (insieme <strong>di</strong> numeri consecutivi):<br />

∃ una coppia <strong>di</strong> elementi a, b t.c. (a − b) ≥ count(I) .<br />

Inoltre l’operatore count potrebbe contare solo le istanze che sod<strong>di</strong>sfano alcune<br />

con<strong>di</strong>zioni, e cosí via per ottenere un’algebra sempre più ricca ed adatta<br />

ad ogni evenienza. ♦<br />

7 . L’algebra relazionale classica.<br />

Fin dalla comparsa dell’informatica, la macchine sono state impiegate nel<br />

trattare volumi via via maggiori <strong>di</strong> dati. L’obiettivo è stato fin da subito<br />

identificato in una sempre maggiore capacità delle ”memorie” e in una più<br />

veloce ricerca dei dati, per una più varia gamma <strong>di</strong> interrogazioni.<br />

Tralasceremo tutto ciò che riguarda la realizzazione tecnica delle macchine,<br />

le modalità elettroniche per il contenimento dei dati nelle stesse, ed anche la<br />

forma <strong>di</strong> questi dati nelle memorie dei calcolatori. In questo breve compen<strong>di</strong>o<br />

finale ci occuperemo esclusivamente dei problemi pratici e delle esigenze<br />

teoriche che hanno portato alla ideazione e (solo con anni <strong>di</strong> ritardo) alla<br />

realizzazione delle basi <strong>di</strong> dati informatiche.<br />

Già dal 1960 si iniziò ad avvertire l’inadeguatezza dei meto<strong>di</strong> fino ad allora<br />

usati per l’archiviazione delle informazioni su memorie elettroniche. Le raggiunte<br />

<strong>di</strong>mensioni <strong>di</strong> queste banche dati, che erano allora appannaggio esclusivamente<br />

industriale, cominciavano a creare seri problemi pratici ai tecnici<br />

addetti al loro mantenimento e consultazione.<br />

Le memorie erano organizzate, in senso logico, come registrazioni lineari<br />

<strong>di</strong> dati (records) contenute in archivi (files), in maniera analoga a come oggi<br />

ogni singola persona cataloga i propri documenti, programmi, filmati e quant’altro<br />

sul proprio personal computer. Inoltre i linguaggi per il reperimento<br />

e l’organizzazione <strong>di</strong> queste informazioni erano molto limitati, e, se comparivano<br />

richieste particolari, l’unico metodo era ricopiare i dati su altri file.<br />

Se ad esempio si fosse avuta una lista <strong>di</strong> qualche migliaio <strong>di</strong> nomi, e, per<br />

esigenze burocratiche, fosse stato necessario estrarre a volte i nominativi<br />

completi <strong>di</strong> tutti, a volte solo i cognomi, il metodo usato era quello <strong>di</strong> creare<br />

due copie <strong>di</strong>stinte della stesso record: una con nomi e cognomi, l’altra solo<br />

con i secon<strong>di</strong>.<br />

Questa metodologia <strong>di</strong> lavoro causava naturalmente inconsistenze fra i dati<br />

46


in copie <strong>di</strong>verse e gestite in<strong>di</strong>pendentemente. Potevano, per errore, essere<br />

cancellate o mo<strong>di</strong>ficate alcune informazioni su una delle copie, che magari ne<br />

avrebbe generate molte altre ancora.<br />

Si verificavano in molti uffici burocratici gli stessi effetti che i filologi <strong>stu<strong>di</strong></strong>ano<br />

per la trasmissione dei testi <strong>degli</strong> amanuensi me<strong>di</strong>evali.<br />

Comunque, tornando a quei primi anni ’60, si dette inizio ad una notevole<br />

ricerca per l’in<strong>di</strong>viduazione <strong>di</strong> meto<strong>di</strong> migliori. Molti <strong>di</strong> quelli trovati erano<br />

poco <strong>di</strong>fferenti dai precedenti e, sebbene <strong>di</strong> facile realizzazione pratica sui<br />

calcolatori, non garantivano gran<strong>di</strong> vantaggi.<br />

Altri ancora erano, a livello teorico, molto potenti e simili (almeno apparentemente)<br />

ai meto<strong>di</strong> intuitivi umani <strong>di</strong> memorizzazione delle informazioni,<br />

ma non era possibile realizzarli nella pratica.<br />

A questa seconda categoria sembrava appartenere il progetto <strong>di</strong> un ricercatore<br />

della IBM, Ted Codd, che nel 1970 pubblicò un articolo, egli proponeva un<br />

modello fondato sull’algebra <strong>degli</strong> insiemi, ed un linguaggio <strong>di</strong> interrogazione<br />

su <strong>di</strong> esso (gli operatori sugli insiemi) molto intuitivo e fondato su parole<br />

comuni. Esso introduceva il concetto <strong>di</strong> base <strong>di</strong> dati (database), che oggi<br />

troviamo ovunque come parola <strong>di</strong> uso comune, e poneva le fondamenta per<br />

la teoria matematica che se ne occupa: l’Algebra Relazionale.<br />

L’articolo non ebbe fortuna imme<strong>di</strong>ata, ma fu ripreso a <strong>di</strong>stanza <strong>di</strong> qualche<br />

anno da un’altra azienda, la Honeywell, che nel 1976 creò il primo prodotto<br />

commerciale per la gestione <strong>di</strong> database. Le evoluzioni tecniche <strong>di</strong> questo<br />

primo risultato (l’hardware e il software, vale a <strong>di</strong>re le macchine e i programmi<br />

su <strong>di</strong> esse) sono state enormi, ma la base riconosciuta tuttora valida per<br />

tutti è quella dell’articolo <strong>di</strong> Codd: ”Un modello relazionale per banche dati<br />

largamente con<strong>di</strong>vise”.<br />

Passiamo ad analizzare analogie e <strong>di</strong>fferenza <strong>di</strong> questo modello rispetto<br />

a quello che abbiamo introdotto nei paragrafi precedenti. Vale la pena <strong>di</strong><br />

ricordare comunque che l’algebra relazionale comprende una teoria ed una<br />

casistica molto più ampia <strong>di</strong> quella fin qui considerata.<br />

Innanzitutto noi abbiamo introdotto i dominî, per la formazione <strong>di</strong> records<br />

ed istanze. Essendo i records insiemi or<strong>di</strong>nati abbiamo stabilito che due dominî<br />

<strong>di</strong>stinti possono essere anche lo stesso insieme ed avere lo stesso nome,<br />

casomai ci siamo riservati <strong>di</strong> mettere in<strong>di</strong>ci <strong>di</strong>versi per <strong>di</strong>stinguerli nelle formule<br />

<strong>di</strong> vincoli e pre<strong>di</strong>cati.<br />

Solitamente invece, in algebra relazionale si dà molta importanza al nome che<br />

ognuno <strong>di</strong> questi dominî riceve, il cosiddetto attributo. L’attributo relativo<br />

ad ogni dominio, nelle stesse istanze, deve essere <strong>di</strong>verso da tutti gli altri e<br />

47


specifico <strong>di</strong> quell’unico dominio.<br />

Ci siamo basati, come fondamento <strong>di</strong> tutta la teoria, su prodotti cartesiani<br />

finiti <strong>di</strong> n dominî, cosicché i records sono insiemi or<strong>di</strong>nati <strong>di</strong> n elementi, ed<br />

n è detto il loro grado.<br />

Se invece si hanno attributi <strong>di</strong>stinti per ogni dominio sarà possibile costruire<br />

i records come insiemi non or<strong>di</strong>nati <strong>di</strong> n coppie, coppie formate dall’elemento<br />

scelto nel dominio e dall’attributo <strong>di</strong> quel dominio. Questa <strong>di</strong>versa visione è<br />

tipica della teoria classica.<br />

Esempio 42 . Ripren<strong>di</strong>amo per l’ultima volta la tabella sul Palio, un<br />

nostro record <strong>di</strong> quell’istanza ha la forma:<br />

(Aquila , 6.4 , 12.7 , 21.7 , 38.5 , 47.5 , 64 , null , null ) .<br />

Spesso, per mezzo <strong>degli</strong> attributi, i records sono pensati anche come:<br />

{ (Contrade, Aquila), (Tempo1, 6.4), (Tempo2, 12.7),<br />

(Tempo3, 21.7), (Tempo4, 38.5), (Tempo5, 47.5),<br />

(Tempo5, 64), (Tempo7, null), (Tempo8, null) } . ♦<br />

Questa <strong>di</strong>versa visione permette <strong>di</strong> considerare ininfluente la <strong>di</strong>sposizione<br />

dei dominî (avendo ciascuno un attributo <strong>di</strong> riferimento). Pensando le istanze<br />

come tabelle, <strong>di</strong> cui noi consideravamo trascurabile l’or<strong>di</strong>ne delle righe,<br />

<strong>di</strong>venta tale anche l’or<strong>di</strong>ne delle colonne.<br />

Questa scelta andrà a ripercuotersi anche sugli operatori. Per dare un senso<br />

al prodotto cartesiano, fra istanze in cui si rischierebbero omonimie, sarà<br />

necessario introdurre un nuovo operatore: la ridenominazione, che cambia il<br />

nome <strong>di</strong> un attributo in tutte le coppie in cui compare.<br />

Le selezioni funzionano analogamente a quanto ci è già noto, ma in gran<br />

parte della letteratura c’è poca chiarezza su cosa si intenda per ”formule”, e<br />

sull’analogia fra vincoli e selezioni.<br />

Spesso, anzi, i vincoli sono trascurati o traspare una certa confusione.<br />

Ad esempio in molti testi viene considerato ”vincolo”, alla stregua delle chiavi<br />

(che noi abbiamo visto come vincolo <strong>di</strong> <strong>di</strong>mensione 2) la possibilità <strong>di</strong><br />

avere valori nulli in alcuni dominî: vale a <strong>di</strong>re l’aggiunta dell’elemento null<br />

al dominio stesso (come noi avevamo fatto per Q che rappresentava i tempi).<br />

Per il resto poi l’algebra relazionale si adatta alle funzioni possibili nei<br />

softwares più comuni <strong>di</strong> gestione dei dati. Nascono cosí le funzioni <strong>di</strong> aggregazione,<br />

che comprendono, ad esempio, il conteggio dei records o un gran<br />

numero <strong>di</strong> comuni funzioni <strong>matematiche</strong> o statistiche, quali il reperimento<br />

del maggiore e del minore (fra gli elementi <strong>di</strong> una ”colonna”), o il calcolo<br />

della me<strong>di</strong>a.<br />

48


Abbiamo visto, anche a scapito della nostra teoria, come alcuni <strong>di</strong> questi operatori<br />

siano utili ma impossibili da costruire con i mezzi forniti dalle semplici<br />

definizioni <strong>di</strong> partenza.<br />

49


Bibliografia<br />

[1] A. Albano, G. Ghelli, R. Orsini. Basi <strong>di</strong> dati relazionali e a oggetti.<br />

Zanichelli, Bologna, 1997.<br />

[2] A. Asperti, A. Ciabattoni. Logica e informatica. McGraw Hill, Milano,<br />

1997.<br />

[3] P. Atzeni, C. Batini, V. De Antonellis. La teoria relazionale dei dati.<br />

Boringhieri, Torino, 1985.<br />

[4] P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone. Basi <strong>di</strong> dati. Concetti,<br />

linguaggi e architetture. McGraw Hill, Milano, 1996.<br />

[5] E. F. Codd. A relational Model for large shared Data Banks.<br />

Communications of the ACM, 1970.<br />

[6] S. Mac Lane. Categorie nella pratica matematica. Boringhieri, Torino,<br />

1977.<br />

[7] G. Panti. Multi-valued Logics. Università <strong>di</strong> U<strong>di</strong>ne, 1999.<br />

[8] J. D. Ullman. Principles of Databases and Knowledge Base Systems.<br />

Computer Science Press, Rockville, Maryland, 1997.<br />

[9] R. Zach. Proof Theory of multivalued Logics. Technische Universität<br />

Wien, 1993.<br />

50

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!