Primary dropper-dropping notation

Prev: Weak dropper-multiexpanding notation

Primary dropper-dropping notation (pDDN) is the 12th part of my array notation. In this part, you probably don’t know what “dropper dropping” means, but it’ll be explained in next several parts.

Symbol + is called plus sign, with ASCII = 43.

Here I introduce a very high-leveled separator – the plus sign. To avoid confusing between this separator and addition, we also write it as {1+}. Here’s how WDmEN can be embedded into pDDN. The dropper (1)2 in WDmEN is (1 {1+} 2), (1)3 is (1 {1+} 3), and so on. Generally, dropper (A)n is (A {1+} n).

Definition

Syntax:

  • s(a,b) is an array, where a and b are positive integers.
  • s(#Am) is an array, where m is a positive integer, A is a separator, and # is a string such that s(#) is an array.

Definition of separators:

  • {m} is a separator, where m is a positive integer.
  • {#Am} is a separator, where m is a positive integer, A is a separator, and # is a string such that it’s not ended with a plus sign, and {#} is a separator.
  • {#+} is a separator, where # is a string such that it’s not ended with a plus sign, and {#} is a separator.
  • AB is a separator, where A is a dropper and B is a separator.

Definition of droppers:

  • (m) is a dropper, where m is a positive integer.
  • (#Am) is a dropper, where m is a positive integer, A is a separator, and # is a string such that (#) is a dropper.

Note:

  1. The comma is a shorthand for {1}, the plus sign is a shorthand for {1+}.
  2. The dropper for an n-separator is (n), the dropper for the colon is (1 {1+} 2), the dropper for the double colon is (1 {1+} 3), and so on.

For separator A, define F(A,n) to be the n-th sections of A, with (#) changed into {#}. Generally, if (A) is a dropper and B is a separator, then F((A)B,1) = {A} and F((A)B,n) = F(B,n-1) for n > 1.

Rules and process

  • Rule 1: (base rule – only 2 entries) s(a,b) = a^b
  • Rule 2: (tailing rule – the last entry is 1) s(# A 1) = s(#), {# A 1} = {#} and (# A 1) = (#)
  • Rule 3: (recursion rule – neither the 2nd nor 3rd entry is 1) s(a,b,c #) = s(a, s(a,b-1,c #) ,c-1 #)

where # is a string of entries and separators, it can also be empty. A is a separator.

If none of the 3 rules above applies, start the process shown below. Note that case B1, B2, B3, B5 and B6 are terminal but case A and B4 are not. b, n, M, Bt′s and K are parts of the original array but t, u, i, Si, Ri, At′s, P and Q are not. Before we start, let A0 and F(A0,1) be the whole array. First start from the 3rd entry.

  • Case A: If the entry is 1, then you jump to the next entry.
  • Case B: If the entry n is not 1, look to your left:
    • Case B1: If the comma is immediately before you, then
      1. Change the “1,n” into “b,n-1” where n is this non-1 entry and the b is the iterator.
      2. Change all the entries at base layer before them into the base.
      3. The process ends.
    • Case B2: If a separator (1)M (where M is the remaining sections) is immediately before you, then
      1. Let t be such that the (1)M is are layer t. And let B0 be the whole array now.
      2. Repeat this:
        1. Subtract t by 1.
        2. Let separator Bt be such that it’s at layer t, and the (1)M is inside it.
        3. If t = 1, then break the repeating, or else continue repeating.
      3. Find the maximum of t such that lv(At) < lv((1)M).
      4. If lv(F(At,1)) < lv(D(F(M,1))), then
        1. Find the minimum of v such that v > t and lv(Av) < lv(U(M)).
        2. Let string P and Q be such that Bt = “P Bv Q”.
        3. Change Bt into “P X(M) Av Y(M) Q”.
        4. The process ends.
      5. If lv(F(At,1)) ≥ lv(D(F(M,1))), then
        1. Let string P and Q be such that Bt = “P (1)M n Q”.
        2. Change Bt into Sb, where b is the iterator, S1 is comma, and Si+1 = “P Si 2 (1)M n-1 Q”.
        3. The process ends.
    • Case B3: If the plus sign (i.e. {1+}) is immediately before you, then
      1. Let t be such that the plus sign is are layer t. And let B0 be the whole array now.
      2. Repeat  this:
        1. Subtract t by 1.
        2. Let separator Bt be such that it’s at layer t, and the plus sign is inside it.
        3. If t = 1, then break the repeating, or else continue repeating.
      3. Find the maximum of u such that lv(Au) < lv(+).
      4. Find the minimum of t such that lv(F(Au,t)) < lv(F(Au,1)). If there’s no such t, jump to step 5a.
      5. If lv(F(Au,t)) < lv(D(F(Au,1))), then
        1. Let string P and Q be such that P is the first t-1 sections of Au, and Au = “P Q”.
        2. Change the Bu into “P X(F(Au,1)) Au′ Y(F(Au,1)) Q”, where Au′ is Au with the first entry increased by 1.
        3. For sections of the “P X(F(Au,1)) Au′ Y(F(Au,1)) Q”, if it’s not the last one, convert “{#}” into “(#)”; if it’s the last one, convert “(#)” into “{#}”.
        4. The process ends.
      6. If lv(F(Au,t)) ≥ lv(D(F(Au,1))), then
        1. Let string Q be such that Au = “P Q”, where P is the first section of Au.
        2. Change the Bu into “Sb Q”, where b is the iterator, S1 is “(1)” and Si+1 = “Si Rt“, where R1 is empty string and Ri+1 = “Ri F(Au,i+1)”.
        3. For sections of the “Sb Q”, if it’s not the last one, convert “{#}” into “(#)”; if it’s the last one, convert “(#)” into “{#}”.
        4. The process ends.
    • Case B4: If a separator K is immediately before you, and it doesn’t fit case B1, B2 or B3, then
      1. Change the “K n” into “K 2 K n-1”.
      2. Set separator At = K, here K is at layer t.
      3. Jump to the first entry of the former K.
    • Case B5: If an lbrace is immediately before you, then
      1. Change separator {n #} into string Sb, where b is the iterator, S1 = “{n-1 #}” and Si+1 = “Si 1 {n-1 #}”.
      2. The process ends.
    • Case B6: If a “(” is immediately before you, then
      1. Let t be such that the separator (n #)M is are layer t, here (n #) is the first section and M is the remaining sections. And let B0 be the whole array now.
      2. Repeat this:
        1. Subtract t by 1.
        2. Let separator Bt be such that it’s at layer t, and the (n #)M is inside it.
        3. If t = 1, then break the repeating, or else continue repeating.
      3. Find the maximum of t such that lv(At) < lv((n #)M).
      4. If lv(F(At,1)) < lv(D(F(M,1))), then
        1. Find the minimum of v such that v > t and lv(Av) < lv(U(M)).
        2. Let string P and Q be such that Bt = “P Bv Q”.
        3. Change Bt into “P X(M) Av Y(M) Q”.
        4. The process ends.
      5. If lv(F(At,1)) ≥ lv(D(F(M,1))), then
        1. Change Bt into “(n-1 #)At“.
        2. The process ends.

Level comparison

All arrays have the lowest and the same level. And note that the same separators have the same level. To compare levels of other separators A and B, we follow these steps.

  1. Compare levels of the last section of A and B using normal rules. If lv(last section of A) < lv(last section of B), then lv(A) < lv(B); if lv(last section of A) > lv(last section of B), then lv(A) > lv(B); or else –
  2. If A has only 1 section but B has more than 1 sections, then lv(A) > lv(B); if A has more than 1 sections but B has only 1 section, then lv(A) < lv(B); if both A and B have only 1 section, then lv(A) = lv(B); or else –
  3. Let A = “#1 (P) M” where M is the last section and (P) is the second last section, B = “#2 (Q) N” where N is the last section and (Q) is the second last section.
  4. If lv(“#1 {P}”) < lv(“#2 {Q}”), then lv(A) < lv(B); if lv(“#1 {P}”) > lv(“#2 {Q}”), then lv(A) > lv(B); if lv(“#1 {P}”) = lv(“#2 {Q}”), then lv(A) = lv(B).

Normal rules:

  1. Apply rule 2 to A and B until rule 2 cannot apply any more.
  2. If A has a plus sign at the left-superscript position of rbrace and B hasn’t, then lv(A) > lv(B); if B has a plus sign at the left-superscript position of rbrace and A hasn’t, then lv(A) < lv(B); or else –
  3. Let A = {a1A1a2A2…ak-1Ak-1ak} and B = {b1B1b2B2…bl-1Bl-1bl} (or A = {a1A1a2A2…ak-1Ak-1ak+} and B = {b1B1b2B2…bl-1Bl-1bl+})
  4. If k = 1 and l > 1, then lv(A) < lv(B); if k > 1 and l = 1, then lv(A) > lv(B); if k = l = 1, follow step 5; if k > 1 and l > 1, follow step 6 ~ 11
  5. If a1 < b1, then lv(A) < lv(B); if a1 > b1, then lv(A) > lv(B); if a1 = b1, then lv(A) = lv(B)
  6. Let {M(A)=\{i\in\{1,2,\cdots,k-1\}|\forall j\in\{1,2,\cdots,k-1\}(lv(A_i)\ge lv(A_j))\}}, and {M(B)=\{i\in\{1,2,\cdots,l-1\}|\forall j\in\{1,2,\cdots,l-1\}(lv(B_i)\ge lv(B_j))\}}.
  7. If lv(AmaxM(A)) < lv(BmaxM(B)), then lv(A) < lv(B); if lv(AmaxM(A)) > lv(BmaxM(B)), then lv(A) > lv(B); or else –
  8. If |M(A)| < |M(B)|, then lv(A) < lv(B); if |M(A)| > |M(B)|, then lv(A) > lv(B); or else –
  9. Let A = {#1 AmaxM(A) #2} and B = {#3 BmaxM(B) #4}
  10. If lv({#2}) < lv({#4}), then lv(A) < lv(B); if lv({#2}) > lv({#4}), then lv(A) > lv(B); or else –
  11. If lv({#1}) < lv({#3}), then lv(A) < lv(B); if lv({#1}) > lv({#3}), then lv(A) > lv(B); if lv({#1}) = lv({#3}), then lv(A) = lv(B)

Subfunctions

For a separator or dropper A, U(A), D(A), X(A) and Y(A) are determined as follows. Start the subprocess shown below. Process start from the first entry of A. Note that case B1 and B3 give definitions but case A and B2 don’t.

  • Case A: If the entry is 1, then you jump to the next entry.
  • Case B: If the entry n is not 1, look to your left:
    • Case B1: If the plus sign (i.e. {1+}) is immediately before you, then
      1. Let string P and Q be such that A = “P {1+} n Q”.
      2. Define  D(A) = “P {1+} n-1 Q”, X(A) = “P” and Y(A) = “2 {1+} n-1 Q”.
    • Case B2: If a separator K not the plus sign is immediately before you, then
      1. Change the “K n” into “K 2 K n-1”.
      2. Jump to the first entry of the former K.
    • Case B3: If the “(” is immediately before you, then
      1. Let string P and Q be such that A = “P (n #)M 2 Q”, where (n #)M is the separator.
      2. Define U(A) = “(n #)M”, D(A) = “P Q”, X(A) = “P” and Y(A) = “2 Q”.

Explanation

In the main process, when we meet a plus sign, first it drops down once, then we search for the leftmost section with lower level than the first section (that’s similar to WDmEN). The adding rule (step 5 of case B3) is also similar to WDmEN.

31 thoughts on “Primary dropper-dropping notation

    • Well, this {1{1+}1{1+}2} is illegal, since the “A_u” has only 1 section.
      In next part I’ll fix it. Wait for that.

      Now it’s fixed. First we turn into step 5 of case B3, so {1{1+}1{1+}2} changes into (1{1+}1{1+}2){1{1+}1{2{1+}1{1+}2}2}. Next, we turn into step 6 of case B3, so (1{1+}1{1+}2){1{1+}1{2{1+}1{1+}2}2} changes into (1)(1{1+}1{2{1+}1{1+}2}2)(1{1+}1{2{1+}1{1+}2}2)…(1{1+}1{2{1+}1{1+}2}2){1{1+}1{2{1+}1{1+}2}2}. (1{1+}1{2{1+}1{1+}2}2) seems to be a very complicated thing, but here it’s just something 1) higher-leveled than (1{1+}1(1{1+}1…(1{1+}1(1{1+}1,2)2)…2)2) and 2) D() results (1), and the main process doesn’t run into it.

      And the limit of pDDN is f(n) = s(3,3{1{1{1…{1{1,2+}2+}…2+}2+}2}2) with n “2+}”‘s.

      Liked by 1 person

    • Alemagno12 says:

      To get {1{1+}1{1+}2}…
      First, (A)^n replace into {A{1+}n}, and droppers of {1{1+}_} will be (A){1(1){1{1+}1{1+}2}2}.
      However, {1(1){1{1+}1{1+}2}2} is simplified version of {1{1(1){1{1+}1{1+}2}2}2}, and the next dimensional separator after {1(1){1{1+}1{1+}2}2} is {2{1(1){1{1+}1{1+}2}2}2}.
      Now, droppers of {_{1(1){1{1+}1{1+}2}2}2} is (A){1:2{1(1){1{1+}1{1+}2}2}2} (or (A){1{1{1+}2}2{1(1){1{1+}1{1+}2}2}2}), and droppers of {1{1{1+}_}2{1(1){1{1+}1{1+}2}2}2} is (1){1{1(1){1{1+}1{1+}2}2}3}. And it works like mwDEN.
      We can keep climbing up the dropper levels if we let …{1(1){1{1+}1{1+}2}2}… = …{1{1(1){1{1+}1{1+}2}2}2}…
      And it works like WDmEN.
      And finally, the limit is {2(1){1{1+}1{1+}2}2}.
      (1){1{1+}1{1+}2} will work as 1-separator, and (A){1{1+}1{1+}2} will work as A-separator.
      Finally, the limit of (1){1{1+}1{1+}2}, (1)(1{1+}1{1+}2){1{1+}1{1+}2}, (1)(1{1+}1{1+}2)(1{1+}1{1+}2){1{1+}1{1+}2},… is {1{1+}1{1+}2}.

      Or something like that. I don’t really know.

      Liked by 1 person

  1. Aarex Tiaokhiao says:

    I have the ideas that go beyond pDDN.

    ‘+ is the 1-separator of dropper-dropping.
    +’ is the dropper-dropping separator that is greater than lv(+).
    ++ is the limit of sDDN and the separator of (+)-dropper-dropping.

    Like

  2. legionmammal978 says:

    How would one go about evaluating, say, s(3{1⁺⁺}3)? It should be a valid array according to the Definition section. (sorry for gross misunderstandings, some of the more technical parts are lost on me)

    Like

      • legionmammal978 says:

        First one was my mistake, it should be s(3,3{1⁺⁺}3), but yeah, it should be reworded somehow. The problem:
        “{m} is a separator, where m is a positive integer.” Setting m = 1, so ‘{1}’ is a separator
        “{#⁺} is a separator, where # is a string such that {#} is a separator.” Setting # = ‘1’, as ‘{1}’ is a separator, so ‘{1⁺}’ is a separator
        “{#⁺} is a separator, where # is a string such that {#} is a separator.” Setting # = ‘1⁺’, as ‘{1⁺}’ is a separator, so ‘{1⁺⁺}’ should by all means be a separator

        Like

  3. legionmammal978 says:

    Also, I don’t really get how you would define sections of A₀, it’s not really a separator.

    Like

  4. legionmammal978 says:

    Another probably pointless question: How are U(A), D(A), X(A) and Y(A) defined, if they start on the first entry and have no rules for lbraces on the left?

    Like

  5. Aarex Tiaokhiao says:

    Secondary Dropper-Dropping Notation Idea:
    : will be (1^;){1;2}
    :: will be (1^;)(1^;){1;2}
    + will be (2^;){1;2}
    ++ will be (3^;){1;2}
    +++ will be (4^;){1;2}
    etc.
    ; will be weak dropper-expanding, but :s instead of `s.

    Like

Leave a reply to Aarex Tiaokhiao Cancel reply