Derivation Graph

A derivation graph is a directed acyclic graph (DAG) showing the progressive derivation of one artefact to another.

A derivation graph is guaranteed to be acyclic since it is impossible for a successor in a derivation chain to be the predecessor of one of its own antecedents. For example, it is impossible for a compiled library to be used in the compilation chain to produce itself.

Graphical representation
The following diagram illustrates all of the graphical notation (notation based on various source  ) used to describe a derivation graph, each graphical notation is described in the following table.



Textual notation
While the graphical notation provides a convenient a clear representation of a derivation graph, a corresponding textual notation is required when discussing derivation graphs.

Textual notation can be formal or informal.

Informal textual notation
Informal textual notation serves for most discussions about branching.

Assuming a graph diagram is provided, discussion can refer to the diagram using informal language such as 'the dev branch' (refering to the branch named '/dev' on the diagram above) or 'the change at a' (referring to the derivation labelled 'a'' in the diagram above).

Similarly, referring to the 'change between 1 and 1.1' (which is labelled 'b' in the diagram above) is normal.

We might say, 'the compiled form of version '2' is shown as '2c', without further qualification. Or, we might expand on this by detailing the compilation 'c' as 'javac file1.c'.

All of these informal expressions of derivation lack precision but suffice in most discussions.

Formal textual notation
Formal textual notation is used when precision is required. The formal derivation graph notation is based on the feature logic notation used by Zeller and Snelting in Zeller(1997). Zeller (1997) summarises feature logic as follows.

Lowercase italic letters are used for three purposes:


 *  a ,  b ,  c  are used to denote literals (constants).
 *  f ,  g ,  h  are used to denote features.
 *  x ,  y ,  z  are used to denote variables.

Uppercase italic letters ( S , T ,  U ) are used to denote feature terms.

The following table summarises the available basic operations.