Analysis of links in Hypergraph

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.