Symmetries in Bell nonlocality, part 2

We describe the relabelings in the CHSH scenario, and decompose their action on probability distributions \(P(ab|xy)\), now using an abstract group construction.

We identify those relabelings with a wreath product construction, which RepLAB supports. This topic guide can also be considered as a (small) introduction to the group constructions available in RepLAB.

Before using RepLAB commands, we must first initialize the library:

[1]:
addpath([pwd, '/../../../external/replab']);
replab_init('verbose', 0);
replab_init: Initialization done.

Only outputs

Outputs are binary, so the relabelling of outputs is the symmetric group of domain size 2.

[2]:
outputGroup = replab.S(2)
outputGroup =

Symmetric group acting on 2 elements
            identity: [1, 2]
generator(1 or 'x1'): [2, 1]
    recognize.source: Cyclic group C(2) of order 2 < x | x^2 = 1 >

Now, an element of outputGroup is just a permutation of the two outputs:

[3]:
outputGroup.elements
ans =
{
  [1,1] =

     1   2

  [1,2] =

     2   1

}

The representation of this relabelling on the probabilities \(P(a)\) is then the defining representation

[4]:
outputRep = outputGroup.naturalRep
outputRep.image([2 1])
outputRep =

Orthogonal reducible representation
   dimension: 2
       field: 'R'
       group: Symmetric group acting on 2 elements
   isUnitary: true
preimages{1}: [2, 1]
   images{1}: [0, 1; 1, 0]

ans =

   0   1
   1   0

Inputs and outputs

In the CHSH scenario, each party has two binary measurements. Therefore, a copy of \(S_2\) acts on the outputs of the first measurement, and a second copy of \(S_2\) acting on the outputs of the second measurement, while another copy of \(S_2\) permutes the choice of measurement (input).

This is described by the wreath product of \(S_2\) by \(S_2\).

[5]:
inputGroup = replab.S(2)
ioGroup = inputGroup.wreathProduct(outputGroup)
inputGroup =

Symmetric group acting on 2 elements
            identity: [1, 2]
generator(1 or 'x1'): [2, 1]
    recognize.source: Cyclic group C(2) of order 2 < x | x^2 = 1 >

ioGroup =

names =
{
  [1,1] = generatorNames
  [1,2] = generators
  [1,3] = nice
  [1,4] = niceIsomorphism
  [1,5] = representative
  [1,6] = type
}

Finite group of order 8
                    A: Symmetric group acting on 2 elements
                    H: Symmetric group acting on 2 elements
                    N: Direct product group with 2 factors
             identity: {[1, 2], {[1, 2], [1, 2]}}
                    n: 2
                  phi: replab.perm.PermutationCellAction
 generator(1 or 'x1'): {[2, 1], {[1, 2], [1, 2]}}
generator(2 or 'x11'): {[1, 2], {[2, 1], [1, 2]}}
generator(3 or 'x12'): {[1, 2], {[1, 2], [2, 1]}}
     recognize.source: Dihedral group of order 8

Elements of ioGroup are now composed of a permutation of inputs, and the conditional output permutation for \(x=1,2\):

[6]:
ioGroup.elements
ans =
{
  [1,1] =
  {
    [1,1] =

       1   2

    [1,2] =
    {
      [1,1] =

         1   2

      [1,2] =

         1   2

    }

  }

  [1,2] =
  {
    [1,1] =

       1   2

    [1,2] =
    {
      [1,1] =

         1   2

      [1,2] =

         2   1

    }

  }

  [1,3] =
  {
    [1,1] =

       1   2

    [1,2] =
    {
      [1,1] =

         2   1

      [1,2] =

         1   2

    }

  }

  [1,4] =
  {
    [1,1] =

       1   2

    [1,2] =
    {
      [1,1] =

         2   1

      [1,2] =

         2   1

    }

  }

  [1,5] =
  {
    [1,1] =

       2   1

    [1,2] =
    {
      [1,1] =

         1   2

      [1,2] =

         1   2

    }

  }

  [1,6] =
  {
    [1,1] =

       2   1

    [1,2] =
    {
      [1,1] =

         1   2

      [1,2] =

         2   1

    }

  }

  [1,7] =
  {
    [1,1] =

       2   1

    [1,2] =
    {
      [1,1] =

         2   1

      [1,2] =

         1   2

    }

  }

  [1,8] =
  {
    [1,1] =

       2   1

    [1,2] =
    {
      [1,1] =

         2   1

      [1,2] =

         2   1

    }

  }

}

The representation on the conditional probility \(P(a|x)\) is the imprimitive representation, given that we use the defining representation for the inner group

[7]:
ioRep = ioGroup.imprimitiveRep(outputRep);
[8]:
ioRep.image({[2 1] {[1 2] [1 2]}}) % permuting only the inputs
ans =

   0   0   1   0
   0   0   0   1
   1   0   0   0
   0   1   0   0

[9]:
ioRep.image({[1 2] {[2 1] [1 2]}}) % permuting only the outputs, conditioned on $x=1$
ans =

   0   1   0   0
   1   0   0   0
   0   0   1   0
   0   0   0   1