Информация об изменениях

Сообщение Re[6]: Коллац на Фрактране от 10.07.2023 11:55

Изменено 10.07.2023 11:56 kov_serg

Re[6]: Коллац на Фрактране
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, kov_serg, Вы писали:

К>давай перепишем:

К>было

К>
К>while true:
К>  if x * pa / pb / pc is integer then x *= pa / pc ( / pb * pb * pb)
К>  else
К>  break
К>

нет я же написал совсем не так.
для [a-b-c][b] вот что требуется:
    while x*pa/pb/pc is int:
        x*=pa/pc


[a-b-c][b]
Сначала умножаем если целое, то умножаем на оба числа
те программа состоит из пар чисел (u,z)
если x*u не целое идём дальше иначе умножаем x на u и v.

запись [a-b-c] означает exp(a-b-c)
где a=ln(pa), b=ln(pb), c=ln(pc)
pa,pb,pc — любые взаимно простые числа

----

К>Объяснение этому вот какое:

К>- очевидно, что мы можем повсеместно заменить фактор pb на pb^2, квадрат простого числа будет по-прежнему взаимно-простым со всеми остальными факторами
К>- очевидно, что мы можем повсеместно заменить фактор pb на (pb1*pb2), по тем же причинам
К>- теперь, если мы введём вектор (pb1,pb2), то получим не два состояния (степени множителя) 0 и 1, а 00,01,10,11 — из которых нас интересуют первые три
К>- теперь, если мы введём класс эквивалентности — 01=10, то у фрактран-машины появится легальное действие: "поделить на фактор и умножить на этот же фактор" — чего не бывает с обычными дробями
К>- но класс эквивалентности требует расщепления: одна дробь делит на одно число из класса и умножает на другое, вторая — наоборот.

К>Если мы договариваемся, что степень у фактора метки — всегда 0 или 1, — то проблем не возникает.

К>Вход в метку — умножение на любое число из класса эквивалентности.
К>Оставание в метке — пинг-понг. (Удваиваем все инструкции)
К>Выход из метки — отсутствие умножения. (Удваиваем все инструкции)

Ничего не понял.

мы можем выполнять операции перегонки значений например [ka*a+kb*b-kc*c-d][d] означает
если x не содержит множитель pd операция пропускается
если содержи pd в первой степени, то операция выполняется nc раз если x содержит pc^nc
т.е. запись [ka*a+kb*b-kc*c-d][d]
эквивалентна такой инструкции:
if (nd): na+=ka*floor(nc/kc); nb+=kb*floor(nc/kc); nc=nc%kc

для x=xo*pc^nc*pd^1
Re[6]: Коллац на Фрактране
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, kov_serg, Вы писали:

К>давай перепишем:

К>было

К>
К>while true:
К>  if x * pa / pb / pc is integer then x *= pa / pc ( / pb * pb * pb)
К>  else
К>  break
К>

нет я же написал совсем не так.
для [a-b-c][b] вот что требуется:
    while x*pa/pb/pc is int:
        x*=pa/pc


[a-b-c][b]
Сначала умножаем если целое, то умножаем на оба числа
те программа состоит из пар чисел (u,v)
если x*u не целое идём дальше иначе умножаем x на u и v.

запись [a-b-c] означает exp(a-b-c)
где a=ln(pa), b=ln(pb), c=ln(pc)
pa,pb,pc — любые взаимно простые числа

----

К>Объяснение этому вот какое:

К>- очевидно, что мы можем повсеместно заменить фактор pb на pb^2, квадрат простого числа будет по-прежнему взаимно-простым со всеми остальными факторами
К>- очевидно, что мы можем повсеместно заменить фактор pb на (pb1*pb2), по тем же причинам
К>- теперь, если мы введём вектор (pb1,pb2), то получим не два состояния (степени множителя) 0 и 1, а 00,01,10,11 — из которых нас интересуют первые три
К>- теперь, если мы введём класс эквивалентности — 01=10, то у фрактран-машины появится легальное действие: "поделить на фактор и умножить на этот же фактор" — чего не бывает с обычными дробями
К>- но класс эквивалентности требует расщепления: одна дробь делит на одно число из класса и умножает на другое, вторая — наоборот.

К>Если мы договариваемся, что степень у фактора метки — всегда 0 или 1, — то проблем не возникает.

К>Вход в метку — умножение на любое число из класса эквивалентности.
К>Оставание в метке — пинг-понг. (Удваиваем все инструкции)
К>Выход из метки — отсутствие умножения. (Удваиваем все инструкции)

Ничего не понял.

мы можем выполнять операции перегонки значений например [ka*a+kb*b-kc*c-d][d] означает
если x не содержит множитель pd операция пропускается
если содержи pd в первой степени, то операция выполняется nc раз если x содержит pc^nc
т.е. запись [ka*a+kb*b-kc*c-d][d]
эквивалентна такой инструкции:
if (nd): na+=ka*floor(nc/kc); nb+=kb*floor(nc/kc); nc=nc%kc

для x=xo*pc^nc*pd^1