Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Q Sharp

From Wikipedia, the free encyclopedia
Programming language for quantum algorithms
The correct title of this article isQ# (programming language). The substitution of the# is due totechnical restrictions.
This articlemay rely excessively on sourcestoo closely associated with the subject, potentially preventing the article from beingverifiable andneutral. Please helpimprove it by replacing them with more appropriatecitations toreliable, independent sources.(September 2018) (Learn how and when to remove this message)
Q#
ParadigmQuantum,functional,imperative
Designed byMicrosoft Research (quantum architectures and computation group; QuArC)
DeveloperMicrosoft
First appearedDecember 11, 2017 (2017-12-11)[1]
Typing disciplineStatic,strong
PlatformCommon Language Infrastructure
LicenseMIT License[2]
Filename extensions.qs
Websitelearn.microsoft.com/en-us/azure/quantum/
Influenced by
C#,F#,Python

Q# (pronouncedQ sharp) is adomain-specific programming language used for expressingquantum algorithms.[3] It was initially released to the public byMicrosoft as part of the Quantum Development Kit.[4]

Q# works in conjunction with classical languages such as C#, Python and F#, and is designed to allow the use of traditional programming concepts in quantum computing, including functions with variables and branches as well as a syntax-highlighted development environment with a quantum debugger.[1][5][6]

History

[edit]

Historically,Microsoft Research had two teams interested in quantum computing: the QuArC team based in Redmond, Washington,[7] directed byKrysta Svore, that explored the construction of quantum circuitry, and Station Q initially located inSanta Barbara and directed byMichael Freedman, that exploredtopological quantum computing.[8][9]

During aMicrosoft Ignite Keynote on September 26, 2017, Microsoft announced that they were going to release a new programming language geared specifically towards quantum computers.[10] On December 11, 2017, Microsoft released Q# as a part of the Quantum Development Kit.[4]

AtBuild 2019, Microsoft announced that it would be open-sourcing the Quantum Development Kit, including its Q#compilers and simulators.[11]

To support Q#, Microsoft developed Quantum Intermediate Representation (QIR) in 2023 as a common interface between programming languages and target quantum processors. The company also announced a compiler extension that generates QIR from Q#.[12]

Bettina Heim used to lead the Q# language development effort.[13][14]

Usage

[edit]

Q# is available as a separately downloaded extension forVisual Studio,[15] but it can also be run as an independent tool from thecommand line or Visual Studio Code. Q# was introduced on Windows and is available on MacOS and Linux.[16]

The Quantum Development Kit includes aquantum simulator capable of running Q# and simulated 30 logical qubits.[17][18]

In order to invoke the quantum simulator, another.NET programming language, usuallyC#, is used, which provides the (classical) input data for the simulator and reads the (classical) output data from the simulator.[19]

Features

[edit]

A primary feature of Q# is the ability to create and usequbits for algorithms. As a consequence, some of the most prominent features of Q# are the ability toentangle and introducesuperpositioning to qubits viacontrolled NOT gates andHadamard gates, respectively, as well asToffoli Gates,Pauli X, Y, Z Gate, and many more which are used for a variety of operations (Seequantum logic gates).[citation needed]

The hardware stack that will eventually come together with Q# is expected to implement Qubits astopological qubits. The quantum simulator that is shipped with the Quantum Development Kit today is capable of processing up to 32 qubits on a user machine and up to 40 qubits onAzure.[20]

Documentation and resources

[edit]

Currently, the resources available for Q# are scarce, but the official documentation is published:Microsoft Developer Network: Q#.Microsoft Quantum Github repository is also a large collection of sample programs implementing a variety of Quantum algorithms and their tests.

Microsoft has also hosted a Quantum Coding contest onCodeforces, calledMicrosoft Q# Coding Contest - Codeforces, and also provided related material to help answer the questions in the blog posts, plus the detailed solutions in the tutorials.

Microsoft hosts a set of learning exercises to help learn Q# on GitHub:microsoft/QuantumKatas with links to resources, and answers to the problems.

Syntax

[edit]

Q# is syntactically related to bothC# andF# yet also has some significant differences.

Similarities with C#

[edit]
  • Usesnamespace for code isolation
  • All statements end with a;
  • Curly braces are used for statements of scope
  • Single line comments are done using//
  • Variable data types such asIntDoubleString andBool are similar, although capitalised (and Int is 64-bit)[21]
  • Qubits are allocated and disposed inside ausing block.
  • Lambda functions are defined using the=> operator.
  • Results are returned using thereturn keyword.

Similarities with F#

[edit]
  • Variables are declared using eitherlet ormutable[3]
  • First-order functions
  • Modules, which are imported using theopen keyword
  • The datatype is declared after the variable name
  • The range operator..
  • for … in loops
  • Every operation/function has a return value, rather thanvoid. Instead ofvoid, an emptyTuple() is returned.
  • Definition of record datatypes (using thenewtype keyword, instead oftype).

Differences

[edit]
  • Functions are declared using thefunction keyword
  • Operations on the quantum computer are declared using theoperation keyword
  • Lack of multiline comments
  • Asserts instead of throwing exceptions
  • Documentation is written inMarkdown instead ofXML-based documentation tags

Example

[edit]
This sectioncontainstoo many or overly lengthy quotations. Please helpsummarise the quotations. Consider transferring direct quotations toWikiquote or excerpts toWikisource.(January 2025) (Learn how and when to remove this message)

The following source code is amultiplexer from the official Microsoft Q# library repository.

// Copyright (c) Microsoft Corporation.// Licensed under the MIT License.namespaceMicrosoft.Quantum.Canon{openMicrosoft.Quantum.Intrinsic;openMicrosoft.Quantum.Arithmetic;openMicrosoft.Quantum.Arrays;openMicrosoft.Quantum.Diagnostics;openMicrosoft.Quantum.Math;/// # Summary/// Applies a multiply-controlled unitary operation $U$ that applies a/// unitary $V_j$ when controlled by n-qubit number state $\ket{j}$.////// $U = \sum^{N-1}_{j=0}\ket{j}\bra{j}\otimes V_j$.////// # Input/// ## unitaryGenerator/// A tuple where the first element `Int` is the number of unitaries $N$,/// and the second element `(Int -> ('T => () is Adj + Ctl))`/// is a function that takes an integer $j$ in $[0,N-1]$ and outputs the unitary/// operation $V_j$.////// ## index/// $n$-qubit control register that encodes number states $\ket{j}$ in/// little-endian format.////// ## target/// Generic qubit register that $V_j$ acts on.////// # Remarks/// `coefficients` will be padded with identity elements if/// fewer than $2^n$ are specified. This implementation uses/// $n-1$ auxiliary qubits.////// # References/// - [ *Andrew M. Childs, Dmitri Maslov, Yunseong Nam, Neil J. Ross, Yuan Su*,///      arXiv:1711.10980](https://arxiv.org/abs/1711.10980)operationMultiplexOperationsFromGenerator<'T>(unitaryGenerator:(Int,(Int->('T=>UnitisAdj+Ctl))),index:LittleEndian,target:'T):UnitisCtl+Adj{let(nUnitaries,unitaryFunction)=unitaryGenerator;letunitaryGeneratorWithOffset=(nUnitaries,0,unitaryFunction);ifLength(index!)==0{fail"MultiplexOperations failed. Number of index qubits must be greater than 0.";}ifnUnitaries>0{letauxiliary=[];AdjointMultiplexOperationsFromGeneratorImpl(unitaryGeneratorWithOffset,auxiliary,index,target);}}/// # Summary/// Implementation step of `MultiplexOperationsFromGenerator`./// # See Also/// - Microsoft.Quantum.Canon.MultiplexOperationsFromGeneratorinternaloperationMultiplexOperationsFromGeneratorImpl<'T>(unitaryGenerator:(Int,Int,(Int->('T=>UnitisAdj+Ctl))),auxiliary:Qubit[],index:LittleEndian,target:'T):Unit{body(...){letnIndex=Length(index!);letnStates=2^nIndex;let(nUnitaries,unitaryOffset,unitaryFunction)=unitaryGenerator;letnUnitariesLeft=MinI(nUnitaries,nStates/2);letnUnitariesRight=MinI(nUnitaries,nStates);letleftUnitaries=(nUnitariesLeft,unitaryOffset,unitaryFunction);letrightUnitaries=(nUnitariesRight-nUnitariesLeft,unitaryOffset+nUnitariesLeft,unitaryFunction);letnewControls=LittleEndian(Most(index!));ifnUnitaries>0{ifLength(auxiliary)==1andnIndex==0{// Termination case(ControlledAdjoint(unitaryFunction(unitaryOffset)))(auxiliary,target);}elifLength(auxiliary)==0andnIndex>=1{// Start caseletnewauxiliary=Tail(index!);ifnUnitariesRight>0{MultiplexOperationsFromGeneratorImpl(rightUnitaries,[newauxiliary],newControls,target);}within{X(newauxiliary);}apply{MultiplexOperationsFromGeneratorImpl(leftUnitaries,[newauxiliary],newControls,target);}}else{// Recursion that reduces nIndex by 1 and sets Length(auxiliary) to 1.letcontrols=[Tail(index!)]+auxiliary;usenewauxiliary=Qubit();useandauxiliary=Qubit[MaxI(0,Length(controls)-2)];within{ApplyAndChain(andauxiliary,controls,newauxiliary);}apply{ifnUnitariesRight>0{MultiplexOperationsFromGeneratorImpl(rightUnitaries,[newauxiliary],newControls,target);}within{(ControlledX)(auxiliary,newauxiliary);}apply{MultiplexOperationsFromGeneratorImpl(leftUnitaries,[newauxiliary],newControls,target);}}}}}adjointauto;controlled(controlRegister,...){MultiplexOperationsFromGeneratorImpl(unitaryGenerator,auxiliary+controlRegister,index,target);}adjointcontrolledauto;}/// # Summary/// Applies multiply-controlled unitary operation $U$ that applies a/// unitary $V_j$ when controlled by n-qubit number state $\ket{j}$.////// $U = \sum^{N-1}_{j=0}\ket{j}\bra{j}\otimes V_j$.////// # Input/// ## unitaryGenerator/// A tuple where the first element `Int` is the number of unitaries $N$,/// and the second element `(Int -> ('T => () is Adj + Ctl))`/// is a function that takes an integer $j$ in $[0,N-1]$ and outputs the unitary/// operation $V_j$.////// ## index/// $n$-qubit control register that encodes number states $\ket{j}$ in/// little-endian format.////// ## target/// Generic qubit register that $V_j$ acts on.////// # Remarks/// `coefficients` will be padded with identity elements if/// fewer than $2^n$ are specified. This version is implemented/// directly by looping through n-controlled unitary operators.operationMultiplexOperationsBruteForceFromGenerator<'T>(unitaryGenerator:(Int,(Int->('T=>UnitisAdj+Ctl))),index:LittleEndian,target:'T):UnitisAdj+Ctl{letnIndex=Length(index!);letnStates=2^nIndex;let(nUnitaries,unitaryFunction)=unitaryGenerator;foridxOpin0..MinI(nStates,nUnitaries)-1{(ControlledOnInt(idxOp,unitaryFunction(idxOp)))(index!,target);}}/// # Summary/// Returns a multiply-controlled unitary operation $U$ that applies a/// unitary $V_j$ when controlled by n-qubit number state $\ket{j}$.////// $U = \sum^{2^n-1}_{j=0}\ket{j}\bra{j}\otimes V_j$.////// # Input/// ## unitaryGenerator/// A tuple where the first element `Int` is the number of unitaries $N$,/// and the second element `(Int -> ('T => () is Adj + Ctl))`/// is a function that takes an integer $j$ in $[0,N-1]$ and outputs the unitary/// operation $V_j$.////// # Output/// A multiply-controlled unitary operation $U$ that applies unitaries/// described by `unitaryGenerator`.////// # See Also/// - Microsoft.Quantum.Canon.MultiplexOperationsFromGeneratorfunctionMultiplexerFromGenerator(unitaryGenerator:(Int,(Int->(Qubit[]=>UnitisAdj+Ctl)))):((LittleEndian,Qubit[])=>UnitisAdj+Ctl){returnMultiplexOperationsFromGenerator(unitaryGenerator,_,_);}/// # Summary/// Returns a multiply-controlled unitary operation $U$ that applies a/// unitary $V_j$ when controlled by n-qubit number state $\ket{j}$.////// $U = \sum^{2^n-1}_{j=0}\ket{j}\bra{j}\otimes V_j$.////// # Input/// ## unitaryGenerator/// A tuple where the first element `Int` is the number of unitaries $N$,/// and the second element `(Int -> ('T => () is Adj + Ctl))`/// is a function that takes an integer $j$ in $[0,N-1]$ and outputs the unitary/// operation $V_j$.////// # Output/// A multiply-controlled unitary operation $U$ that applies unitaries/// described by `unitaryGenerator`.////// # See Also/// - Microsoft.Quantum.Canon.MultiplexOperationsBruteForceFromGeneratorfunctionMultiplexerBruteForceFromGenerator(unitaryGenerator:(Int,(Int->(Qubit[]=>UnitisAdj+Ctl)))):((LittleEndian,Qubit[])=>UnitisAdj+Ctl){returnMultiplexOperationsBruteForceFromGenerator(unitaryGenerator,_,_);}/// # Summary/// Computes a chain of AND gates////// # Description/// The auxiliary qubits to compute temporary results must be specified explicitly./// The length of that register is `Length(ctrlRegister) - 2`, if there are at least/// two controls, otherwise the length is 0.internaloperationApplyAndChain(auxRegister:Qubit[],ctrlRegister:Qubit[],target:Qubit):UnitisAdj{ifLength(ctrlRegister)==0{X(target);}elifLength(ctrlRegister)==1{CNOT(Head(ctrlRegister),target);}else{EqualityFactI(Length(auxRegister),Length(ctrlRegister));letcontrols1=ctrlRegister[0..0]+auxRegister;letcontrols2=Rest(ctrlRegister);lettargets=auxRegister+[target];ApplyToEachA(ApplyAnd,Zipped3(controls1,controls2,targets));}}}

References

[edit]
  1. ^ab"Microsoft's Q# quantum programming language out now in preview".Ars Technica. 12 Dec 2017. Retrieved2024-09-04.
  2. ^"Introduction to Q#"(PDF).University of Washington.
  3. ^abQuantumWriter."The Q# Programming Language".docs.microsoft.com. Retrieved2017-12-11.
  4. ^ab"Announcing the Microsoft Quantum Development Kit". Retrieved2017-12-11.
  5. ^"Microsoft makes play for next wave of computing with quantum computing toolkit".Ars Technica. 25 Sep 2017. Retrieved2024-09-04.
  6. ^"Quantum Computers Barely Exist—Here's Why We're Writing Languages for Them Anyway".MIT Technology Review. 22 Dec 2017. Retrieved2024-09-04.
  7. ^"Solving the quantum many-body problem with artificial neural networks".Microsoft Azure Quantum. 15 February 2017.
  8. ^Scott Aaronson's blog, 2013, 'Microsoft: From QDOS to QMA in less than 35 years',https://scottaaronson.blog/?p=1471
  9. ^"What are the Q# programming language & QDK? - Azure Quantum".learn.microsoft.com. 12 January 2024.
  10. ^"Microsoft announces quantum computing programming language". Retrieved2017-12-14.
  11. ^"Microsoft is open-sourcing its Quantum Development Kit". Archived fromthe original on 2021-01-23. Retrieved2020-12-12.
  12. ^Krill, Paul (29 Sep 2020)."Microsoft taps LLVM for quantum computing".InfoWorld. Retrieved2024-09-04.
  13. ^"The Women of QuArC". 30 March 2019.
  14. ^"Intro to Q# - Intro to Quantum Software Development".stem.mitre.org.
  15. ^QuantumWriter."Setting up the Q# development environment".docs.microsoft.com. Retrieved2017-12-14.
  16. ^Coppock, Mark (26 Feb 2018)."Microsoft's quantum computing language is now available for MacOS".Digital Trends. Retrieved2024-09-04.
  17. ^Akdogan, Erman (23 October 2022)."Quantum computing is coming for finance & crypto".Medium.
  18. ^Melanson, Mike (16 Dec 2017)."This Week in Programming: Get Quantum with Q Sharp".The New Stack. Retrieved2024-09-04.
  19. ^"This Week in Programming: Get Quantum with Q Sharp".The New Stack. 16 December 2017.
  20. ^"Microsoft previews quantum computing development kit".CIO. Archived fromthe original on 2022-10-30. Retrieved2022-10-30.
  21. ^"Types in Q# - Microsoft Quantum".docs.microsoft.com. 27 July 2022.

External links

[edit]
General
Theorems
Quantum
communication
Quantum cryptography
Quantum algorithms
Quantum
complexity theory
Quantum
processor benchmarks
Quantum
computing models
Quantum
error correction
Physical
implementations
Quantum optics
Ultracold atoms
Spin-based
Superconducting
Quantum
programming
Architecture
Components
Implementations
Microsoft
Other
Languages
Major
Other
Comparison
Overview
Software
Applications
Video games
Programming
languages
Frameworks,
development tools
Operating systems
Other
Licenses
Forges
Related
Microsoft development tools
Development
environments
Visual Studio
Others
Languages
APIs and
frameworks
Native
.NET
Device drivers
Database
SQL Server
SQL services
Other
Source control
Testing and
debugging
Delivery
Retrieved from "https://en.wikipedia.org/w/index.php?title=Q_Sharp&oldid=1323194899"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp