User blog comment:Mh314159/A hopefully powerful new system/@comment-35470197-20190628050713/@comment-39585023-20190629013142

"Oh, do you allow to apply the rule sets to substrings? Then you need to the order of proority of how to apply the rule sets to substrings.

For example, you have four ways to apply the rule sets to [2]\[3][4][5] in the following way: My intention is that brackets bind with higher priority to each other than they do to backslashes, something I need to state more clearly and explicitly in the rules and thank you for discovering this, so [3][4][5] would recurse using the o through nn rules until a [1][a] or [a][1] expression is reached, at which point the [2]\ rule triggers.
 * 1) Apply nn to the substring [4][5]
 * 2) Apply nn to the substring [3][4]
 * 3) Apply nn to the substring [3][4]
 * 4) Apply c to the substring [2]\[3]"

"I know that you set the order c > o > ss > sn > ns > nn > base, but it does not imply the full order of the application to substrings. For example, you applied nn to the substring [3][2] of [1]\[3][2] even though c is applicable to the substring [1]\[3] of [1]\[3][2]."

Again, brackets bind with higher priority, so [1]\[3][2] always results in an nn recursion of [3][2] and would never mean ([1]\[3])[2]

"Moreover, in order to allow to apply the rule set to substrings, it is better to use a function symbol instead of to prestent term rewritings as equalities. Namely, [a] = a should be replaced by f([a]) = a, and [n][a] = [n-1]^{[n][a-1]}[a] should be replaced by f([n+1][a+1]) = [n]^{f([n+1][a])}[a+1]. Otherwise, brackets in expressions are quite ambiguous, because it can present both unsolved expressions and results of application of the rule sets. For example, [2]\[1][2][3] can mean both a[3] and [2]\[1]b, where a is the result of c applied to [2]\[1][2] and b is the result of nn applied to [2][3]. It is another problem than the order, but a problem on the ambiguity of expressions."

I think that bringing in f([a]) would make the system more complex and it would also eliminate or make it harder to notate the left recursiveness of expressions with multiple backslashes, which is very powerful. For example, [2]\[2][3]\[2][2] is left recursive with respect to backslashes but still respects bracket binding piority, so it is ([2]\[2][3])\[2][2] and therefore the next step is to apply nn to [2][3]. the [2][2] wouldn't get touched until we knew the value of [2]\[2][3], which number would be the cycle number of [p]\[2][2]. I have an intuition that this will grow very fast.

[a] = a only triggers at the very end of a reduction when only a single bracket remains so that the system outputs a single number. I will look at it again to make sure it's consistent and add clarification if necessary; this is something I gave some thought when I set the system up.

[2]\[1][2][3] would never mean ([2]\[1][2])\[3] nor ([2]\[1])([2][3]) because of the bracket binding rule (which I definitely need to put into the rules more explicity, so thank you for noticing that).

Thank you!!