This is a short review of the following paper: http://www.javakade.nl/research/pdf/tragr-termgraph-2022-long-revised.pdf
The Trace Graph (tragr)
The Trace Graph (tragr)
Tragrs (pronounced as trackers) are similar to token event graphs and single-way causal graphs with causal edges for a single path of the underlying multiway string rewriting system. But they have some additional details:
◼
only tokens (characters) of the initial and final strings are shown
◼
there are additional juxtaposition edges between tokens making up an initial and final string
◼
there are two explicit empty string tokens
◼
events are colored and labeled by the string rewriting rule
◼
causal edges are transitively reduced based on what token is involved
◼
graph planarity (seems like it always holds, which is not immediately obvious, but the paper requires it to be the case by definition)
There is a notion of a Multistep, a generalisation of everything from a single updating event to a generational event, a parallel composition of space-like separated events.
There is a bijection between these tragrs and greedy multistep reductions on string rewriting paths (proof terms), which says that one can go from a reduced string proof to tragr and back uniquely. Topological Multi-sorting is a name the paper dubs a way to read back a proof term from a tragr.
Evolution graph of a multiway system have annotated evolution edges, from which all necessary information can be extracted to construct a Trace Graph for a given path:
In[]:=
PacletInstall["https://wolfr.am/Multicomputation.paclet",ForceVersionInstall->True]<<Wolfram`Multicomputation`
Out[]=
PacletObject
In[]:=
eg=MultiwaySystem[{"BB"->"A","AAB"->"BAAB"},"ABAAB"]["EvolutionGraph",7,AspectRatio->1/3]
Out[]=
In[]:=
EdgeTags[eg][[;;3]]
Out[]=
Input{3,4,5},Output3,4,5,c.$151240,Rule2,Position{{3},{4},{5}},MatchPositions{{1}},MatchTypeRule,Step1,Input{2,3},Output{2},Rule1,Position{{2},{3}},MatchPositions{{1}},MatchTypeRule,Step2,Input4,5,c.$151240,Output4,5,c.$151240,c.$151871,Rule2,Position{{4},{5},{6}},MatchPositions{{1}},MatchTypeRule,Step2
Example path from the paper:
In[]:=
source=ToLinkedHypergraph["ABAAB"];targets=Select[VertexList[eg],FromLinkedHypergraph[#,"String"]=="ABAABAAB"&];
There are 24 paths in total, the 1st one (accidentally) corresponds to the example:
In[]:=
paths=Catenate@Map[EdgeList[Subgraph[eg,#]]&/@FindPath[eg,source,#,All,All]&,targets];
In[]:=
Length[paths]
Out[]=
24
In[]:=
Subgraph[eg,FindPath[eg,source,targets[[1]]]]
Out[]=
In[]:=
HighlightGraph[Graph[eg,VertexSize->Medium,AspectRatio->1/3],Subgraph[eg,FindPath[eg,source,#]]&/@targets]
Out[]=
In[]:=
Graph[%,GraphLayout->"SpringEmbedding",EdgeStyle->Arrowheads[Small],VertexShapeFunction->{Except[source|Alternatives@@targets]->Automatic},AspectRatio->1]
Out[]=
The function that constructs the tragr from the path:
Compare its output to the one from the paper:
All 24 Trace Graphs:
All Trace Graphs are planar:
Up-to permutation equivalence, which can be determined by comparing Trace Graphs, there are only 3 distinct paths:
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
String rewriting trace graphs
by Nikolay Murzin
Wolfram Community, STAFF PICKS, May 8, 2024
https://community.wolfram.com/groups/-/m/t/3172220
by Nikolay Murzin
Wolfram Community, STAFF PICKS, May 8, 2024
https://community.wolfram.com/groups/-/m/t/3172220