cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

Showing 1-3 of 3 results.

A368954 Row lengths of A368953: in the MIU formal system, number of distinct strings n steps distant from the MI string.

Original entry on oeis.org

1, 2, 3, 6, 15, 48, 232, 1544, 14959, 203333, 3919437, 105126522
Offset: 0

Views

Author

Paolo Xausa, Jan 10 2024

Keywords

Comments

See A368946 for the description of the MIU formal system and A368953 for the variant where duplicates within a row are removed.

References

  • Douglas R. Hofstadter, Gödel, Escher, Bach: an Eternal Golden Braid, Basic Books, 1979, pp. 33-41.

Crossrefs

Programs

  • Mathematica
    MIUStepDW3[s_] := DeleteDuplicates[Flatten[Map[{If[StringEndsQ[#, "1"], # <> "0", Nothing], # <> #, StringReplaceList[#, {"111" -> "0","00" -> ""}]}&, s]]];
    With[{rowmax = 9}, Map[Length, NestList[MIUStepDW3, {"1"}, rowmax]]]
  • Python
    from itertools import islice
    def occurrence_swaps(w, s, t):
        out, oi = [], w.find(s)
        while oi != -1:
            out.append(w[:oi] + t + w[oi+len(s):])
            oi = w.find(s, oi+1)
        return out
    def moves(w): # moves for word w in MIU system, encoded as 310
        nxt = []
        if w[-1] == '1': nxt.append(w + '0')        # Rule 1
        if w[0] == '3': nxt.append(w + w[1:])       # Rule 2
        nxt.extend(occurrence_swaps(w, '111', '0')) # Rule 3
        nxt.extend(occurrence_swaps(w, '00', ''))   # Rule 4
        return nxt
    def agen(): # generator of terms
        frontier = {'31'}
        while len(frontier) > 0:
            yield len(frontier)
            reach1 = set(m for p in frontier for m in moves(p))
            frontier, reach1 = reach1, set()
    print(list(islice(agen(), 10))) # Michael S. Branicky, Jan 14 2024

Formula

a(n) <= A368947(n).

Extensions

a(10)-a(11) from Michael S. Branicky, Jan 14 2024

A368946 Irregular triangle read by rows: row n lists the strings of the MIU formal system at the n-th level of the tree generated by recursively applying the system rules, starting from the MI string (see comments and example).

Original entry on oeis.org

31, 310, 311, 31010, 3110, 31111, 310101010, 3110110, 311110, 311111111, 301, 310, 31010101010101010, 3110110110110, 31111011110, 3010, 3100, 3111111110, 31111111111111111, 3011111, 3101111, 3110111, 3111011, 3111101, 3111110, 3010, 30101, 31010
Offset: 0

Views

Author

Paolo Xausa, Jan 10 2024

Keywords

Comments

In the MIU formal system, invented by Douglas R. Hofstadter, we start with the string (axiom) MI and build new strings (theorems) by applying the following rules.
Rule 1: if a string ends with I, we can append U at the end.
Rule 2: if a string is of the form Mx, we can build the string Mxx.
Rule 3: if a string contains III, we can replace it with U.
Rule 4: if a string contains UU, we can remove it.
Hofstadter asks whether the string MU can be obtained by repeatedly applying the above rules and then proves it cannot.
At each recursion level, strings are obtained by applying the rules in order (1 to 4) to each string of the previous level. When the same rule can be applied more than once, it is first applied to the leftmost substring that can be affected.
Following the mapping adopted by Hofstadter himself (see Hofstadter (1979), p. 261), we can encode the characters M, I, and U with 3, 1, and 0, respectively.
See A368953 for a variant where, within a row, duplicates (if present) are removed and encoded strings are lexicographically ordered.
A369173 gives all of the derivable strings within the MIU system.

Examples

			After recursively applying the rules three times, we get the following tree (cf. Hofstadter (1979), page 40, Figure 11).
.
                           MI
  0 ---------------------- 31
                         /    \
                        1      2 <--- Rule applied
                       /        \
                     MIU        MII
  1 ---------------- 310        311
                    /          /   \
                   2          1     2
                  /          /       \
              MIUIU       MIIU      MIIII
  2 --------- 31010       3110      31111         Here rule 3 can
               /          /       / |   | \       be applied twice:
              2          2       1  2   3  3 <--- it is first applied
             /          /       /   |   |   \     to the leftmost
        MIUIUIUIU   MIIUIIU  MIIIIU |  MUI  MIU   III substring
  3 --- 310101010   3110110  311110 |  301  310
                                MIIIIIIII
                                311111111
.
By reading the tree from top to bottom, left to right, the triangle begins:
  [0] 31;
  [1] 310 311;
  [2] 31010 3110 31111;
  [3] 310101010 3110110 311110 311111111 301 310;
  [4] 31010101010101010 3110110110110 ... 3010 ... 3010 30101 31010;
  ...
Please note that some strings may be duplicated in different rows and within the same row: within the first four rows, the string MIU (310) is present in rows 1 and 3. In row 4, the string MUIU (3010) is present twice: it can be generated both by applying rule 3 to MIIIIU (311110) and by applying rule 1 to MUI (301). The initial string MI (31) first reappears in row 5.
		

References

  • Douglas R. Hofstadter, Gödel, Escher, Bach: an Eternal Golden Braid, Basic Books, 1979, pp. 33-41 and pp. 261-262.

Crossrefs

Cf. A331536, A368953 (variant).
Cf. A368947 (row lengths), A369172 (length of strings), A369173 (all MIU strings), A369206 (number of zeros), A369207 (number of ones), A369409.
Cf. A369586 (shortest proofs), A369408 (length of shortest proofs), A369587 (number of symbols of shortest proofs).

Programs

  • Mathematica
    MIUStepO[s_] := Flatten[Map[{If[StringEndsQ[#, "1"], # <> "0", Nothing], # <> StringDrop[#, 1], StringReplaceList[#, "111" -> "0"], StringReplaceList[#, "00" -> ""]}&, s]];
    With[{rowmax = 4}, Map[FromDigits, NestList[MIUStepO, {"31"}, rowmax], {2}]]
  • Python
    from itertools import islice
    def occurrence_swaps(w, s, t):
        out, oi = [], w.find(s)
        while oi != -1:
            out.append(w[:oi] + t + w[oi+len(s):])
            oi = w.find(s, oi+1)
        return out
    def moves(w): # moves for word w in MIU system, encoded as 310
        nxt = []
        if w[-1] == '1': nxt.append(w + '0')        # Rule 1
        if w[0] == '3': nxt.append(w + w[1:])       # Rule 2
        nxt.extend(occurrence_swaps(w, '111', '0')) # Rule 3
        nxt.extend(occurrence_swaps(w, '00', ''))   # Rule 4
        return nxt
    def agen(): # generator of terms
        frontier = ['31']
        while len(frontier) > 0:
            yield from [int(t) for t in frontier]
            reach1 = [m for p in frontier for m in moves(p)]
            frontier, reach1 = reach1, []
    print(list(islice(agen(), 28))) # Michael S. Branicky, Jan 14 2024

A331536 Number of theorems in the MIU formal system which can be proved in n steps or fewer starting with the axiom 'mi'.

Original entry on oeis.org

1, 3, 6, 11, 25, 69, 282, 1730, 15885, 210105, 3986987, 106053474
Offset: 1

Views

Author

Brian Tenneson, Jan 19 2020

Keywords

Comments

The MIU system was invented by Douglas Hofstadter and is found in his book Gödel, Escher, Bach.
In the MIU system words begin with the letter 'm' with the remaining letters being either 'u' or 'i'. Essentially, words can be represented by binary strings. It is given that 'mi' is a word. Thereafter, at each step words may be transformed by one of the following rules.
1) Append a 'u' to a word ending in 'i'.
2) Append a word to itself, excluding the initial 'm'.
3) Replace an occurrence of 'iii' by 'u'.
4) Remove an occurrence of 'uu'.

Examples

			The a(2) = 3 words that can be reached in at most one step are mi, miu, mii.
The a(3) = 6 words that can be reached in at most two steps are mi, miu, mii, miiii, miiu, miuiu.
		

Crossrefs

Cf. A368946, A368953, A369148, A369173 (all MIU strings).

Programs

  • Mathematica
    MIURules = {StartOfString ~~ x : _ ~~ "I" ~~ EndOfString :> x <> "IU", StartOfString ~~ "M" ~~ x : _ ~~ EndOfString :> "M" <> x <> x, "III" :> "U", "UU" :> ""}; (*The rules of the MIU formal system*)
    MIUNext[s_String, rule_Integer] :=StringReplaceList[s, MIURules[[rule]]]
    g[x_]:=DeleteDuplicates[Flatten[Join[{x},Table[Table[MIUNext[x[[j]],n], {n, 1, 4}],{j, 1,Length[x]}]]]]
    a[n_Integer]:=Nest[g, "MI", n] // Length (*a[n] gives the number of theorems that can be proved in  n steps or fewer.  A331536[n]=a[n]. Remove //Length if you wish to see the theorems being counted.*)
    (* Brian Tenneson, Sep 21 2023 *)
  • Python
    def occurrence_swaps(w, s, t):
      out, oi = [], w.find(s)
      while oi != -1:
        out.append(w[:oi] + t + w[oi+len(s):])
        oi = w.find(s, oi+1)
      return out
    def moves(w): # moves for word w in miu system
      nxt = [w + w] # Rule 2 ('m' not stored; else use nxt = [w + w[1:]])
      if w[-1] == 'i': nxt.append(w + 'u')       # Rule 1
      nxt.extend(occurrence_swaps(w, 'iii', 'u')) # Rule 3
      nxt.extend(occurrence_swaps(w, 'uu', ''))   # Rule 4
      return nxt
    def alst(maxd=float('inf'), v=False):
      alst, d = [], 0
      reached, frontier = {'i'}, {'i'} # don't store 'm's (else use 'mi' twice)
      alst.append(len(reached))
      if v: print(len(reached), end=", ")
      while len(frontier) > 0 and d < maxd:
        reach1 = set(m for p in frontier for m in moves(p) if m not in reached)
        if v: print(len(reached)+len(reach1), end=", ")
        alst.append(len(reached)+len(reach1))
        reached |= reach1
        frontier = reach1
        d += 1
      return alst
    alst(maxd=10, v=True) # Michael S. Branicky, Dec 29 2020

Extensions

a(11) from Rémy Sigrist, Feb 26 2020
a(12) from Sean A. Irvine, Mar 20 2020
Name edited by Brian Tenneson, Aug 19 2023
Showing 1-3 of 3 results.