Jakie są główne składniki programu w języku Q#?

Ukończone

Przed rozpoczęciem pisania programów kwantowych ważne jest zrozumienie struktury i składników programu języka Q#.

W tej lekcji zapoznasz się z głównymi składnikami programu w języku Q#.

Main Operacja

Każdy program w języku Q# musi zawierać co najmniej jedną operację, która jest zwykle operacją Main . Operacja Main jest punktem wejścia programu. Domyślnie kompilator języka Q# rozpoczyna wykonywanie programu z Main() operacji. Opcjonalnie możesz użyć atrybutu @EntryPoint() , aby określić dowolną operację w programie jako punkt wykonywania.

Na przykład następujący kod definiuje operację punktu wejścia: MeasureOneQubit

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

Można jednak również napisać ten kod bez atrybutu @EntryPoint() , zmieniając MeasureOneQubit() nazwę operacji na Main():

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

Typy

Język Q# udostępnia wiele wbudowanych typów, które mogą być już znane, w tym Int, Double, Booli String. Język Q# udostępnia również typy specyficzne dla obliczeń kwantowych, takich jak Qubit i Result.

W tym przykładzie MeasureOneQubit operacja zwraca Result typ. Typ Result jest wynikiem pomiaru kubitu i może mieć One wartość lub Zero.

operation MeasureOneQubit() : Result {
    ...
}

Biblioteki kwantowe

Biblioteki języka Q# zawierają funkcje i operacje, których można używać w programach kwantowych. Podczas wywoływania funkcji lub operacji z biblioteki należy użyć import dyrektywy i określić przestrzeń nazw biblioteki. Aby na przykład użyć Message funkcji z Microsoft.Quantum.Intrinsic przestrzeni nazw w standardowej bibliotece kwantowej, należy wykonać następujące czynności:

// imports all functions and operations from Microsoft.Quantum.Intrinsic 
import Microsoft.Quantum.Intrinsic.*;
    Message("Hello quantum world!");


// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
    Message("Hello quantum world!");

Przestrzenie nazw w bibliotece standardowej można importować przy użyciu Std zamiast Microsoft.Quantum. Na przykład:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

Przydzielanie kubitów

W języku Q#, aby przydzielić kubit, należy użyć słowa kluczowego use i Qubit typu. Każdy kubit przydzielany za pomocą słowa kluczowego use rozpoczyna się w stanie $\ket{0}$.

Możesz przydzielić jeden lub wiele kubitów jednocześnie. Oto przykład, który przydziela jeden i pięć kubitów:

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Mierzenie kubitów

W języku Q# Measure operacja wykonuje wspólną miarę jednego lub większej liczby kubitów w określonych bazach Pauli, które mogą być PauliX, PauliYlub PauliZ. Operacja Measure zwraca Result typ, który ma One wartość lub Zero.

Aby zaimplementować pomiar w podstawie obliczeniowej $\lbrace\ket{0},\ket{1}\rbrace$ można również użyć M operacji, która wykonuje pomiar w pauli Z-basis. W związku z tym operacja jest równoważna M zastosowaniu Measure([PauliZ], [qubit])metody .

Resetowanie kubitów

W języku Q#kubity muszą być w stanie $\ket{0}$ o czas ich wydania. Po zakończeniu korzystania z kubitu użyjesz Reset operacji , aby zresetować kubit do $\ket{0}$.

    // Reset the qubit so it can be safely released.
    Reset(qubit);