Re[5]: Коллац на Фрактране
От: Кодт Россия  
Дата: 10.07.23 10:13
Оценка:
Здравствуйте, kov_serg, Вы писали:

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


К>>Получится пинг-понг между состояниями <...,p=1,p'=0,...> и <...,p=0,p'=1,...>


_>Не получится. Надо условный цикл. А пин понг приводит к длинным трекам, и ограничениям по максимальному допустимому значению в цикле.

_>надо именно

_>[a-b-c][b]


_>Т.е u=pa/pb/pc если число x делится этим u нацело то умножаем на u и на z=pb


квадрат пропустил, иначе и у тебя не зациклится — надо же восстановить степень pb после деления

_>while (x*pa/pb/pc is integer) do x*= (pa/pb/pc) * pb


Я именно это и имею в виду.

Условие, на самом деле
while (x/pb is integer and x/pc is integer)

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

было
while true:
  if x * pa / pb / pc is integer then x *= pa / pc ( / pb * pb * pb)
  else
  break


стало
while true:
  if x * pa / pb1 * pb2 / pc is integer then x *= pa / pb1 * pb2 / pc
  else
  if x * pa * pb1 / pb2 / pc is integer then x *= pa * pb1 / pb2 / pc
  else
  break


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

Если мы договариваемся, что степень у фактора метки — всегда 0 или 1, — то проблем не возникает.
Вход в метку — умножение на любое число из класса эквивалентности.
Оставание в метке — пинг-понг. (Удваиваем все инструкции)
Выход из метки — отсутствие умножения. (Удваиваем все инструкции)
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.