Skip to content

Commit ad7801e

Browse files
committed
improve
1 parent 922ccd1 commit ad7801e

1 file changed

Lines changed: 38 additions & 10 deletions

File tree

README.md

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://zib-iol.github.io/EntanglementDetection.jl/dev/)
44
[![CI](https://github.com/ZIB-IOL/EntanglementDetection.jl/actions/workflows/ci.yml/badge.svg)](https://github.com/ZIB-IOL/EntanglementDetection.jl/actions/workflows/ci.yml)
55

6-
This package addresses the certification of **entanglement** and **separability** for multipartite quantum systems with arbitrary local dimensions.
6+
This package provides tools for certifying **entanglement** and **separability** in multipartite quantum systems with arbitrary local dimensions.
77

8-
The original article for which it was written can be found here:
8+
The original article introducing this package can be found here:
99

1010
> [1] [A Unified Toolbox for Multipartite Entanglement Certification](https://arxiv.org/abs/2507.17435).
1111
@@ -30,7 +30,7 @@ Pkg.add(url="https://github.com/ZIB-IOL/EntanglementDetection.jl", rev="main")
3030

3131
## Getting started
3232

33-
Let's say we want to analyze the entanglement property of the two-qubit maximally entangled state with white noise.
33+
We demonstrate how to analyze the entanglement property of the two-qubit maximally entangled state with white noise.
3434
Using `EntanglementDetection.jl`, here is what the code looks like.
3535

3636
```julia
@@ -68,13 +68,40 @@ julia> res = separable_distance(ρ, dims); # compute the distance to the separab
6868
[ Info: Stop: maximum iteration reached
6969
```
7070
71-
For the state ``ρ``, as the distance to the separable set `res.primal` is much larger than 0, practically, we can detect the entanglement of the state with confidence (technically speaking, ``Primal`` $\gg$ ``Dual gap``).
71+
For the state ``ρ``, as the distance to the separable set `res.primal` is significantly greater than 0, practically, we can detect the entanglement of the state with confidence (technically speaking, ``Primal`` $\gg$ ``Dual gap``).
7272
73-
## Entanglement certification
73+
### Rapid entanglement detection
7474
75-
In principle, if ``Primal`` $>$ ``Dual gap``, the state is outside the separable set, therefore is entangled. However, since the default method in our algorithm is heuristic, the printed value of ``Dual gap`` is a lower bound on its actual value. For practical applications, it is empirically enough (although not theoretically proven) to enlarge the factor, e.g., ``Primal`` $\geqslant 5 \times$ ``Dual gap``.
75+
In principle, if ``Primal`` > ``Dual gap``, the state lies outside the separable set and is therefore entangled. However, since the default method in our algorithm is heuristic, the reported ``Dual gap`` is only a lower bound on the true value.
76+
Empirically, requiring ``Primal`` ≥ 5 × ``Dual gap`` is often sufficient for robust detection, especially in noisy but clearly experimental entangled states.
7677
77-
For cases where this is not sufficient, a rigorous tool is also introduced in our package:
78+
To support this, we provide a shortcut mode that speeds up the detection process.
79+
The package also accepts raw experimental input in the form of a correlation tensor from standard full state tomography.
80+
81+
```julia
82+
# the tensor of the density matrix; can be replaced by real experimental data
83+
julia> C = correlation_tensor(ρ, dims)
84+
4×4 Matrix{Float64}:
85+
1.0 0.0 0.0 0.0
86+
0.0 0.2 0.0 0.0
87+
0.0 0.0 -0.2 0.0
88+
0.0 0.0 0.0 0.2
89+
90+
# the default basis is the generalized Gell-Mann basis (Pauli basis for qubits)
91+
# any informationally complete basis with normalization 2 can be used
92+
julia> basis = EntanglementDetection._gellmann(ComplexF64, dims);
93+
94+
julia> res = separable_distance(C, basis; shortcut=true);
95+
Iteration Primal Dual gap #Atoms
96+
1 1.6600e+00 4.0000e+00 1
97+
Last 3.2672e-01 1.1695e-02 6
98+
[ Info: Stop: primal great larger than dual gap (shortcut)
99+
```
100+
The shortcut mode stops early once entanglement can be reliably confirmed.
101+
102+
### Rigorous entanglement certification
103+
104+
When heuristic detection is not sufficient, a rigorous certificate can be constructed via an entanglement witness:
78105
79106
```julia
80107
julia> witness = entanglement_witness(ρ, res.σ, dims); # construct a rigorous entanglement witness
@@ -83,9 +110,9 @@ julia> real(dot(witness.W, ρ)) < 0 # if Tr(Wρ) < 0, then the state ρ is entan
83110
true
84111
```
85112
86-
## Separability certification
113+
### Separability certification
87114
88-
Let us consider the other case, namely, when there is more noise mixed in the state.
115+
Now consider a noisier version of the same state:
89116
90117
```julia
91118
julia> d = 2; N = 2; p = 0.8; ρ = Ket.state_ghz(d, N; v = 1 - p) # with more white noise
@@ -102,7 +129,7 @@ julia> res = separable_distance(ρ, dims); # compute the distance to the separab
102129
[ Info: Stop: primal small enough
103130
```
104131
105-
Here, ``Primal`` is much smaller than ``Dual gap``, which can not be detected as an entangled state, and also cannot be confirmed by entanglement witness:
132+
In this case, ``Primal`` is much smaller than ``Dual gap``, which can not be detected as an entangled state, and also cannot be confirmed by entanglement witness:
106133
107134
```julia
108135
julia> witness = entanglement_witness(ρ, res.σ, dims); # construct a rigorous entanglement witness
@@ -119,6 +146,7 @@ julia> sep = separability_certification(ρ, dims; verbose = 0); # certify separa
119146
julia> sep.sep
120147
true
121148
```
149+
This confirms that the state lies inside the separable set, completing the analysis.
122150
123151
## Under the hood
124152

0 commit comments

Comments
 (0)