This resource function is obsolete. Use the paclet Wolfram/QuantumFramework instead.

Function Repository Resource:

QuantumDistance

Source Notebook

Compute the Hilbert space distance between two discrete quantum states

Contributed by: Jonathan Gorard

ResourceFunction["QuantumDistance"][QuantumDiscreteState[qds1,],QuantumDiscreteState[qds2,]]

returns the fidelity distance (defined below) between the discrete quantum states qds1 and qds2.

ResourceFunction["QuantumDistance"][QuantumDiscreteState[qds1,],QuantumDiscreteState[qds2,],measure]

returns the distance using the Hilbert space distance measure measure.

Details

ResourceFunction["QuantumDistance"][] returns a (potentially complex) scalar value representing the distance between the specified discrete quantum states.
In ResourceFunction["QuantumDistance"][QuantumDiscreteState[qds1,],QuantumDiscreteState[qds2,]], the "Fidelity" measure is used by default.
In ResourceFunction["QuantumDistance"][QuantumDiscreteState[qds1,],QuantumDiscreteState[qds2,],measure], the following Hilbert space distance measures measure are supported:
"Fidelity"1 minus the fidelity of the two states (i.e. 1 minus the most general probability that the two states will measure to be equivalent)
"RelativeEntropy"relative von Neumann entropy distance between the two states (i.e. the quantum analog of the Kullback–Leibler divergence)
"Trace"trace distance between the density matrices of the two states (i.e. the quantum analog of the Kolmogorov–Smirnov distance)
"BuresAngle"infinitesimal Bures angle distance between the density matrices of the two states (i.e. the quantum analog of the Fisher information metric)
"HilbertSchmidt"Hilbert–Schmidt information distance between the two states
"Bloch"coordinate distance between two qubit states on the Bloch sphere

Examples

Basic Examples (4) 

Find the default (fidelity) distance between two trivial pure quantum states:

In[1]:=
state1 = ResourceFunction["QuantumDiscreteState"][{1 + I, 0}]
Out[1]=
In[2]:=
state2 = ResourceFunction["QuantumDiscreteState"][{1 + I, 1 - I}]
Out[2]=
In[3]:=
ResourceFunction["QuantumDistance"][state1, state2]
Out[3]=

Find the fidelity distance between two mixed quantum states:

In[4]:=
state3 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
state4 = ResourceFunction["QuantumDiscreteState"][{{1 + I, 0}, {0, 1 - I}}];
ResourceFunction["QuantumDistance"][state3, state4]
Out[4]=

Find the default (fidelity) distance between a pure state and a mixed state:

In[5]:=
state1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
state2 = ResourceFunction["QuantumDiscreteState"][{1, -I}];
ResourceFunction["QuantumDistance"][state1, state2]
Out[5]=

Find the trace distance between the same pure state and mixed state:

In[6]:=
ResourceFunction["QuantumDistance"][state1, state2, "Trace"]
Out[6]=

Find the coordinate distance between two random pure qubit states on the Bloch sphere:

In[7]:=
state1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
state2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
ResourceFunction["QuantumDistance"][state1, state2, "Bloch"]
Out[7]=

Find the relative von Neumann entropy distance between two random 5-dimensional pure states:

In[8]:=
state1 = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 1}, 5];
state2 = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 1}, 5];
ResourceFunction["QuantumDistance"][state1, state2, "RelativeEntropy"]
Out[8]=

Scope (8) 

Find distances between multiqubit states:

In[9]:=
GHZ = ResourceFunction["QuantumDiscreteState"]["GHZ"];
W = ResourceFunction["QuantumDiscreteState"]["W"];
ResourceFunction["QuantumDistance"][GHZ, W, "HilbertSchmidt"]
Out[9]=

Find distances between higher-dimensional qudit states:

In[10]:=
state1 = ResourceFunction["QuantumDiscreteState"][{1, 1 + I, 1 - I}, 3];
state2 = ResourceFunction["QuantumDiscreteState"][{1/Sqrt[3], I, Sqrt[2/3] - I}, 3];
ResourceFunction["QuantumDistance"][state1, state2, "HilbertSchmidt"]
Out[10]=

Fidelity distances can be computed between any combination of arbitrary pure and mixed states:

In[11]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[12]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "Fidelity"]
Out[12]=
In[13]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "Fidelity"]
Out[13]=
In[14]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "Fidelity"]
Out[14]=
In[15]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "Fidelity"]
Out[15]=

Relative entropy distances can be computed between any combination of arbitrary pure and mixed states:

In[16]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[17]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "RelativeEntropy"]
Out[17]=
In[18]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "RelativeEntropy"]
Out[18]=
In[19]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "RelativeEntropy"]
Out[19]=
In[20]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "RelativeEntropy"]
Out[20]=

Trace distances can be computed between any combination of arbitrary pure and mixed states:

In[21]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[22]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "Trace"]
Out[22]=
In[23]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "Trace"]
Out[23]=
In[24]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "Trace"]
Out[24]=
In[25]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "Trace"]
Out[25]=

Infinitesimal Bures angle distances can be computed between any combination of arbitrary pure and mixed states:

In[26]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[27]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "BuresAngle"]
Out[27]=
In[28]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "BuresAngle"]
Out[28]=
In[29]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "BuresAngle"]
Out[29]=
In[30]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "BuresAngle"]
Out[30]=

Hilbert–Schmidt distances can be computed between any combination of arbitrary pure and mixed states:

In[31]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[32]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "HilbertSchmidt"]
Out[32]=
In[33]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "HilbertSchmidt"]
Out[33]=
In[34]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "HilbertSchmidt"]
Out[34]=
In[35]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "HilbertSchmidt"]
Out[35]=

Coordinate distances on the Bloch sphere can be computed between any combination of arbitrary pure and mixed qubit (2-dimensional) states:

In[36]:=
pure1 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
pure2 = ResourceFunction["QuantumDiscreteState"]["RandomPure"];
mixed1 = ResourceFunction[
    "QuantumDiscreteState"][{{1/4 + I, 1/2}, {1/2, 3/4 - I}}];
mixed2 = ResourceFunction[
    "QuantumDiscreteState"][{{1/2 - I, -1/4}, {-1/4, 3/2 + I}}];
In[37]:=
ResourceFunction["QuantumDistance"][pure1, pure2, "Bloch"]
Out[37]=
In[38]:=
ResourceFunction["QuantumDistance"][pure1, mixed1, "Bloch"]
Out[38]=
In[39]:=
ResourceFunction["QuantumDistance"][mixed2, pure2, "Bloch"]
Out[39]=
In[40]:=
ResourceFunction["QuantumDistance"][mixed1, mixed2, "Bloch"]
Out[40]=

However, Bloch distances cannot be computed for arbitrary qudit (higher-dimensional) states (returns unevaluated):

In[41]:=
pure3 = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 1}, 3];
pure4 = ResourceFunction["QuantumDiscreteState"][{"RandomPure", 1}, 3];
ResourceFunction["QuantumDistance"][pure3, pure4, "Bloch"]
Out[41]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 12 April 2021

Related Resources

License Information