Who decides if A and B are related?
Here’s something that I have been thinking about lately..
Let’s say we have two events; A and B.
How are they related?
Scenario 1: I send event A into an event processing box and out comes B. By some information I have at hand, I can conclude that B is caused by A.
Scenario 2: A friend of mine sees event A going into the box, he also sees B coming out of it. But my friend has another set of information and concludes that A did not cause B.
So, two opposing views;
- A caused B
- A did not cause B
Are me and my friend both right?
If so, where should we record this causality information?
A popular way is to record it in event B. Where a field would record the fact that is was caused by A.
But if event causality is a matter of perspective? Do we need to have multiple databases of causality information depending on who’s watching?
What do you think?
Todays totally unrelated picture:
Just some thaughts…
1) The information is “in the box”. If B was really created “because of” A, then there is some kind of instruction located in the box that creates A because of B. Then, with this instruction (and probably a snapshot of the box’s state at the time of the arrival of A) at hand, both of you are be able to prove or disprove that A caused B. There cannot be a contradiction.
2) If the “observation channel” of you or your frind does not preserve causality, she might see B leaving the box before A enters it and therefore assume that “A B”, but that is a problem of the communication protocol (this is the distributed systems people’s view on causality.)
3) My assumption is that the observation of scenario 2 rather results in “A B” than “A B”. In the former case, there would be no contradiction to the observation of scenario 1.
What if me and my friend have the same information but use it differently? Maybe by using different subsets of the information to draw our conclusions. Could this cause us to have opposing views?
@Marco
Yes, but the decision of at least one of both would be made on the basis of wrong assumptions.
For instance, if you are interested in the causal relationship of messages in a Distributed System, you can append vector clock timestamps to a message, which represent what messages a sender has received before sending its message. On collecting messages and comparing their timestamps, you can tell whether a message A caused message B or not. However, if you get only truncated timestamps, the only decision you can correctly make is “I don’t know”.
Therefore, the only reason for contradictions are wrong assumptions – mostly the wrong assumption that you decide on the basis of complete knowledge although you don’t. Here are some examples:
You assume that your observation channel lets you observe events in their correct order. If it doesn’t, you might erroneously claim that “A before B”, and your friend that “B before A”, although your only correct answer would be “I don’t know”.
You assume that you know the state of the “box”. If you know that A always causes B and you see B leaving the box after A arrived, you claim that B was caused by A. There you assume that no message à was already in the box that actually caused B, which might not be true.
You assume that you and your friend have the same understanding about the semantics of the relation. While in your understanding, for instance, any predecessor of B is in causal relationship with B, your friend might accept only direct predecessors.
You assume that your viewpoint has no impact on the observation.
Most relations on events (except chronological and, maybe, spatial) are arbitrarily defined, anyway – this also includes causality. So I see no problem in each observer having its own database for relation assessment. However, if you want to compare observations, you must either make sure that both observers have the same knowledge and assumptions or that they are aware of the incompleteness of their knowledge and refrain from deciding at all where the incompleteness demands it.
Also, I apologise for the unreadable parts of my previous post. It should read,
2) … “A [did not cause] B” …
3) … “A [I don't know] B” than “A [did not cause] B”.