Fractran: Difference between revisions
RobinCodes (talk | contribs) →Sequential programs: small grammar fix |
→Size 36: BMO1: added step counts |
||
| (119 intermediate revisions by 12 users not shown) | |||
| Line 1: | Line 1: | ||
'''Fractran''' (originally styled FRACTRAN) is an esoteric Turing complete model of computation invented by John Conway in 1987.<ref>Conway, John H. (1987). "FRACTRAN: A Simple Universal Programming Language for Arithmetic". ''Open Problems in Communication and Computation''. Springer-Verlag New York, Inc. pp. 4–26. <nowiki>http://doi.org/10.1007/978-1-4612-4808-8_2</nowiki></ref> In this model a program is simply a finite list of fractions (rational numbers), the program state is an integer. For more details see https://en.wikipedia.org/wiki/FRACTRAN | '''Fractran''' (originally styled FRACTRAN) is an esoteric [[Turing complete]] model of computation invented by John Conway in 1987.<ref>Conway, John H. (1987). "FRACTRAN: A Simple Universal Programming Language for Arithmetic". ''Open Problems in Communication and Computation''. Springer-Verlag New York, Inc. pp. 4–26. <nowiki>http://doi.org/10.1007/978-1-4612-4808-8_2</nowiki></ref> In this model a program is simply a finite list of fractions (rational numbers), the program state is an integer. For more details see https://en.wikipedia.org/wiki/FRACTRAN. | ||
'''BB_fractran'''(n) or '''BBf'''(n) is the Busy Beaver function for Fractran programs. | Discord user Coda came up with a way to transform any Fractran program into a Turing Machine, see [https://discord.com/channels/960643023006490684/1438019511155691521/1441844795613122560 source]. | ||
'''BB_fractran'''(n) or '''BBf'''(n) is the Busy Beaver function for Fractran programs. Holdouts lists by Daniel Yuan: [https://github.com/int-y1/BBFractran/blob/main/holdout/README.md Holdouts lists] | |||
== Definition == | == Definition == | ||
A | A Fractran program is a list of rational numbers <math>[q_0, q_1, \dots, q_{k-1}]</math> called rules and a Fractran state is an integer <math>s \in \mathbb{Z}</math>. The numerator and denominator of any rational number fraction do not share any prime factors (they are in reduced form). We say that a rule <math>q_i</math> applies to state <math>s</math> if <math>s \cdot q_i \in \mathbb{Z}</math>. If no rule applies, we say that the computation has halted otherwise we apply the first applicable rule at each step. In that case we say <math>s \to t</math> and <math>t = s \cdot q_i</math> and <math>i = \min \{ i : s \cdot q_i \in \mathbb{Z} \}</math>. As with [[Turing machines]], we will write <math>s \xrightarrow{N} t</math> if <math>s \to s_1 \to \cdots \to s_{N-1} \to t</math> (s goes to t after N steps) and <math>s \to^* t</math> or <math>s \to^+ t</math> if <math>s \xrightarrow{N} t</math> for some N≥0 or N≥1 (respectively). We say that a program has runtime N (or halts in N steps) starting in state s if <math>s \xrightarrow{N} t</math> and computation halts on t. | ||
Let <math>\Omega(n)</math> be the total number of prime factors of a positive integer n. In other words, <math>\Omega(2^{a_0} 3^{a_1} \cdots p_n^{a_n}) = \sum_{k=0}^n | Let <math>\Omega(n)</math> be the total number of prime factors of a positive integer n. In other words, <math>\Omega(2^{a_0} 3^{a_1} \cdots p_n^{a_n}) = \sum_{k=0}^n a_k</math>. Then given a rule <math>\frac{a}{b}</math> we say that <math>\text{size} \left( \frac{a}{b} \right) = \Omega(a) + \Omega(b)</math>. And the size of a Fractran program <math>[q_0, q_1, \dots, q_{k-1}]</math> is <math>k + \sum_{i=0}^{k-1} \text{size}(q_i)</math>. | ||
BB_fractran(n) or BBf(n) is the maximum runtime starting in state 2 for all halting | BB_fractran(n) or BBf(n) is the maximum runtime starting in state 2 for all halting Fractran programs of size n. It is a non-computable function akin to the [[Busy Beaver Functions]] since Fractran is Turing Complete. | ||
== Vector Representation == | == Vector Representation == | ||
| Line 15: | Line 17: | ||
Let the vector representation (for a sufficiently large n) for a state <math>a = 2^{a_0} 3^{a_1} \cdots p_{n-1}^{a_{n-1}}</math> be <math>v(a) = [ a_0, a_1, \dots, a_{n-1} ] \in \mathbb{N}^n</math> and the vector representation for a rule <math>\frac{a}{b}</math> be <math>v \left( \frac{a}{b} \right) = v(a) - v(b) \in \mathbb{Z}^n</math> (Note that this is just an extension of the original definition extended to allow negative <math>a_i</math>). | Let the vector representation (for a sufficiently large n) for a state <math>a = 2^{a_0} 3^{a_1} \cdots p_{n-1}^{a_{n-1}}</math> be <math>v(a) = [ a_0, a_1, \dots, a_{n-1} ] \in \mathbb{N}^n</math> and the vector representation for a rule <math>\frac{a}{b}</math> be <math>v \left( \frac{a}{b} \right) = v(a) - v(b) \in \mathbb{Z}^n</math> (Note that this is just an extension of the original definition extended to allow negative <math>a_i</math>). | ||
Now, rule q applies to state s iff <math>v(s) + v(q) \in \mathbb{N}^n</math> (all components of the vector are ≥0) and if <math>s \to t</math> then <math>v(t) = v(s) + v(q)</math>. So the | Now, rule q applies to state s iff <math>v(s) + v(q) \in \mathbb{N}^n</math> (all components of the vector are ≥0) and if <math>s \to t</math> then <math>v(t) = v(s) + v(q)</math>. So the Fractran multiplication model is completely equivalent to the vector adding model. For presentation, we will represent a Fractran program with a matrix where each row is the vector representation for a rule. | ||
For example, the BBf(15) champion (<code>[1/45, 4/5, 3/2, 25/3]</code>) in vector representation would be: | For example, the BBf(15) champion (<code>[1/45, 4/5, 3/2, 25/3]</code>) in vector representation would be: | ||
| Line 26: | Line 28: | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
In this representation, it becomes much easier to reason about | In this representation, it becomes much easier to reason about Fractran programs and describe general rules. It is also very easy to calculate the size of a rule or program in vector representation. It is the sum of absolute values of all elements in the matrix + number of rules (number of rows). | ||
=== Relationship to VAS / Petri Nets === | |||
Using vector representation, Fractran programs are a deterministic version of [[wikipedia:Vector_addition_system|Vector Addition Systems (VAS)]] (and, equivalently, [[wikipedia:Petri_net|Petri Nets]]). VAS are identical to Fractran programs in vector representation except that the rules are unordered and non-deterministic, they are used to model distributed systems where precise order of rule execution cannot be predicted. Interestingly, many problems about VAS are actually decidable, but their runtimes are extremely slow. Notably, the reachability problem (given states A and B are there a sequence of rules so that <math>A \to^* B</math>) is "Ackermann-complete" meaning that the optimal algorithm has worst-case runtime akin to the famously fast-growing Ackermann function.<ref>Czerwiński, Wojciech; Orlikowski, Łukasz (2021). ''Reachability in Vector Addition Systems is Ackermann-complete''. 2021 IEEE 62nd Annual Symposium on Foundations of Computer Science (FOCS). https://arxiv.org/abs/2104.13866.</ref> | |||
== Visualizing Fractran Programs' Space-Time Diagrams == | |||
Katelyn Doucette's Fractran space-time diagram visualizer produces the following space-time diagrams for some notable Fractran Programs, under the following principle: Each color represents a prime factor. Left -> right colors indicating the index of that register, and how wide the color is representing how big the value is at that step. Source code: https://github.com/Laturas/FractranVisualizer | |||
{| class="wikitable" | |||
|+ | |||
|[[File:Fractran_22_Cryptid.webp|alt=The space-time diagram of Fenrir|460x460px]] | |||
The space-time diagram of Fenrir | |||
|[[File:Hydra.webp|alt=The space-time diagram of Hydra.|460x460px]] | |||
The space-time diagram of Hydra. | |||
|[[File:Bbf21 champ full.png|alt=The space-time diagram of the BBf(21) champion.|400x400px]] | |||
The space-time diagram of the BBf(21) champion. The width & height of the diagram can be set in the visualizer. | |||
|[[File:Space_Needle.webp|alt=The space-time diagram of Space Needle.|460x460px]] | |||
The space-time diagram of Space Needle. | |||
|} | |||
== Deciders == | |||
[[File:Fractran deciders.png|alt=Fractran deciders|thumb|All Fractran deciders summarized and their relations, shared by Daniel Yuan on [https://discord.com/channels/960643023006490684/1438019511155691521/1439001835904958655 14 Nov 2025]]]Many specialized deciders have been invented to prove Fractran programs non-halting. See image at right. There are three extra deciders: [https://discord.com/channels/960643023006490684/1438019511155691521/1449775657554022531 Spanning Vectors Masked,] which should be very effective, but implementing it is in-progress, a version of Spanning Vectors Masked - [https://discord.com/channels/960643023006490684/1438019511155691521/1453217977385091092 Masked Linear Invariant] - which is very powerful, and some holdouts were removed by [[User:Sligocki|Shawn Ligocki]] with [https://lsv.ens-paris-saclay.fr/Software/fast/ FAST] (Fast Acceleration of Symbolic Transition systems), a pre-existing general tool. | |||
-d released a new decider on 25 Jan 2026: [https://discord.com/channels/960643023006490684/1438019511155691521/1464873923647639703 Beeping Permutation]. | |||
TODO: create pages about the deciders. | |||
== Champions == | == Champions == | ||
The table of champions is split into two pieces: the first for small champions (up to BBf(14)) which all share the same relatively simple behavior (sequential programs) is collapsed by default; the second for champions BBf(15) and beyond which have more complex and varied behavior. | |||
All small champions as well as the first few larger ones were discovered and proven maximal by Jason Yuen (@-d) in their initial enumeration on [https://discord.com/channels/960643023006490684/1362008236118511758/1434033599094587595 1 Nov 2025]. | |||
BBf(21) and below are solved. BBf(22) is the smallest domain to contain a Cryptid, and all other machines for BBf(22) are solved. | |||
<div class="toccolours mw-collapsible mw-collapsed">'''Small Champions'''<div class="mw-collapsible-content"> | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| Line 114: | Line 147: | ||
0 & 0 & -1 | 0 & 0 & -1 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|} | |||
</div></div> | |||
{| class="wikitable" | |||
|+ | |||
!n | |||
!BBf(n) | |||
!Example Champion | |||
!Vector Representation | |||
!Champion Found | |||
!Holdouts Proven | |||
|- | |- | ||
| 15 || 28 || <code>[1/45, 4/5, 3/2, 25/3]</code> | | 15 || 28 || <code>[1/45, 4/5, 3/2, 25/3]</code> | ||
| Line 122: | Line 166: | ||
0 & -1 & 2 | 0 & -1 & 2 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1434033599094587595 1 Nov 2025] | |||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1434033599094587595 1 Nov 2025] | |||
|- | |- | ||
| 16 || 53 || <code>[1/45, 4/5, 3/2, 125/3]</code> | | 16 || 53 || <code>[1/45, 4/5, 3/2, 125/3]</code> | ||
| Line 130: | Line 176: | ||
0 & -1 & 3 | 0 & -1 & 3 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1434033599094587595 1 Nov 2025] | |||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1434033599094587595 1 Nov 2025] | |||
|- | |- | ||
| 17 || 107 || <code>[5/6, 49/2, 3/5, 40/7]</code> | | 17 || 107 || <code>[5/6, 49/2, 3/5, 40/7]</code> | ||
| Line 138: | Line 186: | ||
3 & 0 & 1 & -1 | 3 & 0 & 1 & -1 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1434313398799175710 1 Nov 2025] | |||
|Daniel Yuan (@dyuan01) [https://discord.com/channels/960643023006490684/1362008236118511758/1434771877376557086 3 Nov 2025] | |||
|- | |- | ||
| 18 || 211 || <code>[5/6, 49/2, 3/5, 80/7]</code> | | 18 || 211 || <code>[5/6, 49/2, 3/5, 80/7]</code> | ||
| Line 146: | Line 196: | ||
4 & 0 & 1 & -1 | 4 & 0 & 1 & -1 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1435313806493614131 4 Nov 2025] | |||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1362008236118511758/1436661215911870584 8 Nov 2025] | |||
|- | |- | ||
| 19 || | | 19 || 370 || <code>[5/6, 49/2, 3/5, 160/7]</code> | ||
|<math>\begin{bmatrix} | |<math>\begin{bmatrix} | ||
-1 & -1 & 1 & 0 \\ | -1 & -1 & 1 & 0 \\ | ||
| Line 154: | Line 206: | ||
5 & 0 & 1 & -1 | 5 & 0 & 1 & -1 | ||
\end{bmatrix}</math> | \end{bmatrix}</math> | ||
|@creeperman7002 [https://discord.com/channels/960643023006490684/1362008236118511758/1435763150489387090 5 Nov 2025] | |||
|Decider: Daniel Yuan (@dyuan01) [https://discord.com/channels/960643023006490684/1438019511155691521/1438558242388312165 13 Nov 2025] | |||
3 Holdouts: Racheline & Shawn Ligocki | |||
|- | |||
|20 | |||
|746 | |||
|<code>[7/15, 22/3, 6/77, 5/2, 9/5]</code> | |||
|<math>\begin{bmatrix} | |||
0 & -1 & -1 & 1 & 0 \\ | |||
1 & -1 & 0 & 0 & 1 \\ | |||
1 & 1 & 0 & -1 & -1 \\ | |||
-1 & 0 & 1 & 0 & 0 \\ | |||
0 & 2 & -1 & 0 & 0 | |||
\end{bmatrix}</math> | |||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1438019511155691521/1438480761169776733 13 Nov 2025] | |||
|Decider: Jason Yuen (@-d) | |||
([https://github.com/int-y1/BBFractran/tree/main/holdout Enum+initial]) | |||
Daniel Yuan (@dyuan01) [https://discord.com/channels/960643023006490684/1438019511155691521/1438559507579011194 13] and [https://discord.com/channels/960643023006490684/1438019511155691521/1438996636389998773 14 Nov 2025] | |||
Shawn Ligocki (@sligocki) [https://discord.com/channels/960643023006490684/1438019511155691521/1447069110541484146 7] and [https://discord.com/channels/960643023006490684/1438019511155691521/1453213088630444168 24 Dec 2025] | |||
6 Holdouts: Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1438019511155691521/1452913055053778945 23 Dec 2025] | |||
|- | |||
|21 | |||
|31,957,632 | |||
|<code>[7/15, 4/3, 27/14, 5/2, 9/5]</code> | |||
|<math>\begin{bmatrix} | |||
0 & -1 & -1 & 1 \\ | |||
2 & -1 & 0 & 0 \\ | |||
-1 & 3 & 0 & -1 \\ | |||
-1 & 0 & 1 & 0 \\ | |||
0 & 2 & -1 & 0 | |||
\end{bmatrix}</math> | |||
|Jason Yuen (@-d) [https://discord.com/channels/960643023006490684/1438019511155691521/1439759182587891894 16 Nov 2025] | |||
|No holdouts remain. Claude Opus 4.6's proof of nonhalting of all the 140 holdouts: [https://discord.com/channels/960643023006490684/1438019511155691521/1485168251997786173 28 March 2026] | |||
|- | |||
|22 | |||
|<math>> 1.146 \times 10^{62}</math> | |||
|<code>[1/12, 9/10, 14/3, 11/2, 5/7, 3/11]</code> | |||
|<math>\begin{bmatrix} | |||
-2 & -1 & 0 & 0 & 0 \\ | |||
-1 & 2 & -1 & 0 & 0 \\ | |||
1 & -1 & 0 & 1 & 0 \\ | |||
-1 & 0 & 0 & 0 & 1 \\ | |||
0 & 0 & 1 & -1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math> | |||
|Shawn Ligocki (@sligocki) [https://discord.com/channels/960643023006490684/1438019511155691521/1448912286713384961 11 Dec 2025] and Jason Yuen (@-d)<sup>[https://discord.com/channels/960643023006490684/1438019511155691521/1448953682237460480 <nowiki>[1]</nowiki>]</sup> | |||
|3 holdouts remain. Claude Opus 4.6 gave a proof of all machines but the 3 Fenrir Cryptids, see [https://discord.com/channels/960643023006490684/1438019511155691521/1493027835559022824 Discord]. | |||
The holdouts list whose elements are exactly the 3 Fenrir Cryptids on GitHub: [https://github.com/int-y1/BBFractran/blob/main/holdout/sz22_3.txt sz22_3.txt] | |||
Known [[Cryptid|Cryptids]]: | |||
# Fenrir | |||
|- | |||
|23 | |||
|<math>> 4.393 \times 10^{124}</math> | |||
|<code>[10/3, 9/14, 5/4, 121/2, 7/5, 3/11]</code> | |||
|<math>\begin{bmatrix} | |||
1 & -1 & 1 & 0 & 0 \\ | |||
-1 & 2 & 0 & -1 & 0 \\ | |||
-2 & 0 & 1 & 0 & 0 \\ | |||
-1 & 0 & 0 & 0 & 2 \\ | |||
0 & 0 & -1 & 1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math> | |||
|Shawn Ligocki (@sligocki) [https://discord.com/channels/960643023006490684/1438019511155691521/1510781736374763702 1 Jun 2026] | |||
|21,295 holdouts remain. [https://discord.com/channels/960643023006490684/1438019511155691521/1511579969825013811 2 Jun 2026] | |||
By August 5th, 2026, the unofficial holdouts count had been reduced to 13. [https://github.com/int-y1/BBFractran/blob/main/holdout/sz23_13_unofficial.txt sz23_13_unofficial.txt] | |||
Known [[Cryptid|Cryptids]]: | |||
# 11 Hydra-like Cryptids (including Frankenstein's Monster and Antihydra-like Cryptid) | |||
|- | |||
|24 | |||
|<math>> 9.263 \times 10^{9595}</math> | |||
|<code>[18/35, 1/10, 11/5, 75/2, 49/3, 5/11]</code> | |||
|<math>\begin{bmatrix} | |||
1 & 2 & -1 & -1 & 0 \\ | |||
-1 & 0 & -1 & 0 & 0 \\ | |||
0 & 0 & -1 & 0 & 1 \\ | |||
-1 & 1 & 2 & 0 & 0 \\ | |||
0 & -1 & 0 & 2 & 0 \\ | |||
0 & 0 & 1 & 0 & -1 | |||
\end{bmatrix}</math> | |||
|Shawn Ligocki (@sligocki) [https://discord.com/channels/960643023006490684/1438019511155691521/1540835921182728272 22 Aug 2026] | |||
|No holdouts list yet. | |||
An informal list from a 20%-complete enumeration: [https://discord.com/channels/960643023006490684/1438019511155691521/1540831684071530637 22 Aug 2026] | |||
|} | |} | ||
| Line 159: | Line 298: | ||
==== Sequential programs ==== | ==== Sequential programs ==== | ||
All champions up to BBf(14) have very simple behavior. They are all of the form: <math>\left[ \frac{3^{a_1}}{2}, \frac{5^{a_2}}{3}, | All champions up to BBf(14) have very simple behavior. They are all of the form: <math>\left[ \frac{3^{a_1}}{2}, \frac{5^{a_2}}{3}, \dots, \frac{p_n^{a_k}}{p_{k-1}}, \frac{1}{p_k} \right]</math> or in vector representation (limited to k=4): | ||
<math display="block">\begin{bmatrix} | <math display="block">\begin{bmatrix} | ||
| Line 170: | Line 309: | ||
These champions repeatedly apply the rules in sequence, never going back to a previous rule. They apply the first rule until they've exhausted all 2s, then the second rule until they've exhausted all 3s, etc. They have a runtime of <math>1 + a_1 + a_1 a_2 + a_1 a_2 a_3 + \cdots = \sum_{i=0}^k \prod_{j=1}^i a_j</math> and size <math>2k+2 + \sum_{i=1}^k a_i</math>. This grows linearly for k=1 (BBf(5) to BBf(10)) and quadratically for k=2 (BBf(11) to BBf(14)). Letting k grow with the size, the maximum runtime grows exponentially in the program size. | These champions repeatedly apply the rules in sequence, never going back to a previous rule. They apply the first rule until they've exhausted all 2s, then the second rule until they've exhausted all 3s, etc. They have a runtime of <math>1 + a_1 + a_1 a_2 + a_1 a_2 a_3 + \cdots = \sum_{i=0}^k \prod_{j=1}^i a_j</math> and size <math>2k+2 + \sum_{i=1}^k a_i</math>. This grows linearly for k=1 (BBf(5) to BBf(10)) and quadratically for k=2 (BBf(11) to BBf(14)). Letting k grow with the size, the maximum runtime grows exponentially in the program size. | ||
==== BBf(15) Family ==== | |||
The BBf(15) and BBf(16) champions are members of a family of programs (parameterized by <math>n \ge 1</math>): | |||
<math display="block">\begin{bmatrix} | |||
0 & -2 & -1 \\ | |||
2 & 0 & -1 \\ | |||
-1 & 1 & 0 \\ | |||
0 & -1 & n | |||
\end{bmatrix}</math> | |||
Let a = 2, b = 3, and c = 5. | |||
The BBf(15) champion (n = 2) implements this iteration: | |||
<math display="block">\begin{array}{lcl} | |||
b^0 & \xrightarrow{0} & \text{halt} \\ | |||
b^1 & \xrightarrow{7} & b^4 \\ | |||
b^2 & \xrightarrow{7} & b^5 \\ | |||
b^3 & \xrightarrow{5} & b^2 \\ | |||
b^4 & \xrightarrow{5} & b^3 \\ | |||
b^{k+5} & \xrightarrow{3} & b^k \\ | |||
\end{array}</math> | |||
which follows a permutation-like trajectory: <math>a \xrightarrow{1} b^1 \to b^4 \to b^3 \to b^2 \to b^5 \to b^0 \to \text{halt}</math> | |||
The BBf(16) champion (n = 3) implements this iteration: | |||
<math display="block">\begin{array}{lcl} | |||
b^0 & \xrightarrow{0} & \text{halt} \\ | |||
b^1 & \xrightarrow{10} & b^6 \\ | |||
b^2 & \xrightarrow{10} & b^7 \\ | |||
b^3 & \xrightarrow{8} & b^4 \\ | |||
b^4 & \xrightarrow{8} & b^5 \\ | |||
b^5 & \xrightarrow{6} & b^2 \\ | |||
b^6 & \xrightarrow{6} & b^3 \\ | |||
b^{k+7} & \xrightarrow{4} & b^k \\ | |||
\end{array}</math> | |||
which follows a permutation-like trajectory: <math>a \xrightarrow{1} b^1 \to b^6 \to b^3 \to b^4 \to b^5 \to b^2 \to b^7 \to b^0 \to \text{halt}</math> | |||
==== BBf(17) Family ==== | ==== BBf(17) Family ==== | ||
| Line 205: | Line 384: | ||
|51 | |51 | ||
|- | |- | ||
|17 | |'''''17''''' | ||
|2 | |'''''2''''' | ||
|3 | |'''''3''''' | ||
|107 | |'''''107''''' | ||
|- | |- | ||
|18 | |'''''18''''' | ||
|2 | |'''''2''''' | ||
|4 | |'''''4''''' | ||
|211 | |'''''211''''' | ||
|- | |- | ||
|19 | |'''''19''''' | ||
|2 | |'''''2''''' | ||
|5 | |'''''5''''' | ||
|370 | |'''''370''''' | ||
|- | |- | ||
|20 | |20 | ||
| Line 230: | Line 409: | ||
|904 | |904 | ||
|} | |} | ||
<br> | |||
==== BBf(20) ==== | |||
[[File:Screenshot 2026-04-01 104704.png|alt=Full space-time diagram of the BBf(20) champion.|left|507x507px]] | |||
The BBf(20) champion (running 746 steps): | |||
<math display="block">\begin{bmatrix} | |||
0 & -1 & -1 & 1 & 0 \\ | |||
1 & -1 & 0 & 0 & 1 \\ | |||
1 & 1 & 0 & -1 & -1 \\ | |||
-1 & 0 & 1 & 0 & 0 \\ | |||
0 & 2 & -1 & 0 & 0 | |||
\end{bmatrix}</math> | |||
This program implements a [[Collatz-like]] iteration. Let <math>C(n) = [0, 0, n, 2, 0]</math>, then: | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,0,0,0] & \xrightarrow{49} & C(2) \\ | |||
C(3k) & \xrightarrow{3k} & \text{halt} \\ | |||
C(3k+1) & \xrightarrow{11k+22} & C(4k+3) \\ | |||
C(3k+2) & \xrightarrow{11k+22} & C(4k+4) \\ | |||
\end{array}</math> | |||
which follows the reasonably "lucky" trajectory: | |||
<math display="block">C(2) \to C(4) \to C(7) \to C(11) \to C(16) \to C(23) \to C(32) \to C(44) \to C(60) \to \text{halt}</math> | |||
==== BBf(21) ==== | |||
[[File:Bbf21 champ full.png|alt=The full space-time diagram of the BBf(21) champion until halting.|thumb|The full space-time diagram of the BBf(21) champion until halting.]] | |||
The BBf(21) champion (running >31M steps): | |||
<math display="block">\begin{bmatrix} | |||
0 & -1 & -1 & 1 \\ | |||
2 & -1 & 0 & 0 \\ | |||
-1 & 3 & 0 & -1 \\ | |||
-1 & 0 & 1 & 0 \\ | |||
0 & 2 & -1 & 0 | |||
\end{bmatrix}</math> | |||
This program implements a Collatz-like iteration. Let <math>D(n) = [0, 0, n, 0]</math>, then:<sup>[https://discord.com/channels/960643023006490684/1438019511155691521/1439779341365022852]</sup> | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,0,0,0] & \xrightarrow{1} & D(1) \\ | |||
D(3k) & \xrightarrow{k} & \text{halt} \\ | |||
D(3k+1) & \xrightarrow{21k+7} & C(10k+4) \\ | |||
D(3k+2) & \xrightarrow{21k+14} & C(10k+7) \\ | |||
\end{array}</math> | |||
which follows the reasonably "lucky" trajectory: | |||
<math display="block">\begin{array}{ll} | |||
D(1) & \to D(4) \to D(14) \to D(47) \to D(157) \to D(524) \to D(1747) \to D(5824) \to D(19414) \\ | |||
& \to D(64714) \to D(215714) \to D(719047) \to D(2396824) \to D(7989414) \to \text{halt} \\ | |||
\end{array}</math> | |||
==== BBf(22) ==== | |||
The BBf(22) champion (running <math>> 10^{62}</math> steps): | |||
<math display="block">\begin{bmatrix} | |||
-2 & -1 & 0 & 0 & 0 \\ | |||
-1 & 2 & -1 & 0 & 0 \\ | |||
1 & -1 & 0 & 1 & 0 \\ | |||
-1 & 0 & 0 & 0 & 1 \\ | |||
0 & 0 & 1 & -1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math> | |||
This program implements a [[Collatz-like]] unbiased pseudo-random walk. Let <math>S(x,y) = [0, 0, x, 0, y]</math>, then:<sup>[https://discord.com/channels/960643023006490684/1438019511155691521/1449118888142049421]</sup> | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,0,0,0] & \xrightarrow{1} & S(0,1) \\ | |||
S(x, 0) & = & \text{halt} \\ | |||
S(3k, y+1) & \xrightarrow{14k+4} & S(5k+1, y+1) \\ | |||
S(3k+1, y+1) & \xrightarrow{14k+10} & S(5k+3, y+2) \\ | |||
S(3k+2, y+1) & \xrightarrow{14k+12} & S(5k+4, y) \\ | |||
\end{array}</math> | |||
This pseudo-random walk iterates 275 times until it halts reaching a maximum y value of 14 at iteration 111: | |||
<math display="block">\begin{array}{ll} | |||
S(0,1) & \to S(1,1) \to S(3,2) \to S(6,2) \to S(11, 2) \to S(19, 1) \to S(33, 2) \to S(56, 2) \to S(94, 1) \\ | |||
& \to S(158, 2) \to S(264, 1) \to S(441, 1) \to S(736, 1) \to S(1228, 2) \to S(2048, 3) \\ | |||
& \vdots \\ | |||
& \to S(4065328691604230522442358, 13) \\ | |||
& \to S(6775547819340384204070598, 14) \\ | |||
& \to S(11292579698900640340117664, 13) \\ | |||
& \vdots \\ | |||
& \to S(27930059557111373800280446055462487109112535227834136644, 2) \\ | |||
& \to S(46550099261852289667134076759104145181854225379723561074, 1) \\ | |||
& \to S(77583498769753816111890127931840241969757042299539268458, 2) \\ | |||
& \to S(129305831282923026853150213219733736616261737165898780764, 1) \\ | |||
& \to S(215509718804871711421917022032889561027102895276497967941, 1) \\ | |||
& \to S(359182864674786185703195036721482601711838158794163279903, 2) \\ | |||
& \vdots \\ | |||
& \to S(5894430516013404355095519889620117404469367857588232386361874, 2) \\ | |||
& \to S(9824050860022340591825866482700195674115613095980387310603124, 1) \\ | |||
& \to S(16373418100037234319709777471166992790192688493300645517671874, 0) | |||
\end{array}</math> | |||
If it were a truly random walk, there would be a 5.9% chance that it takes at least 275 steps to reach 0. So this program is mildly lucky. | |||
==== BBf(23) ==== | |||
The BBf(23) champion | |||
<math>\begin{bmatrix} | |||
1 & -1 & 1 & 0 & 0 \\ | |||
-1 & 2 & 0 & -1 & 0 \\ | |||
-2 & 0 & 1 & 0 & 0 \\ | |||
-1 & 0 & 0 & 0 & 2 \\ | |||
0 & 0 & -1 & 1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math> follows an unbiased [[Collatz-like]] pseudo-random walk: | |||
let <math>A(x,y)=[0,0,0,x,y]</math> | |||
<math>[1,0,0,0,0] \to A(0,2)</math> | |||
<math>A(2x,y) \xrightarrow{12x+4} A(5x+1,y+1)</math> if y>0 | |||
<math>A(2x+1,y) \xrightarrow{12x+10} A(5x+4,y-1)</math> if y>0 | |||
<math>A(x,0) \to halt</math> | |||
<math>A(0,2) \to A(1,3) \to A(4,2) \to A(11,3) \to A(29,2) \to A(74,1) \to A(186,2) \to A(466,3) \to A(1166,4) \to A(2916,5) \to A(7291,6) \to \dots</math> | |||
==== BBf(24) ==== | |||
The BBf(24) champion | |||
<math>\begin{bmatrix} | |||
1 & 2 & -1 & -1 & 0 \\ | |||
-1 & 0 & -1 & 0 & 0 \\ | |||
0 & 0 & -1 & 0 & 1 \\ | |||
-1 & 1 & 2 & 0 & 0 \\ | |||
0 & -1 & 0 & 2 & 0 \\ | |||
0 & 0 & 1 & 0 & -1 | |||
\end{bmatrix}</math> follows an unbiased [[Collatz-like]] pseudo-random walk: let <math>A(x,y) = [0,x,0,0,y]</math> | |||
<math>[1,0,0,0,0] \xrightarrow{3} A(1,2)</math> | |||
<math>A(x,0) \xrightarrow{x} halt</math> | |||
<math>A(3x,y) \xrightarrow{15x+2} A(16x,y)</math> if y>0 | |||
<math>A(3x+1,y) \xrightarrow{15x+6} A(16x+5,y-1)</math> if y>0 | |||
<math>A(3x+2,y) \xrightarrow{15x+13} A(16x+11,y+1)</math> if y>0 | |||
<math>A(1,2) \to A(5,1) \to A(27,2) \to A(144,2) \to A(768,2) \to A(4096,2) \to A(21845,1) \to A(116507,2) \to A(621371,3) \to \dots</math> | |||
== Cryptids == | == Cryptids == | ||
=== Size 22: Fenrir === | |||
[[File:Fractran 22 Cryptid.webp|alt=The space-time diagram of Fenrir.|thumb|Partial space-time diagram of Fenrir.]] | |||
"Fenrir" is a family of 3 size 22 [[Cryptids]] discovered by Jason Yuen (@-d) and Claude Opus 4.6 on 22 Mar 2026. Out of 2003 holdouts of size 22, Claude Opus 4.6 used Lean to prove that 1997 holdouts were non-halting and 3 holdouts were halting; the remaining 3 holdouts are the Fenrir family.<sup>[https://discord.com/channels/960643023006490684/1438019511155691521/1485415054475268179]</sup> Discord user @ZTS439 shared [https://discord.com/channels/960643023006490684/1438019511155691521/1487251919444508723 some analysis] and a [https://discord.com/channels/960643023006490684/1438019511155691521/1487252789158613002 Python program] for it. Its name comes from [[wikipedia:Norse_mythology|Nordic mythology]]; [[wikipedia:Fenrir|Fenrir]] is the wolf that helps destroy the world during [[wikipedia:Ragnarök|Ragnarök]]. | |||
{| class="wikitable" | |||
|+ | |||
!Holdout number | |||
!Holdout | |||
!Vector Representation | |||
|- | |||
| 29/2003 | |||
| <code>[1/15, 27/77, 49/3, 10/49, 33/2]</code> | |||
|<math>\begin{bmatrix} | |||
0 & -1 & -1 & 0 & 0 \\ | |||
0 & 3 & 0 & -1 & -1 \\ | |||
0 & -1 & 0 & 2 & 0 \\ | |||
1 & 0 & 1 & -2 & 0 \\ | |||
-1 & 1 & 0 & 0 & 1 | |||
\end{bmatrix}</math> | |||
|- | |||
| 41/2003 | |||
| <code>[1/15, 49/3, 27/77, 10/49, 33/2]</code> | |||
|<math>\begin{bmatrix} | |||
0 & -1 & -1 & 0 & 0 \\ | |||
0 & -1 & 0 & 2 & 0 \\ | |||
0 & 3 & 0 & -1 & -1 \\ | |||
1 & 0 & 1 & -2 & 0 \\ | |||
-1 & 1 & 0 & 0 & 1 | |||
\end{bmatrix}</math> | |||
|- | |||
| 430/2003 | |||
| <code>[27/35, 1/33, 25/3, 22/25, 21/2]</code> | |||
|<math>\begin{bmatrix} | |||
0 & 3 & -1 & -1 & 0 \\ | |||
0 & -1 & 0 & 0 & -1 \\ | |||
0 & -1 & 2 & 0 & 0 \\ | |||
1 & 0 & -2 & 0 & 1 \\ | |||
-1 & 1 & 0 & 1 & 0 | |||
\end{bmatrix}</math> | |||
|} | |||
All 3 holdouts follow a biased random walk that somewhat resembles [[Hydra]]. Let <math>S(x,y) = [x, 0, 0, 2, y]</math> (for 29/2003 and 41/2003) or <math>S(x,y) = [x, 0, 2, y, 0]</math> (for 430/2003), then: | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,0,0,0] & \to & S(0,1) \\ | |||
S(0, 2y) & = & \text{halt} \\ | |||
S(x, 2y) & \to & S(x-1, 5y+2) \\ | |||
S(x, 2y+1) & \to & S(x+2, 5y) | |||
\end{array}</math> | |||
The first few visited states are $$S(0, 1) \to S(2, 0) \to S(1, 2) \to S(0, 7) \to S(2, 15) \to S(4, 35)$$ | |||
=== Size 23: 11 Hydra-like Cryptids === | |||
Define <math>Hydra(r_\mathrm{num}, r_\mathrm{den}, x_\mathrm{offset}, y_\mathrm{offset}, (x_\mathrm{init}, y_\mathrm{init}))</math> to be the problem as follows: | |||
# The initial state is <math>(x_\mathrm{init}, y_\mathrm{init})</math>. | |||
# The iteration <math>(x, y) \mapsto (r_\mathrm{num} \times \lfloor x/r_\mathrm{den} \rfloor + x_\mathrm{offset}[x \bmod r_\mathrm{den}], y + y_\mathrm{offset}[x \bmod r_{den}])</math> is repeated. Here, <math>x_\mathrm{offset}, y_\mathrm{offset}</math> are 0-indexed. | |||
# Are all the values of y non-negative? | |||
Furthermore, the Hydra-like problem is considered a [[Cryptids|Cryptid]] if it also satisfies: | |||
# <math>y_\mathrm{offset}</math> contains a negative number, and the average is positive. | |||
# <math>x \bmod r_\mathrm{den}</math> is a pseudorandom sequence. | |||
#There are no negative values of <math>y</math> early on. | |||
For example, Fenrir is non-halting if and only if Hydra(5, 2, [2, 0], [-1, 2], (1, 0)). In this Hydra problem, the first few visited states are <math>(1, 0) \to (0, 2) \to (2, 1) \to (7, 0) \to (15, 2) \to (35, 4)</math>. | |||
There are 11 Hydra-like Cryptids of size exactly 23, listed in the table below. All 11 Cryptids are not correlated with each other. Fenrir is included in the table as a reference. | |||
{| class="wikitable sortable" | |||
|+ | |||
!Domain: Holdout Number | |||
!Holdout | |||
!Hydra problem | |||
!Notes | |||
|- | |||
|BBf(23): #11/694 | |||
|<code>[1/135, 25/21, 33/5, 2/3, 7/11, 5/2]</code> | |||
|Hydra(7, 4, [1, 3, 5, 6], [0, 1, 2, -1], (1, 0)) | |||
| | |||
|- | |||
|BBf(22): #29/2003 | |||
|<code>[1/15, 27/77, 49/3, 10/49, 33/2]</code> | |||
|Hydra(5, 2, [2, 0], [-1, 2], (1, 0)) | |||
|Fenrir | |||
|- | |||
|BBf(23): #26/694 | |||
|<code>[1/15, 49/3, 81/77, 10/49, 33/2]</code> | |||
|Hydra(7, 2, [-1, 8], [3, -1], (1, 2)) | |||
| | |||
|- | |||
|BBf(23): #47/694 | |||
|<code>[1/18, 4/15, 21/2, 121/3, 5/7, 2/11]</code> | |||
|Hydra(5, 3, [1, 3, 4], [1, 3, -1], (1, 1)) | |||
|If #47 doesn't halt then Frankenstein's Monster doesn't halt | |||
|- | |||
|BBf(23): #77/694 | |||
|<code>[1/54, 4/15, 21/2, 11/3, 5/7, 3/11]</code> | |||
|Hydra(7, 4, [0, 2, 4, 5], [0, 1, 2, -1], (1, 0)) | |||
|Same ratio 7/4 as #11 | |||
|- | |||
|BBf(23): #151/694 | |||
|<code>[14/15, 1/12, 11/3, 63/2, 5/7, 2/11]</code> | |||
|Hydra(8, 5, [1, 2, 4, 6, 7], [2, -1, 1, 3, 0], (0, 1)) | |||
| | |||
|- | |||
|BBf(23): #159/694 | |||
|<code>[14/15, 1/6, 121/3, 63/2, 5/7, 2/11]</code> | |||
|Hydra(5, 3, [1, 2, 4], [3, -1, 1], (1, 3)) | |||
|Same ratio 5/3 as #47 | |||
|- | |||
|BBf(23): #207/694 | |||
|<code>[2/15, 1/12, 441/2, 11/3, 5/7, 2/11]</code> | |||
|Hydra(6, 5, [1, 3, 3, 5, 5], [1, 3, 0, 2, -1], (1, 1)) | |||
| | |||
|- | |||
|BBf(23): #218/694 | |||
|<code>[2/15, 1/6, 441/2, 121/3, 5/7, 2/11]</code> | |||
|Hydra(4, 3, [1, 2, 3], [3, 1, -1], (1, 3)) | |||
| | |||
|- | |||
|BBf(23): #317/694 | |||
|<code>[4/15, 1/18, 63/2, 11/3, 5/7, 2/11]</code> | |||
|Hydra(5, 4, [1, 2, 3, 5], [1, 0, -1, 2], (1, 1)) | |||
| | |||
|- | |||
|BBf(23): #319/694 | |||
|<code>[4/15, 1/24, 21/2, 11/3, 5/7, 3/11]</code> | |||
|Hydra(5, 4, [0, 2, 4, 3], [0, 1, 2, -1], (1, 0)) | |||
|Same ratio 5/4 as #317 | |||
|- | |||
|BBf(23): #323/694 | |||
|<code>[4/15, 1/6, 21/2, 1331/3, 5/7, 2/11]</code> | |||
|Hydra(3, 2, [1, 2], [2, -1], (1, 2)) | |||
|If #323 doesn't halt then Antihydra-like Cryptid doesn't halt | |||
|} | |||
As of August 2026, the 13 unofficial holdouts are as follows: Fenrir, 11 Hydra-like Cryptids of size 23, and #601 <code>[9/10, 1/42, 22/3, 49/2, 5/11, 3/7]</code>. | |||
==== Frankenstein's Monster ==== | |||
[[File:Frankenstein's Monster.webp|alt=Partial space-time diagram of Frankenstein's Monster.|thumb|Partial space-time diagram of Frankenstein's Monster.]] | |||
"Frankenstein's Monster" is a size 23 [[Cryptid]]. It was created by tweaking a single instruction in the size 22 champion. This tweak switches it from a unbiased random walk to a biased one and thus makes halting probviously impossible. It is called Frankenstein's Monster since it was found by a combination of exhaustive search and hand design.<sup>[https://discord.com/channels/960643023006490684/1438019511155691521/1449138938215141478]</sup> | |||
<code>[1/12, 9/10, 14/3, 121/2, 5/7, 3/11]</code> <math display="block">\begin{bmatrix} | |||
-2 & -1 & 0 & 0 & 0 \\ | |||
-1 & 2 & -1 & 0 & 0 \\ | |||
1 & -1 & 0 & 1 & 0 \\ | |||
-1 & 0 & 0 & 0 & 2 \\ | |||
0 & 0 & 1 & -1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math> | |||
Its behavior is extremely similar to the size 22 champion. Let <math>S(x,y) = [0, 0, x, 0, y]</math>, then: | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,0,0,0] & \xrightarrow{1} & S(0,2) \\ | |||
S(x, 0) & = & \text{halt} \\ | |||
S(3k, y+1) & \xrightarrow{14k+4} & S(5k+1, y+2) \\ | |||
S(3k+1, y+1) & \xrightarrow{14k+10} & S(5k+3, y+4) \\ | |||
S(3k+2, y+1) & \xrightarrow{14k+12} & S(5k+4, y) | |||
\end{array}</math> | |||
with the only difference that the <math>y</math> values now change by <math>\{+1,+3,-1\}</math> depending on the value of <math>x\bmod 3</math> (instead of <math>\{0,+1,-1\}</math> in the original size 22 program). The <math>x</math> values follow the exact same path as in the original size 22 champion, but the y values quickly grow linearly with the number of iterations (as expected by the random model): | |||
0: S(0, 1) @ 1 (0.00s) | |||
100_000: S(10^22_185, 100171) @ 10^22_186 (0.87s) | |||
200_000: S(10^44_370, 200187) @ 10^44_371 (3.42s) | |||
300_000: S(10^66_555, 300759) @ 10^66_556 (7.68s) | |||
400_000: S(10^88_740, 400451) @ 10^88_741 (13.64s) | |||
500_000: S(10^110_925, 500421) @ 10^110_925 (21.28s) | |||
600_000: S(10^133_109, 600351) @ 10^133_110 (30.62s) | |||
700_000: S(10^155_294, 700319) @ 10^155_295 (41.64s) | |||
800_000: S(10^177_479, 799911) @ 10^177_480 (54.30s) | |||
900_000: S(10^199_664, 900259) @ 10^199_665 (68.59s) | |||
1_000_000: S(10^221_849, 1000853) @ 10^221_850 (84.51s) | |||
... | |||
4_000_000: S(10^887_395, 4000201) @ 10^887_396 (1474.02s) | |||
... | |||
27_500_000: S(10^6_100_841, 27512703) @ 10^6_100_842 (87616.45s) | |||
==== Antihydra-like Cryptid ==== | |||
This Cryptid is a size 23 [[Cryptid]]. This Cryptid was [https://discord.com/channels/960643023006490684/1438019511155691521/1449293536737361973 constructed by Maksandchael] by tweaking Frankenstein's Monster to make it as similar to [[Antihydra]] as possible. <code>[9/10, 1/6, 1331/2, 14/3, 5/7, 3/11]</code> | |||
<math display="block">\begin{bmatrix} | <math display="block">\begin{bmatrix} | ||
-1 & & | -1 & 2 & -1 & 0 & 0 \\ | ||
-1 & -1 & 0 & 0 & 0 \\ | |||
-1 & 0 & 0 & 0 & 3 \\ | |||
1 & -1 & 0 & 1 & 0 \\ | |||
0 & 0 & 1 & -1 & 0 \\ | |||
0 & 1 & 0 & 0 & -1 | |||
\end{bmatrix}</math><pre> | |||
H(a, b) = [0, 0, a-2, 0, b] | |||
\end{bmatrix}</math> | Start -> H(2, 3) | ||
H(2a, b) -> H(3a, b+2) | |||
H(2a+1, b+1) -> H(3a+1, b) | |||
H(a,0) -> halt | |||
</pre> | |||
=== Size 25: Hydra === | |||
[[File:Hydra.webp|alt=Partial space-time diagram of Hydra.|thumb|300x300px|Partial space-time diagram of Hydra.]] | |||
A size 25 program was produced and golfed by hand to simulate [[Hydra]] rules ([https://discord.com/channels/960643023006490684/1438019511155691521/1449829146040467681 Discord]): | |||
<code>[363/14, 125/2, 22/21, 1/3, 7/11, 14/5]</code> | |||
<math display="block"> | |||
\begin{bmatrix} | |||
-1 & 1 & 0 & -1 & 2 \\ | |||
-1 & 0 & 3 & 0 & 0 \\ | |||
1 & -1 & 0 & -1 & 1 \\ | |||
0 & -1 & 0 & 0 & 0 \\ | |||
0 & 0 & 0 & 1 & -1 \\ | |||
1 & 0 & -1 & 1 & 0 | |||
\end{bmatrix} | |||
</math> | |||
The intended interpretation is that if we let S(h,w) = [0, w, h | The intended interpretation is that if we let <math>S(h,w) = [1, 0, w, h-3, 0] | ||
</math> then it follows the following rules: | |||
<math display="block">\begin{array}{lcl} | <math display="block">\begin{array}{lcl} | ||
[1,0,\dots] & = & S(3, 0) \\ | |||
S(2k, 0) & \to^* & \text{halt} \\ | S(2k, 0) & \to^* & \text{halt} \\ | ||
S(2k, w+1) & \to^* & S(3k, w) \\ | S(2k, w+1) & \to^* & S(3k, w) \\ | ||
S(2k+1, w) & \to^* & S(3k+1, w+2) \\ | S(2k+1, w) & \to^* & S(3k+1, w+2) | ||
\end{ | \end{array}</math> | ||
=== Size 36: BMO1 === | |||
[[File:Ftran bmo1.png|alt=Partial space-time diagram of BMO 1.|thumb|Partial space-time diagram of BMO 1.]] | |||
A size 36 program was produced by hand to simulate [[BMO1]] rules ([https://discord.com/channels/960643023006490684/1438019511155691521/1440018895212642424 Discord]): | |||
<code>[153/55, 2/11, 26/35, 3/7, 11/17, 7/13, 25/6, 55/2, 14/3]</code> | |||
<math display="block"> | |||
\begin{bmatrix} | |||
0 & 2 & -1 & 0 & -1 & 0 & 1 \\ | |||
1 & 0 & 0 & 0 & -1 & 0 & 0 \\ | |||
1 & 0 & -1 & -1 & 0 & 1 & 0 \\ | |||
0 & 1 & 0 & -1 & 0 & 0 & 0 \\ | |||
0 & 0 & 0 & 0 & 1 & 0 & -1 \\ | |||
0 & 0 & 0 & 1 & 0 & -1 & 0 \\ | |||
-1 & -1 & 2 & 0 & 0 & 0 & 0 \\ | |||
-1 & 0 & 1 & 0 & 1 & 0 & 0 \\ | |||
1 & -1 & 0 & 1 & 0 & 0 & 0 | |||
\end{bmatrix} | |||
</math> | </math> | ||
Let <math>A(a,b) = [a, b, 0, 0, 0, 0, 0]</math>, then it follows the rules: | |||
<math display="block">\begin{array}{lcl} | |||
[1,0,\dots] & \xrightarrow{4}& A(1, 2) \\ | |||
A(a, b) & \xrightarrow{5b+4}& A(a-b, 4b+2) & \text{if } a > b \\ | |||
A(a, b) & \xrightarrow{5a+2} & A(2a+1, b-a) & \text{if } a < b \\ | |||
A(a, b) & \xrightarrow{a} & \text{Halt} & \text{if } a = b | |||
\end{array}</math> | |||
=== Size 48: BMO 6 (“Space Needle”) === | |||
[[File:Space Needle.webp|alt=Partial space-time diagram of Space Needle.|thumb|Partial space-time diagram of Space Needle.]] | |||
A size 48 program was produced by hand to simulate [https://wiki.bbchallenge.org/wiki/1RB1LA_1LC0RE_1LF1LD_0RB0LA_1RC1RE_---0LD BMO 6] rules ([https://discord.com/channels/960643023006490684/1438019511155691521/1441137371046482071 Discord]) | |||
<code>[77/2, 2/99, 17/33, 13/11, 285/119, 17/19, 1375/51, 1/17, 3/5, 243/7, 10/13]</code> | |||
<math>\begin{bmatrix} | |||
-1 & 0 & 0 & 1 & 1 & 0 & 0 & 0 \\ | |||
1 & -2 & 0 & 0 & -1 & 0 & 0 & 0 \\ | |||
0 & -1 & 0 & 0 & -1 & 0 & 1 & 0 \\ | |||
0 & 0 & 0 & 0 & -1 & 1 & 0 & 0 \\ | |||
0 & 1 & 1 & -1 & 0 & 0 & -1 & 1 \\ | |||
0 & 0 & 0 & 0 & 0 & 0 & 1 & -1 \\ | |||
0 & -1 & 3 & 0 & 1 & 0 & -1 & 0 \\ | |||
0 & 0 & 0 & 0 & 0 & 0 & -1 & 0 \\ | |||
0 & 1 & -1 & 0 & 0 & 0 & 0 & 0 \\ | |||
0 & 5 & 0 & -1 & 0 & 0 & 0 & 0 \\ | |||
1 & 0 & 1 & 0 & 0 & -1 & 0 & 0 | |||
\end{bmatrix}</math><pre>A(a, b) = B^a C^b E or B^(a-2) C^b D E | |||
Start: A(7, 1) | |||
A(1, b) --> halt | |||
A(2a, b) --> A(5a+b+2, 1) | |||
A(2a+1, b) --> A(b-1, b+c+3)</pre> | |||
== References == | == References == | ||
<references /> | <references /> | ||
[[Category:Functions]] | |||
Latest revision as of 09:51, 30 August 2026
Fractran (originally styled FRACTRAN) is an esoteric Turing complete model of computation invented by John Conway in 1987.[1] In this model a program is simply a finite list of fractions (rational numbers), the program state is an integer. For more details see https://en.wikipedia.org/wiki/FRACTRAN.
Discord user Coda came up with a way to transform any Fractran program into a Turing Machine, see source.
BB_fractran(n) or BBf(n) is the Busy Beaver function for Fractran programs. Holdouts lists by Daniel Yuan: Holdouts lists
Definition
A Fractran program is a list of rational numbers called rules and a Fractran state is an integer . The numerator and denominator of any rational number fraction do not share any prime factors (they are in reduced form). We say that a rule applies to state if . If no rule applies, we say that the computation has halted otherwise we apply the first applicable rule at each step. In that case we say and and . As with Turing machines, we will write if (s goes to t after N steps) and or if for some N≥0 or N≥1 (respectively). We say that a program has runtime N (or halts in N steps) starting in state s if and computation halts on t.
Let be the total number of prime factors of a positive integer n. In other words, . Then given a rule we say that . And the size of a Fractran program is .
BB_fractran(n) or BBf(n) is the maximum runtime starting in state 2 for all halting Fractran programs of size n. It is a non-computable function akin to the Busy Beaver Functions since Fractran is Turing Complete.
Vector Representation
Fractran programs are not easy to interpret, in fact it may be completely unclear at first that they can perform any computation at all. One of the key insights is to represent all numbers (states and rules) in their prime factorization form. For example, we can use a vector to represent the number .
Let the vector representation (for a sufficiently large n) for a state be and the vector representation for a rule be (Note that this is just an extension of the original definition extended to allow negative ).
Now, rule q applies to state s iff (all components of the vector are ≥0) and if then . So the Fractran multiplication model is completely equivalent to the vector adding model. For presentation, we will represent a Fractran program with a matrix where each row is the vector representation for a rule.
For example, the BBf(15) champion ([1/45, 4/5, 3/2, 25/3]) in vector representation would be:
In this representation, it becomes much easier to reason about Fractran programs and describe general rules. It is also very easy to calculate the size of a rule or program in vector representation. It is the sum of absolute values of all elements in the matrix + number of rules (number of rows).
Relationship to VAS / Petri Nets
Using vector representation, Fractran programs are a deterministic version of Vector Addition Systems (VAS) (and, equivalently, Petri Nets). VAS are identical to Fractran programs in vector representation except that the rules are unordered and non-deterministic, they are used to model distributed systems where precise order of rule execution cannot be predicted. Interestingly, many problems about VAS are actually decidable, but their runtimes are extremely slow. Notably, the reachability problem (given states A and B are there a sequence of rules so that ) is "Ackermann-complete" meaning that the optimal algorithm has worst-case runtime akin to the famously fast-growing Ackermann function.[2]
Visualizing Fractran Programs' Space-Time Diagrams
Katelyn Doucette's Fractran space-time diagram visualizer produces the following space-time diagrams for some notable Fractran Programs, under the following principle: Each color represents a prime factor. Left -> right colors indicating the index of that register, and how wide the color is representing how big the value is at that step. Source code: https://github.com/Laturas/FractranVisualizer
Deciders

Many specialized deciders have been invented to prove Fractran programs non-halting. See image at right. There are three extra deciders: Spanning Vectors Masked, which should be very effective, but implementing it is in-progress, a version of Spanning Vectors Masked - Masked Linear Invariant - which is very powerful, and some holdouts were removed by Shawn Ligocki with FAST (Fast Acceleration of Symbolic Transition systems), a pre-existing general tool.
-d released a new decider on 25 Jan 2026: Beeping Permutation.
TODO: create pages about the deciders.
Champions
The table of champions is split into two pieces: the first for small champions (up to BBf(14)) which all share the same relatively simple behavior (sequential programs) is collapsed by default; the second for champions BBf(15) and beyond which have more complex and varied behavior. All small champions as well as the first few larger ones were discovered and proven maximal by Jason Yuen (@-d) in their initial enumeration on 1 Nov 2025.
BBf(21) and below are solved. BBf(22) is the smallest domain to contain a Cryptid, and all other machines for BBf(22) are solved.
| n | BBf(n) | Example Champion | Vector Representation |
|---|---|---|---|
| 2 | 1 | [1/2]
|
|
| 3 | 1 | [3/2]
|
|
| 4 | 1 | [9/2]
|
|
| 5 | 2 | [3/2, 1/3]
|
|
| 6 | 3 | [9/2, 1/3]
|
|
| 7 | 4 | [27/2, 1/3]
|
|
| 8 | 5 | [81/2, 1/3]
|
|
| 9 | 6 | [243/2, 1/3]
|
|
| 10 | 7 | [729/2, 1/3]
|
|
| 11 | 10 | [27/2, 25/3, 1/5]
|
|
| 12 | 13 | [81/2, 25/3, 1/5]
|
|
| 13 | 17 | [81/2, 125/3, 1/5]
|
|
| 14 | 21 | [243/2, 125/3, 1/5]
|
| n | BBf(n) | Example Champion | Vector Representation | Champion Found | Holdouts Proven |
|---|---|---|---|---|---|
| 15 | 28 | [1/45, 4/5, 3/2, 25/3]
|
Jason Yuen (@-d) 1 Nov 2025 | Jason Yuen (@-d) 1 Nov 2025 | |
| 16 | 53 | [1/45, 4/5, 3/2, 125/3]
|
Jason Yuen (@-d) 1 Nov 2025 | Jason Yuen (@-d) 1 Nov 2025 | |
| 17 | 107 | [5/6, 49/2, 3/5, 40/7]
|
Jason Yuen (@-d) 1 Nov 2025 | Daniel Yuan (@dyuan01) 3 Nov 2025 | |
| 18 | 211 | [5/6, 49/2, 3/5, 80/7]
|
Jason Yuen (@-d) 4 Nov 2025 | Jason Yuen (@-d) 8 Nov 2025 | |
| 19 | 370 | [5/6, 49/2, 3/5, 160/7]
|
@creeperman7002 5 Nov 2025 | Decider: Daniel Yuan (@dyuan01) 13 Nov 2025
3 Holdouts: Racheline & Shawn Ligocki | |
| 20 | 746 | [7/15, 22/3, 6/77, 5/2, 9/5]
|
Jason Yuen (@-d) 13 Nov 2025 | Decider: Jason Yuen (@-d)
(Enum+initial) Daniel Yuan (@dyuan01) 13 and 14 Nov 2025 Shawn Ligocki (@sligocki) 7 and 24 Dec 2025 6 Holdouts: Jason Yuen (@-d) 23 Dec 2025 | |
| 21 | 31,957,632 | [7/15, 4/3, 27/14, 5/2, 9/5]
|
Jason Yuen (@-d) 16 Nov 2025 | No holdouts remain. Claude Opus 4.6's proof of nonhalting of all the 140 holdouts: 28 March 2026 | |
| 22 | [1/12, 9/10, 14/3, 11/2, 5/7, 3/11]
|
Shawn Ligocki (@sligocki) 11 Dec 2025 and Jason Yuen (@-d)[1] | 3 holdouts remain. Claude Opus 4.6 gave a proof of all machines but the 3 Fenrir Cryptids, see Discord.
The holdouts list whose elements are exactly the 3 Fenrir Cryptids on GitHub: sz22_3.txt Known Cryptids:
| ||
| 23 | [10/3, 9/14, 5/4, 121/2, 7/5, 3/11]
|
Shawn Ligocki (@sligocki) 1 Jun 2026 | 21,295 holdouts remain. 2 Jun 2026
By August 5th, 2026, the unofficial holdouts count had been reduced to 13. sz23_13_unofficial.txt Known Cryptids:
| ||
| 24 | [18/35, 1/10, 11/5, 75/2, 49/3, 5/11]
|
Shawn Ligocki (@sligocki) 22 Aug 2026 | No holdouts list yet.
An informal list from a 20%-complete enumeration: 22 Aug 2026 |
Behavior of Champions
Sequential programs
All champions up to BBf(14) have very simple behavior. They are all of the form: or in vector representation (limited to k=4):
These champions repeatedly apply the rules in sequence, never going back to a previous rule. They apply the first rule until they've exhausted all 2s, then the second rule until they've exhausted all 3s, etc. They have a runtime of and size . This grows linearly for k=1 (BBf(5) to BBf(10)) and quadratically for k=2 (BBf(11) to BBf(14)). Letting k grow with the size, the maximum runtime grows exponentially in the program size.
BBf(15) Family
The BBf(15) and BBf(16) champions are members of a family of programs (parameterized by ):
Let a = 2, b = 3, and c = 5.
The BBf(15) champion (n = 2) implements this iteration:
which follows a permutation-like trajectory:
The BBf(16) champion (n = 3) implements this iteration:
which follows a permutation-like trajectory:
BBf(17) Family
The BBf(17) to BBf(19) champions are members of a family of programs (parameterized by )
which have size
This family obeys the following rules:
- if d≥1 and b≤m:
- if d≥1 and b≥m:
- if d=0: [0,b,0,d] has halted
and furthermore these rules are applied in order since b is always increasing (and d is eventually decreasing). Combining these together we get runtime:
The optimal choices for n,m for various program sizes are:
| Size | n | m | Runtime |
|---|---|---|---|
| 16 | 1 | 3 | 51 |
| 17 | 2 | 3 | 107 |
| 18 | 2 | 4 | 211 |
| 19 | 2 | 5 | 370 |
| 20 | 2 | 6 | 596 |
| 21 | 3 | 6 | 904 |
BBf(20)

The BBf(20) champion (running 746 steps):
This program implements a Collatz-like iteration. Let , then:
which follows the reasonably "lucky" trajectory:
BBf(21)

The BBf(21) champion (running >31M steps):
This program implements a Collatz-like iteration. Let , then:[1]
which follows the reasonably "lucky" trajectory:
BBf(22)
The BBf(22) champion (running steps):
This program implements a Collatz-like unbiased pseudo-random walk. Let , then:[2]
This pseudo-random walk iterates 275 times until it halts reaching a maximum y value of 14 at iteration 111: If it were a truly random walk, there would be a 5.9% chance that it takes at least 275 steps to reach 0. So this program is mildly lucky.
BBf(23)
The BBf(23) champion follows an unbiased Collatz-like pseudo-random walk: let
if y>0
if y>0
BBf(24)
The BBf(24) champion follows an unbiased Collatz-like pseudo-random walk: let
if y>0
if y>0
if y>0
Cryptids
Size 22: Fenrir

"Fenrir" is a family of 3 size 22 Cryptids discovered by Jason Yuen (@-d) and Claude Opus 4.6 on 22 Mar 2026. Out of 2003 holdouts of size 22, Claude Opus 4.6 used Lean to prove that 1997 holdouts were non-halting and 3 holdouts were halting; the remaining 3 holdouts are the Fenrir family.[3] Discord user @ZTS439 shared some analysis and a Python program for it. Its name comes from Nordic mythology; Fenrir is the wolf that helps destroy the world during Ragnarök.
| Holdout number | Holdout | Vector Representation |
|---|---|---|
| 29/2003 | [1/15, 27/77, 49/3, 10/49, 33/2]
|
|
| 41/2003 | [1/15, 49/3, 27/77, 10/49, 33/2]
|
|
| 430/2003 | [27/35, 1/33, 25/3, 22/25, 21/2]
|
All 3 holdouts follow a biased random walk that somewhat resembles Hydra. Let (for 29/2003 and 41/2003) or (for 430/2003), then:
The first few visited states are $$S(0, 1) \to S(2, 0) \to S(1, 2) \to S(0, 7) \to S(2, 15) \to S(4, 35)$$
Size 23: 11 Hydra-like Cryptids
Define to be the problem as follows:
- The initial state is .
- The iteration is repeated. Here, are 0-indexed.
- Are all the values of y non-negative?
Furthermore, the Hydra-like problem is considered a Cryptid if it also satisfies:
- contains a negative number, and the average is positive.
- is a pseudorandom sequence.
- There are no negative values of early on.
For example, Fenrir is non-halting if and only if Hydra(5, 2, [2, 0], [-1, 2], (1, 0)). In this Hydra problem, the first few visited states are .
There are 11 Hydra-like Cryptids of size exactly 23, listed in the table below. All 11 Cryptids are not correlated with each other. Fenrir is included in the table as a reference.
| Domain: Holdout Number | Holdout | Hydra problem | Notes |
|---|---|---|---|
| BBf(23): #11/694 | [1/135, 25/21, 33/5, 2/3, 7/11, 5/2]
|
Hydra(7, 4, [1, 3, 5, 6], [0, 1, 2, -1], (1, 0)) | |
| BBf(22): #29/2003 | [1/15, 27/77, 49/3, 10/49, 33/2]
|
Hydra(5, 2, [2, 0], [-1, 2], (1, 0)) | Fenrir |
| BBf(23): #26/694 | [1/15, 49/3, 81/77, 10/49, 33/2]
|
Hydra(7, 2, [-1, 8], [3, -1], (1, 2)) | |
| BBf(23): #47/694 | [1/18, 4/15, 21/2, 121/3, 5/7, 2/11]
|
Hydra(5, 3, [1, 3, 4], [1, 3, -1], (1, 1)) | If #47 doesn't halt then Frankenstein's Monster doesn't halt |
| BBf(23): #77/694 | [1/54, 4/15, 21/2, 11/3, 5/7, 3/11]
|
Hydra(7, 4, [0, 2, 4, 5], [0, 1, 2, -1], (1, 0)) | Same ratio 7/4 as #11 |
| BBf(23): #151/694 | [14/15, 1/12, 11/3, 63/2, 5/7, 2/11]
|
Hydra(8, 5, [1, 2, 4, 6, 7], [2, -1, 1, 3, 0], (0, 1)) | |
| BBf(23): #159/694 | [14/15, 1/6, 121/3, 63/2, 5/7, 2/11]
|
Hydra(5, 3, [1, 2, 4], [3, -1, 1], (1, 3)) | Same ratio 5/3 as #47 |
| BBf(23): #207/694 | [2/15, 1/12, 441/2, 11/3, 5/7, 2/11]
|
Hydra(6, 5, [1, 3, 3, 5, 5], [1, 3, 0, 2, -1], (1, 1)) | |
| BBf(23): #218/694 | [2/15, 1/6, 441/2, 121/3, 5/7, 2/11]
|
Hydra(4, 3, [1, 2, 3], [3, 1, -1], (1, 3)) | |
| BBf(23): #317/694 | [4/15, 1/18, 63/2, 11/3, 5/7, 2/11]
|
Hydra(5, 4, [1, 2, 3, 5], [1, 0, -1, 2], (1, 1)) | |
| BBf(23): #319/694 | [4/15, 1/24, 21/2, 11/3, 5/7, 3/11]
|
Hydra(5, 4, [0, 2, 4, 3], [0, 1, 2, -1], (1, 0)) | Same ratio 5/4 as #317 |
| BBf(23): #323/694 | [4/15, 1/6, 21/2, 1331/3, 5/7, 2/11]
|
Hydra(3, 2, [1, 2], [2, -1], (1, 2)) | If #323 doesn't halt then Antihydra-like Cryptid doesn't halt |
As of August 2026, the 13 unofficial holdouts are as follows: Fenrir, 11 Hydra-like Cryptids of size 23, and #601 [9/10, 1/42, 22/3, 49/2, 5/11, 3/7].
Frankenstein's Monster

"Frankenstein's Monster" is a size 23 Cryptid. It was created by tweaking a single instruction in the size 22 champion. This tweak switches it from a unbiased random walk to a biased one and thus makes halting probviously impossible. It is called Frankenstein's Monster since it was found by a combination of exhaustive search and hand design.[4]
[1/12, 9/10, 14/3, 121/2, 5/7, 3/11]
Its behavior is extremely similar to the size 22 champion. Let , then:
with the only difference that the values now change by depending on the value of (instead of in the original size 22 program). The values follow the exact same path as in the original size 22 champion, but the y values quickly grow linearly with the number of iterations (as expected by the random model):
0: S(0, 1) @ 1 (0.00s) 100_000: S(10^22_185, 100171) @ 10^22_186 (0.87s) 200_000: S(10^44_370, 200187) @ 10^44_371 (3.42s) 300_000: S(10^66_555, 300759) @ 10^66_556 (7.68s) 400_000: S(10^88_740, 400451) @ 10^88_741 (13.64s) 500_000: S(10^110_925, 500421) @ 10^110_925 (21.28s) 600_000: S(10^133_109, 600351) @ 10^133_110 (30.62s) 700_000: S(10^155_294, 700319) @ 10^155_295 (41.64s) 800_000: S(10^177_479, 799911) @ 10^177_480 (54.30s) 900_000: S(10^199_664, 900259) @ 10^199_665 (68.59s) 1_000_000: S(10^221_849, 1000853) @ 10^221_850 (84.51s) ... 4_000_000: S(10^887_395, 4000201) @ 10^887_396 (1474.02s) ... 27_500_000: S(10^6_100_841, 27512703) @ 10^6_100_842 (87616.45s)
Antihydra-like Cryptid
This Cryptid is a size 23 Cryptid. This Cryptid was constructed by Maksandchael by tweaking Frankenstein's Monster to make it as similar to Antihydra as possible. [9/10, 1/6, 1331/2, 14/3, 5/7, 3/11]
H(a, b) = [0, 0, a-2, 0, b] Start -> H(2, 3) H(2a, b) -> H(3a, b+2) H(2a+1, b+1) -> H(3a+1, b) H(a,0) -> halt
Size 25: Hydra

A size 25 program was produced and golfed by hand to simulate Hydra rules (Discord):
[363/14, 125/2, 22/21, 1/3, 7/11, 14/5]
The intended interpretation is that if we let then it follows the following rules:
Size 36: BMO1

A size 36 program was produced by hand to simulate BMO1 rules (Discord):
[153/55, 2/11, 26/35, 3/7, 11/17, 7/13, 25/6, 55/2, 14/3]
Let , then it follows the rules:
Size 48: BMO 6 (“Space Needle”)

A size 48 program was produced by hand to simulate BMO 6 rules (Discord)
[77/2, 2/99, 17/33, 13/11, 285/119, 17/19, 1375/51, 1/17, 3/5, 243/7, 10/13]
A(a, b) = B^a C^b E or B^(a-2) C^b D E Start: A(7, 1) A(1, b) --> halt A(2a, b) --> A(5a+b+2, 1) A(2a+1, b) --> A(b-1, b+c+3)
References
- ↑ Conway, John H. (1987). "FRACTRAN: A Simple Universal Programming Language for Arithmetic". Open Problems in Communication and Computation. Springer-Verlag New York, Inc. pp. 4–26. http://doi.org/10.1007/978-1-4612-4808-8_2
- ↑ Czerwiński, Wojciech; Orlikowski, Łukasz (2021). Reachability in Vector Addition Systems is Ackermann-complete. 2021 IEEE 62nd Annual Symposium on Foundations of Computer Science (FOCS). https://arxiv.org/abs/2104.13866.