from qiskit import QuantumCircuit

import quantum_utils_v1 as q

"""
ENTANGLMENT — BELOVO STANJE
==========================================
Program kreira najpoznatije spregnuto stanje, Belov par:

        |Φ+⟩ = (|00⟩ + |11⟩) / √2

Recept za Belovo stanje je svega dva gejta:
  1) H na kubitu 0  → superpozicija (|0⟩+|1⟩)/√2
  2) CNOT 

Rezultat je stanje koje se NE može razdvojiti na zaseban opis kubita 0 i kubita 1.
Zato na Blohovoj sferi svaki pojedinačni kubit izgleda "prazno" (u centru sfere) —
informacija nije u pojedinačnim kubitima, već u njihovoj KORELACIJI. Merenjem ćemo
dobiti samo |00⟩ ili |11⟩ (oba kubita uvek isti), nikada |01⟩ ili |10⟩.
"""
qc = QuantumCircuit(2, 2)
qc.reset([0, 1])
qc.barrier()
q.show_bloch_sphere(qc)   # početno stanje |00⟩

# Korak 1: kubit 0 u superpoziciju  |0⟩ → (|0⟩+|1⟩)/√2
qc.h(0)
qc.barrier()
q.show_bloch_sphere(qc)

# Korak 2: CNOT spreže kubit 1 sa kubitom 0 → nastaje Belov par
qc.cx(0, 1)
qc.barrier()
q.show_bloch_sphere(qc)               # pojedinačni kubiti deluju "prazno"
q.show_qsphere(qc, style="qsphere")   # qsphere lepo prikazuje korelaciju |00⟩/|11⟩
q.print_state(qc, "Bell state")

# Merenje oba kubita — očekuje se samo |00⟩ ili |11⟩ (savršena korelacija).
qc.measure([0, 1], [0, 1])

# Prikaz dijagrama kola i statistike merenja.
q.show_qc(qc)
q.show_measurement(qc)
