03.06.2013 Views

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

Un modello integrato control-flow e data-flow per il rilevamento ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

3.3. Costruzione del <strong>modello</strong> 45<br />

Tuttavia questo non è sufficiente a dire che X è in relazione con i parametri<br />

in Y e quindi CurRels[R][X][V ] rimane vuoto. Prima di poter aggiungere<br />

qualcosa a CurRels[R][X][V ] è necessario escludere da Y i parametri che sono<br />

apparsi prima della precedente occorrenza di X con valore in relazione con<br />

V . Supponiamo di non farlo e di avere le occorrenze x1, x2, x3 dello stesso<br />

parametro: in questo caso verrebbero apprese delle relazioni che potrebbero<br />

valere <strong>per</strong> x1 e x3 ma non <strong>per</strong> x2 (vedi esempio). Se invece si prendono solo<br />

i parametri “nuovi”, cioè quelli in Yn si può essere certi che un’eventuale<br />

relazione appresa, almeno fino a quel punto della traccia, è valida. Quindi <strong>il</strong><br />

passo CurRels[R][X][V ] ∪ Yn è lecito<br />

• CurRels[R][X][V ] = ∅ e Y = ∅: Se Y = ∅ significa che <strong>il</strong> parametro che si sta<br />

analizzando non è più in relazione con nessun parametro visto in passato. In<br />

altre parole, i parametri con cui X era in relazione hanno cambiato valore, <strong>per</strong><br />

cui non è più possib<strong>il</strong>e stab<strong>il</strong>ire una relazione che valga globalmente sull’intera<br />

traccia. Quindi, tutte le relazioni finora imparate relativamente ad X vanno<br />

scartate e dunque CurRels[R][X][V ] = ∅<br />

• CurRels[R][X][V ] = ∅ e Y = ∅: Questo caso è semplicemente l’unione dei due<br />

precedenti: vengono conservate soltanto le relazioni che continuano a valere<br />

globalmente sulla traccia vista finora e vengono scartate tutte le altre<br />

I quattro casi appena visti riguardano la prima parte, prendiamo ora in considera-<br />

zione la seconda parte, ovvero quella delineata nella formula 3.1.<br />

Sia dato CurRels[R][X][V ] = {X1, . . . , Xn}. Questo risultato viene generato<br />

dall’algoritmo soltanto se su tutte le tracce osservate valgono X R X1, . . . , X R Xn,<br />

ovvero<br />

<br />

i∈{1,...,n}<br />

X R Xi<br />

(3.2)<br />

che è <strong>il</strong> vincolo a cui deve sottostare X quando ha valore V . Si supponga ora di<br />

aver osservato più valori <strong>per</strong> X, quindi {v1, . . . , vk}. Si avrà che <strong>per</strong> ogni 1 ≤ j ≤ n<br />

esiste un insieme Pj tale che CurRels[R][X][vj] = Pj e una corrispondente formula<br />

Fj del tipo della 3.2. I vari valori osservati sono possib<strong>il</strong>i alternative, quindi varrà<br />

banalmente che<br />

<br />

j∈{1,...,k}<br />

Fj<br />

(3.3)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!