Quantum Computation Language: Difference between revisions

Content deleted Content added
added Category:Programming languages; removed {{uncategorized}} using HotCat
No edit summary
 
(22 intermediate revisions by 11 users not shown)
Line 1:
{{refimprove|date=March 2018}}
'''Quantum Computation Language''' (QCL) is one of the first implemented quantum [[programming languages]].<ref>{{cite web|url=http://tph.tuwien.ac.at/~oemer/qcl.html |title=QCL - A Programming Language for Quantum Computers |website=tuwien.ac.at |date= |accessdate=2017-07-20}}</ref> The most important feature of QCL is the support for user-defined operators and functions. Its [[syntax]] resembles the syntax of the [[C programming language]] and its classical [[data type]]s are similar to primitive data types in C. One can combine classical code and quantum code in the same program.
 
'''Quantum Computation Language''' ('''QCL''') is one of the first implemented [[quantum programming]] [[programming languages|languages]].<ref>{{cite web|url=http://tph.tuwien.ac.at/~oemer/qcl.html |title=QCL - A Programming Language for Quantum Computers |website=tuwien.ac.at |access-date= |accessdate=2017-07-20}}</ref> The most important feature of QCL is the support for user-defined operators and functions. Its [[syntax]] resembles the syntax of the [[C programming language]] and its classical [[data type]]s are similar to primitive data types in C. One can combine classical code and quantum code in the same program.
The QCL standard library provides standard quantum operators used in quantum algorithms such as:
 
The language was created before there were multi-qubit quantum computers and the only implementation of QCL uses an interpreter with a built-in classically simulated quantum computer.
* controlled-not with many target qubits,
 
QCL was created to explore programming concepts for quantum computers.<ref>{{cite thesis|last=Ömer |first=Bernhard |date=2000-01-20 |title=Quantum Programming in QCL|publisher=Institute for Theoretical Physics, Vienna University of Technology|url=http://tph.tuwien.ac.at/~oemer/doc/quprog.pdf |access-date=2021-05-24}}</ref><ref>{{cite journal|last=Ömer|first=Bernhard|title=Classical Concepts in Quantum Programming|journal=International Journal of Theoretical Physics|date=29 Apr 2003|volume=44|issue=7|pages=943–955|doi=10.1007/s10773-005-7071-x|arxiv=quant-ph/0211100|s2cid=119373370}}</ref><ref>{{cite web|title=Structured Quantum Programming|last=Ömer|first=Bernhard|url=http://tph.tuwien.ac.at/~oemer/doc/structquprog.pdf|date=2 September 2009|publisher=Institute for Theoretical Physics, Vienna University of Technology}}</ref>
 
The QCL standard library provides standard quantum operators used in quantum algorithms such as:<ref>[http://tph.tuwien.ac.at/~oemer/qcl.html QCL web page]</ref>
 
* controlledControlled-not with many target qubits,
* [[Hadamard operation]] on many qubits,
* parsePhase and controlled phase.
* Quantum algorithms for addition, multiplication and exponentiation with binary constants (all modulus n)
* The [[Quantum Fourier transform|quantum fourier transform]]
 
== Syntax ==
Line 12 ⟶ 20:
**Classical - int, real, complex, boolean, string, vector, matrix, tensor
*Function types
**qufunct - Pseudo-classic operators. Can only change the permutation of basicbasis states.
**operator - General unitary operators. Can change the amplitude.
**procedure - Can call measure, print, and dump inside this function. This function is non-invertible.
Line 27 ⟶ 35:
 
The basic built-in quantum data type in QCL is the qureg (quantum register). It can be interpreted as an array of qubits (quantum bits).
<syntaxhighlight lang="cpp">
 
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
</syntaxhighlight>
 
Since the qcl interpreter uses qlib simulation library, it is possible to observe the internal state of the quantum machine during execution of the quantum program.
<syntaxhighlight lang="text">
 
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>
</syntaxhighlight>
 
Note that the dump operation is different from measurement, since it does not influence the state of the quantum machine and can be realized only using a simulator.
 
Like in modern programming languages, it is possible to define new operations which can be used to manipulate quantum data. For example:
<syntaxhighlight lang="cpp">
 
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
}
}
</syntaxhighlight>
 
defines inverse about the mean operator used in [[Grover's algorithm]] (it is sometimes called ''Grover's diffusion operator''). This allows one to define algorithms on a higher level of abstraction and extend the library of functions available for programmers.
 
== References ==
{{reflist}}
 
 
 
[[Category:Programming languages]]
[[Category:Quantum programming]]