feat: add numeric and symbolic scripts
This commit is contained in:
parent
6ea7900b55
commit
e80b7c3582
38 changed files with 3314 additions and 0 deletions
45
scripts/universal_ceiling.py
Normal file
45
scripts/universal_ceiling.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
"""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)")
|
||||
Loading…
Add table
Add a link
Reference in a new issue