Talk:Vector clock

message: It'd be great if somebody who speaks German could try and synchronise the two articles, the German one seems much more complete.
=== attempt for translation ===
Probably not the best possible translation (I was strugling a bit with some of the technical terms), but please find below an attempt to translate the german version. Please feel free to improve the wording and merge/move the text below to the actual article.
A vector clock is a software component (or a protocol) to assign unique timestamps to messages. Therefore it is a logical clock that allows to put the events in a distributed system in a causal order based on their time stamps (bring into order). Additionally it allows to identify the concurrency of events. It represents the generalisation of Lamport-Clocks which also adheres to the strong consistency criteria of clocks. Vector clocks have been developed independently by different scientists, in particular Colin J. Fridge, Friedemann Mattern and Frank Bernhard Schmuck.
 
Example for a system of vector clocks
Content
1 Mechanics 
2 Partial order
2.1 Concurrency
3 Literature
Mechanics
The approach to operate vectors clocks is as follows: Similar to the Lamport-Clock every process keeps a counter which is incremented with every event (especially when sending or receiving messages). Unlike Lampert-Clocks the clock of every process consists not only of a single counter but of a vector (or an array / associative list) of counters: every keeps track of the counter value of all other processes (to the extent these are known). The current value of the clock is attached to every emitted message.
For all events, only the own counter of the process is incremented. When a message is received, the element-wise maximum is used to build the new value of the clock.
The following pseudo code shows the implementation of a vector clock when sending a message:
clock[PID] = clock[PID]+1;
timestamp = clock;
send(message, timestamp);
The PID is the predefined unique designator of the process – such as the process ID, the IP adress or a combination of both. Fields for which no value was received with prior messages, the value is set to be null.
The following pseudo code show the implementation when receiving a message:
(message, timestamp)= receive();
clock[PID]= clock[PID]+1;
 
for (process P) do begin
    clock[P]= max(clock[P],timestamp[P]);
end;
Partial Order
In order to determine which messages (or which events) are causally dependent from others, a relation of partial order is defined over the values of vector clocks. An event A is the cause of event B when the counter of every field of A is less or equal to the respective field of B. Additionally at least on field of A must be less than the respective field of B.
[… formula …]
As the implication is valid in both directions for vector clocks, they fulfill the  strong consistency criteria of clocks.
An implementation of the relation of partial order stated above in pseude code is:
procedure 
procedure is_cause_of(A,B):
    at_least_one_element_is_strictly_smaller = NO;
    for (process P) do begin
        if ( A[P] > B[P] ) then return NO;
        if ( A[P] < B[P] ) then at_least_one_element_is_strictly_smaller := YES;
    end;
     
    return at_least_one_element_is_strictly_smaller;
end procedure;
Concurrency
If neither A-->B nor B-->A is the case, then the procedure above will yield „NO“ for both
is_cause_of(A,B)
is_cause_of(B,A)
and are thuse concurrent – also written as A || B. It is the key advantage of vector clocks compared to Lamport-clocks they it is possible to determine which events occured concurrent to which others. This is caused by the strong consistency criteria of clocks. It needs to be taken into account, that in contrary to the cause relation, concurrent is not transitive.
Literature
C. J. Fidge, Timestamps in message-passing systems that preserve the partial ordering, In K. Raymond, editor, Proc. of the 11th Australian Computer Science Conference (ACSC'88), pp. 56–66, February 1988. 
Reinhard Schwarz und Friedemann Mattern, Detecting Causal Relationships in Distributed Computations: In Search of the Holy Grail (PDF; 278 kB), in Distributed Computing, Nr. 3 Vol. 7, Springer 1994.  — Preceding unsigned comment added by 82.217.24.101 (talk) 21:32, 27 January 2015 (UTC)
thread_title:  German version 

message: Probably not the best possible translation (I was strugling a bit with some of the technical terms), but please find below an attempt to translate the german version. Please feel free to improve the wording and merge/move the text below to the actual article.
A vector clock is a software component (or a protocol) to assign unique timestamps to messages. Therefore it is a logical clock that allows to put the events in a distributed system in a causal order based on their time stamps (bring into order). Additionally it allows to identify the concurrency of events. It represents the generalisation of Lamport-Clocks which also adheres to the strong consistency criteria of clocks. Vector clocks have been developed independently by different scientists, in particular Colin J. Fridge, Friedemann Mattern and Frank Bernhard Schmuck.
 
Example for a system of vector clocks
Content
1 Mechanics 
2 Partial order
2.1 Concurrency
3 Literature
Mechanics
The approach to operate vectors clocks is as follows: Similar to the Lamport-Clock every process keeps a counter which is incremented with every event (especially when sending or receiving messages). Unlike Lampert-Clocks the clock of every process consists not only of a single counter but of a vector (or an array / associative list) of counters: every keeps track of the counter value of all other processes (to the extent these are known). The current value of the clock is attached to every emitted message.
For all events, only the own counter of the process is incremented. When a message is received, the element-wise maximum is used to build the new value of the clock.
The following pseudo code shows the implementation of a vector clock when sending a message:
clock[PID] = clock[PID]+1;
timestamp = clock;
send(message, timestamp);
The PID is the predefined unique designator of the process – such as the process ID, the IP adress or a combination of both. Fields for which no value was received with prior messages, the value is set to be null.
The following pseudo code show the implementation when receiving a message:
(message, timestamp)= receive();
clock[PID]= clock[PID]+1;
 
for (process P) do begin
    clock[P]= max(clock[P],timestamp[P]);
end;
Partial Order
In order to determine which messages (or which events) are causally dependent from others, a relation of partial order is defined over the values of vector clocks. An event A is the cause of event B when the counter of every field of A is less or equal to the respective field of B. Additionally at least on field of A must be less than the respective field of B.
[… formula …]
As the implication is valid in both directions for vector clocks, they fulfill the  strong consistency criteria of clocks.
An implementation of the relation of partial order stated above in pseude code is:
procedure 
procedure is_cause_of(A,B):
    at_least_one_element_is_strictly_smaller = NO;
    for (process P) do begin
        if ( A[P] > B[P] ) then return NO;
        if ( A[P] < B[P] ) then at_least_one_element_is_strictly_smaller := YES;
    end;
     
    return at_least_one_element_is_strictly_smaller;
end procedure;
Concurrency
If neither A-->B nor B-->A is the case, then the procedure above will yield „NO“ for both
is_cause_of(A,B)
is_cause_of(B,A)
and are thuse concurrent – also written as A || B. It is the key advantage of vector clocks compared to Lamport-clocks they it is possible to determine which events occured concurrent to which others. This is caused by the strong consistency criteria of clocks. It needs to be taken into account, that in contrary to the cause relation, concurrent is not transitive.
Literature
C. J. Fidge, Timestamps in message-passing systems that preserve the partial ordering, In K. Raymond, editor, Proc. of the 11th Australian Computer Science Conference (ACSC'88), pp. 56–66, February 1988. 
Reinhard Schwarz und Friedemann Mattern, Detecting Causal Relationships in Distributed Computations: In Search of the Holy Grail (PDF; 278 kB), in Distributed Computing, Nr. 3 Vol. 7, Springer 1994.  — Preceding unsigned comment added by 82.217.24.101 (talk) 21:32, 27 January 2015 (UTC)
thread_title:  attempt for translation 

message: but article doesn't say in what way these are more advanced, nor what there advantages are relative to plain timestamps. Could someone elaborate? Thanks 92.29.175.136 (talk) 19:24, 10 January 2010 (UTC)
thread_title:  Lamport Timestamps article says "[timestamps] provide a starting point for the more advanced Vector clock method." 

message: What does the first line of sending a logical clock mean? Is that the current process's clock that says how many events its seen from every other process?  — Preceding unsigned comment added by 130.58.68.214 (talk) 17:28, 31 October 2014 (UTC)
thread_title: Request

message: Each box in the figure contains three values (sometimes blank).  What do those values actually mean?  If the caption to the figure explained that, I think it could aid understanding.  Thanks!  103.1.70.133 (talk) 01:22, 27 July 2013 (UTC)
thread_title:  What do the boxes in the diagram mean? 

message: By convention it is the case that unary operators bind stronger than binary operators, thus where it says VC(x) < VC(y) <=> ~VC(y) < VC(x), it reads as if the author tried to negate a vector of integers to the utter amusement of the public. 185.110.110.45 (talk) 15:25, 9 October 2017 (UTC)
thread_title:  Logical not binds stronger than "less than" 

message: May I bring my posts to your attention: DAGs, Ledgers and Distributed Ledger Technology and from Vector Clock to Distributed Ledger.
I would be thankful for your feedback. Especially, whether it is worth the effort to put the idea in a formal paper.
--Enis.olgac (talk) 08:14, 9 December 2018 (UTC)
thread_title:  A compatible approach