46 lines
2 KiB
Python
46 lines
2 KiB
Python
|
|
"""universal_ceiling.py -- closed-form universal ceiling for shadow-map nuclear norms,
|
||
|
|
derived via Cauchy-Schwarz (rank bound) + a trace identity for the Pauli correlation
|
||
|
|
tensor of a pure n-qubit state.
|
||
|
|
|
||
|
|
Single-party source (m=1) in n qubits:
|
||
|
|
max_rho ||M_a(rho)||_* = 3 * sqrt(2^(n-2) / (2^(n-1)-1))
|
||
|
|
reproduces sqrt(6) (n=3), 6/sqrt(7) (n=4), 2.19089... (n=5) -- exactly the "common
|
||
|
|
values" the paper reports numerically for GHZ_n / line_n / ring_n / connected graph
|
||
|
|
states.
|
||
|
|
|
||
|
|
General m-qubit cluster source S (m <= n/2):
|
||
|
|
max_rho ||M_S(rho)||_* = sqrt( (2^(2m)-1)(2^n - 2^(n-2m)) / ((2^m-1)(2^(n-m)-1)) )
|
||
|
|
which reduces to the m=1 formula above, and gives exactly 5 for (n=4, m=2) -- matching
|
||
|
|
the numerically found ceiling for the 2-qubit cluster maps M_AB, M_AC, M_AD.
|
||
|
|
|
||
|
|
Equality holds iff (i) the m-qubit source marginal rho_S is maximally mixed
|
||
|
|
(tr(rho_S^2) = 1/2^m), and (ii) the resulting shadow map has all singular values equal
|
||
|
|
("isotropic"). This ceiling is saturated not only by highly symmetric stabilizer states
|
||
|
|
(GHZ_n, connected graph states) but also by simple biseparable states across an
|
||
|
|
UNRELATED cut (e.g. two Bell pairs) -- which is why Phi_sym / a single ||M_S||_* cannot
|
||
|
|
serve as a genuine multipartite entanglement witness on their own.
|
||
|
|
"""
|
||
|
|
import numpy as np
|
||
|
|
|
||
|
|
|
||
|
|
def universal_ceiling(n, m):
|
||
|
|
num = (2 ** (2 * m) - 1) * (2 ** n - 2 ** (n - 2 * m))
|
||
|
|
den = (2 ** m - 1) * (2 ** (n - m) - 1)
|
||
|
|
return np.sqrt(num / den)
|
||
|
|
|
||
|
|
|
||
|
|
def universal_ceiling_singleparty(n):
|
||
|
|
return 3 * np.sqrt(2 ** (n - 2) / (2 ** (n - 1) - 1))
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
print("Single-party (m=1) ceiling for n=3,4,5:")
|
||
|
|
for n in [3, 4, 5]:
|
||
|
|
print(f" n={n}: {universal_ceiling_singleparty(n):.6f} "
|
||
|
|
f"(general formula gives: {universal_ceiling(n, 1):.6f})")
|
||
|
|
print(" compare: sqrt(6) =", np.sqrt(6), " 6/sqrt(7) =", 6 / np.sqrt(7))
|
||
|
|
|
||
|
|
print()
|
||
|
|
print("2-qubit cluster (m=2) ceiling for n=4 qubits:")
|
||
|
|
print(f" {universal_ceiling(4, 2):.6f} (matches the numerically found value 5.0)")
|