The intuitive idea of transformation is to compute time value of each
node according to the links in hypergraph, and then propagate this change to
all other nodes in hypergraph.
So here, two problems arise:
1) First, how to compute value based on links in hypergraph. This one is a easier one
because each link in hypergraph has its exact temporal semantic in hypergraph,what
we need to do is to derive some computing rules from them.
2) The second one is How we propagate the change to other nodes in the graph. This turns to
be the core of the transformation and it is not an easy part.
First,let us take a look at the links in hypergraph and derive the computing rules
(1) Attachment link a--->b,c,d
The semantic of this link is :
begin(b)=begin(c)=begin(d)=begin(a); && end(a)=max{end(b),end(c),end(d)};
(2) Annotation link a--->b,c,d;
begin(b)=begin(c)=begin(d)=begin(a)+delay; && end(a)=max{end(b),end(c),end(d)};
(3) synchronization links a-->b;
Temp: befor (a,b,delay)=> begin(b)=end(a)+ delay;
Temp: meet (a,b) => begin(b)=end(a);
Temp: equals(a,b) => begin(b)=begin(a) && end(b)=end(a);
Temp: overlap(a,b) => begin(a)<begin(b)<end(a)<end(b);
Temp: during(a,b,delay1,delay2)=> begin(a)=begin(b)+delay1 && end(a)=end(b)-delay2;
Temp: co-begin(a,b,delay) => begin(a)=begin(b) ;
Temp: co-end(a,b,delay)=> begin(a)=begin(b)+delay ;
It seems that these rules are already enough to specify the temporal relations.However,
when we come to the second question,It turns out that these rules are not clear enough
or the description of these rules are not clear enough.
we use the following example to explain why futher improvement is needed. suppose we
have Attachment link a-->b,c,d and now begin(a) has been increased. So according to
the rule given above ,we need to change begin(b),begin(c),begin(d). How about when
begin(b) has been changed, Do we need to modify begin(a)? Obvious not. But from the
attachment link rules describled above, We donot know if we need to propagate the change
or not. So for futher refinement, we give another version of rules :
(1) Attachment link a--->b,c,d
begin(b) <- begin(a);
begin(c) <- begin(a);
begin(d) <- begin(a);
end(a) <- max{end(b),end(c),end(d)};
(2) Annotation link a--->b,c,d;
begin(b) <- begin(a)+delay;
begin(c) <- begin(a)+delay;
begin(d) <- begin(a)+delay;
end(a) <- max{end(b),end(c),end(d)};
(3) synchronization links a-->b;
Temp: befor (a,b,delay)=> begin(b) <- end(a)+ delay;
Temp: meet (a,b) => begin(b) <-> end(a);
Temp: equals(a,b) => begin(b) <-> begin(a) && end(b)<->end(a);
Temp: overlap(a,b) => begin(b) <-> begin(a)+delay;
end(a)<->begin(b)+delay;
end(b)<-> end(a)+delay;
Temp: during(a,b,delay1,delay2)=> begin(a) <-> begin(b)+delay1 && end(b)<->end(a)+delay2;
Temp: co-begin(a,b,delay) => begin(a)<->begin(b)
Temp: co-end(a,b,delay)=> end(a)<->end(b)
"x<-y" means assign y to x, so any change in y should be assigned to x; however, change
in x will not affect value of y;
"x<->y" means any time, change in x should cause y to change and change in y should also
cause x to change.
It turns to be useful to differentiate these two different kinds of operation when we
are propagating the value change caused by one synchronization link.