A set of incommensurate (or incommensurable) numbers is a collection of reals such that it is not possible to obtain one of them by multiplying the others by rational coefficients and summing the results. A more formal definition states that the family is incommensurate if for any set of integer coefficients such that
it follows that the are all null ( can be infinite). Such numbers are quite useful : for instance if are incommensurate, then the vector can take any value in as long as we set the variable appropriately. I recently found this trick used in Fourier amplitude sensitivity testing where it enables to collapse multiple integrals into single-dimensional ones.
Now that we have an idea why we could need them for, how do we find incommensurate numbers ? I have been surprised of how few one can find on this subject on the internet (links are welcome in the comments section !). It is clear that irrationals are good candidates, and among irrationals, square-roots of integers seem likely to provide incommensurate families. But not all of them : for instance and are not incommensurable ( since ) ! In a very pleasant and erudite text, Kevin Brown focuses on the numbers of the form where the integer is not a multiple of the square of an integer bigger than 1:
The first elements of this set are
Any finite subset of , Brown shows, is incommensurate. The reals that you can produce with elements of are named Platonions (because of Platon and the quarternions… yep), but for the sake of simplicity I will call Platonions the elements of (which, in Brown’s vocable, would be called a Platonic field basis…). These numbers provide a very cheap way of generating incommensurate sets : just take an array of the first N integers, discards the integers of the form (necessarily we will have and ) and return the square roots of the remaining values. Here is the Python code:
def platonions_up_to(N): """ Returns numbers of the form sqrt(I) where I is not a multiple of a square. Such numbers are incommensurable.""" squareMultiples = [k*(a**2) for a in range(2,int(math.sqrt(N))+2) for k in range(1,1+int((N+1)/(a**2)))] return [math.sqrt(i) for i in range(1,N+1) if not i in squareMultiples]
Now what if we want exactly incommensurate numbers ? How big should be to be sure to find at least Platonions inferior to ? The good news is that Platonions are plentyfull. More precisely, the fraction of integers smaller than that are Platonions is pretty much constant:
import matplotlib.pyplot as plt Nlist = range(50,5051,500) # N = 50,550,1050,1550... 5050 proportionslist = [1.0*len(platonions_up_to(N))/N for N in Nlist] plt.plot(Nlist,proportionslist);plt.show()
We see that the fraction integers smaller than N whose square-root is a Platonion is always bigger than 0.60. To be sure to find at least Platonions we thus need to consider the first integers only. In Python:
def findKincommensurates(K): return platonions_up_to(int(K/0.60))[:K]
That’s as far as I will go today ! You can now reread the title and assess the progress you made in a topic that you had no idea existed a few minutes ago.