맨위로가기

양자 프로그래밍

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

양자 프로그래밍은 양자 컴퓨터에서 실행될 수 있는 알고리즘을 개발하는 과정으로, 양자 명령어 집합, 양자 소프트웨어 개발 키트, 그리고 양자 프로그래밍 언어를 활용한다. 양자 명령어 집합은 고수준 알고리즘을 물리적 명령어로 변환하며, Blackbird, cQASM, OpenQASM, Quil 등이 있다. 양자 소프트웨어 개발 키트(SDK)는 양자 프로그램 생성 및 실행을 위한 도구 모음을 제공하며, Cirq, Qiskit, PennyLane 등이 대표적이다. 양자 프로그래밍 언어는 명령형과 함수형으로 나뉘며, QCL, Q#, LIQUi|> 등이 존재한다.

더 읽어볼만한 페이지

  • 양자 컴퓨팅 - 위상 양자 컴퓨터
    위상 양자 컴퓨터는 애니온의 꼬임 상태를 이용하여 양자 정보를 저장하고 처리하는 양자 컴퓨터로, 2차원 공간에서 준입자인 애니온의 특성을 활용하며, 양자 회로 모델 등과 계산 능력이 동일하지만 특정 알고리즘에 유리하고 실험적 확인은 논쟁 중에 있다.
  • 양자 컴퓨팅 - 큐트리트
    큐트리트는 양자 컴퓨팅에서 정보의 기본 단위로 사용되는 3차원 양자 시스템으로, 세 개의 직교하는 기저 상태의 선형 결합으로 표현되며 큐비트보다 데코히어런스에 강하지만 조작의 어려움으로 큐비트와의 양자 얽힘을 이용하는 연구가 진행 중이다.
  • 프로그래밍 언어 분류 - 하드웨어 기술 언어
    하드웨어 기술 언어(HDL)는 전자 시스템의 구조와 동작을 텍스트 기반으로 표현하는 언어로, 디지털 회로 설계의 핵심 도구로 사용되며, 시뮬레이션 및 디버깅을 통해 설계 검증을 수행한다.
  • 프로그래밍 언어 분류 - 고급 프로그래밍 언어
    고급 프로그래밍 언어는 기계어보다 높은 수준의 추상화를 제공하며, 변수, 객체, 함수 등의 개념을 사용하여 프로그래머가 기계의 세부 사항에서 분리되어 편리하게 프로그래밍할 수 있도록 하는 언어이다.
  • 프로그래밍 패러다임 - 지식 표현
    지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다.
  • 프로그래밍 패러다임 - 의도적 프로그래밍
    의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다.
양자 프로그래밍
기본 정보
양자 컴퓨팅
양자 컴퓨팅
분야컴퓨터 과학, 물리학
유형학제간
역사
초기 연구1980년대 초
발전양자 알고리즘 개발
양자 정보 이론 발전
양자 암호 연구
주요 개념
핵심 원리양자 중첩
양자 얽힘
양자 간섭
기본 단위큐비트
연구 분야
알고리즘쇼어 알고리즘
그로버 알고리즘
프로그래밍 언어QCL
Quipper
Q#
Silq
OpenQASM
관련 기술양자 회로
양자 어닐링
위상 양자 컴퓨팅
주요 기업 및 기관
기업IBM
Google
마이크로소프트
인텔
리게티
아이온큐
PsiQuantum
연구 기관워털루 대학교 양자 컴퓨팅 연구소
MIT
캘리포니아 공과대학교
델프트 공과대학교
응용 분야
주요 활용암호 해독
신약 개발
재료 과학
최적화 문제 해결
금융 모델링
인공지능

2. 양자 명령어 집합

양자 명령어 집합은 고수준 알고리즘을 양자 프로세서에서 실행할 수 있는 물리적 명령어로 변환하는 데 사용된다. 이러한 명령어는 이온 트랩 또는 초전도 양자 컴퓨터와 같이 특정 하드웨어 플랫폼에 특화되어 있기도 하다.

몇 가지 양자 명령어 집합의 예시로는 Blackbird[3][4], cQASM[5], OpenQASM[6], Quil[7] 등이 있다.

2. 1. Blackbird

Blackbird는 자나두 퀀텀 테크놀로지스에서 개발한 양자 명령어 집합이자 중간 표현 방식이다.[3][4] 이는 광자 양자 하드웨어에서 실행될 수 있는 연속 변수 양자 프로그램을 표현하도록 설계되었다.

2. 2. cQASM

cQASM은[5] 흔히 공통 QASM으로도 알려져 있으며, 모든 양자 컴파일 및 시뮬레이션 도구 간의 상호 운용성을 보장하는 하드웨어에 독립적인 양자 어셈블리 언어이다. 이는 델프트 공과대학교의 QCA 연구소에서 처음 소개되었다.

2. 3. OpenQASM

OpenQASM[6]IBM에서 키스킷과 IBM Q Experience에서 사용하기 위해 도입한 중간 표현 방식이다.

2. 4. Quil

Quil은 공유 양자/클래식 메모리 모델을 도입한 양자 컴퓨팅 명령어 집합 아키텍처이다. 로버트 스미스, 마이클 커티스, 윌리엄 젱이 ''실용적인 양자 명령어 집합 아키텍처''에서 처음 소개했다.[7] 양자 순간이동, 양자 오류 정정, 시뮬레이션,[8][9] 최적화 알고리즘[10]을 포함한 많은 양자 알고리즘은 공유 메모리 아키텍처를 필요로 한다.

3. 양자 소프트웨어 개발 키트 (SDK)

양자 소프트웨어 개발 키트(SDK)는 양자 프로그램을 생성하고 조작하기 위한 도구 모음을 제공한다.[11] 또한, 양자 프로그램을 시뮬레이션하거나, 클라우드 기반 양자 장치 및 자체 호스팅 양자 장치를 사용하여 실행할 수 있도록 지원한다.

3. 1. SDKs with access to quantum processors

다음은 시뮬레이터 및 프로토타입 양자 장치에서 양자 회로를 실행할 수 있는 소프트웨어 개발 키트들이다.

3. 1. 1. Cirq

구글(Google)이 개발한 오픈 소스 프로젝트로, 파이썬 프로그래밍 언어를 사용하여 양자 회로를 생성하고 조작한다. Cirq로 작성된 프로그램은 아이온큐(IonQ), 파스칼(Pasqal),[38] 리게티 컴퓨팅(Rigetti), 알파인 퀀텀 테크놀로지스(Alpine Quantum Technologies)에서 실행할 수 있다.[21]

3. 1. 2. Classiq

Classiq에서 개발한 클라우드 기반 양자 IDE는, 다양한 QPUs에서 배포할 수 있는 하드웨어 인식 합성 엔진을 통해 확장 가능하고 효율적인 양자 회로를 생성하기 위해 고급 양자 언어인 Qmod를 사용한다. 이 플랫폼에는 방대한 양자 알고리즘 라이브러리가 포함되어 있다.

3. 1. 3. Forest

리게티에서 개발한 오픈 소스 프로젝트로, 파이썬 프로그래밍 언어를 사용하여 양자 회로를 생성하고 조작한다. 결과는 시뮬레이터 또는 리게티가 제공하는 프로토타입 양자 장치를 사용하여 얻는다. 기본적인 양자 연산을 사용하여 프로그램을 만들 수 있을 뿐만 아니라, Grove 패키지 내에서 더 높은 수준의 알고리즘을 사용할 수 있다.[12] Forest는 퀼 명령 집합을 기반으로 한다.

3. 1. 4. MindQuantum

MindSpore를 기반으로 하는 양자 컴퓨팅 프레임워크로, NISQ 알고리즘 구현에 중점을 둔다.[13][14][15]

3. 1. 5. Ocean

D-Wave에서 개발한 오픈 소스 도구 모음이다. 주로 파이썬으로 작성되었으며, 사용자가 아이징 모델 및 이차 무제약 이진 최적화(QUBO) 형식으로 문제를 공식화할 수 있도록 한다. 결과는 D-Wave의 실시간 양자 애플리케이션 환경인 Leap, 고객 소유 머신 또는 고전적 샘플러에 온라인 양자 컴퓨터를 제출하여 얻을 수 있다.

파이썬으로 프로젝트큐를 사용하는 샘플 코드

3. 1. 6. PennyLane

재너두 퀀텀 테크놀로지스(Xanadu Quantum Technologies)에서 개발한 오픈 소스 파이썬 라이브러리로, 양자 컴퓨터의 미분 가능 프로그래밍을 위해 사용된다.[16][17][18][19] PennyLane을 통해 사용자는 텐서플로우(TensorFlow), 넘파이(NumPy), 또는 파이토치(PyTorch)를 사용하여 모델을 생성하고, IBM 퀀텀 익스피리언스(IBMQ), 구글(Google Quantum), 리게티 컴퓨팅(Rigetti), 퀀티늄(Quantinuum)[20] 및 알파인 퀀텀 테크놀로지스(Alpine Quantum Technologies)에서 제공하는 양자 컴퓨터 백엔드와 연결할 수 있다.[21][22]

3. 1. 7. Perceval

Perceval은 광자 양자 회로를 설계하고 파이썬을 기반으로 양자 알고리즘을 개발하기 위해 캉델라(Quandela)에서 만든 오픈 소스 프로젝트이다. 시뮬레이션은 사용자의 컴퓨터 또는 클라우드 컴퓨팅에서 실행된다. Perceval은 또한 Quandela의 클라우드 기반 광자 양자 프로세서에 연결하는 데 사용된다.[23][24]

3. 1. 8. ProjectQ

취리히 연방 공과대학교(ETH) 이론 물리학 연구소에서 개발한 오픈 소스 프로젝트로, 파이썬 프로그래밍 언어를 사용하여 양자 회로를 생성하고 조작한다.[25] 결과는 시뮬레이터를 사용하거나 작업을 IBM 양자 장치로 전송하여 얻을 수 있다.

3. 1. 9. Qibo

QRC, CQT 및 INFN 등 여러 연구소에서 개발한 양자 시뮬레이션, 양자 하드웨어 제어 및 보정을 위한 오픈 소스 풀 스택 API이다.[26][27] Qibo는 양자 시뮬레이션 및 하드웨어 제어를 위한 여러 백엔드를 포함하는 모듈식 프레임워크로, 여러 장치에 대한 드라이버[28]와 양자 보정, 특성화 및 유효성 검사를 위한 도구를 갖춘 플랫폼에 구애받지 않는 양자 하드웨어 제어 프레임워크를 제공하는 것을 목표로 한다.[29] 이 프레임워크는 연구실에서 필요한 소프트웨어 개발을 단순화하여 자체 호스팅 양자 장치에 중점을 둔다.

3. 1. 10. Qiskit

IBM에서 개발한 오픈 소스 프로젝트이다.[30] 파이썬을 사용하여 양자 회로를 생성하고 조작한다. 결과는 사용자의 장치에서 실행되는 시뮬레이터, IBM에서 제공하는 시뮬레이터, 또는 IBM에서 제공하는 프로토타입 양자 장치를 사용하여 얻을 수 있다. 기본적인 양자 연산을 사용하여 프로그램을 만들 수 있을 뿐만 아니라, 알고리즘 및 벤치마킹을 위한 상위 수준 도구도 특수 패키지 내에서 사용할 수 있다.[31] Qiskit은 양자 회로를 표현하기 위한 OpenQASM 표준을 기반으로 한다. 또한 QiskitPulse 표준을 통해 양자 시스템의 펄스 레벨 제어를 지원한다.[32]

3. 1. 11. Qrisp

프라운호퍼 FOKUS에서 파이썬으로 개발한 오픈 소스 프로젝트이다.[33] Qrisp는 양자 알고리즘을 생성하고 컴파일하기 위한 고급 프로그래밍 언어이다. 구조화된 프로그래밍 모델은 확장 가능한 개발 및 유지 관리를 가능하게 한다. 표현력 있는 구문은 큐비트 대신 변수를 기반으로 하며, QuantumVariable을 핵심 클래스로 사용하고 게이트 대신 함수를 사용한다. 성능이 뛰어난 시뮬레이터 및 자동 언컴퓨테이션과 같은 추가 도구는 광범위한 프레임워크를 보완한다.

또한 장치별 게이트 세트를 기반으로 하는 회로 수준까지의 기본 함수에 대한 대안적인 컴파일을 제공하므로 플랫폼 독립적이다.

3. 1. 12. Quantum Development Kit

마이크로소프트(Microsoft)가 .NET Framework의 일부로 개발한 프로젝트이다. 양자 프로그램은 양자 프로그래밍 언어 Q#을 사용하여 비주얼 스튜디오(Visual Studio) 및 VSCode 내에서 작성하고 실행할 수 있다. QDK로 개발된 프로그램은 마이크로소프트의 애저 퀀텀(Azure Quantum)에서 실행할 수 있으며, 퀀티넘(Quantinuum), 아이온큐(IonQ), 파스칼(Pasqal)의 양자 컴퓨터에서 실행할 수 있다.[36][37][38]

Q#는 2017년에 마이크로소프트에 의해 구현되었다. Quantum Development Kit에 포함되어 있으며, Visual Studio를 개발 환경으로 사용할 수 있다.[95]

3. 1. 13. Strawberry Fields

자나두 퀀텀 테크놀로지스(Xanadu Quantum Technologies)에서 개발한 오픈 소스 파이썬 라이브러리로, 연속변수 양자 정보(CV) 양자 광학 회로를 설계, 시뮬레이션 및 최적화하는 데 사용된다.[39][40] 세 가지 시뮬레이터가 제공되는데, 하나는 폭 상태를 기반으로 하고, 다른 하나는 양자 광학의 가우스 공식을 사용하며,[41] 나머지 하나는 텐서플로우 머신 러닝 라이브러리를 사용한다. Strawberry Fields는 자나두의 양자 광자 하드웨어에서 프로그램을 실행하기 위한 라이브러리이기도 하다.[42][43]

3. 1. 14. t|ket>

캠브리지 퀀텀 컴퓨팅에서 개발한 양자 프로그래밍 환경이자 최적화 컴파일러로, 2018년 12월에 출시되었으며 시뮬레이터와 여러 양자 하드웨어 백엔드를 대상으로 한다.[44]

4. 양자 프로그래밍 언어

양자 프로그래밍 언어는 크게 명령형함수형의 두 가지 주요 그룹으로 나뉜다.

최근에는 함수형 프로그래밍에 기반한 다양한 양자 프로그래밍 언어가 제안되고 있다. 함수형 프로그래밍 언어는 프로그램 추론에 적합하다.

4. 1. 명령형 언어 (Imperative languages)

명령형 양자 프로그래밍 언어의 대표적인 예로는 QCL,[45] LanQ,[46] Q|SI>[55] 등이 있다. E. 크닐(E. Knill)이 고안한 양자 의사 코드(Quantum pseudocode)는 최초로 형태를 갖춘 언어로, 양자 알고리즘을 설명하기 위한 것이었다. 양자 의사 코드는 도입 이후 퀀텀 랜덤 액세스 머신(Quantum Random Access Machine, QRAM)이라고 불리는 양자 컴퓨터와 강하게 연결되었다.[1]

Quantum Computation Language영어(QCL)[93]는 최초로 구현된 양자 프로그래밍 언어 중 하나이다. QCL의 구문은 C 언어와 유사하며, 고전적인 자료형은 C 언어의 기본 자료형과 유사하다. 하나의 프로그램 내에서 고전적인 코드와 양자 프로그래밍 코드를 결합하는 것이 가능하다. Q 언어[94]C++확장으로 구현된, 두 번째로 구현된 명령형 양자 프로그래밍 언어이다. Q 언어는 기초 클래스 Qop에서 파생된 QHadamard, QFourier, QNot, QSwap와 같은 기본적인 양자 연산을 위한 클래스를 제공한다.

Quantum Guarded Command Language (qGCL)는 P. 줄리아니에 의해 그의 박사 학위 논문에서 정의되었다. 이는 에츠허르 데이크스트라가 만든 가드 커맨드 언어를 기반으로 하며, 양자 프로그램의 언어 사양으로 평가받고 있다.

Q#는 2017년에 마이크로소프트에 의해 구현되었다. Quantum Development Kit에 포함되어 있으며, Visual Studio를 개발 환경으로 사용할 수 있다.[95]

4. 1. 1. Ket

Ket[47]는 양자 프로그래밍을 쉽게 하도록 설계된 오픈 소스 임베디드 언어이며, 파이썬과 비슷한 구문과 단순성을 가지고 있다. 이는 Rust 런타임 라이브러리 및 양자 시뮬레이터와 완벽하게 통합되는 Ket 양자 프로그래밍 플랫폼[48]의 필수 구성 요소이다. Quantuloop에서 유지 관리하며 연구원과 개발자를 위해 접근성과 다양성을 강조한다. 다음은 Ket를 사용하여 벨 상태를 구현하는 예제이다:

```python

from ket import *

a, b = quant(2) # 두 양자 비트 할당

H(a) # 큐비트 `a`를 중첩 상태로 만듦

cnot(a, b) # 두 큐비트를 벨 상태로 얽힘

m_a = measure(a) # 큐비트 `a`를 측정, 큐비트 `b`도 붕괴됨

m_b = measure(b) # 큐비트 `b`를 측정

# 두 큐비트의 측정이 항상 같을 것임을 단언

assert m_a.value == m_b.value

4. 1. 2. LQP

양자 프로그램 논리(LQP)는 다중 입자 상태의 양자 측정과 단일체 진화를 표현할 수 있는 동적 양자 논리이며, 다양한 형태의 얽힘에 대한 논리적 특성화를 제공한다. 이 논리는 양자 계산에서 다양한 프로토콜의 정확성을 명시하고 검증하는 데 사용되어 왔다.[49][50]

4. 1. 3. Q language

Q Language는 두 번째로 구현된 명령형 양자 프로그래밍 언어이다.[51] C++의 확장으로 구현되었다. QHadamard, QFourier, QNot, QSwap와 같은 기본적인 양자 연산을 위한 클래스를 제공하며, 이는 기본 클래스 Qop에서 파생된다. 새로운 연산자는 C++ 클래스 메커니즘을 사용하여 정의할 수 있다.

양자 메모리는 Qreg 클래스로 표현된다.

```cpp

Qreg x1; // 초기값 0인 1-큐비트 양자 레지스터

Qreg x2(2,0); // 초기값 0인 2-큐비트 양자 레지스터

```

계산 과정은 제공된 시뮬레이터를 사용하여 실행된다. 노이즈 환경은 시뮬레이터의 매개변수를 사용하여 시뮬레이션할 수 있다.[94]

4. 1. 4. Q#

마이크로소프트에서 양자 개발 키트와 함께 사용하도록 개발한 언어이다.[52] Q#는 2017년에 마이크로소프트에 의해 구현되었으며, Quantum Development Kit에 포함되어 Visual Studio를 개발 환경으로 사용할 수 있다.[95]

4. 1. 5. QCL

Quantum Computation Language영어(QCL)는 최초로 구현된 양자 프로그래밍 언어 중 하나이다.[53][93] QCL의 가장 중요한 특징은 사용자가 정의한 연산자와 함수를 지원한다는 것이다. QCL의 구문C 프로그래밍 언어의 구문과 유사하며, 고전적인 자료형은 C의 기본 자료형과 유사하다. 고전적인 코드와 양자 코드를 동일한 프로그램에서 결합할 수 있다.

Quantum computing language에서 제공되는 양자 데이터형은 qureg (quantum register)라고 한다. 이는 큐비트(qubit, quantum bit, 양자 비트)의 배열로 해석할 수 있다.

```

qureg x1[2]; // 2-qubit quantum register x1

qureg x2[2]; // 2-qubit quantum register x2

H(x1); // Hadamard operation on x1

H(x2[1]); // Hadamard operation on the first qubit of the register x2

```

Quantum computing language의 인터프리터는 qlib 시뮬레이션 라이브러리를 채용하고 있기 때문에, 양자 프로그램 실행 중에 양자 머신의 내부 상태를 관찰하는 것이 가능하다.

```

qcl> dump

: STATE: 4 / 32 qubits allocated, 28 / 32 qubits free

0.35355 |0> + 0.35355 |1> + 0.35355 |2> + 0.35355 |3>

+ 0.35355 |8> + 0.35355 |9> + 0.35355 |10> + 0.35355 |11>

```

dump operation은 measurement와는 다르다는 것에 주의해야 한다. 이는 dump operation이 양자 머신의 상태에 영향을 미치지 않으며, 시뮬레이터를 사용함으로써만 실현되기 때문이다.

Quantum computing language의 표준 라이브리는 양자 알고리즘에서 사용되는 양자 연산자를 제공한다. 예를 들어 controlled-not with many target qubits, :en:Hadamard operation on many qubits, parse and controlled phase와 같은 것들이 있다.

Quantum computing language의 가장 중요한 특징은 사용자 정의 연산자와 사용자 정의 함수를 지원한다는 것이다. 현대의 프로그래밍 언어와 마찬가지로 양자 데이터를 조작하는 새로운 오퍼레이션을 정의할 수 있다. 다음은 그 예시이다.

```

operator diffuse (qureg q) {

H(q); // Hadamard Transform

Not(q); // Invert q

CPhase(pi, q); // Rotate if q=1111..

!Not(q); // undo inversion

!H(q); // undo Hadamard Transform

}

```

이는 그로버 알고리즘에서 사용되는 mean operator의 역을 정의하는 것이다. 이것에 의해 더 추상적인 수준에서 알고리즘을 정의하는 것이 가능해지며, 함수 라이브러리를 프로그래머가 사용할 수 있도록 확장할 수 있다.

QCL은 다음과 같은 데이터 형식, 함수형, 내장 함수를 지원한다.

QCL의 데이터 형식, 함수형, 내장 함수
구분종류설명
데이터 형식양자(Quantum)qureg, quvoid, quconst, quscratch, qucond
고전(Classical)int, real, complex, boolean, string, vector, matrix, tensor
함수형qufunct의사 고전 연산자. 기본 상태의 순열만 변경할 수 있다.
operator일반적인 유니타리 연산자. 진폭을 변경할 수 있다.
procedure이 함수 내에서 measure, print, dump를 호출할 수 있다. 이 함수는 가역적이지 않다.
내장 함수양자(Quantum)qufunctFanout, Swap, Perm2, Perm4, Perm8, Not, CNot
operatorMatrix2x2, Matrix4x4, Matrix8x8, Rot, Mix, H, CPhase, SqrtNot, X, Y, Z, S, T
proceduremeasure, dump, reset
고전(Classical)산술(Arithmetic)sin, cos, tan, log, sqrt, ...
복소수(Complex)Re, Im, conj


4. 1. 6. qGCL

양자 가드 명령 언어(qGCL)는 P. 줄리아니가 그의 박사 학위 논문에서 정의한 것으로, 에츠허르 데이크스트라가 만든 가드 명령 언어를 기반으로 한다.

qGCL은 양자 프로그램 명세 언어로 설명될 수 있다.

4. 1. 7. QMASM

퀀텀 매크로 어셈블러(QMASM)는 D-Wave와 같은 양자 어닐러에 특화된 저수준 언어이다.[54]

4. 1. 8. Qmod

Qmod는 게이트 수준의 큐비트 연산을 추상화하는 고급 언어로, 양자 레지스터에서 양자 알고리즘을 구현하는 기능적 접근 방식을 제공한다.

이 언어는 https://classiq.io Classiq 플랫폼의 일부이며, 자체 구문, 파이썬 SDK 또는 시각적 편집기를 통해 직접 사용할 수 있다. 모든 방법은 더 큰 알고리즘 라이브러리와 효율적인 회로 최적화를 활용할 수 있다.

4. 1. 9. Q|SI>

.Net 언어에 내장된 플랫폼으로, 양자 while-언어의 양자 확장 기능을 통해 양자 프로그래밍을 지원한다.[55][56] 이 플랫폼은 양자 while-언어 컴파일러[57]와 양자 계산 시뮬레이션, 양자 회로 최적화, 양자 프로그램의 종료 분석[58] 및 양자 프로그램 검증을 위한 도구 체인을 포함한다.[59][60]

4. 1. 10. Quantum pseudocode

E. 크닐이 제안한 양자 의사 코드는 양자 알고리즘을 설명하기 위한 최초의 공식화된 언어이다. 이는 양자 임의 접근 기계(QRAM)라고 불리는 양자 기계 모델과 밀접하게 연결되어 도입되었다.[1]

4. 1. 11. Scaffold

Scaffold는 QASM 및 OpenQASM으로 컴파일되는 C와 유사한 언어이다. LLVM 컴파일러 인프라를 기반으로 구축되어 특정 명령어 집합을 생성하기 전에 Scaffold 코드에 대한 최적화를 수행한다.[61][62]

4. 1. 12. Silq

Silq는 ETH 취리히에서 개발한 강력한 정적 타입 시스템을 갖춘 양자 컴퓨팅을 위한 고급 프로그래밍 언어이다.[63][64]

4. 2. 함수형 언어 (Functional languages)

함수형 양자 프로그래밍 언어는 프로그램 추론에 적합하여 활발히 개발되고 있다. 대표적인 언어는 다음과 같다:

  • QPL: 피터 셀린저가 개발한 언어로, QFC와 밀접하게 연관되어 있으며 텍스트 기반 구문을 사용한다.[65]
  • QML: Altenkirch와 Grattage가 개발한 하스켈과 유사한 언어이다.[66][67] QML은 양자 정보를 폐기하는 대신 복제한다. 여기서 복제는 |\phi\rangle|\phi\rangle\otimes|\phi\rangle로 사상하는 연산으로, 클로닝과는 다르다.[96]
  • 람다 계산법 기반 고차 양자 프로그래밍 언어: van Tonder,[68] Selinger와 Valiron,[69] Arrighi와 Dowek이 제안했다.[70]


최근에는 함수형 프로그래밍에 기반을 둔 다양한 양자 프로그래밍 언어가 제안되고 있다.

4. 2. 1. LIQUi|>

LIQUi|> (리퀴)는 F# 프로그래밍 언어의 양자 시뮬레이션 확장 기능이다.[71] 현재 마이크로소프트 리서치(Microsoft Research)의 StationQ의 양자 아키텍처 및 계산 그룹(QuArC)에서 개발하고 있다.[72] LIQUi|>는 이론가들이 물리적 양자 컴퓨터를 사용할 수 있게 되기 전에 양자 알고리즘 설계를 실험할 수 있도록 하는 것을 목표로 한다.[73]

여기에는 프로그래밍 언어, 최적화 및 스케줄링 알고리즘, 양자 시뮬레이터가 포함되어 있다. LIQUi|>는 고급 프로그램 형식으로 작성된 양자 알고리즘을 양자 장치용 저수준 기계 지침으로 변환하는 데 사용할 수 있다.[74]

4. 2. 2. QFC and QPL

QFC와 QPL은 피터 셀린저가 정의한 두 개의 밀접하게 관련된 양자 프로그래밍 언어이다. 이들은 구문만 다를 뿐인데, QFC는 순서도 구문을 사용하고, QPL은 텍스트 구문을 사용한다. 이 언어들은 고전적인 제어 흐름을 가지고 있지만, 양자 또는 고전적인 데이터를 처리할 수 있다. 셀린저는 이 언어들의 의미론을 슈퍼연산자 범주에서 제시한다.[1]

4. 2. 3. QML

QML은 Altenkirch와 Grattage가 개발한 하스켈과 유사한 양자 프로그래밍 언어이다.[75][66][96][87] Selinger의 QPL과 달리, QML은 양자 정보의 폐기가 아닌 복제를 기본 연산으로 사용한다. 여기서 복제는 |\phi\rangle|\phi\rangle\otimes|\phi\rangle로 매핑하는 연산으로, 복제 불가능 정리에 의해 금지된 연산과는 다르다. 저자들은 이 복제 연산이 고전적인 언어에서 공유가 모델링되는 방식과 유사하다고 주장한다. QML은 고전적 제어와 양자 제어 연산자를 모두 도입하지만, 다른 대부분의 언어는 고전적 제어에 의존한다.

QML의 동작적 의미론양자 회로로, 지시적 의미론은 슈퍼연산자로 제시되며, 이 둘이 일치함이 증명되었다. 동작적 의미론과 지시적 의미론은 모두 하스켈에서 (고전적으로) 구현되었다.[76]

4. 2. 4. Quantum lambda calculi

양자 람다 캘큘러스는 1930년대 앨론조 처치와 스티븐 콜 클리니가 도입한 고전적인 람다 캘큘러스의 확장이다. 양자 람다 캘큘러스의 목적은 고차 함수 이론으로 양자 프로그래밍 언어를 확장하는 것이다.[77]

1996년 필립 메이민(Philip Maymin)은 양자 람다 캘큘러스를 정의하려는 첫 번째 시도를 했다.[77] 그의 람다-q 캘큘러스는 모든 양자 계산을 표현할 수 있을 정도로 강력했다. 그러나 이 언어는 NP-완전 문제를 효율적으로 해결할 수 있어, 양자 튜링 머신 또는 양자 회로 모델과 같은 표준 양자 계산 모델보다 엄격하게 강력해 보인다. 따라서 메이민의 람다-q 캘큘러스는 물리적 장치에서 구현할 수 없을 것이다.

2003년, 앙드레 반 톤더(André van Tonder)는 양자 프로그램의 정확성을 증명하기에 적합한 람다 캘큘러스의 확장을 정의했다. 그는 또한 Scheme 프로그래밍 언어로 구현을 제공했다.[78]

2004년, 젤린저(Selinger)와 발리롱(Valiron)은 선형 논리를 기반으로 하는 타입 시스템을 갖춘 양자 계산을 위한 강타입 람다 캘큘러스를 정의했다.[79]

4. 2. 5. Quipper

Quipper는 2013년에 발표되었다.[80][81] 하스켈을 호스트 언어로 사용하는 임베디드 언어로 구현되었다.[82] 이러한 이유로, Quipper로 작성된 양자 프로그램은 제공된 라이브러리를 사용하여 하스켈로 작성된다. 예를 들어, 다음 코드는 중첩(superposition) 준비를 구현한다.

```haskell

import Quipper

spos :: Bool -> Circ Qubit

spos b = do

q <- qinit b

r <- hadamard q

return r

참조

[1] 서적 High-level Structures in Quantum Computing Morgan & Claypool Publishers
[2] 웹사이트 Comprehensive list of quantum open-source projects https://github.com/q[...] 2022-01-27
[3] 웹사이트 Blackbird Quantum Assembly Language — Blackbird 0.2.0 documentation https://quantum-blac[...] 2019-06-24
[4] 간행물 Strawberry Fields: A Software Platform for Photonic Quantum Computing 2019-03-11
[5] arXiv cQASM v1.0: Towards a Common Quantum Assembly Language 2018-05-24
[6] 문서 qiskit-openqasm: OpenQASM specification https://github.com/I[...] International Business Machines 2017-07-04
[7] arXiv A Practical Quantum Instruction Set Architecture
[8] 간행물 The theory of variational hybrid quantum-classical algorithms 2016-02-04
[9] arXiv A Hybrid Classical/Quantum Approach for Large-Scale Studies of Quantum Systems with Density Matrix Embedding Theory
[10] arXiv A Quantum Approximate Optimization Algorithm
[11] 간행물 A software methodology for compiling quantum programs 2018
[12] 웹사이트 Welcome to the Documentation for Grove! — Grove 1.7.0 documentation https://grove-docs.r[...]
[13] 웹사이트 MindSpore Quantum Documentation https://www.mindspor[...]
[14] arXiv MindSpore Quantum: A User-Friendly, High-Performance, and AI-Compatible Quantum Computing Framework 2024
[15] 웹사이트 mindquantum https://github.com/m[...]
[16] 웹사이트 PennyLane Documentation — PennyLane 0.14.1 documentation https://pennylane.re[...] 2021-03-26
[17] 웹사이트 AWS joins PennyLane, an open-source framework that melds machine learning with quantum computing https://siliconangle[...] 2021-02-17
[18] 웹사이트 SD Times Open-Source Project of the Week: PennyLane https://sdtimes.com/[...] 2021-02-26
[19] 웹사이트 Real-time Analytics News Roundup for Week Ending December 12 https://www.rtinsigh[...] 2020-12-13
[20] 웹사이트 Accelerating Quantum Computing https://www.quantinu[...]
[21] 웹사이트 Home https://www.aqt.eu/
[22] 웹사이트 Plugins and ecosystem — PennyLane https://pennylane.ai[...] 2021-03-26
[23] 뉴스 La puissance d'un ordinateur quantique testée en ligne (The power of a quantum computer tested online) https://www.lemonde.[...] Le Monde 2022-11-22
[24] 간행물 Perceval: A Software Platform for Discrete Variable Photonic Quantum Computing https://quantum-jour[...] 2023-02-21
[25] 웹사이트 Home https://projectq.ch/
[26] 간행물 Qibo: a framework for quantum simulation with hardware acceleration https://iopscience.i[...] 2022-01-01
[27] 간행물 Quantum simulation with just-in-time compilation https://quantum-jour[...] 2022-09-22
[28] 웹사이트 Qibolab https://github.com/q[...] 2022-11-02
[29] 웹사이트 Qibocal https://github.com/q[...] 2022-11-01
[30] 웹사이트 qiskit.org https://qiskit.org/
[31] 웹사이트 Qiskit Overview https://qiskit.org/o[...] 2021-02-10
[32] arXiv Qiskit Backend Specifications for OpenQASM and OpenPulse Experiments
[33] 웹사이트 Qrisp official website https://www.qrisp.eu[...]
[34] 웹사이트 Eclipse Foundation (website) https://www.eclipse.[...]
[35] 웹사이트 Fraunhofer FOKUS (website) https://www.fokus.fr[...]
[36] 웹사이트 Azure Quantum documentation, QDK & Q# API reference - Azure Quantum https://learn.micros[...]
[37] 웹사이트 What is Azure Quantum? - Azure Quantum https://learn.micros[...] 2023-01-11
[38] 웹사이트 PASQAL https://pasqal.io/
[39] 웹사이트 Strawberry Fields — Strawberry Fields 0.8.0 documentation https://strawberryfi[...] 2018-09-25
[40] 논문 Strawberry Fields: A Software Platform for Photonic Quantum Computing
[41] 논문 Gaussian quantum information 2012-05-01
[42] 웹사이트 Hardware — Strawberry Fields https://strawberryfi[...] 2021-03-26
[43] 웹사이트 In the Race to Hundreds of Qubits, Photons May Have "Quantum Advantage" https://spectrum.iee[...] 2021-03-05
[44] 웹사이트 pytket https://github.com/C[...] 2022-01-22
[45] 웹사이트 The QCL Programming Language http://tph.tuwien.ac[...]
[46] 웹사이트 LanQ – a quantum imperative programming language http://lanq.sourcefo[...]
[47] 논문 Ket Quantum Programming https://dl.acm.org/d[...] 2022-01-31
[48] 웹사이트 Ket Quantum Programming https://quantumket.o[...] 2023-05-18
[49] 간행물 LQP: The Dynamic Logic of Quantum Information https://arxiv.org/ab[...] Mathematical Structures in Computer Science
[50] 논문 PLQP & Company: Decidable Logics for Quantum Algorithms https://link.springe[...]
[51] 웹사이트 Software for the Q language http://sra.itc.it/pe[...] 2017-07-20
[52] 웹사이트 Introduction to Q# & Quantum Development Kit - Azure Quantum https://learn.micros[...] 2023-03-30
[53] 웹사이트 QCL - A Programming Language for Quantum Computers http://tph.tuwien.ac[...] 2017-07-20
[54] 간행물 A Quantum Macro Assembler https://ieeexplore.i[...] Proceedings of the 20th Annual IEEE High Performance Extreme Computing Conference
[55] 논문 Q|SI>: A Quantum Programming Language 2017-05-09
[56] 논문 Floyd–hoare Logic for Quantum Programs 2012-01
[57] 논문 A Flowchart Language for Quantum Programming https://www.computer[...] 2010
[58] 논문 Verification of quantum programs
[59] 논문 Invariants of quantum programs: Characterisations and generation 2017
[60] arXiv A Theorem Prover for Quantum Hoare Logic and its Applications
[61] 웹사이트 Scaffold: Quantum Programming Language https://www.cs.princ[...] Princeton University 2020-09-22
[62] 논문 An updated LLVM-based quantum research compiler with further OpenQASM support 2020-05-28
[63] 웹사이트 What is Silq? https://silq.ethz.ch[...] 2020-06-21
[64] 서적 Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation ACM 2020-06-11
[65] 간행물 Towards a quantum programming language http://www.mathstat.[...] Mathematical Structures in Computer Science
[66] 웹사이트 Jonathan Grattage: QML Research http://www.cs.nott.a[...]
[67] 웹사이트 QML: A Functional Quantum Programming Language https://web.archive.[...] 2006-07-10
[68] 간행물 A Lambda Calculus for Quantum Computation https://dx.doi.org/1[...] SIAM J. Comput.
[69] 간행물 A lambda calculus for quantum computation with classical control http://www.mathstat.[...] Mathematical Structures in Computer Science
[70] 간행물 Linear-algebraic lambda-calculus: higher-order, encodings and confluence http://www.arxiv.org[...]
[71] 웹사이트 The Language Integrated Quantum Operations Simulator https://stationq.git[...] 2017-07-20
[72] 간행물 Quantum Architectures and Computation Group (QuArC) https://www.microsof[...] 2011
[73] 웹사이트 StationQ https://stationq.mic[...] 2017-07-20
[74] 웹사이트 Language-Integrated Quantum Operations: LIQUi|> https://www.microsof[...] 2016
[75] 웹사이트 QML: A Functional Quantum Programming Language http://sneezy.cs.not[...] 2007-09-26
[76] Webarchive QML: A Functional Quantum Programming Language (compiler) http://sneezy.cs.not[...] 2005-2008
[77] 논문 "Extending the Lambda Calculus to Express Randomized and Quantumized Algorithms" https://arxiv.org/ab[...] 1996
[78] 웹사이트 A lambda calculus for quantum computation (website) http://www.het.brown[...] 2007-10-02
[79] 논문 "Quantum Lambda Calculus" https://www.mscs.dal[...]
[80] 웹사이트 The Quipper Language http://www.mathstat.[...]
[81] 웹사이트 The Quipper Language (website) http://www.mathstat.[...]
[82] 서적 Reversible Computation
[83] 웹사이트 High-level Structures in Quantum Computing http://www.amazon.co[...] 2015-12-12
[84] 웹사이트 The QCL Programming Language http://tph.tuwien.ac[...] 2016-02-11
[85] 웹사이트 LanQ – a quantum imperative programming language http://lanq.sourcefo[...] 2016-02-11
[86] 논문 "Towards a quantum programming language" http://www.mathstat.[...] Mathematical Structures in Computer Science 2004
[87] 웹사이트 Jonathan Grattage: QML Research http://www.cs.nott.a[...]
[88] 웹사이트 QML: A Functional Quantum Programming Language http://sneezy.cs.not[...]
[89] 논문 "A Lambda Calculus for Quantum Computation" https://doi.org/10.1[...] SIAM J. Comput. 2004
[90] 논문 "A lambda calculus for quantum computation with classical control" http://www.mathstat.[...] Mathematical Structures in Computer Science 2006
[91] 논문 "Linear-algebraic lambda-calculus: higher-order, encodings and confluence" http://www.arxiv.org[...] 2006
[92] 문서 Quantum Programming Languages Survey http://www.dcs.gla.a[...]
[93] 문서 QCL - A Programming Language for Quantum Computers http://tph.tuwien.ac[...]
[94] 문서 Q Language http://sra.itc.it/pe[...]
[95] 문서 Quantum Development Kit https://www.microsof[...]
[96] 문서 QML http://sneezy.cs.not[...]
[97] 논문 "Extending the Lambda Calculus to Express Randomized and Quantumized Algorithms" https://arxiv.org/ab[...] 1996
[98] 웹사이트 A lambda calculus for quantum computation (website) http://www.het.brown[...] 2016-02-11
[99] 문서 The Quipper Language http://www.mathstat.[...]
[100] 웹사이트 The Quipper Language (website) http://www.mathstat.[...] 2016-02-11
[101] 웹사이트 An Introduction to Quantum Programming in Quipper https://arxiv.org/ab[...] 2016-02-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com