Nowy pomysł proof of work oparty o ciągi Collatza

Dyskusje o matematykach, matematyce... W szkole, na uczelni, w karierze... Czego potrzeba - talentu, umiejętności, szczęścia? Zapraszamy do dyskusji :)
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Nie mam ściśle sprecyzowanego pytania, próbuję tylko zrozumieć pewną publikacją naukową:

"Inflation propensity of Collatz orbits: a new proof-of-work for blockchain applications" - Fabian Bocart

Kod: Zaznacz cały

https://www.mdpi.com/1911-8074/11/4/83


Więc zakładam wątek tutaj. W skrócie, autor w 4.1. Collatz-Based Proof-of-Work proponuje, żeby zadać kopiącym bloki znalezienie jakichś \(\displaystyle{ Q_{i}}\) dla liczb z przedziału \(\displaystyle{ B}\) do \(\displaystyle{ B*}\), gdzie \(\displaystyle{ B}\) jest jakąś liczbą 256-bitową, a \(\displaystyle{ B*=B+2^{64}}\). Czym jest \(\displaystyle{ Q_{i}}\)? Autor pisze:

the cardinality of the set of steps that lead to a number strictly larger than all previous numbers in the same sequence

Bierzemy jakąś liczbę i zaczynamy ją iterować w ciągu Collatza, aż to momentu, gdy osiągnie \(\displaystyle{ 1}\). Liczymy wszystkie liczby, które były w tym ciągu większe niż nasza liczba początkowa. Tę liczbę tych liczb autor definiuje jako \(\displaystyle{ \xi (x)}\), gdzie \(\displaystyle{ x}\) to nasza liczba startowa. Przykładowo x=3:

3, 5, 8, 4, 2, 1,...

Mamy 5 i 8 większe od 3, zatem \(\displaystyle{ \xi (3)=2}\). I autor chce zadawać znalezienie zbiorów jakichś \(\displaystyle{ Q_{i}}\) równych \(\displaystyle{ \xi (x)}\), gdzie liczby startowe \(\displaystyle{ x_{i}}\) będą z przedziału \(\displaystyle{ B}\) do \(\displaystyle{ B*}\). To proponuje autor, jeśli dobrze rozumiem. Czy dobrze to rozumiem?

I teraz pytania. Czy ktoś rozumie jak autor chce dobierać te \(\displaystyle{ Q_{i}}\), które zada kopaczom do znalezienia? Zada im konkretnie do znalezienia startowe \(\displaystyle{ x_{i}}\), które mają określone \(\displaystyle{ Q_{i}}\). Widzę tu taki problem, że w przedziale \(\displaystyle{ B}\) do \(\displaystyle{ B*}\) może nie być takiej liczby \(\displaystyle{ x_{i}}\), która da powiedzmy \(\displaystyle{ Q_{i}=\xi (x_{i})=3333}\), bo takie \(\displaystyle{ Q_{i}}\) sobie wymyśliliśmy. I co wtedy? Może w ogóle nie istnieć liczba w ciagu Collatza, która ma akurat \(\displaystyle{ \xi (x_{i})=3333}\). No chyba, że to jest gwarantowane w jakiś sposób? Skąd autor ma pewność, że znajdą się liczby \(\displaystyle{ x_{i}}\), które dadzą jakieś \(\displaystyle{ \xi (x_{i})=Q_{i}}\), które on sobie akurat wymyślił i to akurat w tym przedziale \(\displaystyle{ x_{i} \in (B,B*)}\)?

Niejasne jest też jak te \(\displaystyle{ Q_{i}}\) dobierać. Mają być one coraz większe, jak rozumiem (i nie mogą być sobie równe), ale one się szybko skończą w takim przypadku. Istnieje wzór (empiryczny, ale bardzo dobrze potwierdzony) zgodnie z którym długość ciągu Collatza (zanim osiągnie jedynkę i się zapętli) dla liczby startowej \(\displaystyle{ n}\) można oszacować na:

\(\displaystyle{ d(n)=\frac {2}{\ln(\frac {4}{3})} \cdot \ln(n)}\)

Jeśli mówimy o liczbach około 256-bitowych praktycznie wszystkie takie liczby będą miały długości ciągów wynoszące \(\displaystyle{ 1}\) do \(\displaystyle{ 1234}\). Znajdą się odstępstwa, niektóre odnotują dłuższe ciągi, ale procentowo będzie ich niewiele (prawdopodobnie dla coraz większych \(\displaystyle{ n}\) takie przypadki liczb mają gęstość zerową). Czyli każda liczba początkowa 256-bitowa może mieć maksymalnie \(\displaystyle{ 1234}\) liczb większych od niej. A realnie mniej, bo ciąg Collatza początkowo zwykle rośnie przez pewną liczbę iteracji, a później przez kolejne iteracje spada aż do \(\displaystyle{ 1}\), więc nie ma szans, żeby wszystkie iterowane liczby były większe od startowej. Ogólnie mamy więc do dyspozycji bardzo mały zbiór \(\displaystyle{ Q_{i}}\), w realnych zastosowaniach w kilka godzin pewnie będzie po wszystkim. Czy ja czegoś tu nie rozumiem?

Dodano po 18 godzinach 3 minutach 47 sekundach:
Ok, już rozumiem o co chodzi autorowi. Niestety wygląda na to, że blockchaina przez niego zaproponowanego można łatwo złamać, znając pewne twierdzenia.

Po pierwsze źle zrozumiałem czym jest \(\displaystyle{ \xi (x)}\). Jest to po prostu liczba kroków (iteracji) do maksimum w ciągu. Poprzednio pisałem, że to liczba liczb w ciągu, które są większe od liczby startowej - to nieprawda.

Po drugie jest już jasne jak autor chce zadawać \(\displaystyle{ Q_{i} = \xi (x_{i})}\) do znalezienia. Otóż okazuje się, że, jak to autor pokazał w Figure 3, istnieje pewna liczba takich startowych \(\displaystyle{ x_{i}}\), które mają \(\displaystyle{ \xi (x_{i})}\) równe \(\displaystyle{ 1}\), autor chce zadać ich poszukiwanie. Istnieje jeszcze mniejsza liczba takich startowych \(\displaystyle{ x_{i}}\), które mają \(\displaystyle{ \xi (x_{i})}\) równe \(\displaystyle{ 2}\), \(\displaystyle{ 3}\) itd. Im większe \(\displaystyle{ Q_{i}}\) tym mniej jest \(\displaystyle{ x_{i}}\), które będą osiągać maksima po tak wielu krokach. Autor twierdzi, że rozkład tych liczb jest quasi-geometric, zgadza się to ze znanym heurystycznym argumentem, postulującym, że trajektorie w ciągach Collatza realizują geometryczny proces Browna (dzielenia i mnożenia w kolejnych krokach następują w sposób pseudolosowy). Autor zresztą potwierdził to obliczeniowo (rozkład liczb o zadanych, coraz większych \(\displaystyle{ Q_{i}}\)) dla liczb do miliona, co pokazał w Figure 3. Jednocześnie nie ma w tym żadnego porządku, skoro mamy tu proces Browna, nie da się wytypować która dokładnie liczba osiągnie maksimum po zadanych \(\displaystyle{ n}\) krokach, bo każdy ciąg przypomina iterowanie losowo kolejnych operacji mnożenia z dodawaniem lub dzielenia.

A jednak... Niestety pomimo, że autor wydaje się, że odrobił lekcje i zrobił dobry research, prawdopodobnie nie zdaje sobie z pewnego twierdzenia, zwanego Terras’s bijection:

"CONSECUTIVE INTEGERS AND THE COLLATZ CONJECTURE", Marcus Elia



Patrz Theorem 4.1, tam jest odnośnik to oryginalnej pracy Terrasa (nie chce mi się jej cytować, jest do znalezienia), w której wyjaśnione jest twierdzenie. Problem polega na tym, że, jeśli znajdziemy jakiś ciąg, który ma powiedzmy \(\displaystyle{ \xi (x_{i}) = q}\), to na mocy tego twierdzenia wszystkie liczby postaci \(\displaystyle{ x_{i} + 2^{q} \cdot m}\) będą miały identyczny przebieg przez te \(\displaystyle{ q}\) kroków, co nasza liczba \(\displaystyle{ x_{i}}\). Część z nich również osiągnie maksimum po tych \(\displaystyle{ q}\) krokach. Ogólnie bardzo łatwo jest wyznaczyć wszelkie możliwe kombinacje przekształceń w ciągu Collatza (mnożenie z dodawaniem lub dzielenie), które będą powodowały wzrost trajektorii ciągu przez dowolne zadane z góry \(\displaystyle{ n}\) kroków. Istnieje też algorytm, który pozwala wszystkie te liczby, które realizują takie kombinacje przekształceń wyznaczyć. A nawet, gdyby nie istniał, to już samo znalezienie chociażby jednej liczby \(\displaystyle{ x_{i}}\) spełniającej \(\displaystyle{ \xi (x_{i}) = q}\), pozwala wygenerować ich nieskończenie wiele za pomocą wzoru \(\displaystyle{ x_{i} + 2^{q} \cdot m}\). Oznacza to, że nie musimy przeszukiwać wszystkich liczb z zadanego przedziału, a możemy skupić się tylko na tych, które są postaci \(\displaystyle{ x_{i} + 2^{q} \cdot m}\). Im większe \(\displaystyle{ Q_{i}}\), tym mniej liczb musimy przeszukać (gdy już znajdziemy chociaż jedną o właściwości \(\displaystyle{ \xi (x_{i}) = q}\)). Oznacza to, że trudność nie rośnie tutaj wykładniczo i kopacz, który posłuży się tym wzorem, a znajdzie tylko jedną liczbę \(\displaystyle{ x_{i}}\) o zadanym \(\displaystyle{ Q_{i}}\) bardzo łatwo będzie mógł sprawdzić pozostałe liczby-kandydatów, bez potrzeby przeszukiwania całego ogromnego zbioru wszystkich liczb i szybko wykopie istotną część bloków. A, jeśli by użyć algorytmu znajdowania wszystkich możliwych (w praktyce prawie wszystkich), najmniejszych liczb w ciągu Collatza, które rosną przez zadaną liczbę kroków, można wykopać prawie wszystkie bloki - bo będziemy kopać w tempie wykładniczo szybszym, niż zwykli kopacze. Oni będą przeszukiwać cały zbiór powiedzmy \(\displaystyle{ 2^{64}}\) liczb, a my tylko co \(\displaystyle{ 2^{q}}\)-tą liczbę z tego zbioru, czyli zbiór o wielkości \(\displaystyle{ \frac {2^{64}}{2^{q}}}\).
Ostatnio zmieniony 4 sie 2020, o 10:40 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

matemix pisze: 4 sie 2020, o 22:15Po pierwsze źle zrozumiałem czym jest \(\displaystyle{ \xi (x)}\). Jest to po prostu liczba kroków (iteracji) do maksimum w ciągu. Poprzednio pisałem, że to liczba liczb w ciągu, które są większe od liczby startowej - to nieprawda.
Obie wersje są nieprawdziwe. Zgodnie z (lekko przekształconą) definicją z pracy:

\(\displaystyle{ \xi(x) = \operatorname{card} \big\{ k \ge 1 : T^k(x) > \max \{ T^0(x), T^1(x), \ldots, T^{k-1}(x) \} \big\}}\)

jest to liczba takich wyrazów ciągu \(\displaystyle{ x, T(x), T(T(x)), T(T(T(x))), \ldots}\), z wyłączeniem pierwszego, które są większe od wszystkich wyrazów poprzednich.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Czyli, jeśli mamy:

\(\displaystyle{ 14,7,11,17,26,13,20,10,5,8,4,2,1}\)

to \(\displaystyle{ \xi(14) = 2}\), bo liczby większe od poprzednich to \(\displaystyle{ 17,26}\)?

A dla:

\(\displaystyle{ 39,59,89,134,67,101,152,76,38,19,29,44,22,11,17,26,13,20,10,5,8,4,2,1}\)

mamy wyrazy większe niż poprzednie: \(\displaystyle{ 59,89,134,152}\), czyli \(\displaystyle{ \xi(39) = 4}\)?
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

Tak.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Ok. Więc, pomijając algorytm, który umożliwia znalezienie liczby, która realizuje dowolną sekwencję przekształceń w ciągu Collatza, które sobie wymyślimy, załóżmy, że \(\displaystyle{ Q=2}\) tak jak w przykładzie \(\displaystyle{ \xi(14)=2}\) i natrafimy na liczbę \(\displaystyle{ 302}\):

\(\displaystyle{ 302, 151, 227, 341, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1}\)

Teraz na podstawie bijekcji Terrasa możemy łatwo znaleźć inne liczby realizujące dokładnie te same sekwencje \(\displaystyle{ 13}\) przekształceń. Będą to liczby postaci \(\displaystyle{ 302+2^{13} \cdot m}\). Pierwsza z brzegu \(\displaystyle{ 8494}\) daje nam:

\(\displaystyle{ 8494, 4247, 6371, 9557, 14336, 7168, 3584, 1792, 896, 448, 224, 112, 56, 28, 14, 7}\)

Końcowa liczba \(\displaystyle{ 7}\) statystycznie z małym prawdopodobieństwem wygeneruje w dalszej kolejności ciąg, który mógłby przebić dotychczasowe maksimum (i w tym przypadku nie generuje takiego ciągu). Stąd każda liczba postaci \(\displaystyle{ 302+2^{13} \cdot m}\) daje nam duże szanse na to, że to czwarty wyraz ciągu liczb postaci \(\displaystyle{ 302+2^{13} \cdot m}\) będzie maksimum tego ciągu i, że \(\displaystyle{ \xi}\) będzie równe \(\displaystyle{ 2}\). Zyskujemy znaczną przewagę (tym większą, im większe \(\displaystyle{ \xi}\)) i całkiem pokaźny zbiór liczb spełniających zadane \(\displaystyle{ \xi=2}\), tylko dlatego, bo natrafiliśmy na \(\displaystyle{ 302}\), której ciąg po osiągnięciu maksimum malał przez wiele iteracji. Daje to możliwość oszukania takiej sieci, gdy natrafimy na odpowiednia liczbę, a tym bardziej, jeśli potrafimy sztucznie wygenerować zadaną sekwencję, zaplanować po ilu krokach osiągnie maksimum i znaleźć najmniejszą liczbę, która taką sekwencję realizuje (nie chcę się wdawać w szczegóły metody, ale jest to możliwe), a później wygenerować sobie pozostałe liczby postaci \(\displaystyle{ x+2^{n} \cdot m}\).
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

Nie wczytywałem się za bardzo w linkowany artykuł, ale proponowany przez Ciebie atak na opisaną tam metodę wygląda bardzo sensownie.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Algorytm znajdowania liczby, która spełnia dowolną zadaną sekwencję przekształceń nie jest znany w literaturze naukowej, jest moim autorskim wynalazkiem, stąd autor może nie zdawać sobie z niego sprawy. Nie chcę go też jeszcze w tej chwili publikować, z przyczyn niezależnych od tej pracy (ma mieć i od początku miał mieć inne przeznaczenie).

W każdym razie autor, żeby wydobyć pierwszy blok genesis hash ustalił target na \(\displaystyle{ Q=40}\) i wydobycie tego bloku zajęło mu 28 minut. Przyjął on block header hash, będący tym samym co \(\displaystyle{ B}\) na wynoszący:

\(\displaystyle{ B=25248903652996148805237565338196318809513309980842754974279018460154571249344}\)

I znalazł \(\displaystyle{ \xi(x)=40=Q}\) dla \(\displaystyle{ x=25248903652996148805237565338196318809513309980842754974279018460154574670335}\), czyli przeszukał \(\displaystyle{ 3420991}\) liczb następujących po \(\displaystyle{ B}\). Ja natomiast zrobiłbym to tak. Najpierw zaplanowałbym arbitralnie sekwencję przekształceń w ciągu Collatza, która sprawi, że ciąg osiągnie maksumum po \(\displaystyle{ 40}\) krokach. Niech jedynka oznacza przekształcenie \(\displaystyle{ 1,5x+0,5}\), a zero oznacza \(\displaystyle{ x/2}\). Interesuje nas sekwencja (\(\displaystyle{ 80}\) kroków):

11111111111111111111111111111111111111110000000000000000000000000000000000000000

Jeśli potrafimy znaleźć liczbę, która daje taką sekwencję przekształceń, możemy być niemal pewni, że czterdzieste przekształcenie \(\displaystyle{ 1,5x+0,5}\) pod rząd zada maksimum tego ciągu. Później sztucznie zaimplementowaliśmy sobie wiele dzieleń przez dwa, co zakończy sekwencję jakąś małą liczbą i mało prawdopodobne jest, że liczba ta w kolejnych iteracjach wygeneruje jakieś nowe maksimum ciągu (właśnie dlatego, bo ciagi te realizują coś w rodzaju procesu Browna - musiałoby nastąpić w takim ciągu znacznie więcej mnożeń niż dzieleń, co jest mało prawdopodobne, skoro w każdym kolejnym kroku dzielenie lub mnożenie następuje z równym prawdopodobieństwem - a przynajmniej tak możemy modelować to co się dzieje w ciągach Collatza).

Znalazłem sobie więc najmniejszą taką liczbę, która generuje taki zadany ciąg przekształceń w ciągu Collatza, jest to \(\displaystyle{ 148021978527821717307391}\). Liczba najpierw przez \(\displaystyle{ 40}\) kroków będzie rosła, później, tak jak pisałem zacznie spadać. Jest ona jednak za mała. Korzystamy więc z bijekcji Terrasa i znajdujemy najmniejszą (nie musi być najmniejsza, ale tak będzie najszybciej) liczbę o takiej sekwencji przekształceń większą od zadanego \(\displaystyle{ B=25248903652996148805237565338196318809513309980842754974279018460154571249344}\). Musimy rozwiązać:

\(\displaystyle{ 148021978527821717307391+2^{80} \cdot m > 25248903652996148805237565338196318809513309980842754974279018460154571249344}\)

Znaleźć najmniejsze \(\displaystyle{ m}\) spełniające równanie. Wychodzi, że \(\displaystyle{ m = 20885403589977732482628155515015509005787362321570630}\). A zatem możemy przyjąć \(\displaystyle{ x=148021978527821717307391+2^{80} \cdot 20885403589977732482628155515015509005787362321570630}\), czyli \(\displaystyle{ x=25248903652996148805237565338196318809513309980842755198134523602178798518271}\).

Nie ma 100% pewności, że nasze \(\displaystyle{ x}\) da nam \(\displaystyle{ \xi(x)=40}\). Trzeba dokonać sprawdzenia, ale sprawdzenie potwierdza, że \(\displaystyle{ \xi(x)=40}\) dla tej liczby (jeśli by tak nie było zwiększamy \(\displaystyle{ m}\) i testujemy kolejną liczbę, bardzo szybko natrafimy na właściwe rozwiązanie, wynika to z prawdopodobieństwa, liczba końcowa jest bardzo mała, bo wpisaliśmy sobie dużo dzieleń w sekwencję i raczej nie wygeneruje ona nowego maksimum). Cała procedura zajmuje \(\displaystyle{ 0,08}\) sekund, na zwykłym niezoptymalizowanym kodzie w Pythonie, autorowi zajęło to 28 minut (i nadal będą to ułamki sekund nawet dla dużych \(\displaystyle{ Q}\), które mogą zająć zwykłym PC lata). Wynika to z faktu, że ten mój autorski algorytm jest naprawdę szybki.

Dzięki za pomoc w zrozumieniu definicji, którą autor zaproponował i to by było na tyle, jeśli chodzi o moje spostrzeżenia ;)
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

matemix pisze: 6 sie 2020, o 20:36Algorytm znajdowania liczby, która spełnia dowolną zadaną sekwencję przekształceń nie jest znany w literaturze naukowej, jest moim autorskim wynalazkiem, stąd autor może nie zdawać sobie z niego sprawy.
Bez urazy, ale wymyślenie algorytmu o którym mówisz jest zadaniem w zasięgu ambitnego licealisty, nic więc dziwnego, że nikt nie widział potrzeby zapisywania takiegoż w pracy naukowej.
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Dasio11 pisze: 6 sie 2020, o 22:05
matemix pisze: 6 sie 2020, o 20:36Algorytm znajdowania liczby, która spełnia dowolną zadaną sekwencję przekształceń nie jest znany w literaturze naukowej, jest moim autorskim wynalazkiem, stąd autor może nie zdawać sobie z niego sprawy.
Bez urazy, ale wymyślenie algorytmu o którym mówisz jest zadaniem w zasięgu ambitnego licealisty, nic więc dziwnego, że nikt nie widział potrzeby zapisywania takiegoż w pracy naukowej.
Faktycznie, jeśli mówimy o liczbach, które zadają ciąg \(\displaystyle{ n}\) przekształceń typu \(\displaystyle{ 1,5x+0,5}\) pod rząd, to jest proste. Wiadomo, że liczby postaci \(\displaystyle{ 2^n \cdot k-1}\) skutkują \(\displaystyle{ n}\) takimi iteracjami i dają na końcu liczbę postaci \(\displaystyle{ 3^n \cdot k -1}\) (zresztą jest to znany fakt, zapisany w wielu pracach naukowych). Trudniej znaleźć takie \(\displaystyle{ 3^n \cdot k -1}\), które będą podzielne powiedzmy również \(\displaystyle{ n}\) razy przez \(\displaystyle{ 2}\), czyli przez \(\displaystyle{ 2^{n}}\), ale da się to zrobić w ramach jakiejś procedury. Właściwie ta wiedza wystarczy do najprostszego rodzaju ataku, tak jak to opisałem.

Natomiast, jeśli chcielibyśmy wygenerować inne rodzaje ciągów, nie tylko takie, w których występują same mnożenia pod rząd, to raczej nie wydaje mi się to proste (choć w celu ataku tego proof of work raczej nie ma takiej konieczności). Np. znalezienie liczby, która skutkuje taką losową kolejnością iteracji:

10101101110101111110100101111010000000000000000000000000

To o takim uniwersalnym algorytmie pisałem. Ale teraz uświadomiłem sobie, że on wcale nie jest niezbędny i faktycznie wystarczy wiedza w zasięgu ambitnego licealisty dotycząca liczb postaci \(\displaystyle{ 3^n \cdot k-1}\) i też osiągniemy przyzwoite efekty (nie ma sensu atakować tego bardziej skomplikowanymi sekwencjami). Tym bardziej źle świadczy to o autorze tej publikacji. To chyba nie jest zawodowy matematyk.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

matemix pisze: 6 sie 2020, o 23:45Natomiast, jeśli chcielibyśmy wygenerować inne rodzaje ciągów, nie tylko takie, w których występują same mnożenia pod rząd, to raczej nie wydaje mi się to proste (choć w celu ataku tego proof of work raczej nie ma takiej konieczności). Np. znalezienie liczby, która skutkuje taką losową kolejnością iteracji:

10101101110101111110100101111010000000000000000000000000

To o takim uniwersalnym algorytmie pisałem.
Ja też.

Wystarczy bowiem zauważyć, że dla każdego ciągu binarnego \(\displaystyle{ s \in \{ 0, 1 \}^n}\) istnieje takie \(\displaystyle{ 0 \le r(s) < 2^n}\), że

\(\displaystyle{ C(s) = \left\{ x \in \NN : x \equiv r(s) \pmod{2^n} \right\}}\)

przy czym \(\displaystyle{ C(s)}\) oznacza zbiór takich liczb naturalnych, które podczas kolejnych \(\displaystyle{ n}\) iteracji procedury Collatza zachowują się w sposób kodowany przez \(\displaystyle{ s}\). Oczywiście \(\displaystyle{ r(\left<\right>) = 0}\), a dalej: załóżmy, że dla jakiegoś \(\displaystyle{ s \in \{ 0, 1 \}^n}\) znamy już \(\displaystyle{ r = r(s)}\). Wtedy \(\displaystyle{ r' = r(0^{\frown}s)}\) i \(\displaystyle{ r'' = r(1^{\frown}s)}\) znajduje się przez rozwiązanie równań:

\(\displaystyle{ \begin{cases} \frac{r'}{2} \equiv r \pmod{2^n} \\ \frac{3r''+1}{2} \equiv r \pmod{2^n} \end{cases}}\)

czyli równoważnie

\(\displaystyle{ \begin{cases} r' \equiv 2r \pmod{2^{n+1}} \\ r'' \equiv \frac{1}{3} (2r-1) \pmod{2^{n+1}} \end{cases}}\)

(gdzie oczywiście \(\displaystyle{ \textstyle \frac{1}{3}}\) oznacza odwrotność \(\displaystyle{ 3}\) modulo \(\displaystyle{ 2^{n+1}}\), której istnienie wynika ze względnej pierwszości tych dwóch liczb).

I to w zasadzie jest już opis procedury rekurencyjnej obliczającej \(\displaystyle{ r(s)}\) dla dowolnie zadanego \(\displaystyle{ s \in \{ 0, 1 \}^n}\).
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Dasio11 pisze: 7 sie 2020, o 08:56
matemix pisze: 6 sie 2020, o 23:45Natomiast, jeśli chcielibyśmy wygenerować inne rodzaje ciągów, nie tylko takie, w których występują same mnożenia pod rząd, to raczej nie wydaje mi się to proste (choć w celu ataku tego proof of work raczej nie ma takiej konieczności). Np. znalezienie liczby, która skutkuje taką losową kolejnością iteracji:

10101101110101111110100101111010000000000000000000000000

To o takim uniwersalnym algorytmie pisałem.
Ja też.

Wystarczy bowiem zauważyć, że dla każdego ciągu binarnego \(\displaystyle{ s \in \{ 0, 1 \}^n}\) istnieje takie \(\displaystyle{ 0 \le r(s) < 2^n}\), że

\(\displaystyle{ C(s) = \left\{ x \in \NN : x \equiv r(s) \pmod{2^n} \right\}}\)

przy czym \(\displaystyle{ C(s)}\) oznacza zbiór takich liczb naturalnych, które podczas kolejnych \(\displaystyle{ n}\) iteracji procedury Collatza zachowują się w sposób kodowany przez \(\displaystyle{ s}\). Oczywiście \(\displaystyle{ r(\left<\right>) = 0}\), a dalej: załóżmy, że dla jakiegoś \(\displaystyle{ s \in \{ 0, 1 \}^n}\) znamy już \(\displaystyle{ r = r(s)}\).
Ale dla zadanego \(\displaystyle{ s \in \{ 0, 1 \}^n}\) nie znamy żadnego \(\displaystyle{ r = r(s)}\). Musimy takie jakiekolwiek \(\displaystyle{ r = r(s)}\) dopiero znaleźć (najlepiej najmniejsze). Problem - jak to zrobić?
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

Wiesz na czym polega procedura rekurencyjna?
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Tak.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: Dasio11 »

W takim razie jest chyba jasne, że jeśli znamy \(\displaystyle{ r( \left< \right>)}\) i dla każdego \(\displaystyle{ s \in \{ 0, 1 \}^n}\), znając \(\displaystyle{ r(s)}\) potrafimy wyznaczyć \(\displaystyle{ r(0^{\frown}s)}\) i \(\displaystyle{ r(1^{\frown}s)}\), to potrafimy wyznaczyć \(\displaystyle{ r(s)}\) dla każdego \(\displaystyle{ s}\)?
matemix
Użytkownik
Użytkownik
Posty: 465
Rejestracja: 10 cze 2008, o 19:38
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 12 razy
Pomógł: 1 raz

Re: Nowy pomysł proof of work oparty o ciągi Collatza

Post autor: matemix »

Czym jest \(\displaystyle{ r( \left< \right>)}\)? Czym jest \(\displaystyle{ r(s)}\)? Czym jest \(\displaystyle{ r(0^{\frown}s)}\) i \(\displaystyle{ r(1^{\frown}s)}\)? Czym jest \(\displaystyle{ r}\)?

Dodano po 1 godzinie 8 minutach 14 sekundach:
Dasio11 pisze: 7 sie 2020, o 08:56 I to w zasadzie jest już opis procedury rekurencyjnej obliczającej \(\displaystyle{ r(s)}\) dla dowolnie zadanego \(\displaystyle{ s \in \{ 0, 1 \}^n}\).
Jak znaleźć w ramach tej procedury \(\displaystyle{ r(s)}\) dla \(\displaystyle{ 1100111010101101}\)?
ODPOWIEDZ