User blog comment:MilkyWay90/Generalized Factorial Function/@comment-35392788-20180517135333/@comment-35392788-20180524081450

I don't think this process is very good (also, it's supposed to be a step-by-step program, not pseudocode), and I don't really understand it.

I propose the following process :

Apply the rules of the notation/function as long as possible. I define a "default" value of a notation/function a value that can't be decreased without running into undefined behavior (1 in most array notations). If the expression consists only of !s and default values, then it is equal to the default value of the notation. Start at the rightmost "!" Look at the number right of it. If it is superior to the default value, then call it "n" and replace the "!" with F(...,!,n-1,...) If it is equal to the default value, delete that default value, jump to the next non-default entry, replace all the default values before it with it, and replace that entry (called m) with F(...,!,D,...,D,m-1), where D is the defaut value. If there is no number/no non-default number to the right, then replace the ! with the entire expression with the rightmost, non-default number before the ! decreased by 1.

Examples :

{3,3,!} = {3,3,{3,2,!}} = {3,3,{3,2,{3,1,!}}} = {3,3,{3,2,3}} (BEAF rule applies) = {3,3,3^3^3} Which falls between G1 and G2

s(3,3,!,3) (strong array notation) = s(3,3,s(3,3,!,2),3) = s(3,3,s(3,3,s(3,3,!,1),2),3) = s(3,3,s(3,3,s(3,3,!),2),3) = s(3,3,s(3,3,s(3,3,s(3,2,!)),2),3) ... = s(3,3,s(3,3,s(3,3,3^^3),2),3) Now that's what I call big.

{3,3,2,!} = {3,3,2,{3,3,1,!}} = {3,3,2,{3,3,1,{3,2,1,!}}} = {3,3,2,{3,3,1,{3,2,1,{3,1,1,!}}}} = {3,3,2,{3,3,1,{3,2,1,3}}} = {3,3,2,{3,3,1,{3,3,3,2}}} I won't bother expanding this thing further.

A final example with Taro's Multivariable Ackermann function. A(1,2,!) = A(1,2,A(1,1,!)) = A(1,2,A(1,1,A(1,0,!))) = A(1,2,A(1,1,A(1,0,A(0,0,!)))) = A(1,2,A(1,1,A(1,0,1))) = A(1,2,A(1,1,A(0,1,1))) = A(1,2,A(1,1,A(0,0,A(0,1,0)))) = A(1,2,A(1,1,A(0,0,A(0,0,1)))) = A(1,2,A(1,1,A(0,0,2))) = A(1,2,A(1,1,3)) ~= A(1,2,3->3->3->2) (chained arrow notation) And this is much, MUCH larger than Graham's Number. For comparison, A(1,2,2) alone is larger than Graham's number. If I follow the approximations given in other notations, then A(1,2,!) ~= {{3,2,2,2},2,3,2} = {{3,3,{3,3,3}},2,3,2}