Some Code
Some Code
In[]:=
getBranchEventsList[rules_,initialCondition_,stepCount_Integer]:=Module[{initialCausalGraph,branchingEvents,branchEventsWithDuplication},initialCausalGraph=SimpleGraph[ResourceFunction["SubstitutionSystemCausalGraph"][rules,initialCondition,stepCount]];branchingEvents=VertexList[initialCausalGraph][[Position[VertexOutDegree[initialCausalGraph],_?(#≥2&)][[All,1]]]];branchEventsWithDuplication={};(branchEventsWithDuplication=Join[branchEventsWithDuplication,Subsets[Rest[VertexOutComponent[initialCausalGraph,{#},1]],{2}]])&/@branchingEvents;DeleteDuplicates[branchEventsWithDuplication]]
In[]:=
getNewBranchEventsList[rules_,initialCondition_,stepCount_Integer]:=Module[{branchEvents,oldBranchEvents},If[stepCount>0,branchEvents=Sort/@getBranchEventsList[rules,initialCondition,stepCount];oldBranchEvents=Sort/@getBranchEventsList[rules,initialCondition,stepCount-1];Complement[branchEvents,oldBranchEvents],{}]]
In[]:=
getCausalConnectionsList[rules_,initialCondition_,stepCount_Integer]:=Module[{branchEventsList,newBranchEventsList,combinedBranchEventsList,finalCausalGraph,terminalEvents},branchEventsList=If[stepCount>0,getBranchEventsList[rules,initialCondition,stepCount-1],{}];newBranchEventsList=getNewBranchEventsList[rules,initialCondition,stepCount];combinedBranchEventsList=Union[branchEventsList,newBranchEventsList];finalCausalGraph=SimpleGraph[ResourceFunction["SubstitutionSystemCausalGraph"][rules,initialCondition,stepCount]];terminalEvents=VertexList[finalCausalGraph][[Position[VertexOutDegree[finalCausalGraph],0][[All,1]]]];With[{terminalEvent=#},(branchEventsList=Select[branchEventsList,!SubsetQ[VertexOutComponent[ReverseGraph[finalCausalGraph],terminalEvent],#]&])]&/@terminalEvents;<|"Connected"Complement[combinedBranchEventsList,Union[branchEventsList,newBranchEventsList]],"Disconnected"Union[branchEventsList,newBranchEventsList]|>]
In[]:=
causallyConnectedQ[rules_,initialCondition_,stepCount_Integer]:=Module[{disconnectedEventsList,connectedEventsList},disconnectedEventsList=Sort/@getCausalConnectionsList[rules,initialCondition,Ceiling[stepCount/2]]["Disconnected"];connectedEventsList=Sort/@getCausalConnectionsList[rules,initialCondition,stepCount]["Connected"];Length[Complement[disconnectedEventsList,connectedEventsList]]0]
In[]:=
getEventHorizons[rules_,initialCondition_,stepCount_Integer]:=Module[{disconnectedEventsList,connectedEventsList},disconnectedEventsList=Sort/@getCausalConnectionsList[rules,initialCondition,Ceiling[stepCount/2]]["Disconnected"];connectedEventsList=Sort/@getCausalConnectionsList[rules,initialCondition,stepCount]["Connected"];Complement[disconnectedEventsList,connectedEventsList]]
In[]:=
getWolframModelBranchEventsList[rules_,initialCondition_,stepCount_Integer]:=Module[{initialCausalGraph,branchingEvents,branchEventsWithDuplication},initialCausalGraph=SimpleGraph[ResourceFunction["WolframModel"][rules,initialCondition,stepCount,"CausalGraph"]];branchingEvents=VertexList[initialCausalGraph][[Position[VertexOutDegree[initialCausalGraph],_?(#≥2&)][[All,1]]]];branchEventsWithDuplication={};(branchEventsWithDuplication=Join[branchEventsWithDuplication,Subsets[Rest[VertexOutComponent[initialCausalGraph,{#},1]],{2}]])&/@branchingEvents;DeleteDuplicates[branchEventsWithDuplication]]
In[]:=
getWolframModelNewBranchEventsList[rules_,initialCondition_,stepCount_Integer]:=Module[{branchEvents,oldBranchEvents},If[stepCount>0,branchEvents=Sort/@getWolframModelBranchEventsList[rules,initialCondition,stepCount];oldBranchEvents=Sort/@getWolframModelBranchEventsList[rules,initialCondition,stepCount-1];Complement[branchEvents,oldBranchEvents],{}]]
In[]:=
getWolframModelCausalConnectionsList[rules_,initialCondition_,stepCount_Integer]:=Module[{branchEventsList,newBranchEventsList,combinedBranchEventsList,finalCausalGraph,terminalEvents},branchEventsList=If[stepCount>0,getWolframModelBranchEventsList[rules,initialCondition,stepCount-1],{}];newBranchEventsList=getWolframModelNewBranchEventsList[rules,initialCondition,stepCount];combinedBranchEventsList=Union[branchEventsList,newBranchEventsList];finalCausalGraph=SimpleGraph[ResourceFunction["WolframModel"][rules,initialCondition,stepCount,"CausalGraph"]];terminalEvents=VertexList[finalCausalGraph][[Position[VertexOutDegree[finalCausalGraph],0][[All,1]]]];With[{terminalEvent=#},(branchEventsList=Select[branchEventsList,!SubsetQ[VertexOutComponent[ReverseGraph[finalCausalGraph],terminalEvent],#]&])]&/@terminalEvents;<|"Connected"Complement[combinedBranchEventsList,Union[branchEventsList,newBranchEventsList]],"Disconnected"Union[branchEventsList,newBranchEventsList]|>]
Substitution System Example
Substitution System Example
Wolfram Model Example
Wolfram Model Example