Вычислимое ли?
2024-03-28 17:22![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Определим функцию push(n). Для всякого целого положительного аргумента n функция выдаёт целочисленный результат.
Разложим число n на множители и представим как:
Тогда результат функции push будет равен:
Например:
Почему называется push? В машине Фрактран её регистр рассматривается как последовательность значений [a, b, ..., q]. Последовательность конечная, но неограниченная по длине. Можно рассматривать её как стек. Функция push вталкивает значение 0 на верхушку этого стека:
Разложим число n на множители и представим как:
n = 2a * 3b * ... * Pqгде 2, 3, ... P - последовательные простые числа.
Тогда результат функции push будет равен:
push(n) = 3a * 5b * ... * Qqгде 3, 5, ... Q - последовательные простые числа.
Например:
push(1) = 1Задачка-челлендж для пытливых: реализовать функцию push на машине Фрактран. Или на любой другой машине Тьюринга или Чёрча. Для любого положительного аргумента. В виде программы конечного размера. Есть у меня сомнения, что это возможно.
push(2) = 3
push(3) = 5
push(4) = 9
push(5) = 7
push(6) = 15
push(7) = 11
push(8) = 27
push(9) = 25
Почему называется push? В машине Фрактран её регистр рассматривается как последовательность значений [a, b, ..., q]. Последовательность конечная, но неограниченная по длине. Можно рассматривать её как стек. Функция push вталкивает значение 0 на верхушку этого стека:
[a, b, ..., q] ⟶ [0, a, b, ..., q]Программа фактически должна реализовать "закапывание на бесконечности".
no subject
Date: 2024-03-29 04:05 (UTC)Да, логично.
no subject
Date: 2024-03-29 06:45 (UTC)Раз на Фрактране можно написать универсальную машину, позволяющую представлять произвольные дроби с любыми простыми множителями в составе, следовательно, можно написать и машину, которая динамически модифицирует интерпретируемую машину, добавляя в нее на ходу новые дроби с новыми простыми множителями по необходимости.
no subject
Date: 2024-03-30 00:48 (UTC)