Antihydra: Difference between revisions

From BusyBeaverWiki
Jump to navigation Jump to search
(Adding sources section, adding a source for its Collatz rule, and documenting access dates of Discord messages based on edit history)
m (add unsolved problem)
Line 1: Line 1:
{{machine|1RB1RA_0LC1LE_1LD1LC_1LA0LB_1LF1RE_---0RA}}
{{machine|1RB1RA_0LC1LE_1LD1LC_1LA0LB_1LF1RE_---0RA}}{{unsolved|Does Antihydra run forever?}}
[[File:Antihydra-depiction.png|right|thumb|Artistic depiction of Antihydra by Jadeix]]
[[File:Antihydra-depiction.png|right|thumb|Artistic depiction of Antihydra by Jadeix]]
Antihydra is the 6-state 2-symbol machine {{TM|1RB1RA_0LC1LE_1LD1LC_1LA0LB_1LF1RE_---0RA}}.
Antihydra is the 6-state 2-symbol machine {{TM|1RB1RA_0LC1LE_1LD1LC_1LA0LB_1LF1RE_---0RA}}.
Line 102: Line 102:
     mpz_clear(b);
     mpz_clear(b);
     return 0;
     return 0;
}
}‎</syntaxhighlight>
‎</syntaxhighlight>


Compile and run with:<syntaxhighlight lang="bash">
Compile and run with:<syntaxhighlight lang="bash">
gcc -ggdb3 -O2 -pedantic-errors -std=c11 -Wall -Wextra -o 'antihydra.out' 'antihydra.c' -lgmp
gcc -ggdb3 -O2 -pedantic-errors -std=c11 -Wall -Wextra -o 'antihydra.out' 'antihydra.c' -lgmp
./antihydra.out
./antihydra.out‎</syntaxhighlight>
</syntaxhighlight>


Tested on Tested on GMP 6.3.0, Ubuntu 24.04.
Tested on Tested on GMP 6.3.0, Ubuntu 24.04.

Revision as of 01:39, 24 July 2024

Unsolved problem:
Does Antihydra run forever?
Artistic depiction of Antihydra by Jadeix

Antihydra is the 6-state 2-symbol machine 1RB1RA_0LC1LE_1LD1LC_1LA0LB_1LF1RE_---0RA (bbch).

This machine was the first identified BB(6) Collatz-like Cryptid, and is closely related to Hydra.

It simulates the Collatz-like iteration


starting from , using configurations of the form .[1]

It was discovered by mxdys on 28 Jun 2024 and shared on Discord.[2]

Racheline found that compared to the Hydra iteration, this one starts at (8, 0) rather than (3, 0), and the roles of odd and even a are exchanged (in terms of which increases b by two, and which decrements b or halts). Obstacles to proving the long-run behavior are equally serious. Like the Hydra iteration, this one is biased toward increasing the value of b (assuming equal chances of adding +2 or -1).

There is no halt in the first 11.8 million iterations, by which point b has reached 5890334 (which means that it also does not halt in the first 17690334 iterations).[3]

Simulator

Two simulators are available. A fast simulator written in Rust for the odd/even sequence used by Antihydra is available here.

Alternatively, here is a GMP implementation of the program with some performance diagnostics added:

/* Tested on GMP 6.3.0, Ubuntu 24.04. */

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
#include <time.h>

#include <gmp.h>

static uint64_t get_milis(void) {
    struct timespec ts;
    timespec_get(&ts, TIME_UTC);
    return (uint64_t)(ts.tv_sec * 1000 + ts.tv_nsec/1000000);
}

int main(int argc, char **argv) {
    char *as, *bs;
    mpz_t a, aq, ar, b;
    uint64_t i, time, newtime;

    /* CLI and init. */
    if (argc > 1) {
        as = argv[1];
    } else {
        as = "8";
    }
    if (argc > 2) {
        bs = argv[2];
    } else {
        bs = "0";
    }
    mpz_init_set_str(a, as, 10);
    mpz_init_set_str(b, bs, 10);
    mpz_init(aq);
    mpz_init(ar);
    i = 0;
    time = get_milis();

    /* Run. */
    while (1) {
        /* aq = a / 2
         * ar = a % 2 */
        mpz_fdiv_qr_ui(aq, ar, a, 2);
        if (
            /* odd */
            mpz_cmp_ui(ar, 0)
        ) {
            if (!mpz_cmp_ui(b, 0)) break;
            /* a = aq * 3 + 1 */
            mpz_mul_ui(a, aq, 3);
            mpz_add_ui(a, a, 1);
            /* b -= 1 */
            mpz_sub_ui(b, b, 1);
        } else {
            /* a = aq * 3 */
            mpz_mul_ui(a, aq, 3);
            /* b += 2 */
            mpz_add_ui(b, b, 2);
        }
        i++;
        if (i % 100000 == 0) {
            newtime = get_milis();
            gmp_printf("%" PRIu64 " ms=%" PRIu64 " log10(a)=%ju log10(b)=%ju\n",
                       i/100000, newtime - time, mpz_sizeinbase(a, 10), mpz_sizeinbase(b, 10));
            time = newtime;
        }
    }

    /* Cleanup if we ever reach it. */
    mpz_clear(a);
    mpz_clear(aq);
    mpz_clear(ar);
    mpz_clear(b);
    return 0;
}

Compile and run with:

gcc -ggdb3 -O2 -pedantic-errors -std=c11 -Wall -Wextra -o 'antihydra.out' 'antihydra.c' -lgmp
./antihydra.out‎

Tested on Tested on GMP 6.3.0, Ubuntu 24.04.

Sources

  1. S. Ligocki, "BB(6) is Hard (Antihydra)" (2024). Accessed 22 July 2024.
  2. Discord message, accessed 30 June 2024.
  3. Discord message, accessed 2 July 2024.