의견.png

"양자얽힘"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
303번째 줄: 303번째 줄:
 
== 참고자료 ==
 
== 참고자료 ==
 
* 양자 얽힘 위키백과 - https://ko.wikipedia.org/wiki/%EC%96%91%EC%9E%90_%EC%96%BD%ED%9E%98
 
* 양자 얽힘 위키백과 - https://ko.wikipedia.org/wiki/%EC%96%91%EC%9E%90_%EC%96%BD%ED%9E%98
 +
* 네이버 지식백과 슈뢰딩거의 고양이 - https://terms.naver.com/entry.nhn?docId=1519952&cid=60219&categoryId=60219
 +
 +
* 라이거우주, 〈[https://blog.naver.com/PostView.nhn?blogId=sechsmin&logNo=220754184436&proxyReferer=https:%2F%2Fwww.google.com%2F 양자역학16 - EPR 패러독스 '양자얽힘']〉, 《네이버블로그》, 2016-07-05
 +
* 김도헌, 〈[http://crossroads.apctp.org/myboard/read.php?Board=n9998&id=1225&s_para4=0022 양자얽힘]〉, 《크로스로드》, 2017-07
 +
* 자연사랑, 〈[http://greenacademy.re.kr/archives/2335 슈뢰딩거의 1935년 논문 – (2)얽힘]〉, 《녹색아카데미》, 2019-11-05
 
* 마이크로소프트, 〈[https://docs.microsoft.com/ko-kr/quantum/tutorials/explore-entanglement 자습서: Q#을 사용한 얽힘 살펴보기]〉, 《마이크로소프트》, 2020-05-29
 
* 마이크로소프트, 〈[https://docs.microsoft.com/ko-kr/quantum/tutorials/explore-entanglement 자습서: Q#을 사용한 얽힘 살펴보기]〉, 《마이크로소프트》, 2020-05-29
 +
* 최상국 기자, 〈[http://www.inews24.com/view/1283258 지하철 2호선의 "유레카"…양자얽힘 엑시톤 첫 발견]〉, 《아이뉴스24》, 2020-07-21
  
 
== 같이 보기 ==
 
== 같이 보기 ==

2020년 8월 14일 (금) 14:12 판

양자얽힘(quantum entanglement)이란 하나의 입자를 둘로 쪼개서 아주 먼 거리에 위치시키더라도 한 쪽의 스핀(spin) 방향이 정해지면 동시에 다른 쪽의 스핀 방향이 반대로 정해지는 현상을 말한다. 예를 들어 양자 하나를 지구에 두고, 그와 얽혀 있는 다른 양자 하나를 100만 광년 떨어진 먼 우주에 두더라도, 지구의 양자가 스핀업이 되면 먼 우주의 양자는 동시에 스핀다운이 되는 현상이다. 만약 을 이용해 정보를 주고받을 경우 100만년이나 걸리지만, 양자얽힘 현상을 이용하면 정보를 실시간으로 주고받을 수 있다. 양자얽힘 현상을 이용하여 빛보다 빠른 양자통신을 구현할 수 있다.

개요

양자역학에서 양자얽힘은 두 부분계 사이에서 존재할 수 잇는 일련의 비고전적인 상관관계를 의미한다. 얽힘은 두 부분계가 공간적으로 서로 멀리 떨어져 있어도 존재할 수 있다. 예를 들어, 두 입자를 일정한 양자 상태로 둬서 두 입자의 스핀이 항상 반대가 된다고 가정한다. 양자역학에 의하면 측정하기 전까지는 두 입자의 상태를 알 수 없다. 하지만 측정을 통해 그 순간 한 계의 상태가 결정되고 이는 즉시 그 계와 얽혀 있는 다른 계의 상태까지 결정한다. 마치 정보가 한 계에서 다른 계로 순식간에 이동한 것처럼 보이는 착각이 든다. 이러한 양자 얽힘 개념이 등장한 후, 양자암호, 양자컴퓨터 등의 연구 및 개발, 실험 등은 꾸준히 진행되고 있으며, 이를 통해 양자얽힘 이론의 예측을 실증할 수 있었다. 한편, 한쪽에서는 철학적인 논의도 꾸준히 진행되었는데, 그 중 하나는 양자얽힘 현상이 국소성의 원리를 위배한다는 주제이다. 국소성의 원리는 계의 상태에 관한 정보가 항상 그 계의 주위를 통해서 만 매개될 수 있다는 원리를 말하는데, 만약 양자얽힘 현상에 의해서 정보가 전달된다면 별도로 주위를 통하지 않고도 정보를 전달할 수 있기 때문에 국소성의 원리와 모순된다. 결국 양자 얽힘 과정에서 실제로 정보가 어떤식으로 전달되는지에 대한 논의는 계속 진행되었다.

양자얽힘은 국소성의 원리를 위반하지만, 빛보다 빨리 정보를 전달할 수 없기 때문에 상대성 이론을 위배할 수 없다. 양자얽힘을 통하여 고전적인 정보와 양자역학적인 정보를 함께 보낼 수 있는 방법이 존재하는데, 이것을 바로 양자전송이라고 부른다. 그러나 이 경우에도 역시 정보를 빛보다 빠르게 전송하는 것은 불가능하다.[1]

배경

양자얽힘은 양자역학의 코펜하겐 해석에서 유도되는 결론 중 하나이지만, 비직관성에 의해서 아이슈타인을 비롯한 여러 과학자들에게 환영받지 못했다. 이들은 양자역학의 표준해석방법인 코펜하겐 해석을 받아들이지 않았고, 그 대신 숨은 변수 이론을 만들었다. 이 이론은 아직 알려지지 않은 결정론적 매개변수가 상호작용을 유도한다는 내용인데, 코펜하겐 해석의 확률적인 해석을 반대하는 입장이었다. 1935년, 알베르트 아이슈타인, 보리스 포돌스키, 네이선 로젠은 양자역학의 비국소적이고 비직관적인 현상에 대한 사고 실험인 EPR 역설을 발표했다. 양자역학과 비슷한 물리 현상을 예측하면서 국소성 원리 또한 만족하는 숨은 변수 이론을 찾기 위해 노력했다. 1964년에 존 벨은 모든 숨은 변수 이론이 만족하지만 양자역학은 만족하지 않는 벨 부등식이라는 조건을 유도했다. 실험 결과, 실제 물리 현상은 벨 부등식을 다르지 않는다는 사실이 밝혀져, 자연계는 숨은 변수 이론으로는 기술할 수 없다.

개념

정의

브라-켓 표기법을 사용한다. 서로 상호작용하지 않는 두 부분계 A와 B로 이루어진 전체 계를 생각해본다. 그렇다면 전체 계의 힐베르트 공간은 A와 B의 힐베르트 공간의 텐서 곱이다.


식이 위와 같다면 전체 계의 상태 가운데 일부는 다음과 같이 쓸 수 있다.

이렇게 두 부분계의 상태의 텐서 곱으로 나타낸 상태는 분리가능한 상태라고 부른다. 반대로 전체 계의 상태 중에서 이와 같이 두 부분계의 상태의 텐서 곱으로 나타낼 수 없는 상태가 얽힌 상태이다. 예를 들어 다음과 같이 와 가 평행하지 않고, 와 가 평행하지 않을 는 일반적으로 얽힌 상태이다.

수학적으로, 양자역학적 상태는 힐베르트 공간 의 반직선으로 이루어진 사영 힐베르트 공간의 원소이다. 두 부분계의 상태의 텐서 곱 을 나타내는 함수는 세그레 매장이라고 한다. 따라서 분리가능한 상태는 세그레 매장의 치역이며, 그 여집합이 얽힌 상태이다.

예제

다음 예시에서는 A와 B가 각각 두 개의 상태 와 을 가질 수 있는 계라고 가정한다. 대표적으로 전자의 스핀 등이 있다. 이때 다음과 같은 상태는 얽혀 있다.

이런 상태에서 A의 스핀을 측정할 시, 다음의 두 결과 중 하나가 50% 확률로 일어날 수 있다.

  1. A의 스핀을 0으로 측정한다. 이에 따라 계의 상태는 로 바뀐다.
  2. A의 스핀을 1로 측정한다. 이에 따라 계의 상태는 로 바뀐다.

만약 A의 스핀을 0으로 측정한다면, 뒤 따라 B의 스핀을 측정했을 때 100% 확률로 매번 1을 얻을 것이다. 반대로, A의 스핀을 1로 측정한다면, 뒤 이어 B의 스핀을 측정했을 때 매번 0을 얻는다. 그러나 A의 스핀을 먼저 측정하지 않고 B의 스핀을 측정한다면, B는 50% 확률로 0이나 1을 얻는다. 이에 따라, A의 스핀의 측정이 B의 스핀의 측정에 일종의 영향을 줄 수 있다. 이는 A와 B가 공간적으로 매우 멀리 떨어져 있어도 가능하다. 이것은 EPR 역설의 한 형태이다. 하지만 얽힘 현상으로 먼 거리를 거쳐 정보를 전송하는 건 불가능하다. A를 측정하여 어떤 결과를 얻을지 알 수 없기 때문이다.

만약 스핀의 상태를 복제할 수 있다면 다음과 같이 정보를 전달하는 방법을 생각해 볼 수 있다. A계에서 한 비트를 전송하고 싶다고 한다면, 0을 전송하려면 아무것도 하지 않고, 1을 전송하려면 A의 스핀을 측정한다. 그렇다면, B에서 전송한 결과를 다음과 같이 받을 수 있다. 우선, B의 스핀 상태를 여러번 복제하고, 복제한 상태들의 스핀을 각각 측정한다. 만약 A의 스핀을 측정하지 않았고, A가 0을 전송했으면, B의 복제본들의 측정 결과는 제각각일것이나, 만약 A의 스핀을 측정하고 A가 1을 전송했다면, B의 복제본들의 스핀은 모두 0이거나 모두 1이어야 한다. 그러나 양자역학적 상태는 복제 불가는 정리에 의해서 정확히 복제하는 것이 불가능하고, 이러한 정보 전달 방법은 불가능하다.

스핀 단일 상태의 상관 관계

위와 같은 상관관계는 고전적으로 설명할 수있다. 예를 들어, A의 스핀과 B의 스핀이 항상 반대이지만, 어느 스핀이 0이고 어느 스핀이 1인지는 알 수 없을 수도 있다. 그러나 얽힘은 다음과 같은 예시처럼 고전적으로 설명하기 힘든 상관관계를 가질 수도 있다. 두 개의 전자로 이루어진 계를 생각해봤을 때, 전자는 스핀이 인 페르미온이므로, 페르미-디랙 통계로 인하여 계의 파동 함수는 반대칭적이다. 그 중 총 스핀이 0인 스핀 단일 상태는 다음과 같다.

위의 식은 명시적으로 스핀이 양자화된 방향을 표시했다. 위의 식과 같은 상태의 두 입자로 이루어진 계에서 하나의 스핀을 측정하는 경우, +나 -가 나올 확률은 반반일 것이다. 이 경우도 위와 마찬가지로 다음과 같다.

  1. A를 측정해서 +가 나왔다면, 계 B를 측정하면 반드시 -가 나와야 한다. 즉, A를 +로 측정하면 계의 상태는 로 바뀐다.
  2. A를 측정해서 -가 나왔다면, 계 B를 측정하면 반드시 +가 나와야 한다. 즉, A를 -로 측정하면 계의 상태는 로 바뀐다.

이러한 사고 실험은 실제로 수행하려면 총스핀이 0인 입자가 붕괴하는 과정을 사용해야만 한다. 각 운동량 보존에 의해 붕괴된 두 입자의 스핀합도 0이어야 하며, 따라서 동일한 입자가 생성될 경우에는 스핀 단일 상태로 생성되게 된다. 이 같은 예로는 에타 중간자가 뮤온 쌍으로 붕괴하는 현상이 있다.

하지만 이러한 현상은 일어날 확률이 로 매우 작기 때문에 실험에는 부적합하다. 다른 예로는, 작은 운동 에너지를 갖는 두 양성자가 출동해서 다시 튀어나가는 현상으로 들 수 있다.

파울리 배타 원리때문에 상호작용한 양성자들은 상태에 있고, 산란된 양성자들의 스핀 상태는 양성자들이 멀리 떨어지 상태에서도 위와 같이 얽혀 있다. 다시 측정 결과로 돌아와서 보면 위의 순수한 계의 예시와 별 다른 것이 없어 보인다. 만약 흰 공과 검정색 공이 든 항아리에서 공 하나를 꺼내 확인해본다고 한다면, 흰 공이 앨리스에게로 갔다면, 밥은 검은색 공을 꺼내게 된다. 그렇다면 위에서처럼 측정 전에는 알지 못했을 뿐, 항아리 속의 흰공과 검은공을 측정하는 것처럼 똑같이 설명할 수 있지 않을까싶지만, 위의 문제는 항아리처럼 쉬운 문제는 아니다. 스핀이 방향성을 갖기 때문이다. 스핀 단일 상태를 x나 y방향의 스핀 고유 상태로 표시하면, x방향의 고유상태와 y방향의 고유상태는

와 같은 관계를 가지고 있다. 따라서 스핀 단일 상태는


와 같이 표현될 수 있다. x방향의 스핀을 측정한 뒤 B의 z방향 스핀을 측정한다면, A의 x방향 스핀 측정 결과에 상관없이 B의 z방향 스핀은 +와 -가 반반씩 측정될 것이다. A의 x방향 스핀 정보를 측정하면 계의 상태가 또는 로 붕괴할 것이기 때문에 B의 z방향 성분은 무작위로 측정된다.

결과
  • A와 B가 서로 수직한 다른 방향의 스핀 성분을 측정할 때, 두 측정 사이의 상관 관계는 없다.
  • A와 B가 같은 방향을 측정할 때, 두 측정은 100% 상관관계를 갖는다.
  • A의 스핀을 측정하지 않는다면, B는 측정 방향에 상관없이 무작위한 결과를 내놓는다.
A의 측정 결과 B의 측정 결과

따라서, B의 측정 결과는 A에 행새진 측정 방법에 따라 달라지는 것처럼 보인다. 이는 양자역학적으로 측정이 단순히 기존에 있는 상태를 건드리지 않고 기록하는 과정이 아니라, 계의 상태를 바꾸기 때문이다. A의 z방향 스핀 성분을 +로 관찰하면, 계의 상태는 로 바뀐다. 즉, 계의 일부분을 측정해도 계 전체 상태가 바뀐다.

코드

Q#

다음은 양자얽힘을 보여주는 벨이라는 프로그램의 코드로, 마이크로소프트에서 제공하고 있다. 벨의 이름은 가장 간단한 중첩과 양자 얽힘의 예를 표현하는 데 사용되는 두 큐비트의 특정 양자 상태를 의미하는 벨 상태에서 따온 이름이다. 코드를 작성하기에 앞서, 우선 원하는 언어나 개발 환경을 사용하여 양자 개발 키트를 설치하고, 해당 키트가 이미 설치되어 있는 경우에는 키트가 최신 버전인지 확인하고 업데이트 과정을 진행한다. 키트를 설치하지 않고도 Q# 프로그래밍 언어의 개요와 양자 컴퓨팅 개념을 확인할 수 있다.

양자 개발 키트의 동작

고전적 비트는 0이나 1같은 단일 이진 값을 보유하는 반면, 큐비트는 0과 1의 중첩이 가능하다. 개념적으로 추상공간의 방향, 즉 벡터로 간주할 수 있고, 이 경우 가능한 모든 방향이 있을 수 있다. 두 고전적인 상태는 두 방향이다. 즉, 0을 측정할 확률은 100%이며, 1을 측정할 확률도 100%이다. 측정 작업은 이진 결과를 생성하고 큐비트 상태를 변경한다. 측정은 0이나 1의 이진 값을 생성하는데, 큐비트는 중첩에서 고전적 상태 중 하나로 변경된다. 그 후, 개입 작업 없이 동일한 측정을 반복하며 동일한 이진 결과를 생성한다. 여러 큐비트가 서로 얽힐 수도 있는데, 얽힌 큐비트 하나를 측정하면 다른 큐비트의 상태 정보도 변화한다.

Q# 프로젝트 생성

다음 프로젝트는 마이크로소프트의 비주얼 스튜디오 코드 응용 프로그램을 기반으로 한다. 새 Q# 프로젝트를 생성하고, 프로젝트를 호출한다.

  • program.qs
01 namespace Bell {
02
03     open Microsoft.Quantum.Canon;
04     open Microsoft.Quantum.Intrinsic;
05
06     @EntryPoint()
07     operation HelloQ() : Unit {
08         Message("Hello quantum world!");
09     }
10 }
Q# 응용 프로그램 작성

아래의 첫 번째 코드는 원하는 비트를 사용하는 방법이다. SetQubitState 연산은 큐비트를 매개 변수로 사용하고 또 다른 매개 변수 desired를 사용해서 우리가 원하는 큐비트 상태를 나타낸다. SetQubitState 연산은 M 연산을 통해 큐비트를 측정한다.

  • program.qs
01    namespace Bell {
02       open Microsoft.Quantum.Intrinsic;
03       open Microsoft.Quantum.Canon;
04
05       operation SetQubitState(desired : Result, q1 : Qubit) : Unit {
06           if (desired != M(q1)) {
07               X(q1);
08           }
09       }
10   }

이 연산을 호출해서 큐비트를 고전적인 상태로 설정하면 항상 zero를 반환하거나 one을 반환할 수 있다. 여기서 zero와 one은 큐비트 측정해서 가능한 두 가지 결과를 나타내는 상수이다. SetQubitState 연산은 큐비트를 측정한다. 큐비트가 우리가 원하는 상태이면 SetQubitState는 큐비트를 그대로 두고, 그렇지 않다면 x 연산을 실행해서 큐비트를 원하는 상태로 변경한다.

측정 결과 계산

SetQubitState 연산 효과를 보여주기 위해 TestBellState 연산를 추가한다. 이 연산은 zero 나 one을 입력으로 취하며, 이 입력을 사용하여 SetQubitState 연산을 수 차례 호출하고, 큐비트 측정에서 zero가 반환된 횟수와 one이 반환된 횟수를 집계한다. 물론 TestBellState 연산의 첫 번째 시뮬레이션 출력에서는 zero를 사용하여 매개 변수 입력으로 설정된 모든 큐비트 측정에서 zero를 반환하고, one을 사용하여 매개 변수 입력으로 설정된 모든 큐비트 측정에서 one을 반환한다. SetQubitState 연산이 끝난 후에 다음 연산을 Bell.qs 파일에 추가한다.

01 operation TestBellState(count : Int, initial : Result) : (Int, Int) {
02
03       mutable numOnes = 0;
04       using (qubit = Qubit()) {
05
06           for (test in 1..count) {
07               SetQubitState(initial, qubit);
08               let res = M(qubit);
09
10               // Count the number of ones we saw:
11               if (res == One) {
12                   set numOnes += 1;
13               }
14           }
15            
16           SetQubitState(Zero, qubit);
17       }
18
19       // Return number of times we saw a |0> and number of times we saw a |1>
20       Message("Test results (# of 0s, # of 1s): ");
21       return (count - numOnes, numOnes);
22   }

return() 함수를 사용하여 콘솔에 설명 메시지를 인쇄하기 위해 앞에 줄을 추가했다. TestBellState 연산은 count 반복문을 실행하고, 큐비트에 지정된 initial 값을 설정한 후, 결과를 측정한다. 측정한 0과 1의 개수에 대한 통계를 수집하여 호출자에게 반환하고, 다른 필요한 연산을 수행한다. 다른 사용자가 알려진 상태에서 이 큐비트를 할당할 수 있도록 반환하기 전에 해당 큐비트를 zero로 다시 설정한다.

기본적으로 변수 Q#은 변경할 수 없고, 바인딩된 후에는 해당 값이 변경되지 않을 수 있다. let 키워드는 변경할 수 없는 변수의 바인딩을 나타내느 데 사용되며, 연산 인수는 항상 변경할 수 없다. 예제의 numones와 같이 값이 변경될 수 있는 변수가 필요한 경우에는 mutable 키워드를 사용하여 해당 변수를 선언할 수 있다. 변경할 수 있는 변수의 값은 setQubitState 문을 사용해서 변경할 수 있다. 두 경우 모두 변수 형식은 컴파일러를 통해 유추된다.

프로그램 실행

코드를 실행하기 위해 명령을 제공할 때 실행할 수 있는 컴파일러를 지정한다.

01 namespace Bell {
02    open Microsoft.Quantum.Canon;
03    open Microsoft.Quantum.Intrinsic;
04
05    operation SetQubitState(desired : Result, target : Qubit) : Unit {
06        if (desired != M(target)) {
07            X(target);
08        }
09    }
10
11    @EntryPoint()
12    operation TestBellState(count : Int, initial : Result) : (Int, Int) {
13
14        mutable numOnes = 0;
15        using (qubit = Qubit()) {
16
17            for (test in 1..count) {
18                SetQubitState(initial, qubit);
19                let res = M(qubit);
20
21                // Count the number of ones we saw:
22                if (res == One) {
23                    set numOnes += 1;
24                }
25            }
26
27            SetQubitState(Zero, qubit);
28        }
29
30    // Return number of times we saw a |0> and number of times we saw a |1>
31    Message("Test results (# of 0s, # of 1s): ");
32    return (count - numOnes, numOnes);
33    }
34 }

프로그램을 실행하려면 count 명령줄에서 인수를 지정해야 initial한다. 예를 들어,

//.NET Core CLI
dotnet run --count 1000 --initial One

출력은

//출력
Test results (# of 0s, # of 1s):
(0, 1000)

initial = Zero인 경우에는 다음 사항을 확인한다.

//.NET Core CLI
dotnet run --count 1000 --initial Zero
//출력
Test results (# of 0s, # of 1s):
(1000, 0)
얽힘 준비

먼저 첫 번째 큐비트를 초기 상태로 설정한다. H 연산을 사용하여 중첩 상태로 전환하고, 첫 번째 비트를 측정하기 전에 제어되지 않았음을 나타내는 연산을 한다. 두 큐비트에 대해서 이 연산을 실행할 시 그 결과로 첫 번째 큐비트가 one 인 경우에는 두 번째 큐비트가 대칭 이동한다. 이제 두 큐비트가 서로 얽혔다. 첫 번째 큐비트에 대한 확률은 변한게 없지만, 이제 두 번째 큐비트의 측정 결과는 첫 번째 큐비트의 측정 결과와 항상 동일하다. CNOT 작업은 두 큐비트를 얽어서 두 큐비트 중 한 큐비트에서 일어나는 모든 것이 다른 큐비트에서 발생하도록 했다. 반대로 측정한 경우에도 동일한 상황이 발생한다.

가장 먼저 해야할 할일은 TestBellState에서 두 비트를 할당하는 것이다.

//Q#
using ((q0, q1) = (Qubit(), Qubit())) {

이렇게 하면 TestBellState에서 측정하기 전에 새 연산은 CNOT를 추가할 수 있다.

01 //Q#
02 SetQubitState(initial, q0);
03 SetQubitState(Zero, q1);
04
05 H(q0);
06 CNOT(q0, q1);
07 let res = M(q0);

시작할 때 항상 zero 상태에 있도록 첫 번째 큐비트를 초기화하는 다른 SetQubitState 연산을 추가한다. 또한 두 번째 큐비트를 해제하기 전에 다시 설정해야 한다.

//Q#
SetQubitState(Zero, q0);
SetQubitState(Zero, q1);
//Q#
01 operation TestBellState(count : Int, initial : Result) : (Int, Int) {
02
03        mutable numOnes = 0;
04        using ((q0, q1) = (Qubit(), Qubit())) {
05            for (test in 1..count) {
06                SetQubitState(initial, q0);
07                SetQubitState(Zero, q1);
08
09                H(q0);
10                CNOT(q0,q1);
11                let res = M(q0);
12
13                // Count the number of ones we saw:
14                if (res == One) {
15                    set numOnes += 1;
16                }
17            }
18
19            SetQubitState(Zero, q0);
20            SetQubitState(Zero, q1);
21        }
22
23        // Return number of times we saw a |0> and number of times we saw a |1>
24        return (count-numOnes, numOnes);
25    } 

위 코드를 실행하면 이전과 정확히 동일한 50-50 결과를 얻을 수 있다. 다음은 두 번째 큐비트가 측정되는 첫 번째 큐비트에 반응하는 방법이다. 새로운 TestBellState 연산을 사용한다.

//Q#
01 operation TestBellState(count : Int, initial : Result) : (Int, Int, Int) {
02        mutable numOnes = 0;
03        mutable agree = 0;
04        using ((q0, q1) = (Qubit(), Qubit())) {
05            for (test in 1..count) {
06                SetQubitState(initial, q0);
07                SetQubitState(Zero, q1);
08
09                H(q0);
10                CNOT(q0, q1);
11                let res = M(q0);
12
13                if (M(q1) == res) {
14                    set agree += 1;
15                }
16
17                // Count the number of ones we saw:
18                if (res == One) {
19                    set numOnes += 1;
20                }
21            }
22            
23            SetQubitState(Zero, q0);
24            SetQubitState(Zero, q1);
25        }
26
27        // Return times we saw |0>, times we saw |1>, and times measurements agreed
28        Message("Test results (# of 0s, # of 1s, # of agreements)");
29        return (count-numOnes, numOnes, agree);
30    }
//.NET Core CLI
dotnet run --count 1000 --initial One
//출력
(505, 495, 1000)
//.NET Core CLI
dotnet run --count 1000 --initial Zero
//출력
Test results (# of 0s, # of 1s, # of agreements)
(507, 493, 1000)

첫 번째 큐비트에 대한 확률은 변경되지 않았지만 두 큐비트가 서로 얽혀있으므로 두 번째 큐비트의 측정 결과는 첫 번째 큐비트의 측정 결과와 항상 동일하다.[2]

각주

  1. 양자 얽힘 위키백과 - https://ko.wikipedia.org/wiki/%EC%96%91%EC%9E%90_%EC%96%BD%ED%9E%98
  2. 마이크로소프트, 〈자습서: Q#을 사용한 얽힘 살펴보기〉, 《마이크로소프트》, 2020-05-29

참고자료

같이 보기


  의견.png 이 양자얽힘 문서는 암호 알고리즘에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.