toqito.state_props.has_symmetric_extension¶
Determine whether there exists a symmetric extension for a given quantum state.
Module Contents¶
- toqito.state_props.has_symmetric_extension.has_symmetric_extension(rho, level=2, dim=None, ppt=True, tol=0.0001)[source]¶
Determine whether there exists a symmetric extension for a given quantum state.
For more information, see [@Doherty_2002_Distinguishing].
Determining whether an operator possesses a symmetric extension at some level level can be used as a check to determine if the operator is entangled or not.
This function was adapted from QETLAB.
Examples
2-qubit symmetric extension:
In [@Chen_2014_Symmetric], it was shown that a 2-qubit state (rho_{AB}) has a symmetric extension if and only if
- [
text{Tr}(rho_B^2) geq text{Tr}(rho_{AB}^2) - 4 sqrt{text{det}(rho_{AB})}.
]
This closed-form equation is much quicker to check than running the semidefinite program.
`python exec="1" source="above" session="has_symmetric_example" import numpy as np from toqito.state_props import has_symmetric_extension from toqito.matrix_ops import partial_trace rho = np.array([[1, 0, 0, -1], [0, 1, 1/2, 0], [0, 1/2, 1, 0], [-1, 0, 0, 1]]) # Show the closed-form equation holds print( np.trace(np.linalg.matrix_power(partial_trace(rho, 1), 2)) >= np.trace(rho**2) - 4 * np.sqrt(np.linalg.det(rho))) ``python exec="1" source="above" session="has_symmetric_example" # Now show that the `has_symmetric_extension` function recognizes this case. print(has_symmetric_extension(rho)) `Higher qubit systems:
Consider a density operator corresponding to one of the Bell states.
- [
- rho = frac{1}{2} begin{pmatrix}
1 & 0 & 0 & 1 \ 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 \ 1 & 0 & 0 & 1
end{pmatrix}
]
To make this state over more than just two qubits, let’s construct the following state
- [
sigma = rho otimes rho.
]
As the state (sigma) is entangled, there should not exist a symmetric extension at some level. We see this being the case for a relatively low level of the hierarchy.
`python exec="1" source="above" import numpy as np from toqito.states import bell from toqito.state_props import has_symmetric_extension rho = bell(0) @ bell(0).conj().T sigma = np.kron(rho, rho) print(has_symmetric_extension(sigma)) `- Raises:
ValueError – If dimension does not evenly divide matrix length.
- Parameters:
rho (numpy.ndarray) – A matrix or vector.
level (int) – Level of the hierarchy to compute.
dim (numpy.ndarray | int | None) – The default has both subsystems of equal dimension.
ppt (bool) – If True, this enforces that the symmetric extension must be PPT.
tol (float) – Tolerance when determining whether a symmetric extension exists.
- Returns:
True if mat has a symmetric extension; False otherwise.
- Return type:
bool