You are on page 1of 95

Introduction to Quantum Programming

Jaroslaw Miszczak
IITiS PAN

April 27, 2018


QIPLSIGML—Machine Learning meets Quantum Computation

Introduction to Quantum Programming 1/40


Our goals

Quantum programming

Manipulation of quantum gates

Programming QRAM

High-level programming

What next?

Q?

Introduction to Quantum Programming 2/40


Our goals

I Understand the difference between quantum and classical


programming.

Introduction to Quantum Programming 3/40


Our goals

I Understand the difference between quantum and classical


programming.
I Introduce various approaches to quantum programming.

Introduction to Quantum Programming 3/40


Our goals

I Understand the difference between quantum and classical


programming.
I Introduce various approaches to quantum programming.
I Write some code.

Introduction to Quantum Programming 3/40


Our goals

I Understand the difference between quantum and classical


programming.
I Introduce various approaches to quantum programming.
I Write some code.
(≡ Talk is cheap. Show me the quantum code.)

Introduction to Quantum Programming 3/40


Quantum programming

Introduction to Quantum Programming 4/40


Quantum programming
What is quantum programming?

Quantum programming is a process that leads from an original


formulation of a computing problem to executable quantum
computer programs.

Introduction to Quantum Programming 5/40


Quantum programming
What is quantum programming?

I The only way to learn a new quantum programming language


is by writing programs in it.

Introduction to Quantum Programming 6/40


Quantum programming
What is quantum programming?

I The only way to learn a new quantum programming language


is by writing programs in it.
I The process of preparing programs for a quantum computer is
especially attractive because it not only can be economically
and scientifically rewarding, it can also be an aesthetic
experience much like composing poetry or music.

Introduction to Quantum Programming 6/40


Quantum programming
What is quantum programming?

I The only way to learn a new quantum programming language


is by writing programs in it.
I The process of preparing programs for a quantum computer is
especially attractive because it not only can be economically
and scientifically rewarding, it can also be an aesthetic
experience much like composing poetry or music.
I Only the modern quantum computer has made quantum
programming both challenging and relevant.

Introduction to Quantum Programming 6/40


Quantum programming
Why bother?

I Use real quantum computers.

Introduction to Quantum Programming 7/40


Quantum programming
Why bother?

I Use real quantum computers.


I Play with quantum mechanics.

Introduction to Quantum Programming 7/40


Quantum programming
Why bother?

I Use real quantum computers.


I Play with quantum mechanics.
I Stretch your imagination by creating a new programming
language with quantum elements...

Introduction to Quantum Programming 7/40


Quantum programming
Why bother?

I Use real quantum computers.


I Play with quantum mechanics.
I Stretch your imagination by creating a new programming
language with quantum elements...
I ...or a language for describing quantum mechanics.

Introduction to Quantum Programming 7/40


Quantum programming
How to do quantum programming?

I Level 0: Manipulation of quantum gates.

Introduction to Quantum Programming 8/40


Quantum programming
How to do quantum programming?

I Level 0: Manipulation of quantum gates.


I Level 1: Programming QRAM.

Introduction to Quantum Programming 8/40


Quantum programming
How to do quantum programming?

I Level 0: Manipulation of quantum gates.


I Level 1: Programming QRAM.
I Level 2: High-level programming.

Introduction to Quantum Programming 8/40


Manipulation of quantum gates

Introduction to Quantum Programming 9/40


Manipulation of quantum gates

Level 0
Direct usage of quantum gates.

I Visual manipulation of gates and circuits.


I Multiplication of matrices and vectors.

Introduction to Quantum Programming 10/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

https://quantumexperience.ng.bluemix.net/qx/editor

Introduction to Quantum Programming 11/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

http://www.quide.eu/ and https://bitbucket.org/quide/


Introduction to Quantum Programming 12/40
Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.


I Integration with text-based description of circuits: QASM
(IBM Q) or C# (QuIDE).

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.


I Integration with text-based description of circuits: QASM
(IBM Q) or C# (QuIDE).
I Useful for testing small circuits.

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.


I Integration with text-based description of circuits: QASM
(IBM Q) or C# (QuIDE).
I Useful for testing small circuits.
I Not so much for real algorithms.

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.


I Integration with text-based description of circuits: QASM
(IBM Q) or C# (QuIDE).
I Useful for testing small circuits.
I Not so much for real algorithms.
I You have to live with connectivity limitations (IBM Q).

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Visual manipulation of gates and circuits

I Direct manipulation of quantum gates, measurement.


I Integration with text-based description of circuits: QASM
(IBM Q) or C# (QuIDE).
I Useful for testing small circuits.
I Not so much for real algorithms.
I You have to live with connectivity limitations (IBM Q).
I But you can use a real quantum computer!

Introduction to Quantum Programming 13/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

You already know that


I quantum states are just vectors (at least we would like them
to be)

Introduction to Quantum Programming 14/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

You already know that


I quantum states are just vectors (at least we would like them
to be)
I ...quantum gates are just matrices (at most 4 × 4, and don’t
mention the decoherence)...

Introduction to Quantum Programming 14/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

You already know that


I quantum states are just vectors (at least we would like them
to be)
I ...quantum gates are just matrices (at most 4 × 4, and don’t
mention the decoherence)...
I ...only the final step is somehow strange.

Introduction to Quantum Programming 14/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

You already know that


I quantum states are just vectors (at least we would like them
to be)
I ...quantum gates are just matrices (at most 4 × 4, and don’t
mention the decoherence)...
I ...only the final step is somehow strange.
I Real Programmers do Quantum Computing in FORTRAN.

Introduction to Quantum Programming 14/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

For example, in Julia...

Introduction to Quantum Programming 15/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

For example, in Julia...

Examples in Wolfram can be found in the GitHub repo

Introduction to Quantum Programming 15/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...
I ...you already know the language.

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...
I ...you already know the language.
I ...it is very easy to implement classical control.

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...
I ...you already know the language.
I ...it is very easy to implement classical control.
I ...it is relatively easy to take into account effects of
decoherence.

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...
I ...you already know the language.
I ...it is very easy to implement classical control.
I ...it is relatively easy to take into account effects of
decoherence.
I Missing: the memory management.

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Alternative approach: Manipulation of vectors and matrices

I Actually this is almost as good as it gets!


I Because...
I ...you already know the language.
I ...it is very easy to implement classical control.
I ...it is relatively easy to take into account effects of
decoherence.
I Missing: the memory management.
I And in most cases you don’t need all the power/libraries/etc
coming with the host language.

Introduction to Quantum Programming 16/40


Manipulation of quantum gates
Where to go next?

I IBM Q Experience:
https://quantumexperience.ng.bluemix.net/qx/editor

Introduction to Quantum Programming 17/40


Manipulation of quantum gates
Where to go next?

I IBM Q Experience:
https://quantumexperience.ng.bluemix.net/qx/editor
I Packages/matrix manipulation libraries:

Introduction to Quantum Programming 17/40


Manipulation of quantum gates
Where to go next?

I IBM Q Experience:
https://quantumexperience.ng.bluemix.net/qx/editor
I Packages/matrix manipulation libraries:
I quantum-octave (Octave/Matlab):
https://github.com/ZKSI/quantum-octave

Introduction to Quantum Programming 17/40


Manipulation of quantum gates
Where to go next?

I IBM Q Experience:
https://quantumexperience.ng.bluemix.net/qx/editor
I Packages/matrix manipulation libraries:
I quantum-octave (Octave/Matlab):
https://github.com/ZKSI/quantum-octave
I QuTiP (Python library): http://qutip.org/

Introduction to Quantum Programming 17/40


Manipulation of quantum gates
Where to go next?

I IBM Q Experience:
https://quantumexperience.ng.bluemix.net/qx/editor
I Packages/matrix manipulation libraries:
I quantum-octave (Octave/Matlab):
https://github.com/ZKSI/quantum-octave
I QuTiP (Python library): http://qutip.org/
I Many more at Quantiki
https://quantiki.org/wiki/list-qc-simulators

Introduction to Quantum Programming 17/40


Programming QRAM

Introduction to Quantum Programming 18/40


Programming QRAM
What is QRAM?

QRAM ≡ Quantum Random Access Machine

the sequence of elementary gates


the description of
algorithm in abstract
model

QCL Quantum Computation Language (32 qubits, seed


1156322590)
[0/32] 1 |0>
qcl> qureg a[10];
qcl> H(a);[10/32] 0.03125 |0> + ... + 0.03125 |1023>
(1024 terms)
qcl> CNot(a[2],a[5]);[10/32] 0.03125 |0> + ... +
0.03125 |1023> (1024 terms)
qcl> list a;
: global a = <0,1,2,3,4,5,6,7,8,9>
qureg a[10]
qcl> dump a[1];
qcl>
: SPECTRUM a[1]: <1>0.5 |0>, 0.5 |1>qcl>

Quantium III

probability distribution
classical controlling device quantum memory
for further analysis
the outcome of measurement

Introduction to Quantum Programming 19/40


Programming QRAM
Advantages of QRAM

I data abstraction

Introduction to Quantum Programming 20/40


Programming QRAM
Advantages of QRAM

I data abstraction ≡ allocation of quantum memory

Introduction to Quantum Programming 20/40


Programming QRAM
Advantages of QRAM

I data abstraction ≡ allocation of quantum memory


I compound quantum operations

Introduction to Quantum Programming 20/40


Programming QRAM
Advantages of QRAM

I data abstraction ≡ allocation of quantum memory


I compound quantum operations ≡ functions encapsulating
sequence of quantum gates or quantum primitives

Introduction to Quantum Programming 20/40


Programming QRAM
Advantages of QRAM

I data abstraction ≡ allocation of quantum memory


I compound quantum operations ≡ functions encapsulating
sequence of quantum gates or quantum primitives
I classical control of quantum operations

Introduction to Quantum Programming 20/40


Programming QRAM
Advantages of QRAM

I data abstraction ≡ allocation of quantum memory


I compound quantum operations ≡ functions encapsulating
sequence of quantum gates or quantum primitives
I classical control of quantum operations ≡ loops, ifs etc.
mixed with quantum code

Introduction to Quantum Programming 20/40


Programming QRAM
Software architecture

(embeded) intermediate
low-level QIR control pulses
DSL representation

gate
pyQuil Quil 19Q Acorn
library

Introduction to Quantum Programming 21/40


Programming QRAM
Quantum middleware

I embedded domain specific language →


C/Python/Wolfram/Haskell with library of functions

Introduction to Quantum Programming 22/40


Programming QRAM
Quantum middleware

I embedded domain specific language →


C/Python/Wolfram/Haskell with library of functions
I data abstraction → allocation of classical and quantum
registers based on qu(b|d)its

Introduction to Quantum Programming 22/40


Programming QRAM
Quantum middleware

I embedded domain specific language →


C/Python/Wolfram/Haskell with library of functions
I data abstraction → allocation of classical and quantum
registers based on qu(b|d)its
I quantum functions → custom elementary gates defined by
matrices or compound statements

Introduction to Quantum Programming 22/40


Programming QRAM
Quantum middleware

I embedded domain specific language →


C/Python/Wolfram/Haskell with library of functions
I data abstraction → allocation of classical and quantum
registers based on qu(b|d)its
I quantum functions → custom elementary gates defined by
matrices or compound statements
I classical control of quantum memory → by using host
language

Introduction to Quantum Programming 22/40


Programming QRAM
...its advantages...

I easy to learn and use

Introduction to Quantum Programming 23/40


Programming QRAM
...its advantages...

I easy to learn and use


I auto-magic quantum memory management

Introduction to Quantum Programming 23/40


Programming QRAM
...its advantages...

I easy to learn and use


I auto-magic quantum memory management
I integration with classical machine

Introduction to Quantum Programming 23/40


Programming QRAM
...and its disadvantages

I very similar to low-level code

Introduction to Quantum Programming 24/40


Programming QRAM
...and its disadvantages

I very similar to low-level code


I lack of expressibility

Introduction to Quantum Programming 24/40


Programming QRAM
Example 1: ProjectQ

I Python library developed by ETH (https://projectq.ch/)


I offers various targets
I hardware (IBM Q Experience)
I resource counter (???)
I graphical circuit representation

Introduction to Quantum Programming 25/40


Programming QRAM
Example 1: ProjectQ

Introduction to Quantum Programming 26/40


Programming QRAM
Example 1: ProjectQ

Nice features
I Natural (for physicist) syntax for executing quantum gates.
I Meta instructions for quantum-controlled quantum operations
and support for reverse call

Introduction to Quantum Programming 27/40


Programming QRAM
Example 1: ProjectQ

Some examples...

Introduction to Quantum Programming 28/40


Programming QRAM
Example 1: ProjectQ

Metainstruction Control
Execution of the code is based on the state of quantum register.

|0i H

|0i H

|0i

Introduction to Quantum Programming 29/40


Programming QRAM
Example 1: ProjectQ

Metainstruction Dagger
Reverse execution of the quantum code.

|0i H H

|0i

Introduction to Quantum Programming 30/40


Programming QRAM
Example 2: Rigetti Forest and pyQuil

I Quil ≡ quantum assembly language.

Introduction to Quantum Programming 31/40


Programming QRAM
Example 2: Rigetti Forest and pyQuil

I Quil ≡ quantum assembly language.


I pyQuil ≡ Python library for manipulating quantum
programmes in Quill.

Introduction to Quantum Programming 31/40


Programming QRAM
Example 2: Rigetti Forest and pyQuil

I Quil ≡ quantum assembly language.


I pyQuil ≡ Python library for manipulating quantum
programmes in Quill.
I Access to Rigetti 19Q-Acorn quantum computer!

Introduction to Quantum Programming 31/40


Programming QRAM
Example 2: Rigetti Forest and pyQuil

I Quil ≡ quantum assembly language.


I pyQuil ≡ Python library for manipulating quantum
programmes in Quill.
I Access to Rigetti 19Q-Acorn quantum computer!
I More during the third day: Adam Szady, Quantum
programming with (Py)Quil.

Introduction to Quantum Programming 31/40


High-level programming
Domain specific languages

Level 2
Domain specific language with data and function abstraction.

I QCL (http://tph.tuwien.ac.at/~oemer/qcl.html)
I LanQ (http://lanq.sourceforge.net/)
I QPL anc cQPL
(https://arxiv.org/abs/quant-ph/0511145)
I Scaffold (https://github.com/epiqc/ScaffCC)

Introduction to Quantum Programming 32/40


High-level programming
Example 1: QCL – focus on quantum computing

I First release in 1998, last in 2014


(http://tph.tuwien.ac.at/~oemer/qcl.html).

Introduction to Quantum Programming 33/40


High-level programming
Example 1: QCL – focus on quantum computing

I First release in 1998, last in 2014


(http://tph.tuwien.ac.at/~oemer/qcl.html).
I Architecture independent programming language for quantum
computers.

Introduction to Quantum Programming 33/40


High-level programming
Example 1: QCL – focus on quantum computing

Features
I Syntax for reversibility (uncomputing).

Introduction to Quantum Programming 34/40


High-level programming
Example 1: QCL – focus on quantum computing

Features
I Syntax for reversibility (uncomputing).
I Different types of quantum memory for better optimization.

Introduction to Quantum Programming 34/40


High-level programming
Example 1: QCL – focus on quantum computing

Features
I Syntax for reversibility (uncomputing).
I Different types of quantum memory for better optimization.
I Quantum conditions — quantum-controlled execution
(generalization of controlled gates).

Introduction to Quantum Programming 34/40


High-level programming
Example 1: QCL – focus on quantum computing

Features
I Syntax for reversibility (uncomputing).
I Different types of quantum memory for better optimization.
I Quantum conditions — quantum-controlled execution
(generalization of controlled gates).
I Various types of compound statements (related with memory
management): quantum operators, quantum functions,
procedures.

Introduction to Quantum Programming 34/40


High-level programming
Example 1: QCL – focus on quantum computing

Advanced quantum memory management using types:


I qureg — basic type for quantum registers,

Introduction to Quantum Programming 35/40


High-level programming
Example 1: QCL – focus on quantum computing

Advanced quantum memory management using types:


I qureg — basic type for quantum registers,
I quconst — cannot be modified,

Introduction to Quantum Programming 35/40


High-level programming
Example 1: QCL – focus on quantum computing

Advanced quantum memory management using types:


I qureg — basic type for quantum registers,
I quconst — cannot be modified,
I quvoid — has to be empty before the call,

Introduction to Quantum Programming 35/40


High-level programming
Example 1: QCL – focus on quantum computing

Advanced quantum memory management using types:


I qureg — basic type for quantum registers,
I quconst — cannot be modified,
I quvoid — has to be empty before the call,
I quscratch — has to be empty before and after the call.

Introduction to Quantum Programming 35/40


High-level programming
Example 1: QCL – focus on quantum computing

Types of quantum functions:


I procedure — classically controlled quantum computation,

Introduction to Quantum Programming 36/40


High-level programming
Example 1: QCL – focus on quantum computing

Types of quantum functions:


I procedure — classically controlled quantum computation,
I qufunct — used to implement irreversible functions,

Introduction to Quantum Programming 36/40


High-level programming
Example 1: QCL – focus on quantum computing

Types of quantum functions:


I procedure — classically controlled quantum computation,
I qufunct — used to implement irreversible functions,
I operator — compound quantum operation.

Introduction to Quantum Programming 36/40


High-level programming
Example 1: QCL – focus on quantum computing

Some examples...

Introduction to Quantum Programming 37/40


High-level programming
Example 2: cQPL – focus on quantum communication

I QPL (formal specification) and cQPL (implementation of


QPL, https://arxiv.org/abs/quant-ph/0511145)

Introduction to Quantum Programming 38/40


High-level programming
Example 2: cQPL – focus on quantum communication

I QPL (formal specification) and cQPL (implementation of


QPL, https://arxiv.org/abs/quant-ph/0511145)
I Functional paradigm.

Introduction to Quantum Programming 38/40


High-level programming
Example 2: cQPL – focus on quantum communication

I QPL (formal specification) and cQPL (implementation of


QPL, https://arxiv.org/abs/quant-ph/0511145)
I Functional paradigm.
I No publicly available implementation.

Introduction to Quantum Programming 38/40


High-level programming
Example 2: cQPL – focus on quantum communication

I QPL (formal specification) and cQPL (implementation of


QPL, https://arxiv.org/abs/quant-ph/0511145)
I Functional paradigm.
I No publicly available implementation.
I Syntax for creating quantum communication channels by
sharing (entangled) qubits.

Introduction to Quantum Programming 38/40


What next?

I IF D-Wave GOTO Andy Mason and Sheir Yarkoni, Tutorial


on programming the D-Wave system
I IF IBM GOTO Ram Dušić Hren, IBM Q Experience:
Hands-on workshop
I IF Rigetti GOTO Adam Szady, Quantum programming with
(Py)Quil

Introduction to Quantum Programming 39/40


Q?

Q?
https://github.com/jmiszczak/qprog-tutorial

Introduction to Quantum Programming 40/40

You might also like