¿Cuáles son los componentes principales de un programa de Q#?
Antes de escribir sus propios programas cuánticos, es importante comprender la estructura y los componentes del lenguaje de programación Q#.
En esta unidad, obtendrá información sobre los componentes básicos de un programa de Q#.
La operación Main
Cada programa de Q# debe contener al menos una operación. El compilador de Q# comienza a ejecutar un programa desde la operación de punto de entrada, que es la Main operación de forma predeterminada. Por ejemplo, el siguiente programa de Q# contiene una operación denominada Main que crea un cúbit y devuelve una medida del estado del cúbit:
// This operation is the entry point to your program because it's name is Main
operation Main() : Result {
use q = Qubit();
return M(q);
}
El código de Q# no se puede ejecutar sin una operación de punto de entrada. Si desea usar una operación distinta de Main como punto de entrada, use el @EntryPoint() atributo . Por ejemplo, el código siguiente proporciona a la operación anterior un nombre más descriptivo, MeasureOneQubity define esa operación como punto de entrada para el programa de Q#:
// The @EntryPoint() attribute tells the compiler to start running your code from this operation
@EntryPoint()
operation MeasureOneQubit() : Result {
use q = Qubit();
return M(q);
}
Tipos
Q# proporciona muchos tipos de datos integrados con los que es posible que ya esté familiarizado, como Int, Double, Booly String. Q# también proporciona tipos específicos de la computación cuántica, como Qubit y Result.
Por ejemplo, la MeasureOneQubit operación devuelve un Result valor de tipo. El Result tipo representa el estado de un cúbit cuando se mide el cúbit y puede tener un valor de Zero o One.
Bibliotecas cuánticas
Q# incluye varias bibliotecas que contienen funciones y operaciones para ayudarle a escribir programas cuánticos. Para llamar a una función o operación desde una biblioteca, use la import palabra clave y especifique el espacio de nombres de la biblioteca. Por ejemplo, para usar la función Message del espacio de nombres Microsoft.Quantum.Intrinsic en la biblioteca cuántica estándar, use el siguiente código:
// import all functions and operations from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.*;
operation Main() : Unit {
// call the Message function from Microsoft.Quantum.Intrinsic
Message("Hello quantum world!");
}
El asterisco significa que se importan todas las funciones del Microsoft.Quantum.Intrinsic espacio de nombres. Como alternativa, solo puede importar la Message función :
// import only the Message function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
operation Main() : Unit {
// call the Message function from Microsoft.Quantum.Intrinsic
Message("Hello quantum world!");
}
Nota:
En Q#, el Unit tipo significa que la función o la operación no devuelven un valor. Para obtener más información sobre los tipos en Q#, vea Type System.
Puede importar espacios de nombres en la biblioteca estándar con Std en lugar de Microsoft.Quantum. Por ejemplo, el código siguiente importa todas las funciones y operaciones desde el Microsoft.Quantum.Intrinsic espacio de nombres:
// import everything from Std.Intrinsic (Microsoft.Quantum.Intrinsic)
import Std.Intrinsic.*;
operation Main() : Unit {
// call the Message function from Std.Intrinsic
Message("Hello quantum world!");
}
Para explorar la biblioteca estándar de Q#, consulte la referencia de API.
Asignación de cúbits
Para asignar un cúbit en Q#, use la palabra clave use y el tipo Qubit. Los cúbits que asigne con la use palabra clave siempre comienzan en el estado $\ket{0}$.
Puede asignar un solo cúbit o varios cúbits en una matriz de cúbits. Este es un ejemplo que asigna un solo cúbit en la variable q1 y una matriz de cinco cúbits en q5:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Medición de cúbits
En Q#, la Measure operación realiza una medición conjunta de uno o varios cúbits en las bases de Pauli especificadas, que pueden ser PauliX, PauliY, o PauliZ. La Measure operación devuelve un Result tipo que tiene un valor de Zero o One.
Para realizar una medición en la base computacional $\lbrace\ket{c0},\ket{c1}\rbrace$, también puede usar la operación M. La M operación es equivalente a la Measure operación en la base de Pauli-Z, por lo que M([qubit]) se comporta exactamente igual que Measure([PauliZ], [qubit]). Sin embargo, la M operación solo acepta cúbits únicos como entrada, no matrices de cúbits.
Restablecimiento de cúbits
En Q#, los cúbits deben estar en el estado $\ket{0}$ para liberarlos. Al terminar de usar un cúbit, llame a la operación Reset para restablecerlo al estado $\ket{0}$. Por ejemplo, el código siguiente asigna un cúbit, mide el estado del cúbit y, a continuación, restablece el cúbit:
operation Main() : Result {
use q = Qubit();
let result = M(q);
// Reset the qubit so that you can release it
Reset(q);
return result;
}