
(사진; 1982년 CERN의 실험실에서 John Bell, 유럽입자물리연구소 제공)
첫 포스팅에서 아인슈타인의 고전적 통념을 깨부순 수학적 경계선, 시렐슨 한계(Tsirelson's bound, )와 벨 부등식의 이론적 배경을 살펴봤습니다. 구글 Colab 환경에서 최신 Qiskit 1.x 프레임워크를 이용해 가상 시뮬레이터가 정말로 고전의 한계선인 '2'를 뚫어내는지 코드로 직접 뽑아봅시다.
특히 이번 Qiskit 코드는 과거의 구형 방식(backend.run) 대신, IBM에서 올해 공식 권장 프리퀄 스펙으로 지정한 최신 Primitives V2 아키텍처의 StatevectorEstimator를 활용하겠습니다. Primitives는 기존의 runtime을 대체하는 대량의 연산 오퍼레이터를 직관적으로 처리하는 구조를 가지고 있어요.
양자 공간에서 앨리스와 밥이 각도를 비틀어 측정할 때, 측정 장치의 오퍼레이터 조합을 각각 다음과 같이 설정합니다.
이 네 가지 측정 조합의 상관관계 기댓값을 모두 더한 최종 CHSH 연산자 는 다음과 같은 기하학적 결합 법칙을 따릅니다.
고전 물리학의 한계선에서는 이 값이 무조건 2 이하()여야 하지만, 완벽한 양자 얽힘(Bell State) 상태에서는 이 수식이 정확히 을 뱉어내게 됩니다. 이제 이 연산 과정을 고스란히 코드로 옮겨보겠습니다.
import numpy as np
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import SparsePauliOp
# 1. 양자 얽힘(Bell State) 상태를 만드는 회로 설계
# 우주 반대편에 있어도 똑같이 움직이는 기묘한 두 동전을 만듭니다.
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
#qc는 Quantum Circuit, h는 양자중첩, cx는 양자얽힘 상태라고 그냥 외우자(자세한 용어 설명은 나중에 하겠습니다.)
# 2. 벨 부등식(CHSH 부등식) 검증을 위한 4가지 관측량(Observable) 정의
# Qiskit의 엔디언(Bit Ordering) 규칙에 따라 Qubit 0은 Alice, Qubit 1은 Bob으로 매핑됩니다.
# 각 방향 벡터의 절묘한 사선 각도(1/sqrt(2)) 값을 대입합니다.
sub_angle = 1 / np.sqrt(2)
# AB = B ⊗ A -> "ZZ"/sqrt(2) + "XZ"/sqrt(2)
op_AB = SparsePauliOp.from_list([("ZZ", sub_angle), ("XZ", sub_angle)])
# AB' = B' ⊗ A -> "ZZ"/sqrt(2) - "XZ"/sqrt(2)
op_AB_prime = SparsePauliOp.from_list([("ZZ", sub_angle), ("XZ", -sub_angle)])
# A'B = B ⊗ A' -> "ZX"/sqrt(2) + "XX"/sqrt(2)
op_A_prime_B = SparsePauliOp.from_list([("ZX", sub_angle), ("XX", sub_angle)])
# A'B' = B' ⊗ A' -> "ZX"/sqrt(2) - "XX"/sqrt(2)
op_A_prime_B_prime = SparsePauliOp.from_list([("ZX", sub_angle), ("XX", -sub_angle)])
# 3. 최종 벨 부등식 검증 오퍼레이터 결합: S = AB + AB' + A'B - A'B'
# 최신 Qiskit 1.x 프리미티브의 강력한 장점은 이 복잡한 연산자들을 수학식 그대로 더하고 뺄 수 있다는 점입니다.
CHSH_operator = op_AB + op_AB_prime + op_A_prime_B - op_A_prime_B_prime
# 4. 최신 V2 프리미티브 Estimator 선언 및 실행
# 가상 공간의 완벽한 양자 상태 벡터상에서 기댓값을 다이렉트로 추론합니다.
estimator = StatevectorEstimator()
job = estimator.run([(qc, CHSH_operator)])
result = job.result()
# 5. 최종 계산된 기댓값(S) 출력
s_value = result[0].data.evs
print("==================================================")
print(" 베네타리저브(Veneta Reserve) 퀀텀컴퓨팅 사업본부")
print("==================================================")
print(f" 고전 물리학의 한계치 (Classical Bound) : 2.0")
print(f" 양자 컴퓨터의 가상 측정 결과 (S Value) : {s_value:.4f}")
print(f" 우주 기하학적 최대 한계치 (Tsirelson) : {2 * np.sqrt(2):.4f}")
print("==================================================")
코드를 돌려보면 아래가 출력되는지 확인합니다.

(사진; 코드 실행 결과, Google Colab)
양자 컴퓨터의 가상 측정 결과 (S Value) : 2.8284
고전 역학이 규정한 절대적인 한계선인 2를 넘어서는, 자연이 허용한 수학적 마법의 한계치인 2.8284()에 소수점 넷째 자리까지 정확하게 나타났죠? 그리고 회로도 그려볼까요? 매우 간단합니다. 아래 코드를 맨 밑에 추가하세요.
# 코드 맨 마지막 줄에 추가해 보세요
qc.draw(output='mpl')

(사진; 회로 추가, q0 라인에 H 게이트가 걸리고, q1 라인으로 파란색 얽힘(CX) 선이 이어지는 직관적인 양자 설계도가 화면에 출력됩니다. 퀀텀 컴퓨팅 프로그래밍 단계에서 왜 회로를 그리는지는 나중에 설명할께요.)
컴퓨터 내부에서 Estimator가 수학적으로 처리한 전체 실험 과정을 도형(블록 다이어그램)으로 직관적으로 보면 그 구조는 다음과 같이 작동합니다.

(사진; 벨 부등식 실험의 전체 시스템 개념도)
지금까지 우리는 코드로 회로를 그리고, 프리미티브 V2를 통해 45도 사선 각도들의 기댓값을 계산해 2.8284를 뽑아내는데 성공했습니다. 방금 한 연산은 아인슈타인의 숨은 변수 이론이 틀렸으며(그러나 우리는 여전히 아인슈타인의 세계에서 살고 있습니다만), 고전 컴퓨터의 패러다임이 담지 못하는 무한한 위상 공간이 실재함을 증명했습니다.
베네타리저브 팀이 현재 개발 중인 퀀텀 컴퓨팅을 위한 데이터 프로비저닝 플랫폼 역시 이 고전의 한계를 무너뜨리는 양자 비국소성과 얽힘 데이터의 완전성을 제어하는 기술에서 출발합니다. 단순한 개념 공부를 넘어, 시스템 수준에서 이 기묘한 파동함수를 왜곡 없이 핸들링하는 소프트웨어 인프라를 구축하는 것. 그것이 저희 팀이 올해 전원 출사표를 던지고 기술 내재화를 이룩하려는 진짜 이유입니다. 다음 포스팅에서는 좀 더 기초 단계로 돌아가서 Qiskit 개발 환경을 만들고 퀀텀 컴퓨팅을 위한 가장 기초가 되는 회로를 시뮬레이터로 그려보겠습니다.
퀀텀 시대를 준비하는 테크 리더분들의 많은 관심과 피드백 부탁드립니다!
퀀텀의 선두는 역시 IBM이네요. 대표님, 대박~ 파이썬을...
Qiskit을 통해 실제 양자 얽힘의 수학적 증명을 경험하니... 영화 앤트맨에서 앤트맨이 양자역학 세계로 들어갈때 나왔던 오묘한 화면이 떠오르네요... 다음 편도 기대하겠습니다.