Sunday, 4 May 2014

10.000 euro bet on – off – on …

At this moment, the 4th may at 8:47h the bet seems to be still ‘on’: Joy Christan and Richard Gill are betting whether or not a computer simulation of the exploding balls experiment can be created that can or cannot produce Bell type statistics. This bet is not the 5000 euros one for which the exploding balls experiment should actually be performed (see the earlier post on this subject).
The current bet focusses on the angle settings from Alice and Bob where the difference between classical and QM predictions are most significant: 0, 45, 90 and 135 degrees.
The exact text of the bet as stated by Richard can be found here:
Joy has responded and claimed victory by supplying this model in R:
In his own words:
“Richard Gill has offered 10,000 Euros to anyone who can simulate the N directions of angular momentum vectors appearing in equation (16) of this experimental proposal of mine: Here I am attempting to provide such N directions. They are given by the vectors 'e' in this simulation. He has also offered further 5,000 Euros to me if my proposed experiment is realized successfully. I am hopeful that that will happen someday. The details of these challenges by Richard Gill can be found here: While this is by no means a perfect simulation of my model, it does meet all the stringent conditions set out by Richard Gill for his challenge.

Since after the explosion the angular momentum vectors 'e' moving along the z direction will be confined to the x-y plane, a 2D simulation is good enough for my proposed experiment. ”
Gill disputes whether Joy's simulation meets the conditions of the challenge.
The agreement now is to have a jury give a verdict (see

For the non-programmers, and for myself to get acquainted with in the R syntax, I explain this code line  by line below.
Joy’s R code explained

Computers cannot really generate random numbers, so they have a mechanism to pick numbers from a list of previously stored ‘random’ numbers. The seed indicates where to start picking.
angles <- seq(from = 0, to = 360, by = 1) * 2 * pi/360
seq(): generates a sequence of numbers. In seq(from = 0, to = 360, by = 1), an array containing the numbers 0 to 360 is created (the ‘by’ indicates the difference between succeeding numbers). After this all numbers in the array are multiplied by 2 * pi / 360 and stored in angles.  

K <- length(angles)
length(): gives the number of elements in the array, and stores it in a single value K.

corrs <- numeric(K)  ## Container for correlations

declares an array structure named ‘corrs’ which can contain K numbers (?)

M <- 10^5  ## Sample size. Next try 10^6, or even 10^7

The number 10 to the power of 5 = 1000000 is stored in M.
s <- runif(M, 0, pi)
t <- runif(M, 0, pi)
runif(n, min, max) generates an array of random numbers between the min and the max value. Here a list of M numbers between 0 and pi is generated and stored in s, and again in t. 

x <- cos(s)
y <- 1.2 * (-1 + (2/(sqrt(1 + (3 * t/pi)))))
So ‘x’ will contain M random cos() numbers, ‘y’ will contain M numbers with values from the formula above (sqrt() is square root)

 e <- rbind(x, y)  ## 2 x M matrix; M columns of e represent the
## x and y coordinates of points on a circle; y -> -y => e -> -e.
rbind(x,y) simply puts the two lists with numbers in x and y in one 2xM array called ‘e’

for (i in 1:(K - 1)) {
This is a loop structure: The program iterates over the code between the brackets, having i=1, 2, 3 …, until i =K-1 (K was the number of angles, so 361). Notice that within this loop another loop is used, having ‘j’ going from 1 to K-1.

    alpha <- angles[i]
The i-th angle in the array of angles is stored in ‘alpha’. The angles are expressed in radians, so when i=0 the alpha=0, when i = 1 then alpha=1 *pi /360 etc.

a <- c(cos(alpha), sin(alpha))  ## Measurement vector 'a'
c(): an assignment: So Joy stores the 2 numbers cos(alpha) and sin(alpha) in a 2d array.

for (j in 1:(K - 1)) {
the second loop within the firs loop starts

        beta <- angles[j]
        b <- c(cos(beta), sin(beta))  ## Measurement vector 'b'
‘beta’ will also contain each time a different angle, and b the two numbers cos(beta) and sin(beta)

        ca <- colSums(e * a)  ## Inner products of cols of 'e' with 'a'
        cb <- colSums(e * b)  ## Inner products of cols of 'e' with 'b'
so ‘e’ contains:

x1  x2 x3 …xM  y1  y2 y3 …yM

which is multiplies with a (a1, a2)


x1a1  x2a1 x3a1 … xMa1  y1a2  y2a2 y3a2 … yMa2

colSums() then sums the numbers per column, giving

x1a1+y1a2    x2a1+y2a2  x3a1+y3a2 …xMa1 +yMa2

which is stored in ca. The same calculation is done with ‘b’ giving cb.

        N <- length(ca)
The number of elements in ca is put in N (which will always be M)

        corrs[i] <- sum(sign(-ca) * sign(cb))/N
sign() returns 1 for positive numbers, -1 for negative numbers.

So each number in ca is first multiplied by -1 because of the ‘–ca’, and the sign function results in a list with 1’s and -1’s. These are multiplied by the elements in sign(cb).The resulting list of 1’s and -1’s is summed up and divided by N. The calculated number is stored in the i-th position of corrs.
        Ns[i] <- N
N is stored in the i-th position of Ns

When the code in the loops is completed it continues with the statements below
corrs[K] <- corrs[1]
Ns[K] <- Ns[1]
Here the obtained values for angle=360 is taken the be the same as for angle=0

The rest of the code is for printing the results.
An extended description of R can be found here:

Some concluding remarks

  • Joy's model iterates over Alice’s and Bobs angles. This is an efficient mechanism to get results for all the settings. The same results should be obtained using random (integer) angles between 0 and 360 degrees, but one might need a slightly larger 'M' to get nice results for all the angles.
  • The conditions for the Bell type simulation seems to be met: All the particles are used in the result set (which excludes the detection loophole) and the measurement for Alice does not use Bob's measurement and vice versa.