OK so Beren Gunsolus came up with this really cool tree of numbers that is full of Fibonacci patterns and he and I and some others (Astra Kolomatskaia,
Ophelia) have been spending much of the past few days looking at it.
Now, originally I had started writing a long post where I gave Beren's definition of the tree, as well as a long list of (often Fibonacci-related) patterns we had found in it, not all of which we had proved. Yesterday, though, I figured out a much nicer description of the tree than Beren's original one (but which we can prove is equivalent), and with this nicer description, a lot of the patterns that we'd found become easy to show.
I'm not going to bother listing these easy patterns; you can go looking for them yourself, and proving them yourself -- there are quite a few to find. Not all of what we spotted is so trivial, though! We've still got some big questions about this tree.
[
EDIT August 17th: These questions now have answers! I've written about them
here. I've left the rest of the entry unchanged, note.]
Anyway, to get to the point quickly, I'll start by giving this new definition of the tree and a big question it raises; after that I'll give Beren's original definition of the tree and some of the other questions about it (or just inspired by it) that I don't have an answer to (as well as a third description of the tree, and a conjectural fourth one). Some of these later questions are probably solved in the existing literature, I haven't searched.
So: You've heard of
Zeckendorf representation, right? Well it turns out there's such a thing as
dual Zeckendorf, which is like Zeckendorf representation, except that instead of the restriction being that you can't have two 1's in a row, the restriction is that you can't have two 0's in a row (the implicit 0's before the initial 1 don't count).
One can build up the dual Zeckendorf representation for any whole number, then, by concatenating together some combination of the strings "1" and "10". (Remember, if it's not empty, it has to start with a 1.) This naturally puts the whole numbers into a tree; 0 is the root with dual Zeckendorf representation being the emptpy string, and to get the left child of a node you append a 0, and to get the right child of a node you append 10. I'll call this the "dual Zeckendorf tree".
Beren's tree was this, with 1 added to all the nodes, covering the positive integers instead of the nonnegative integers. I'll call this the "adjusted dual Zeckendorf tree". I'll use here the convention that m is a number in the dual Zeckendorf tree, while n is a number in the adjusted dual Zeckendorf tree, so n=m+1.
If you read across the rows of this tree, from left to right, you get the sequence
1, 2, 3, 4, 6, 5, 8, 7, 11, 10, 16, 9, 14, 13, 21...
This appears to be OEIS sequence
A232560, which is defined as the inverse permutation of
A232559, which is in turn obtained from reading across a
different tree. This other tree that ours is "inverse" to is
not based on anything Fibonacci or Zeckendorf, but instead is based on doubling and adding 1. Why would these two permutations be inverse to one another? I have no idea!
So, question number one:
Is this sequence actually A232560, and why?OK. That's the big question; I'm guessing there's no currently known answer to this one, or else it'd be listed in OEIS. (I might post it to MathOverflow, if Beren doesn't, which I doubt he will.) But it's not the only question.
Anyway, before I get to the other questions, let me give Beren's original definition of the tree.
Beren's original definition was based on constructing it a little bit at a time, starting from the root, which is the number 1.
Then, at each step, we will look for the lowest number in the tree that so far has no children (as the tree has no repeats, this will be well-defined), and we'll give it two children. The left child will be the smallest number not yet in the tree, and the right child will be the sum of the parent and the left child.
Now, as mentioned above, I've sinced proved the equivalence of this original definition, and the more explicit definition above in terms of dual Zeckendorf. But my proof is actually just a slight adaptation of one devised by Ophelia of something very slightly different (well, arguably it's the same, but, one thing at a time).
See, before we thought to look at dual Zeckendorf, we were looking at Zeckendorf, because, I mean, that's much better known. And what Ophelia proved is that, if we let Z(n) be the left-shift operator on Zeckendorf representations, then the left child of n is Z(n-1)+2, which means the right child is Z(Z(n-1))+3.
Now you'll notice that, once you write things in terms of m instead of n, this is almost the same description that I gave above; the only difference is that we're using this Z operation, left-shift on Zeckendorf, instead of, call it Z', left-shift on dual Zeckendorf (although the output of that won't be a well-formed dual Zeckendorf representation). Except actually these are the same thing!
More generally, given finite sets S,T⊆{2,3,4,...}, if Σ
i∈SF
i=Σ
i∈TF
i, then Σ
i∈SF
i+1=Σ
i∈TF
i+1. So left shift is in general well-defined on these "pseudo-Zeckendorf" representations. (I'm assuming this is known, though I haven't checked and it wasn't previously known to me. But I'm pretty sure I can prove it.)
That means that Ophelia's description, and my description, are in fact the same.
Now, Ophelia's coming up with this started with the two of us observing that whenever n is a left child in the tree, n-2(= m-1) ends in a 0 in Zeckendorf, while when n is a right child, n-2(= m-1) ends in a 1 in Zeckendorf.
Of course, by my reformulation above, we can could also say that n is a left child when n-1(= m) ends in a 1 in dual Zeckendorf, and n is a right child when n-1(= m) ends in a 0 in dual Zeckendorf.
So that's interesting -- the last digit of k in Zeckendorf, and of k+1 in dual Zeckendorf, are always opposite. Of course, going through Beren's tree definition is a pretty roundabout way to see this... actually, this is easy to prove from the fact I stated above about the well-definedness of left-shift. (Again, I assume this has to be known.)
But here's a question, not involving the tree, but inspired by the tree. We've talked about Zeckendorf and dual Zeckendorf, but there's also
bijective Zeckendorf, using 1s and 2s instead of 0s and 1s, with consecutive 2's prohibited. This isn't something I've seen anywhere before, but it's kind of obvious so I assume it has to be known. (Note there's no such thing as dual bijective Zeckendorf... such a system would have no way to represent the number 3, for instance.)
(Btw: Seems that the well-definedness of left-shift works just as well for "pseudo-bijective-Zeckendorf" representations, using an arbitrary mix of 1's and 2's with no restrictions; however, it doesn't work if you allow all three of 0's, 1's, and 2's in the inputs. E.g., 2
Fib=10
Fib=2, but 4=20
Fib≠100
Fib=3.)
Anyway, here's something a bit odd. It appears that
given r>2, the last digit of r-2 in bijective Zeckendorf is one plus the last digit of r in Zeckendorf. Why's that? Well, OK... this seems like the sort of thing that would probably be known, and my guess is that it's probably not too had to do it by showing these sequences of final digits are identical because both form the
Fibonacci word (although the bijective one has some of the beginning cut off), although I'm having some trouble carrying that out right now, due to not knowing the Fibonacci word well enough... still, I feel like that's kind of a disappointing way to go about it.
OK, that question didn't actually involve the tree, but let's ask one more question that does.
As noted above, the tree has a nice representation if you write m in dual Zeckendorf. But let's say we look at Beren's original tree, the adjusted dual Zeckendorf tree, and write n in ordinary Zeckendorf.
Then in fact, the tree ends up having a pretty nice description in ordinary Zeckendorf! And this isn't too hard to show based on the description above.
We put 1 at the root. Then, for each n in the tree, count how many 0s its Zeckendorf representation ends in (since we've excluded 0, this is well-defined). If it ends in an even number of 0s, then its left child will be formed by appending a 0, and its right child will be formed by appending 00. Whereas if it ends in an odd number of 0s, then its left child is formed by appending a 1, and its right child is formed by appending 01.
You can check that this description in terms of the Zeckendorf representation of n is equivalent to the description in terms of the dual Zeckendorf representation of m.
Now, here's where it gets a bit weird. Suppose we again turn to bijective Zeckendorf; we'll form a tree where we write down the bijective Zeckendorf representation of n-2(= m-1). So now we've taken our dual Zeckendorf tree and adjusted it in the
other direction, subtracting 1 instead of adding 1; let's introduce the convention t=m-1=n-2. Anyway, we look at this new tree, and we write each number tree in bijective Zeckendorf.
Then, it appears that
the left and right (respectively) children of t can be formed by either appending 1 and 11 (respectively) or 2 and 12 (respectively), depending on the (ordinary) Zeckendorf representation of n(= t+2), in the same way as above (former case is even zeroes case, latter case is odd zeroes case). Why is this, and can we come up with a description of the case breakdown that looks just at the bijective Zeckendorf representation of t, rather than passing through t+2? This, well, maybe it's known, but it wouldn't surprise me if it wasn't.
So yeah! That's Beren's tree, and three (or four) descriptions of it. We've figured out a lot going on with it, but there's still quite a bit we haven't!
-Harry