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