QML: A functional quantum programming language quantum control and - - PowerPoint PPT Presentation

qml a functional quantum programming language
SMART_READER_LITE
LIVE PREVIEW

QML: A functional quantum programming language quantum control and - - PowerPoint PPT Presentation

QML: A functional quantum programming language quantum control and orthogonality Jonathan Grattage with Thorsten Altenkirch & Alex Green sneezy.cs.nott.ac.uk/qml School of Computer Science & IT, The University of Nottingham QML: A


slide-1
SLIDE 1

QML: A functional quantum programming language

quantum control and orthogonality

Jonathan Grattage with Thorsten Altenkirch & Alex Green sneezy.cs.nott.ac.uk/qml School of Computer Science & IT, The University of Nottingham

QML: A functional quantum programming language – p.1/14

slide-2
SLIDE 2

What is QML?

  • A high–level quantum programming language with a structure

familiar to functional programmers, which supports reasoning and and algorithm design

QML: A functional quantum programming language – p.2/14

slide-3
SLIDE 3

What is QML?

  • A high–level quantum programming language with a structure

familiar to functional programmers, which supports reasoning and and algorithm design

  • Simplifing the design of quantum programs by:

Allowing formal reasoning principles for quantum programs Giving a more intuitive understanding of quantum algorithms

QML: A functional quantum programming language – p.2/14

slide-4
SLIDE 4

What is QML?

  • A high–level quantum programming language with a structure

familiar to functional programmers, which supports reasoning and and algorithm design

  • Simplifing the design of quantum programs by:

Allowing formal reasoning principles for quantum programs Giving a more intuitive understanding of quantum algorithms

  • A functional quantum programming language, LICS 2005

with Thorsten Altenkirch

QML: A functional quantum programming language – p.2/14

slide-5
SLIDE 5

What is QML?

  • A high–level quantum programming language with a structure

familiar to functional programmers, which supports reasoning and and algorithm design

  • Simplifing the design of quantum programs by:

Allowing formal reasoning principles for quantum programs Giving a more intuitive understanding of quantum algorithms

  • A functional quantum programming language, LICS 2005

with Thorsten Altenkirch

  • An Algebra of Pure Quantum Programming, QPL 2005

with Thorsten Altenkirch, Juliana K. Vizzotto, & Amr Sabry

QML: A functional quantum programming language – p.2/14

slide-6
SLIDE 6

What is QML?

  • A high–level quantum programming language with a structure

familiar to functional programmers, which supports reasoning and and algorithm design

  • Simplifing the design of quantum programs by:

Allowing formal reasoning principles for quantum programs Giving a more intuitive understanding of quantum algorithms

  • A functional quantum programming language, LICS 2005

with Thorsten Altenkirch

  • An Algebra of Pure Quantum Programming, QPL 2005

with Thorsten Altenkirch, Juliana K. Vizzotto, & Amr Sabry

  • Project Site: QML@CS.Nott – sneezy.cs.nott.ac.uk/qml

QML: A functional quantum programming language – p.2/14

slide-7
SLIDE 7

Quantum Languages

  • P. Zuliani, PhD 2001, Quantum Programming (qGCL)
  • P. Selinger, MSCS 2003, Towards a Quantum Programming

Language (QPL)

  • A. van Tonder, SIAM 2003, A Lambda Calculus for Quantum

Computation

  • A. Sabry, Haskell 2003, Modeling quantum computing in Haskell
  • P. Selinger and B. Valiron, TLCA 2005, A lambda calculus for

quantum computation with classical control

  • . . .

QML: A functional quantum programming language – p.3/14

slide-8
SLIDE 8

Quantum Languages

  • P. Zuliani, PhD 2001, Quantum Programming (qGCL)
  • P. Selinger, MSCS 2003, Towards a Quantum Programming

Language (QPL)

  • A. van Tonder, SIAM 2003, A Lambda Calculus for Quantum

Computation

  • A. Sabry, Haskell 2003, Modeling quantum computing in Haskell
  • P. Selinger and B. Valiron, TLCA 2005, A lambda calculus for

quantum computation with classical control

  • . . .
  • Quantum data, Classical control

QML: A functional quantum programming language – p.3/14

slide-9
SLIDE 9

QML Overview

  • A first-order functional language for quantum computations on

finite types

QML: A functional quantum programming language – p.4/14

slide-10
SLIDE 10

QML Overview

  • A first-order functional language for quantum computations on

finite types

  • “Quantum Data and Control”

QML: A functional quantum programming language – p.4/14

slide-11
SLIDE 11

QML Overview

  • A first-order functional language for quantum computations on

finite types

  • “Quantum Data and Control”
  • Based on strict linear logic - controlled, explicit, weakening

QML: A functional quantum programming language – p.4/14

slide-12
SLIDE 12

QML Overview

  • A first-order functional language for quantum computations on

finite types

  • “Quantum Data and Control”
  • Based on strict linear logic - controlled, explicit, weakening
  • Operational Semantics: Quantum Circuit Model

QML: A functional quantum programming language – p.4/14

slide-13
SLIDE 13

QML Overview

  • A first-order functional language for quantum computations on

finite types

  • “Quantum Data and Control”
  • Based on strict linear logic - controlled, explicit, weakening
  • Operational Semantics: Quantum Circuit Model
  • Denotational Semantics: Superoperators

QML: A functional quantum programming language – p.4/14

slide-14
SLIDE 14

QML Overview

  • A first-order functional language for quantum computations on

finite types

  • “Quantum Data and Control”
  • Based on strict linear logic - controlled, explicit, weakening
  • Operational Semantics: Quantum Circuit Model
  • Denotational Semantics: Superoperators
  • Notion of Finite Quantum Computations (FQC) developed by

analogy with Finite Classical Computations (FCC)

QML: A functional quantum programming language – p.4/14

slide-15
SLIDE 15

Classical v. Quantum

QML: A functional quantum programming language – p.5/14

slide-16
SLIDE 16

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC)

QML: A functional quantum programming language – p.5/14

slide-17
SLIDE 17

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets

QML: A functional quantum programming language – p.5/14

slide-18
SLIDE 18

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces

QML: A functional quantum programming language – p.5/14

slide-19
SLIDE 19

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×)

QML: A functional quantum programming language – p.5/14

slide-20
SLIDE 20

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗)

QML: A functional quantum programming language – p.5/14

slide-21
SLIDE 21

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections

QML: A functional quantum programming language – p.5/14

slide-22
SLIDE 22

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators

QML: A functional quantum programming language – p.5/14

slide-23
SLIDE 23

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions

QML: A functional quantum programming language – p.5/14

slide-24
SLIDE 24

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions Superoperators

QML: A functional quantum programming language – p.5/14

slide-25
SLIDE 25

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions Superoperators Injective functions

QML: A functional quantum programming language – p.5/14

slide-26
SLIDE 26

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions Superoperators Injective functions Isometries

QML: A functional quantum programming language – p.5/14

slide-27
SLIDE 27

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions Superoperators Injective functions Isometries Projections

QML: A functional quantum programming language – p.5/14

slide-28
SLIDE 28

Classical v. Quantum

Classical Case (FCC) Quantum Case (FQC) Finite sets Finite dimensional Hilbert spaces Cartesian product (×) Tensor product (⊗) Bijections Unitary operators Functions Superoperators Injective functions Isometries Projections Partial trace

QML: A functional quantum programming language – p.5/14

slide-29
SLIDE 29

QML Syntax

  • Types:

σ = Q1 | Q2 | σ ⊗ τ

QML: A functional quantum programming language – p.6/14

slide-30
SLIDE 30

QML Syntax

  • Types:

σ = Q1 | Q2 | σ ⊗ τ

  • Syntax:

(Variables) x, y, ... ∈ Vars (Prob.amplitudes) κ, ι, ... ∈ C (Patterns) p, q ::= x | (x, y) (Terms) t, u, e ::= x | x

y | () | (t, u)

| let p = t in u | if t then u else u′ | if ◦ t then u else u′ | false | true | − → 0 | κ × t | t + u

QML: A functional quantum programming language – p.6/14

slide-31
SLIDE 31

QML Syntax

  • Types:

σ = Q1 | Q2 | σ ⊗ τ

  • Syntax:

(Variables) x, y, ... ∈ Vars (Prob.amplitudes) κ, ι, ... ∈ C (Patterns) p, q ::= x | (x, y) (Terms) t, u, e ::= x | x

y | () | (t, u)

| let p = t in u | if t then u else u′ | if ◦ t then u else u′ | false | true | − → 0 | κ × t | t + u

  • EPR State:

1 √ 2 × (false, false) + 1 √ 2 × (true, true)

QML: A functional quantum programming language – p.6/14

slide-32
SLIDE 32

Control of Decoherence

  • Projection Function

π1 ∈ (Q2, Q2) → C2 π1 (x, y) = x Q2 Q2 Q2

  • φπ1

QML: A functional quantum programming language – p.7/14

slide-33
SLIDE 33

Control of Decoherence

  • Projection Function

π1 ∈ (Q2, Q2) → C2 π1 (x, y) = x Q2 Q2 Q2

  • φπ1
  • Diagonal Function

δ ∈ Q2 → (Q2, Q2) δ x = (x, x) x :: Q2

  • x :: Q2

0 :: Q2

  • x :: Q2

QML: A functional quantum programming language – p.7/14

slide-34
SLIDE 34

Control of Decoherence

  • π1.δ ∈ Q2 → Q2

x :: Q2

  • x :: Q2

0 :: Q2

  • φδ φπ1

QML: A functional quantum programming language – p.8/14

slide-35
SLIDE 35

Control of Decoherence

  • π1.δ ∈ Q2 → Q2

x :: Q2

  • x :: Q2

0 :: Q2

  • φδ φπ1
  • Classical Case:

Q2 Q2

QML: A functional quantum programming language – p.8/14

slide-36
SLIDE 36

Control of Decoherence

  • π1.δ ∈ Q2 → Q2

x :: Q2

  • x :: Q2

0 :: Q2

  • φδ φπ1
  • Classical Case:

Q2 Q2

  • Quantum Case:

Input =

1 √ 2 × false + 1 √ 2 × true (equal superposition)

QML: A functional quantum programming language – p.8/14

slide-37
SLIDE 37

Control of Decoherence

  • π1.δ ∈ Q2 → Q2

x :: Q2

  • x :: Q2

0 :: Q2

  • φδ φπ1
  • Classical Case:

Q2 Q2

  • Quantum Case:

Input =

1 √ 2 × false + 1 √ 2 × true (equal superposition)

Output = { 1

2}false + { 1 2}true (probability distribution)

QML: A functional quantum programming language – p.8/14

slide-38
SLIDE 38

Control of Decoherence

  • π1.δ ∈ Q2 → Q2

x :: Q2

  • x :: Q2

0 :: Q2

  • φδ φπ1
  • Classical Case:

Q2 Q2

  • Quantum Case:

Input =

1 √ 2 × false + 1 √ 2 × true (equal superposition)

Output = { 1

2}false + { 1 2}true (probability distribution)

Decoherence! Not the identity function

QML: A functional quantum programming language – p.8/14

slide-39
SLIDE 39

More Decoherence

QML: A functional quantum programming language – p.9/14

slide-40
SLIDE 40

More Decoherence

  • forget mentions x

forget ∈ Q2 ⊸ Q2 forget x = if x then true else true

QML: A functional quantum programming language – p.9/14

slide-41
SLIDE 41

More Decoherence

  • forget mentions x

forget ∈ Q2 ⊸ Q2 forget x = if x then true else true

  • but doesn’t use it.

QML: A functional quantum programming language – p.9/14

slide-42
SLIDE 42

More Decoherence

  • forget mentions x

forget ∈ Q2 ⊸ Q2 forget x = if x then true else true

  • but doesn’t use it.
  • Hence, it has to measure it!

QML: A functional quantum programming language – p.9/14

slide-43
SLIDE 43

More Decoherence

  • forget mentions x

forget ∈ Q2 ⊸ Q2 forget x = if x then true else true

  • but doesn’t use it.
  • Hence, it has to measure it!
  • if always measures the conditional

QML: A functional quantum programming language – p.9/14

slide-44
SLIDE 44

More Decoherence

  • forget mentions x

forget ∈ Q2 ⊸ Q2 forget x = if x then true else true

  • but doesn’t use it.
  • Hence, it has to measure it!
  • if always measures the conditional
  • Not, using if

not ∈ Q2 ⊸ Q2 not x = if x then false else true

QML: A functional quantum programming language – p.9/14

slide-45
SLIDE 45

if◦ – Quantum control

QML: A functional quantum programming language – p.10/14

slide-46
SLIDE 46

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

QML: A functional quantum programming language – p.10/14

slide-47
SLIDE 47

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

  • This program has a type error, because true ⊥ true.

QML: A functional quantum programming language – p.10/14

slide-48
SLIDE 48

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

  • This program has a type error, because true ⊥ true.
  • qnot ∈ Q2 ⊸ Q2

qnot x = if ◦ x then false else true

QML: A functional quantum programming language – p.10/14

slide-49
SLIDE 49

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

  • This program has a type error, because true ⊥ true.
  • qnot ∈ Q2 ⊸ Q2

qnot x = if ◦ x then false else true

  • This program typechecks, because false ⊥ true.

QML: A functional quantum programming language – p.10/14

slide-50
SLIDE 50

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

  • This program has a type error, because true ⊥ true.
  • qnot ∈ Q2 ⊸ Q2

qnot x = if ◦ x then false else true

  • This program typechecks, because false ⊥ true.
  • cnot c x = if ◦ c then (true, qnot x) else (false, x)

QML: A functional quantum programming language – p.10/14

slide-51
SLIDE 51

if◦ – Quantum control

  • forget′ ∈ Q2 ⊸ Q2

forget′ x = if ◦ x then true else true

  • This program has a type error, because true ⊥ true.
  • qnot ∈ Q2 ⊸ Q2

qnot x = if ◦ x then false else true

  • This program typechecks, because false ⊥ true.
  • cnot c x = if ◦ c then (true, qnot x) else (false, x)
  • Deutsch-Joza Algorithm, Quantum Teleport Algorithm, ...

QML: A functional quantum programming language – p.10/14

slide-52
SLIDE 52

Quantum Teleport Algorithm

pZed ∈ Q2 ⊸ Q2 pZed x = if ◦ x then (−1) × true else false had ∈ Q2 ⊸ Q2 had x = if ◦ x then (−1) × true + false else true + false tel ∈ Q2 ⊸ Q2 tel x = let (a, b) = (false, false) + (true, true) (a′, x ′) = cnot a x b′ = if a′ then qnot b else b b′′ = if◦ had x ′ then pZed b′ else b′ in b′′

QML: A functional quantum programming language – p.11/14

slide-53
SLIDE 53

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

QML: A functional quantum programming language – p.12/14

slide-54
SLIDE 54

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.

QML: A functional quantum programming language – p.12/14

slide-55
SLIDE 55

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

QML: A functional quantum programming language – p.12/14

slide-56
SLIDE 56

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

→ 0 |true = 0 = true|− → 0 , − → 0 |false = 0 = false|− → 0 , − → 0 |x = 0 = x|− →

QML: A functional quantum programming language – p.12/14

slide-57
SLIDE 57

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

→ 0 |true = 0 = true|− → 0 , − → 0 |false = 0 = false|− → 0 , − → 0 |x = 0 = x|− →

  • (t, t′) | (u, u′) = t|u ∗ t′|u′

QML: A functional quantum programming language – p.12/14

slide-58
SLIDE 58

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

→ 0 |true = 0 = true|− → 0 , − → 0 |false = 0 = false|− → 0 , − → 0 |x = 0 = x|− →

  • (t, t′) | (u, u′) = t|u ∗ t′|u′
  • λ ∗ t + λ′ ∗ t′ | u = λ∗ ∗ t|u + λ′∗ ∗ t′|u,

t | κ ∗ u + κ′ ∗ u′ = κ ∗ t|u + κ′ ∗ t|u′

QML: A functional quantum programming language – p.12/14

slide-59
SLIDE 59

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

→ 0 |true = 0 = true|− → 0 , − → 0 |false = 0 = false|− → 0 , − → 0 |x = 0 = x|− →

  • (t, t′) | (u, u′) = t|u ∗ t′|u′
  • λ ∗ t + λ′ ∗ t′ | u = λ∗ ∗ t|u + λ′∗ ∗ t′|u,

t | κ ∗ u + κ′ ∗ u′ = κ ∗ t|u + κ′ ∗ t|u′

  • . . .

QML: A functional quantum programming language – p.12/14

slide-60
SLIDE 60

Inner Product & ⊥

  • We define the inner product of terms, which to any pair of terms

Γ ⊢ t, u : σ assigns t|u ∈ C ∪ {?}.

  • t ⊥ u holds if t|u = 0.
  • t|t = 1,

false|true = 0, true|false = 0

→ 0 |true = 0 = true|− → 0 , − → 0 |false = 0 = false|− → 0 , − → 0 |x = 0 = x|− →

  • (t, t′) | (u, u′) = t|u ∗ t′|u′
  • λ ∗ t + λ′ ∗ t′ | u = λ∗ ∗ t|u + λ′∗ ∗ t′|u,

t | κ ∗ u + κ′ ∗ u′ = κ ∗ t|u + κ′ ∗ t|u′

  • . . .
  • t|u =?
  • therwise

QML: A functional quantum programming language – p.12/14

slide-61
SLIDE 61

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

QML: A functional quantum programming language – p.13/14

slide-62
SLIDE 62

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

QML: A functional quantum programming language – p.13/14

slide-63
SLIDE 63

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

  • Quantum programming introduces the problem of control of

decoherence, which we address by making the ‘forgetting’ of variables explicit, and by having two if constructs and the

  • rthogonality condition

QML: A functional quantum programming language – p.13/14

slide-64
SLIDE 64

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

  • Quantum programming introduces the problem of control of

decoherence, which we address by making the ‘forgetting’ of variables explicit, and by having two if constructs and the

  • rthogonality condition
  • Other work:

QML: A functional quantum programming language – p.13/14

slide-65
SLIDE 65

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

  • Quantum programming introduces the problem of control of

decoherence, which we address by making the ‘forgetting’ of variables explicit, and by having two if constructs and the

  • rthogonality condition
  • Other work:
  • A compiler for QML, in Haskell, that produces (typed) circuits

QML: A functional quantum programming language – p.13/14

slide-66
SLIDE 66

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

  • Quantum programming introduces the problem of control of

decoherence, which we address by making the ‘forgetting’ of variables explicit, and by having two if constructs and the

  • rthogonality condition
  • Other work:
  • A compiler for QML, in Haskell, that produces (typed) circuits
  • Extend algebra and normal form beyond pure subset of QML

QML: A functional quantum programming language – p.13/14

slide-67
SLIDE 67

Summary

  • Our semantic ideas proved useful when designing a quantum

programming language, analogous concepts are modelled by the same syntactic constructs

  • Our analysis also highlights the differences between classical and

quantum programming

  • Quantum programming introduces the problem of control of

decoherence, which we address by making the ‘forgetting’ of variables explicit, and by having two if constructs and the

  • rthogonality condition
  • Other work:
  • A compiler for QML, in Haskell, that produces (typed) circuits
  • Extend algebra and normal form beyond pure subset of QML
  • Higher-order types, composionality proofs, implement using

measurement calculus ...

QML: A functional quantum programming language – p.13/14

slide-68
SLIDE 68

Thanks for listening

  • Papers on QML can be found at:
  • sneezy.cs.nott.ac.uk/qml
  • There is also an interactive research diary:
  • sneezy.cs.nott.ac.uk/qml/weblog
  • Jonathan Grattage (www.cs.nott.ac.uk/∼ jjg)

Thorsten Altenkirch (www.cs.nott.ac.uk/∼ txa)

QML: A functional quantum programming language – p.14/14