quantum-shadow-maps_v2/scripts
2026-08-11 14:15:54 +02:00
..
dps_hierarchy feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
symmetric_states feat: add U(1) example script for nuclear norm calculations and corrections 2026-08-11 14:15:54 +02:00
cluster.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
compute_seed_witnesses.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
core.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
core2.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
diagnostic_seeded_run.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
diagnostic_seeded_run_1.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
dicker_block_collapse.py add script for multinomial block collapse and Dicke state scaling verification 2026-07-17 07:57:34 +02:00
ghz3_perturbation_symbolic.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
ghz3_shadow_map_symbolic.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
grraph_state_cuts.py initial commit 2026-07-13 15:53:43 +02:00
mixture_search.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
O_seed.npz feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
optimize_cluster_witness.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
optimize_phi_sym.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
pairwise_correlation_demo.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
party_blocks.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
README.md feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
sdp_ppt_mixture.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
seeded_exploration.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
subblock.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
sum_bound_proof.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
symmetry_oracle.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00
tiles_upb.py initial commit 2026-07-13 15:53:43 +02:00
universal_ceiling.py feat: add numeric and symbolic scripts 2026-07-26 14:09:49 +02:00

Reproducibility Scripts

This directory contains small numerical scripts used to reproduce values quoted in the paper. Scripts should be executable from the repository root unless noted otherwise.

Requirements

  • Python 3
  • NumPy

Install the only current dependency with:

python3 -m pip install numpy

Current Scripts

tiles_upb.py

Computes the two-qutrit Tiles unextendible-product-basis benchmark used in paper/symmetric_shadow_maps_formal.tex. The script uses Gell-Mann generators scaled so that Tr(sigma_i sigma_j) = 3 delta_ij, matching the paper's generator normalization.

Run from the repository root:

python3 scripts/tiles_upb.py

The script constructs the five Tiles UPB product vectors, forms the normalized projector onto their four-dimensional orthogonal complement, and prints:

  • the UPB Gram matrix;
  • the density-matrix trace, Hermiticity check, and spectrum;
  • the partial-transpose spectrum and minimum eigenvalue;
  • the shadow-map value ||M_A(rho)||_*, normalized by sqrt((3-1)(3-1)) = 2;
  • the CCNR/realignment trace norm for comparison.

The values used in paper/symmetric_shadow_maps_formal.tex are:

quantity value
minimum eigenvalue of partial transpose -1.5922869149236308e-16
unnormalized correlation nuclear norm 2.1068432645403345
normalized shadow-map value 1.0534216322701673
CCNR/realignment trace norm 1.087412464837521

The tiny negative partial-transpose eigenvalue is numerical roundoff; the state is the standard PPT-entangled Tiles UPB state. The paper compares the normalized shadow-map value to the separability bound <= 1.

grraph_state_cuts.py

Computes the cut-resolved bigraduated shadow-map values for the four-qubit ring graph state with edges (1,2), (2,3), (3,4), (4,1). Internally the script uses zero-based qubit labels.

Run from the repository root:

python3 scripts/grraph_state_cuts.py

The script constructs the graph state, computes its Pauli correlation tensor, forms the normalized 2|2 source-target unfoldings, and prints:

  • the full normalized nuclear norm ||M_S||_* for each cut;
  • the normalized full-sector block, obtained by keeping only nonidentity Pauli labels on both source qubits and both target qubits;
  • the eigenvalues of the two-qubit source marginal and its distance from the maximally mixed state.

The values used in paper/symmetric_shadow_maps_formal.tex are:

cut full normalized norm normalized full-sector block source marginal
adjacent `{1,2} {3,4}` 5 5/3
diagonal `{1,3} {2,4}` 7/3 1
adjacent `{1,4} {2,3}` 5 5/3

The script also prints raw, unnormalized nuclear norms. The paper compares only the normalized values to the separability bound <= 1.

Adding New Scripts

When adding another script, add a short entry above with:

  • the purpose of the script;
  • the command needed to run it from the repository root;
  • required dependencies beyond NumPy, if any;
  • the paper values, table, or figure it reproduces;
  • notes about normalization conventions if the output includes both raw and normalized quantities.

Shadow-Map GME-Analyse: Skriptpaket

Alle Skripte aus der Diskussion zu "Symmetric Shadow Maps and Multipartite Correlation Criteria", konsolidiert und bereinigt (keine überholten/fehlerhaften Zwischenversionen). Qubit-Reihenfolge durchgehend (A,B,C,D) = (0,1,2,3).

Grundmodule (werden von allem anderen importiert)

  • core.py -- Parametrisierung reiner biseparabler 4-Qubit-Zustände (state_1_3, state_2_2, random_pure_state).
  • core2.py -- schnelle, vektorisierte Berechnung des vollen Pauli-Korrelationstensors und der Einzelpartei-Shadow-Map (full_tensor, phi_sym).
  • cluster.py -- die volle 15×15 bigraduierte Cluster-Shadow-Map M_S für Zwei-Qubit-Quellcluster (cluster_map), plus Tensor-Extraktion für gemischte Zustände.
  • subblock.py -- der "fully-active" 9×9-Unterblock von M_S.
  • party_blocks.py -- rohe Einzelpartei-zu-Einzelpartei 3×3-Korrelationsblöcke.

Kapitel 1: Universelle Sättigungs-Decke (bewiesen)

  • universal_ceiling.py -- geschlossene Formel für das globale Maximum von ||M_S||_* über alle Zustände (Cauchy-Schwarz + Spur-Identität), reproduziert sqrt(6), 6/sqrt(7), 2.19089... (n=3,4,5) und 5.0 (2-Qubit-Cluster, n=4) exakt.

Kapitel 2: Warum Φ_sym und einzelne M_S keine GME-Zeugen sind

  • optimize_phi_sym.py -- zeigt, dass die biseparable Suprema von Φ_sym (2|2- und 1|3-Schnitt) und das globale Supremum über alle Zustände identisch sind.
  • optimize_cluster_witness.py -- zeigt dasselbe für einzelne ||M_AB||_*, plus erste (noch zu enge) Suche nach min(M_AB,M_AC,M_AD) über 1|3-biseparable Zustände.
  • pairwise_correlation_demo.py -- Exkurs: warum paarweise Korrelationsblöcke ebenfalls kein sauberes Kriterium liefern (Graphzustände haben selbst verschwindende Paar-Blöcke).

Kapitel 3: Der funktionierende GME-Zeuge min(M_AB,M_AC,M_AD)

  • mixture_search.py -- Kernstück: exakte geschlossene Form für die Bell-Paar-Mischungsfamilie (p=1/2 optimal, Wert exakt 3), plus allgemeine Mischungssuchen (2/3/4/6 Komponenten), die alle bei 3.0 landen.
  • sum_bound_proof.py -- der rigorose Beweis der Schranke <= 11/3 (Summe statt Minimum ist konvex; LP bestätigt, dass Gleichgewichtung optimal für diese Technik ist).

Kapitel 4: SDP-Verschärfung über PPT-Mixtures

Benötigt zusätzlich pip install cvxpy (Solver SCS ist enthalten).

  • sdp_ppt_mixture.py -- PPT-Mixture-SDP + alternierendes (Frank-Wolfe-artiges) Suchschema über duale Zeugen. Wichtig: order='C' in beiden cp.reshape-Aufrufen ist notwendig (Standard-Fortran-Order von cvxpy passt sonst nicht zur row-major Konstruktion von PT_MATRIX/COEFF).
  • compute_seed_witnesses.py -- erzeugt O_seed.npz (optimale duale Zeugen für den bekannten 3.0-Punkt). Vor den beiden folgenden Skripten einmal ausführen.
  • diagnostic_seeded_run.py -- Sanity-Check: ein einzelner SDP-Schritt mit den exakten Zeugen des bekannten Punktes muss t >= 3.0 liefern (sonst Implementierungsfehler).
  • seeded_exploration.py -- Stabilitäts-/Störungstest um den bekannten Punkt herum, über die volle PPT-Mixture-Menge (echte Obermenge der biseparablen Zustände).

Empfohlene Ausführungsreihenfolge

python3 universal_ceiling.py
python3 optimize_phi_sym.py            # dauert ~1-2 Minuten
python3 optimize_cluster_witness.py    # dauert ~1-2 Minuten
python3 pairwise_correlation_demo.py
python3 mixture_search.py              # die Mischungs-Optimierungen sind langsam (Powell
                                        # skaliert schlecht mit der Parameterzahl) --
                                        # einzelne Restarts können 1-2 Minuten dauern
python3 sum_bound_proof.py

# für Kapitel 4 (SDP):
pip install cvxpy
python3 compute_seed_witnesses.py
python3 diagnostic_seeded_run.py
python3 seeded_exploration.py

Status der zentralen Vermutung

  • Bewiesen: min(M_AB,M_AC,M_AD) <= 11/3 für jeden biseparablen Zustand.
  • Numerisch sehr robust (mehrere unabhängige Methoden, inkl. SDP über die größere PPT-Mixture-Menge), aber nicht formal bewiesen: die wahre Schranke ist exakt 3.0.