Graph of valued paths

Hello everyone,

I’d like to share a little experimental hike I enjoyed in Collatz land last week.

Preamble (known stuff)

Consider the parity vector [1,1,0,0,0] which is support to the rational cycle \frac{5}{23}, \frac{19}{23}, \frac{40}{23}, \frac{20}{23}, \frac{10}{23} :

>>> import coreli
>>> pv = coreli.ParityVector([1,1,0,0,0])
>>> pv.cyclic_rational()
5/23

In terms of tilings, this parity vector corresponds to the following valued path:
[(↙,4), (↙,4), (←,0), (←,0), (←,0)]

A valued path is a sequence of valued arrows.

A valued arrow is a tuple (arrow, value) with arrow in {←, →, ↑, ↓, ↖,↘, ↙, ↗} and value in of {0, 1} for horizontal arrows, {0, 1, 2} for vertical arrows, and in {0,1,2,3,4,5} for diagonal arrows.

Each valued arrow computes a function (see Figure 1.9) , e.g. the function computed by (←,0) is x \mapsto \frac{x}{2} and the function computed by (↙,4) is x \mapsto \frac{3x+1}{2}, sounds familiar? The function computed by a valued path is the composition of the functions computed by the arrows (Definition 1.9).

You van think of valued path as mixed bases representations.

Parity vectors are transformed to valued path in a trivial way:

  • entries 0 of the parity vector are mapped to (←,0)
  • entries 1 of the parity vector are mapped to (↙,4)

Then, if you lay out infinitely many copies of the valued path in space:

An you start tiling with the 6 Collatz tiles (you place tile 4 on each (↙,4) and south edge 0 on each (←,0), which is enough to uniquely tile the region top-left of the path because the tiles are deterministic in the top-left direction), you will see appear, 2-adic, 3-adic and 6-adic representations of the rationals of the cycle, here, \frac{5}{23}, \frac{19}{23}, \frac{40}{23}, \frac{20}{23}, \frac{10}{23} :

For instance, each line ending in a black dot reads (01100100001)* 1, which although might not be obvious at first sight, is the 2-adic expansion of \frac{5}{23} :slight_smile:

>>> Z2 = coreli.Padic(2)
>>> Z2.from_rational(sympy.Rational(5,23)).rational_periodic_representation()
'(01100100001)* 1'

Graph of valued paths (new stuff)

Now, we are going to build a directed graph where nodes are all the valued paths that share the same arrow sequence (here, [↙, ↙, ←, ←, ←]) but that have all the possible different values for these arrows, e.g. in our case there are 6*6*2*2*2 = 288 nodes.

From there, consider the translation of the parity vector, one up and one right, represented between the two magenta points below (I only put one instance, not to flood the screen):

This new valued path reads:
[(↙,3), (↙,2), (←,1), (←,0), (←,0)]

Hence in our graph, we add the edge:

[(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,3), (↙,2), (←,1), (←,0), (←,0)]

Furthermore, we label this arrow by (↖, 1) which is what we read under the magenta arrow in the above example. You can also add edges labelled by other translations than “one up one left”, see collapsable below. In the following, we ignore these extra edges, i.e. all our edges are labelled by .

Neighbours for ←, ↑ and ↗. We can also add additional neighbours for the translations `←`, `↑` and `↗`, which in the above case gives, in total, the edges:
  • [(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,3), (↙,2), (←,1), (←,0), (←,0)], labelled (↖, 1)
  • [(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,1), (↙,5), (←,0), (←,1), (←,0)], labelled (↑, 1)
  • [(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,5), (↙,2), (←,0), (←,0), (←,1)], labelled (←, 1)
  • [(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,2), (↙,4), (←,1), (←,0), (←,1)], labelled (↗, 2)

Using these cyclic tilings, you can make this construction for all the possible valued paths of the graph (288 in our example) and that way construct all the edges.

What’s the point?

Call 0 the valued path where all values are 0, e.g. in our case [(↙,0),(↙,0),(←,0),(←,0),(←,0)].

Then, from my thesis, we know that the parity vector creates a non-negative integer cycle if and only if the valued path obtained from the parity vector (e.g. in our example, [(↙,4), (↙,4), (←,0), (←,0), (←,0)]) and 0 (e.g. in our example, [(↙,0),(↙,0),(←,0),(←,0),(←,0)]) are in the same connected component of the graph of valued paths.

Said otherwise, it’s worth studying the connected component of 0.

For instance, here is the connected component of [(↙,0),(↙,0),(←,0),(←,0),(←,0)] (in the subgraph where we consider edges labelled by :up_left_arrow:, i.e. translations by “one up one left”):

{(('↙', 0), ('↙', 0), ('←', 0), ('←', 0), ('←', 0)),
 (('↙', 0), ('↙', 1), ('←', 0), ('←', 0), ('←', 0)),
 (('↙', 0), ('↙', 2), ('←', 1), ('←', 0), ('←', 0)),
 (('↙', 1), ('↙', 0), ('←', 0), ('←', 0), ('←', 0)),
 (('↙', 1), ('↙', 1), ('←', 0), ('←', 0), ('←', 0)),
 (('↙', 1), ('↙', 2), ('←', 1), ('←', 0), ('←', 0)),
 (('↙', 2), ('↙', 3), ('←', 1), ('←', 0), ('←', 0)),
 (('↙', 2), ('↙', 4), ('←', 0), ('←', 1), ('←', 0)),
 (('↙', 2), ('↙', 5), ('←', 0), ('←', 1), ('←', 0))}

This one is cute :slight_smile: we kind of see a numeral system. And, we clearly have that [(↙,4), (↙,4), (←,0), (←,0), (←,0)] is not in the connected component.

Function computed by valued paths in the component of 0

The function computed by any valued path of the connected component of 0 (see preamble) is the same, of the form x \mapsto Ax + 0, while in other components, the function is generally different for all the elements, e.g. the function computed by [(↙,4), (↙,4), (←,0), (←,0), (←,0)] is \frac{9}{32}x + \frac{5}{32} and the one its successor [(↙,3), (↙,2), (←,1), (←,0), (←,0)] is \frac{9}{32}x - \frac{3}{32}. And, yes, the factor in front of x is always 3^k/2^n with k the number of 1s in the parity vectors and n the length of the parity vector.

Of course, Collatz being Collatz, we can quickly encounter connected components of 0 that just look chaotic/“meh”, example in collapsable below.

Connected component of 0 for parity vector [0,1,1,1]

Here we consider parity vector [0,1,1,1], hence, 0 = [(←, 0), (↙, 0), (↙, 0), (↙, 0)]

{(('←', 0), ('↙', 0), ('↙', 0), ('↙', 0)),
 (('←', 0), ('↙', 0), ('↙', 0), ('↙', 1)),
 (('←', 0), ('↙', 0), ('↙', 1), ('↙', 0)),
 (('←', 0), ('↙', 0), ('↙', 1), ('↙', 1)),
 (('←', 0), ('↙', 1), ('↙', 0), ('↙', 0)),
 (('←', 0), ('↙', 1), ('↙', 0), ('↙', 1)),
 (('←', 0), ('↙', 1), ('↙', 1), ('↙', 0)),
 (('←', 0), ('↙', 1), ('↙', 1), ('↙', 1)),
 (('←', 0), ('↙', 3), ('↙', 3), ('↙', 4)),
 (('←', 0), ('↙', 3), ('↙', 3), ('↙', 5)),
 (('←', 1), ('↙', 0), ('↙', 0), ('↙', 2)),
 (('←', 1), ('↙', 0), ('↙', 1), ('↙', 2)),
 (('←', 1), ('↙', 0), ('↙', 2), ('↙', 3)),
 (('←', 1), ('↙', 1), ('↙', 0), ('↙', 2)),
 (('←', 1), ('↙', 1), ('↙', 1), ('↙', 2)),
 (('←', 1), ('↙', 1), ('↙', 2), ('↙', 3)),
 (('←', 1), ('↙', 2), ('↙', 3), ('↙', 3)),
 (('←', 1), ('↙', 3), ('↙', 4), ('↙', 0)),
 (('←', 1), ('↙', 3), ('↙', 4), ('↙', 1)),
 (('←', 1), ('↙', 3), ('↙', 5), ('↙', 0)),
 (('←', 1), ('↙', 3), ('↙', 5), ('↙', 1))}

Then what?

For the moment, I have studied this graph in a rather entropic way and don’t have much to say but the following two things:

First thing

The connected component of 0 always has a symmetric, which we shall call the connected component of valued path which we call -1 where all diagonal arrows have value 5 and horizontal arrows have value 1. For instance, here is the connected component of -1 = [(↙,5), (↙,5), (←,1), (←,1), (←,1)] in our previous example:

{(('↙', 3), ('↙', 0), ('←', 1), ('←', 0), ('←', 1)),
 (('↙', 3), ('↙', 1), ('←', 1), ('←', 0), ('←', 1)),
 (('↙', 3), ('↙', 2), ('←', 0), ('←', 1), ('←', 1)),
 (('↙', 4), ('↙', 3), ('←', 0), ('←', 1), ('←', 1)),
 (('↙', 4), ('↙', 4), ('←', 1), ('←', 1), ('←', 1)),
 (('↙', 4), ('↙', 5), ('←', 1), ('←', 1), ('←', 1)),
 (('↙', 5), ('↙', 3), ('←', 0), ('←', 1), ('←', 1)),
 (('↙', 5), ('↙', 4), ('←', 1), ('←', 1), ('←', 1)),
 (('↙', 5), ('↙', 5), ('←', 1), ('←', 1), ('←', 1))}

The connected components experimentally always have the same number of elements and I’m 99% sure that they are always isomorphic, in a way that is still to be characterised. Note that there is a known “multiplication by -1” operation on tilings that always work: swap all tiles 5 by 0, 2 by 3 and 1 by 4, and you get a valid tiling where each number is multiplied by -1. I strongly suspect this what is at play here.

Second thing

For each valued path, the graph has by definition the structure of a functional graph, meaning that the out-degree of each node is 1. This means that each connected component consists of a unique cycle of valued path (the attractor cycle), which I call kernel (not to confuse with Collatz cycles) and a collection of trees whose vertices eventually flow into it.

And now, something fun about kernel sizes, which is experimentally true but that I don’t understand:

Experimentally, the number of components and the distribution of kernel sizes is only a function of the number of 1s in the parity vector.

Here is this phenomenon examplified for all irreducible parity vectors of size 6: for each, I construct the graph of valued paths, count the number of components and then list the number of elements per components and per components’ kernel.

For instance, each parity vector with four 1s has 3 components and although components sizes may very, distribution of kernel sizes 1,16,1.

Also, in the below I marked the component of 0 with ° in the size columns, of the parity vector with + and of -1 with ^. You can see that in general, the component of the parity vector is way bigger than the components of 0 and -1. Also note that no component is both marked with ° and + since we don’t show (0, 1, 0, 1, 0, 1) which is three repetitions of the trivial parity vectors, as (0, 1, 0, 1, 0, 1) is not irreducible.

parity vector: (0, 0, 0, 0, 0, 1)
	components: 3
		size	kernel size
		3°	    1
		186+    60
		3^	    1

parity vector: (0, 0, 0, 0, 1, 1)
	components: 11
		size	kernel size
		9°	    1
		104	    10
		107	    10
		107	    10
		104	    10
		100+	10
		9	    1
		9	    1
		9	    1
		9	    1
		9^	    1

parity vector: (0, 0, 0, 1, 0, 1)
	components: 11
		size	kernel size
		9°	1
		106	    10
		104	    10
		104	    10
		106+    10
		98	    10
		11	    1
		9	    1
		9	    1
		11	    1
		9^	    1

parity vector: (0, 0, 0, 1, 1, 1)
	components: 11
		size	kernel size
		27°	    1
		188	    4
		194	    4
		188	    4
		190	    4
		182	    4
		188	    4
		176	    4
		182+    4
		186	    4
		27^	    1

parity vector: (0, 0, 1, 0, 1, 1)
	components: 11
		size	kernel size
		31°	    1
		190	    4
		196+    4
		210	    4
		174	    4
		182	    4
		186	    4
		212	    4
		150	    4
		166	    4
		31^	    1

parity vector: (0, 0, 1, 1, 0, 1)
	components: 11
		size	kernel size
		29°	    1
		188	    4
		192	    4
		184	    4
		170	    4
		200	    4
		194	    4
		180+	4
		184	    4
		178	    4
		29^	    1

parity vector: (0, 0, 1, 1, 1, 1)
	components: 3
		size	kernel size
		159°	1
		4866+	16
		159^	1

parity vector: (0, 1, 0, 1, 1, 1)
	components: 3
		size	kernel size
		164°	1
		4856+	16
		164^	1

parity vector: (0, 1, 1, 1, 1, 1)
	components: 3
		size	kernel size
		69°	    1
		15414+	178
		69^	    1

I’d love to prove this structural fact that kernel distributions are the same (at least, experimentally) for parity vectors with same number of 1s! This fact gives me the hope that these kernels might be… isomorphic among parity vectors with same number of 1s which could be useful in order to put these parity vectors “in the same bag”.

Summary & next steps

  • Studying non-negative Collatz cycles can be reduced to studying the connected component of 0 in the graph of valued paths (and, I think, studying negative Collatz cycles can be reduced to studying the connected component of -1).
  • As pointed above, this graph seems to have some valuable structure.
  • The nice thing about these graphs is that it is easy to generate them and construct a big database of them (for instance, for irreducible parity vectors up to length… 20 or so).
  • This data could be useful in order to, maybe, understand the connected component of 0 or at least in some cases.

Don’t hesitate to ask any question you may have :slight_smile:

Notes:

  • 0 and -1 are always fixed points, i.e. sole member of their component’s kernel

  • The valued path corresponding to the parity vector never has a parent in the graph

1 Like

ERRATUM:

The kernel size data I had originally posted were computed in the graph where edges are labelled by ← instead of :up_left_arrow: as claimed, I updated the data (the experimental result that kernel size distributions depend only on number of “1s” remains unchanged).

FOLLOW UP:

The idea that kernels are isomorphic between different parity vectors with same number of 1s seems to be true, here is an example based on:

parity vector: (0, 0, 0, 0, 1, 1)
	components: 11
		size	kernel size
		9°	    1
		104	    10
		107	    10
		107	    10
		104	    10
		100+	10
		9	    1
		9	    1
		9	    1
		9	    1
		9^	    1

parity vector: (0, 0, 0, 1, 0, 1)
	components: 11
		size	kernel size
		9°	    1
		106	    10
		104	    10
		104	    10
		106+    10
		98	    10
		11	    1
		9	    1
		9	    1
		11	    1
		9^	    1

Both of their first (in order of my code’s enumeration) kernel of size 10 contain valued paths with a 1-1 correspondence in terms of computed functions by the paths:

For (0, 0, 0, 0, 1, 1):

(('←', 1), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3)) 9*x/64 - 41/64
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 3), ('↙', 4)) 9*x/64 - 1/4
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 0)) 9*x/64 - 21/64
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 1), ('↙', 5)) 9*x/64 - 31/64
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 1)) 9*x/64 - 51/64
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 0), ('↙', 1)) 9*x/64 - 9/16
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 0)) 9*x/64 - 3/32
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 4), ('↙', 4)) 9*x/64 - 1/64
(('←', 0), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) 9*x/64 - 23/32
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2)) 9*x/64 - 13/32

For (0, 0, 0, 1, 0, 1):

(('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('←', 1), ('↙', 5)) 9*x/64 - 23/32
(('←', 0), ('←', 1), ('←', 0), ('↙', 3), ('←', 1), ('↙', 2)) 9*x/64 - 13/32
(('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('←', 0), ('↙', 3)) 9*x/64 - 41/64
(('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('←', 1), ('↙', 4)) 9*x/64 - 1/4
(('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('←', 0), ('↙', 0)) 9*x/64 - 21/64
(('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('←', 1), ('↙', 5)) 9*x/64 - 31/64
(('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('←', 1), ('↙', 1)) 9*x/64 - 51/64
(('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('←', 0), ('↙', 1)) 9*x/64 - 9/16
(('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('←', 0), ('↙', 0)) 9*x/64 - 3/32
(('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('←', 0), ('↙', 4)) 9*x/64 - 1/64

Here is the correspondence per function computed:

9*x/64 - 41/64
(('←', 1), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3))
(('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('←', 0), ('↙', 3))

9*x/64 - 1/4
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 3), ('↙', 4))
(('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('←', 1), ('↙', 4))

9*x/64 - 21/64
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 0))
(('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('←', 0), ('↙', 0))

9*x/64 - 31/64
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 1), ('↙', 5))
(('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('←', 1), ('↙', 5))

9*x/64 - 51/64
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 1))
(('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('←', 1), ('↙', 1))

9*x/64 - 9/16
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 0), ('↙', 1))
(('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('←', 0), ('↙', 1))

9*x/64 - 3/32
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 0))
(('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('←', 0), ('↙', 0))

9*x/64 - 1/64
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 4), ('↙', 4))
(('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('←', 0), ('↙', 4))

9*x/64 - 23/32
(('←', 0), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5))
(('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('←', 1), ('↙', 5))

9*x/64 - 13/32
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2))
(('←', 0), ('←', 1), ('←', 0), ('↙', 3), ('←', 1), ('↙', 2))

You can see that all components are equal but for the “swap” ←↙ to ↙← and in fact, the chosen values make these commute, for instance, for the last function:

  • (←, 1), (↙, 1) computes \frac{3}{4}x - \frac{3}{4}
  • (↙, 3), (←, 1) computes \frac{3}{4}x - \frac{3}{4}

Also, within the same graph, kernels with same size are not isomorphic wrt to computed function, here is the second (in order of my code’s enumeration) size 10 kernel with computed fucntions of (0, 0, 0, 0, 1, 1):

(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) 9*x/64 - 37/64
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 3), ('↙', 5)) 9*x/64 - 13/16
(('←', 1), ('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('↙', 0)) 9*x/64 - 27/64
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3)) 9*x/64 - 1/2
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 1)) 9*x/64 - 21/32
(('←', 1), ('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('↙', 4)) 9*x/64 - 7/64
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 3)) 9*x/64 - 47/64
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2)) 9*x/64 - 17/64
(('←', 0), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 0)) 9*x/64 - 3/16
(('←', 0), ('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('↙', 2)) 9*x/64 - 1/32

These functions are not the same as for the first kernel above (but maybe there is another correspondence, in the same way the components of 0 and -1 are related).

Cool stuff: 2^n - 3^k and its divisors are showing up (with n length of the parity vector and k number of 1s) @oros @mathkook

Below, find all the kernels for parity vector [0,0,0,0,1,1], for each valued path in the kernel I’ve expressed the function computed by the valued path in terms of their slope (always 3^k/2^n) and fix point (i.e. \frac{\text{intercept}}{1-\text{slope}}).

It’s quite beautiful because the denominator of the functions’ fixpoints are the divisors of 55, i.e. 55, 11, 5, 1.

Then you can see how in each kernel with same denominator there is just a different of -1 in each numerator (e.g. -16/55 in Kernel 1, -17/55 in Kernel 2, -18/55 in Kernel 3, -19/55 in Kernel 4). Here in Kernel 5 you get all -1/11 to -10/11, which is cool.

As per the conjecture, these kernels are the same for all parity vectors with same number of 1s and in this case it turns out that the parity vector (i.e. (('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 4), ('↙', 4)) is in the component) of Kernel 5.

Hence I think that the structure of kernels must be easy to describe, in terms of divisors of 2^n - 3^k (hopefully the size of each kernel, the number of kernels of each size and the numerators are also easy to predict).

Kernel 0, size 1
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 0)) (9/64, 0)

Kernel 1, size 10
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 3), ('↙', 4)) (9/64, -16/55)
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 0), ('↙', 1)) (9/64, -36/55)
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2)) (9/64, -26/55)
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 0)) (9/64, -6/55)
(('←', 0), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) (9/64, -46/55)
(('←', 1), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3)) (9/64, -41/55)
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 4), ('↙', 4)) (9/64, -1/55)
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 0)) (9/64, -21/55)
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 1)) (9/64, -51/55)
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 1), ('↙', 5)) (9/64, -31/55)

Kernel 2, size 10
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3)) (9/64, -32/55)
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 3), ('↙', 5)) (9/64, -52/55)
(('←', 0), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 0)) (9/64, -12/55)
(('←', 0), ('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('↙', 2)) (9/64, -2/55)
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 1)) (9/64, -42/55)
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2)) (9/64, -17/55)
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) (9/64, -37/55)
(('←', 1), ('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('↙', 0)) (9/64, -27/55)
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 3)) (9/64, -47/55)
(('←', 1), ('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('↙', 4)) (9/64, -7/55)

Kernel 3, size 10
(('←', 0), ('←', 0), ('←', 0), ('←', 0), ('↙', 3), ('↙', 1)) (9/64, -48/55)
(('←', 0), ('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('↙', 2)) (9/64, -8/55)
(('←', 0), ('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) (9/64, -28/55)
(('←', 0), ('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('↙', 0)) (9/64, -18/55)
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 3)) (9/64, -38/55)
(('←', 1), ('←', 0), ('←', 1), ('←', 0), ('↙', 0), ('↙', 4)) (9/64, -13/55)
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 3)) (9/64, -53/55)
(('←', 1), ('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('↙', 5)) (9/64, -43/55)
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 2), ('↙', 0)) (9/64, -3/55)
(('←', 1), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 2)) (9/64, -23/55)

Kernel 4, size 10
(('←', 0), ('←', 0), ('←', 0), ('←', 1), ('↙', 4), ('↙', 0)) (9/64, -24/55)
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 0), ('↙', 4)) (9/64, -4/55)
(('←', 0), ('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('↙', 5)) (9/64, -34/55)
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 1), ('↙', 1)) (9/64, -54/55)
(('←', 0), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 2)) (9/64, -14/55)
(('←', 1), ('←', 0), ('←', 0), ('←', 0), ('↙', 0), ('↙', 0)) (9/64, -9/55)
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('↙', 5)) (9/64, -49/55)
(('←', 1), ('←', 0), ('←', 1), ('←', 0), ('↙', 4), ('↙', 3)) (9/64, -29/55)
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 5), ('↙', 4)) (9/64, -19/55)
(('←', 1), ('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('↙', 1)) (9/64, -39/55)

Kernel 5, size 10
(('←', 0), ('←', 0), ('←', 0), ('←', 1), ('↙', 1), ('↙', 5)) (9/64, -8/11)
(('←', 0), ('←', 0), ('←', 1), ('←', 0), ('↙', 3), ('↙', 2)) (9/64, -4/11)
(('←', 0), ('←', 1), ('←', 0), ('←', 0), ('↙', 0), ('↙', 3)) (9/64, -10/11)
(('←', 0), ('←', 1), ('←', 0), ('←', 1), ('↙', 4), ('↙', 4)) (9/64, -2/11)
(('←', 0), ('←', 1), ('←', 1), ('←', 1), ('↙', 2), ('↙', 1)) (9/64, -6/11)
(('←', 1), ('←', 0), ('←', 0), ('←', 0), ('↙', 3), ('↙', 4)) (9/64, -5/11)
(('←', 1), ('←', 0), ('←', 1), ('←', 0), ('↙', 1), ('↙', 1)) (9/64, -9/11)
(('←', 1), ('←', 0), ('←', 1), ('←', 1), ('↙', 5), ('↙', 2)) (9/64, -1/11)
(('←', 1), ('←', 1), ('←', 0), ('←', 1), ('↙', 2), ('↙', 3)) (9/64, -7/11)
(('←', 1), ('←', 1), ('←', 1), ('←', 0), ('↙', 4), ('↙', 0)) (9/64, -3/11)

Kernel 6, size 1
(('←', 0), ('←', 1), ('←', 1), ('←', 0), ('↙', 1), ('↙', 4)) (9/64, -2/5)

Kernel 7, size 1
(('←', 1), ('←', 0), ('←', 0), ('←', 1), ('↙', 4), ('↙', 1)) (9/64, -3/5)

Kernel 8, size 1
(('←', 1), ('←', 1), ('←', 0), ('←', 0), ('↙', 3), ('↙', 2)) (9/64, -1/5)

Kernel 9, size 1
(('←', 0), ('←', 0), ('←', 1), ('←', 1), ('↙', 2), ('↙', 3)) (9/64, -4/5)

Kernel 10, size 1
(('←', 1), ('←', 1), ('←', 1), ('←', 1), ('↙', 5), ('↙', 5)) (9/64, -1)

More data supporting the above using random parity vectors.

  • Parity vector [0, 0, 1, 0, 1, 1, 0, 0, 1] gives 2^n - 3^k = 431 which is prime hence we should only see 431 and 1 in the kernels’ valued paths functions fix points denominators. Confirmed by the data (too big for discuss, but not that big).

  • Parity vector [0, 1, 1, 1, 1, 0, 1, 1] gives 2^n - 3^k = -473, divisors are 1, 11, 43 and 473. Which should be the only denominators, confirmed by the data.

  • Parity vector [0, 0, 1, 1, 0, 0, 0, 0] gives 2^n - 3^k = 247, divisors are 1, 13, 19, 247. Which should be the only denominators, confirmed by the data

So you start from a cyclic parity vector, then find the corresponding valued path in CQCA and apply a translation to it to get another valued path which is somehow connected to the first one. By doing so you build a graph of valued path… But which translations are admissible? Horizontal, vertical, diagonal, any combination?

As I understand, if your initial parity vector turns out to be connected to the “null” vector, then you know that your cycle is made of positive integers, which makes sense.

Also, it might be helpful if we had a picture or representation of at least a few edges of your graph when starting from [4 4 0 0 0] as in your first example. What is the size of the kernel in that case?

1 Like

Thank you for your message!!

Note: sometimes discuss replaces the unicode characters for arrows (e.g. ) by blue emoticons (e.g. :up_left_arrow:).

So you start from a cyclic parity vector, then find the corresponding valued path in CQCA and apply a translation to it to get another valued path which is somehow connected to the first one. By doing so you build a graph of valued path… But which translations are admissible? Horizontal, vertical, diagonal, any combination?

So, let me quote my first message (but perhaps not apparent enough):

You can also add edges labelled by other translations than “one up one left”, see collapsable below. In the following, we ignore these extra edges, i.e. all our edges are labelled by .

Meaning that all the data I’ve shared is about the translation “one up one left”, but all other translations are admissible and in my first example I give examples for the following translations: ←, ↑ and :up_right_arrow:; see collapsable named “Neighbours for ←, ↑ and :up_right_arrow:”.

So far, it has been easier for me to focus on the subgraph of just one translation and I chose to focus on :up_left_arrow: but I 100% believe there is value in studying other translations and intend to do so in the future :slight_smile:

One thing I know for instance is that the connected component of 0 contains the same valued paths regardless of the translation (if you can reach 0 using the :up_left_arrow: translation you can reach it from any ←, ↑ and :up_right_arrow: translation). Other than that, kernel numbers, sizes and members may vary from one translation to another.

As I understand, if your initial parity vector turns out to be connected to the “null” vector, then you know that your cycle is made of positive integers, which makes sense.

Yes!

Also, it might be helpful if we had a picture or representation of at least a few edges of your graph when starting from [4 4 0 0 0] as in your first example. What is the size of the kernel in that case?

OK

In the above, we read the following edges:

  • [(↙,4), (↙,4), (←,0), (←,0), (←,0)][(↙,3), (↙,2), (←,1), (←,0), (←,0)] labelled with (↖, 1)
  • [(↙,3), (↙,2), (←,1), (←,0), (←,0)][(↙,1), (↙,2), (←,0), (←,0), (←,1)] labelled with (↖, 3)
  • [(↙,1), (↙,2), (←,0), (←,0), (←,1)][(↙,0), (↙,3), (←,0), (←,0), (←,0)] labelled with (↖, 0)
  • [(↙,0), (↙,3), (←,0), (←,0), (←,0)][(↙,1), (↙,1), (←,0), (←,1), (←,0)] labelled with (↖, 2)

In this case, we have actually reached the kernel after the first edge, because [(↙,3), (↙,2), (←,1), (←,0), (←,0)] is in the kernel, of size 11 (I also give the computed function in terms of slope and fixpoint for each):

Kernel size 11
  (('↙', 2), ('↙', 3), ('←', 1), ('←', 0), ('←', 1)) (9/32, -16/23)
  (('↙', 2), ('↙', 0), ('←', 0), ('←', 1), ('←', 1)) (9/32, -18/23)
* (('↙', 3), ('↙', 2), ('←', 1), ('←', 0), ('←', 0)) (9/32, -3/23)
  (('↙', 1), ('↙', 2), ('←', 0), ('←', 0), ('←', 1)) (9/32, -12/23)
  (('↙', 0), ('↙', 3), ('←', 0), ('←', 0), ('←', 0)) (9/32, -2/23)
  (('↙', 1), ('↙', 1), ('←', 0), ('←', 1), ('←', 0)) (9/32, -8/23)
  (('↙', 4), ('↙', 0), ('←', 1), ('←', 1), ('←', 0)) (9/32, -9/23)
  (('↙', 4), ('↙', 1), ('←', 0), ('←', 0), ('←', 1)) (9/32, -13/23)
  (('↙', 0), ('↙', 4), ('←', 0), ('←', 1), ('←', 0)) (9/32, -6/23)
  (('↙', 3), ('↙', 4), ('←', 0), ('←', 0), ('←', 0)) (9/32, -1/23)
  (('↙', 0), ('↙', 0), ('←', 1), ('←', 0), ('←', 0)) (9/32, -4/23)

By the way, we also get that the size of the Kernel is the length of the period of the parity vector’s cyclic rational, here indeed the 6-adic representation of \frac{5}{23} is (04410132203)* 1 with period of length 11.


For fun, let me give an example in another component than the one of the parity vector, starting from [(↙,4), (↙,4), (←,0), (←,0), (←,1)]:

We read the edges:

  • [(↙,4), (↙,4), (←,0), (←,0), (←,1)][(↙,5), (↙,2), (←,1), (←,1), (←,1)] labelled with (↖, 5)
  • [(↙,5), (↙,2), (←,1), (←,1), (←,1)][(↙,4), (↙,4), (←,1), (←,0), (←,1)] labelled with (↖, 3)
  • [(↙,4), (↙,4), (←,1), (←,0), (←,1)][(↙,1), (↙,5), (←,0), (←,0), (←,1)] labelled with (↖, 3)
  • [(↙,1), (↙,5), (←,0), (←,0), (←,1)][(↙,1), (↙,4), (←,1), (←,1), (←,0)] labelled with (↖, 2)

Again, we were at distance 1 of the kernel, also of size 11:

Kernel size 11
  (('↙', 3), ('↙', 5), ('←', 1), ('←', 0), ('←', 0)) (9/32, -5/23)
  (('↙', 2), ('↙', 3), ('←', 0), ('←', 1), ('←', 1)) (9/32, -20/23)
  (('↙', 4), ('↙', 3), ('←', 1), ('←', 1), ('←', 0)) (9/32, -11/23)
* (('↙', 5), ('↙', 2), ('←', 1), ('←', 1), ('←', 1)) (9/32, -21/23)
  (('↙', 4), ('↙', 4), ('←', 1), ('←', 0), ('←', 1)) (9/32, -15/23)
  (('↙', 1), ('↙', 5), ('←', 0), ('←', 0), ('←', 1)) (9/32, -14/23)
  (('↙', 1), ('↙', 4), ('←', 1), ('←', 1), ('←', 0)) (9/32, -10/23)
  (('↙', 5), ('↙', 1), ('←', 1), ('←', 0), ('←', 1)) (9/32, -17/23)
  (('↙', 2), ('↙', 1), ('←', 1), ('←', 1), ('←', 1)) (9/32, -22/23)
  (('↙', 5), ('↙', 5), ('←', 0), ('←', 1), ('←', 1)) (9/32, -19/23)
  (('↙', 3), ('↙', 2), ('←', 0), ('←', 1), ('←', 0)) (9/32, -7/23)

In the case of this parity vector [1,1,0,0,0], for the :up_left_arrow: translations, there are only two other kernels, of size 1, the kernels of 0 and -1 :slight_smile:

Note that 2^n - 3^k = 23 which is prime, and consistent with only having seen denominators 23 and 1 in our kernels :slight_smile:


Does that make things clearer? Don’t hesitate to ask!

1 Like

Valued path having the same fixpoint denominators is actually an invariant of component and not just an invariant of kernel.

Some preprints from YN Aliyev may be relevant here, for example On integer linear combinations of terms of rational cycles for the generalized 3x+1 problem which can be applied to study the 3-adic patterns of the iterates in a rational cycle.

1 Like

Really cool thank you!! 100% relevant for the translation going up.

@oros Where do you find all these pre-prints?! (Also, it’s an interesting idea to see if two cycle members add to an integer, versus proving that they can’t.)

Most of the time I receive them :slight_smile: (from GScholar alerts, journal editors or directly from the authors)

1 Like

Call a consistent valued path one where a given arrow always uses the same value, here are the consistent valued paths and their fix points for parity vector [1, 0, 1, 0, 0, 0, 0] (marked with * below) which satisfies 2^n - 3^k = 119 which has divisors 1, 7, 17, 119:

  (('↙', 0), ('←', 0), ('↙', 0), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) 0
  (('↙', 1), ('←', 0), ('↙', 1), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) 0
  (('↙', 2), ('←', 0), ('↙', 2), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) 2/17
  (('↙', 3), ('←', 0), ('↙', 3), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) -1/17
* (('↙', 4), ('←', 0), ('↙', 4), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) 1/17
  (('↙', 5), ('←', 0), ('↙', 5), ('←', 0), ('←', 0), ('←', 0), ('←', 0)) 1/17
  (('↙', 0), ('←', 1), ('↙', 0), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -18/17
  (('↙', 1), ('←', 1), ('↙', 1), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -18/17
  (('↙', 2), ('←', 1), ('↙', 2), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -16/17
  (('↙', 3), ('←', 1), ('↙', 3), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -19/17
  (('↙', 4), ('←', 1), ('↙', 4), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -1
  (('↙', 5), ('←', 1), ('↙', 5), ('←', 1), ('←', 1), ('←', 1), ('←', 1)) -1

A few notes:

  • Apart from those representing 0 and -1, they all share the same fixpoint denominator 17, this fact is verified experimentally on all parity vectors I tested, this means that one yields an integer cycle if and only if another one does. The weak Collatz conjecture holds for all non 0 and non -1 consistent valued paths.
  • The valued path ((↙, 3), (←, 0), (↙, 3), (←, 0), (←, 0), (←, 0), (←, 0)) corresponds to \frac{3x-1}{2} iterations and fixpoint (here -1/17 is always the negation of the \frac{3x+1}{2} fixpoint (here 1/17), for any parity vector.
  • These consistent parity vectors work in complement pairs e.g. take the third one from the start and the third one from the end and sum their fixpoints, we have 2/17 -19/17 = -1, this is a kind of “two’s complement”/negation rule.

Here is an example of a non-Collatz integer cycle:

  • Parity vector [1,1,0,0,0,0,1,1,1]
  • Valued path [(↙, 2), (↙, 2), (←, 0), (←, 0), (←, 0), (←, 0), (↙, 5), (↙, 2), (↙, 1)]
  • Note: the valued path is “non-Collatz” because it does not follow the rule of value 4 for arrow :down_left_arrow: and value 0 for arrow ←, see first post.

This generates the integer cycle: 6 → 10 → 16 → 8 → 4 → 2 → 1 → 2 → 4 → 6

Note: because the valued path is not consistent (see previous post) it is not the same function that is applied each time, which is why 4 and 2 appear twice in the above cycle.

Here is a tiled representation of it:

I believe there is value in understanding how valued paths manage to construct integers (i.e. same as studying the connected component of 0).

Interestingly, here are all the integers that can be built using the above path pattern [↙,↙,←,←,←,←,↙,↙,↙]:

-8, -7, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 6, 7

I guess you meant 119.

Not clear for me what you call “fixed points” in this context, apart from 0 and -1. Does it refer to kernels of size 1?

I guess you meant 119.

Yes 119! I updated, thank you :slight_smile:

Not clear for me what you call “fixed points” in this context, apart from 0 and -1. Does it refer to kernels of size 1?

Sorry, I was talking about the fixed points of the valued paths computed functions: each valued path computes an affine function and the fixed point is \frac{\text{intercept}}{1-\text{slope}}, see Graph of valued paths - #4 by cosmo

Not clear for me what you call “fixed points” in this context, apart from 0 and -1. Does it refer to kernels of size 1?

Said otherwise, it is also just the rational that cycles for this valued path (equivalent of the less general Collatz cyclic rationals).

Thanks a lot, I definitely missed this figure (1.9) in your thesis which is essential here. You unlocked something in my mind :slight_smile:
I still need to dig a bit into it however to get a clear picture of what is going on.

1 Like