In[]:=
Map[FunctionToApplication,{s[x_][y_][z_]x[z][y[z]],k[x_][y_]x},{2}]
Out[]=
{sx_y_z_xz(yz),kx_y_x}
In[]:=
ResourceFunction["FindFiniteModels"][((b.·c.)·a.)·(b.·((b.·a.)·b.))a.,2]
Out[]=
{8}CenterDot{{1,0},{0,0}},{14}CenterDot{{1,1},{1,0}}
In[]:=
ResourceFunction["FindFiniteModels"][{s[]xyz==xz(yz),k[]xy==x},2]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{s[]xyz==xz(yz),k[]xy==x},3]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{s[]xyz==xz(yz),k[]xy==x},4,"Parallelize"True]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{k[]xy==x},2]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{k[]xy==x},3]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{k[]xy==x},4]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{k[]xy==x},5]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{k[]xy==x},6]
Out[]=
In[]:=
ResourceFunction["FindFiniteModels"][{s[]xyz==xz(yz)},2]
Out[]=
{0,0}Application{{0,0},{0,0}},s0,{0,1}Application{{0,0},{0,0}},s1,{1,1}Application{{0,0},{0,1}},s1,{5,0}Application{{0,1},{0,1}},s0,{5,1}Application{{0,1},{0,1}},s1,{7,0}Application{{0,1},{1,1}},s0,{15,0}Application{{1,1},{1,1}},s0,{15,1}Application{{1,1},{1,1}},s1
In[]:=
Length[%149]
Out[]=
8
In[]:=
ResourceFunction["FindFiniteModels"][{s[]xyz==xz(yz)},3]
Out[]=
In[]:=
Length[%]
Out[]=
285
Previous Approach
In[]:=
Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[6],{2}]]][{{2,1},{2,2}}]
Out[]=
True
In[]:=
Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[7],{2}]]][{{2,1},{2,2}}]
Out[]=
True
In[]:=
Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[8],{2}]]][{{2,1},{2,2}}]
Out[]=
True
In[]:=
Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[9],{2}]]][{{2,1},{2,2}}]
Out[]=
True
In[]:=
Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[10],{2}]]][{{2,1},{2,2}}]
Out[]=
False
In[]:=
TestTreeEvaluate[%163]
Out[]=
False
In[]:=
AllTrue[%163,Apply[SameQ]]
Out[]=
False
In[]:=
%163[[878]]
Out[]=
{1,1,1,2}
In[]:=
EquivalenceGroups[10][[878]]
Out[]=
{s[s[s]][s[s[s[s]][s]][s][s]],s[s[s]][s[s][s][s[s]][s[s]]],s[s[s]][s[s[s]][s][s][s[s]]],s[s][s[s[s]][s[s[s]]]][s[s]]}
In[]:=
Position[Apply[SameQ]/@%163,False]
Out[]=
{{878}}
In[]:=
SCombinatorAutomatonTreeGeneral[#,Application[x_,y_]({{2,1},{2,2}}[[x,y]]),1,VertexSize.6,ImageSize{UpTo[120],UpTo[120]}]&/@{s[s[s]][s[s[s]][s][s][s[s]]],s[s][s[s[s]][s[s[s]]]][s[s]]}
Out[]=
,
What happens if we look at larger combinator expressions? It keeps working---until we get to two particular size-10 expressions, which have the same fixed point, but different “values”:
Out[]=
,
In[]:=
CombinatorFixedPointList/@{s[s[s]][s[s[s]][s][s][s[s]]],s[s][s[s[s]][s[s[s]]]][s[s]]}
Out[]=
{{s[s[s]][s[s[s]][s][s][s[s]]],s[s[s]][s[s][s][s[s]][s[s]]],s[s[s]][s[s[s]][s[s[s]]][s[s]]],s[s[s]][s[s][s[s]][s[s[s]][s[s]]]],s[s[s]][s[s[s[s]][s[s]]][s[s][s[s[s]][s[s]]]]]},{s[s][s[s[s]][s[s[s]]]][s[s]],s[s[s]][s[s[s]][s[s[s]]][s[s]]],s[s[s]][s[s][s[s]][s[s[s]][s[s]]]],s[s[s]][s[s[s[s]][s[s]]][s[s][s[s[s]][s[s]]]]]}}
In[]:=
Length/@%
Out[]=
{5,4}
In[]:=
Map[TreeEvaluate[#,{{2,1},{2,2}}]&,EquivalenceGroups[10],{2}]
In[]:=
Max[%166]
Out[]=
2
In[]:=
Position[%166,2]
Out[]=
{{878}}
In[]:=
EquivalenceGroups[13]//Length
Out[]=
36735
In[]:=
ResourceFunction["ParallelMapMonitored"][Function[tab,TestTreeEvaluate[Map[TreeEvaluate[#,tab]&,EquivalenceGroups[13],{2}]]],{{{2,3,2},{2,2,2},{2,2,1}},{{3,3,2},{3,1,3},{3,3,3}}}]
Out[]=
{False,False}
In[]:=
Length[Union[#]]&/@Map[TreeEvaluate[#,{{2,3,2},{2,2,2},{2,2,1}}]&,EquivalenceGroups[13],{2}]
Out[]=
In[]:=
Position[%,2]
Out[]=
{{33666},{33752},{33757},{33764},{35970}}