Primeros pasos con QDK para la corrección de errores

La Microsoft Quantum Development Kit (QDK) incluye Python herramientas para desarrollar y probar protocolos de corrección de errores cuánticos (QEC). Utiliza el módulo qdk.ec para analizar códigos de corrección de errores, crear protocolos ejecutables, validar declaraciones de protocolos y estudiar fallos en los circuitos. Utilice qdk.simulation para ejecutar programas lógicos a través de esos protocolos.

Comprender las herramientas de corrección de errores QDK

El QDK flujo de trabajo de corrección de errores usa estos paquetes y módulos:

Componente Úsela para
qodec Defina y guarde códigos, conjuntos de instrucciones, gadgets, capas y protocolos QEC completos.
qdk.ec Analizar códigos y dispositivos, crear qodecs de referencia, derivar ecuaciones y auditar declaraciones de protocolos.
qdk.simulation Ejecutar programas Quantum Intermediate Representation (QIR) a través de un qodec y aplicar un decodificador.
qdk.simulation.decoders Seleccione el decoder de síndrome integrado, rastree tramas o conéctese al decoder opcional deq.
qdk.qre Estime el espacio, el tiempo y los costos de error de los modelos QEC para la estimación de recursos con tolerancia a fallos.

Un qodec es una descripción formal de un protocolo QEC ejecutable. Conecta instrucciones lógicas a circuitos físicos a través de una o varias capas. El qodec paquete define este modelo de datos y su YAML representación. El módulo qdk.ec deriva hechos del modelo y comprueba si sus declaraciones coinciden con sus circuitos.

Para obtener más información, consulte la qodec información general.

El qdk.qre módulo tiene un propósito diferente. Modela el costo de recursos de un esquema de corrección de errores. No define, audita ni ejecuta dispositivos qodec. Para obtener más información sobre la estimación de recursos cuánticos en el QDK, consulte ¿Qué es el estimador de recursos de Microsoft Quantum?

Comprenda los componentes del protocolo qodec

Los siguientes componentes definen un qodec protocolo y admiten su ejecución.

Componente Description
Code Un conjunto estático de estabilizadores y operadores lógicos que definen un espacio de códigos.
Conjunto de instrucciones Las operaciones lógicas o físicas que admite una capa qodec.
Gadget Circuito que implementa una instrucción a través de operaciones en la capa inferior siguiente.
Nivel Asignación de un conjunto de instrucciones a un conjunto de instrucciones de nivel inferior.
Encoding La conexión entre bloques lógicos y cúbits de circuito en un límite del gadget.
Activar Ecuación de paridad que debe ser igual a cero cuando se mantiene la relación declarada.
Lectura Una ecuación que asigna los resultados del circuito y las señales de trama a un resultado lógico o un indicador.
Flag Lectura con nombre que informa de si una instrucción cumple su condición de aceptación.
Descodificador Componente que usa evidencia de síndrome para deducir correcciones y resultados lógicos.

Un qodec puede contener varias capas. La capa superior puede definir operaciones lógicas en bloques codificados. Los gadgets de la capa superior pueden invocar instrucciones en la siguiente capa inferior. La capa inferior contiene las operaciones físicas que ejecuta el simulador.

Flujo de trabajo del protocolo de ejemplo

Un flujo de trabajo típico tiene seis pasos. En los pasos siguientes se usan funciones y clases del qdk.ec módulo.

  1. Definir un código. Crear un qodec.Code con estabilizadores y operadores lógicos Pauli.
  2. Analice el código. Utilice la clase CodeProfile para inspeccionar operadores lógicos, calcular síndromes y calcular la distancia del código.
  3. Compilar o cargar un qodec. Use la build_qodec función para crear un protocolo de línea base o cargar un existente qodec desde YAML.
  4. Completar y validar el protocolo. Use la filled función para derivar ecuaciones de comprobación y lectura admitidas. Utilizar la función audit para detectar declaraciones incoherentes o incompletas.
  5. Analice los fallos del circuito. Utilizar la clase GadgetProfile para inspeccionar acciones lógicas, efectos de fallos y distancia entre dispositivos.
  6. Ejecute programas lógicos. Compila código Q# u OpenQASM a QIR. Pasa el QIR y el qodec a qdk.simulation.run_qir y, a continuación, selecciona un decodificador y un modelo de ruido.

En el código siguiente se muestran los objetos principales de este flujo de trabajo:

import qodec
from qdk import ec
from qdk.simulation import run_qir

code = qodec.Code(
    "C4",
    stabilizers=["X_0 X_1 X_2 X_3", "Z_0 Z_1 Z_2 Z_3"],
    x=["X_0 X_1", "X_0 X_2"],
    z=["Z_0 Z_2", "Z_0 Z_1"],
)

code_profile = ec.CodeProfile(code)
print("Code distance:", code_profile.distance())

protocol = ec.build_qodec(code, strategy="bare-css/v1", strict=False)
print(ec.audit(protocol))

# Compile a logical program to QIR before you call run_qir.
# results = run_qir(qir, qodec=protocol, shots=100)

La bare-css/v1 estrategia de este ejemplo crea un protocolo de línea base simple sin cúbits bandera. Te ayuda a inspeccionar el flujo de trabajo, pero no garantiza que los gadgets sean tolerantes a fallos. Utiliza el análisis de distancia de los gadgets antes de elegir una implementación del protocolo.

Separa la validación del protocolo del análisis de fallos

Las auditorías de protocolo y el análisis de distancia evalúan diferentes aspectos de un protocolo QEC.

  • Las auditorías de protocolo comprueban si el protocolo declarado coincide con sus circuitos y ecuaciones cuando no se producen fallos.
  • El análisis de distancia determina el número mínimo de errores permitidos o fallos de circuito que pueden provocar un fallo lógico no detectado.

Usar la función audit para comprobar la coherencia sin ruido. La auditoría comprueba el álgebra del código, las declaraciones de instrucciones, las acciones de los dispositivos, las comprobaciones, las lecturas, los indicadores, las relaciones entre tramas y las referencias entre objetos qodec.

Una auditoría que informa de que no hay problemas no garantiza la tolerancia a errores. Un circuito puede implementar la acción lógica correcta sin errores y aun así fallar tras un fallo físico. Utiliza el método CodeProfile.distance para analizar el código y el método GadgetProfile.distance para analizar cada implementación del circuito.

Antes de usar un protocolo para simulaciones ruidosas, ejecute una auditoría de protocolo y analice las distancias de código y gadgets.

Elección de una estrategia de construcción

La build_qodec función admite dos estrategias de construcción de línea base CSS .

Strategy Description
flagged-css/v1 Utiliza la construcción CSS marcada y selecciona el recuento de indicadores a partir de la distancia del código. Esta estrategia es la predeterminada.
bare-css/v1 No utiliza cubits de indicador y omite el cálculo de la distancia que selecciona un recuento de indicadores. Úselo para la inspección y el desarrollo temprano.

Ambas estrategias intentan crear estas instrucciones lógicas:

  • prepare_z_all
  • prepare_x_all
  • syndrome
  • measure_z_all
  • measure_x_all
  • h_all
  • cx_all

No todos los códigos admiten todas las opciones posibles. Con la configuración predeterminada strict=True, build_qodec genera un error cuando no puede compilar y verificar una instrucción. Con strict=False, build_qodec mantiene las instrucciones admitidas y registra cada instrucción omitida en los metadatos de qodec.

Elige tu próxima tarea.

Para obtener un cuaderno completo que siga todo el flujo de trabajo, consulta Desarrollar y probar un protocolo QEC en el QDK repositorio.