In[]:=
combinatorRules={s[x_][y_][z_]x[z][y[z]],k[x_][y_]x}
Out[]=
{s[x_][y_][z_]x[z][y[z]],k[x_][y_]x}
In[]:=
getCombinatorCases[expression_]:=Position[expression,(s[x_][y_][z_])|(k[x_][y_]),{0,Infinity}]
In[]:=
getCombinatorStateEvolutionFunction[state_]:=ToString[MapAt[Replace[#,combinatorRules]&,ToExpression[state],{#}]]&/@getCombinatorCases[ToExpression[state]]
In[]:=
getCombinatorStateEventFunction[state_String]:=Catenate[Module[{possibleEvents=StringPosition[state,ToString[#]]&/@((ToExpression[state][[##]]&@@#)&/@getCombinatorCases[ToExpression[state]])},Module[{possibleEvent=#},{StringTake[state,#]ToString[Replace[ToExpression[StringTake[state,#]],combinatorRules]],StringTake[state,#],{StringTake[state,First[#]-1],StringDrop[state,Last[#]]}}&/@possibleEvent]&/@possibleEvents]]
In[]:=
getCombinatorStateEventFunction[states:{_String...}]:=Catenate[getCombinatorStateEventFunction/@states]
In[]:=
getCombinatorStateEventFunction["s[s[s[s][s]]][s][s][k]"]
Out[]=
{{s[s[s[s][s]]][s][s]s[s[s][s]][s][s[s]],s[s[s[s][s]]][s][s],{,[k]}}}
In[]:=
getCombinatorEventApplicationFunction[{(input_String|input_Symbol)output_String,(input_String|input_Symbol),{prefix_String,suffix_String}}]:=StringJoin[prefix,output,suffix]
In[]:=
getCombinatorElementShifts[shiftedFragment_String,{input:{inputPrefix_String,inputSuffix_String},output:{outputPrefix_String,outputSuffix_String}}]:=Table[Rule@@({StringPart[shiftedFragment,position],{StringJoin[#1,StringTake[shiftedFragment,;;position-1]],StringJoin[StringTake[shiftedFragment,position+1;;],#2]}}&@@@{input,output}),{position,StringLength[shiftedFragment]}]
In[]:=
getCombinatorElementShifts[{(input_String|input_Symbol)output_String,(input_String|input_Symbol),{prefix_String,suffix_String}}]:=Join[getCombinatorElementShifts[prefix,{{"",StringJoin[input,suffix]},{"",StringJoin[output,suffix]}}],getCombinatorElementShifts[suffix,{{StringJoin[prefix,input],""},{StringJoin[prefix,output],""}}]]
In[]:=
getCombinatorElements[{substring_String,{prefix_String,suffix_String}}]:={StringPart[substring,#],{StringJoin[prefix,StringTake[substring,;;#-1]],StringJoin[StringTake[substring,#+1;;],suffix]}}&/@Range[StringLength[substring]]
In[]:=
getCombinatorEventDecompositionFunction[event:{(input_String|input_Symbol)output_String,(input_String|input_Symbol),{prefix_String,suffix_String}}]:=Join[{getCombinatorElementShifts[event]},getCombinatorElements[{#,{prefix,suffix}}]&/@{input,output}]
In[]:=
ResourceFunction["MultiwaySystem"][<|"StateEvolutionFunction"getCombinatorStateEvolutionFunction,"StateEquivalenceFunction"SameQ,"StateEventFunction"getCombinatorStateEventFunction,"EventDecompositionFunction"getCombinatorEventDecompositionFunction,"EventApplicationFunction"getCombinatorEventApplicationFunction,"SystemType""Combinator","EventSelectionFunction"Identity|>,{"s[s[s[s][s]]][s][s][k]"},10,"EvolutionCausalGraphStructure"]
Out[]=
In[]:=
ResourceFunction["MultiwaySystem"][<|"StateEvolutionFunction"getCombinatorStateEvolutionFunction,"StateEquivalenceFunction"SameQ,"StateEventFunction"getCombinatorStateEventFunction,"EventDecompositionFunction"getCombinatorEventDecompositionFunction,"EventApplicationFunction"getCombinatorEventApplicationFunction,"SystemType""Combinator","EventSelectionFunction"Identity|>,{"s[s[s[s][s]]][s][s][k]"},10,"CausalGraphStructure"]
Out[]=
In[]:=
ResourceFunction["MultiwaySystem"][<|"StateEvolutionFunction"getCombinatorStateEvolutionFunction,"StateEquivalenceFunction"SameQ,"StateEventFunction"getCombinatorStateEventFunction,"EventDecompositionFunction"getCombinatorEventDecompositionFunction,"EventApplicationFunction"getCombinatorEventApplicationFunction,"SystemType""Combinator","EventSelectionFunction"Identity|>,{"s[s[s[s][s]]][s][s][k]"},12,"CausalGraphStructure"]
Out[]=
In[]:=
ResourceFunction["MultiwaySystem"][<|"StateEvolutionFunction"getCombinatorStateEvolutionFunction,"StateEquivalenceFunction"SameQ,"StateEventFunction"getCombinatorStateEventFunction,"EventDecompositionFunction"getCombinatorEventDecompositionFunction,"EventApplicationFunction"getCombinatorEventApplicationFunction,"SystemType""Combinator","EventSelectionFunction"Identity|>,{"s[s[s[s][s]]][s][s][k]"},10,"StatesGraphStructure"]
Out[]=
A case that terminates with /. ordering
A case that terminates with /. ordering