El Blog de QPath
Diseño de circuitos complejos con QuantumPath®
Uno de los objetivos de QuantumPath® es proporcionar herramientas que hagan más práctico y eficiente el diseño de circuitos cuánticos para los usuarios. Para ello, se introdujo en la familia de Q Assets Compositor® la herramienta conocida como Q xCompositor [1], un nuevo instrumento de QuantumPath® desarrollado en Microsoft Excel [2]que permite crear de manera sencilla y escalable los diferentes circuitos de puertas.
Un ejemplo de su utilidad se recoge en El Blog de QPath® [3], donde se trabaja con un QRNG (Quantum Random Number Generator) de 100 cúbits. En dicho artículo se muestra como Q xCompositor facilita el manejo de grandes cantidades de cúbits haciendo uso de la completa integración de las características propias tanto de Excel como de QPath®. Partiendo de estos conocimientos, en el actual artículo se muestra la conveniencia y utilidad de usar la herramienta Q xCompositor para trabajar con circuitos de gran profundidad o que contienen ciertos patrones de diseño. Para ello, se propone como ejemplo la implementación de un solucionador cuántico del problema de satisfacibilidad booleana, SAT ‑del inglés boolean satisfiability problem‑ investigado en el artículo de Shang-Wei Lin et al. [4].
En consecuencia, esta publicación está estructurada de la siguiente forma: en primer lugar, se introduce el problema SAT. En segundo lugar, se describe la propuesta de una solución cuántica al mismo. A continuación, se muestra la implementación del modelo expuesto en Q xCompositor haciendo uso tanto de las propiedades esenciales del mismo, como de los macros que proporciona la herramienta Excel. Finalmente, se comparan los diferentes métodos de creación de circuitos cuánticos de puertas, comprobando así las bondades y utilidades que presenta la herramienta Q xCompositor.
El problema SAT
El problema de satisfabilidad booleana consiste en determinar si existe, o no, una interpretación que satisfaga una determinada fórmula booleana dada, escrita en forma normal conjuntiva (FNC. Es decir, dada una expresión lógica formada por una conjunción de cláusulas, donde cada cláusula es una disyunción de literales verdaderos o falsos, se trata de buscar una combinación de valores tal que la fórmula final sea verdadera. Si existe tal combinación entonces la fórmula se denomina satisfactoria, sino será insatisfactoria.
Por ejemplo, analizando la expresión “F1: (no a o b) y (a)” se puede comprobar fácilmente que está formada por dos clausulas separadas por el operador, y, de conjunción. La primera de ellas contiene dos literales, separados por el operador, o, de disyunción: uno positivo, b, y uno negativo definido por el operador no, no a. Por otro lado, la segunda cláusula contiene un solo literal positivo, a. Con esto, y teniendo en cuenta cómo actúan los distintos operadores se tiene que la tabla de verdad de la fórmula F1, dependiente de las variables a y b, es tal y como muestra la Tabla 1.
a | b | F1: (no a o b) y (a) |
F | F | F |
F | T | F |
T | F | F |
T | T | T |
Tabla 1: Tabla de verdad de “F1: (no a o b) y (a)”.
Como se puede observar, cuando las variables a y b son verdaderas, entonces la expresión lógica F1 toma un valor verdadero siendo ésta, por tanto, una fórmula satisfactoria.
Solución al problema SAT
Clásicamente, para resolver este tipo de problemas se emplea el algoritmo DPLL [5]. Se trata de un algoritmo de retroceso que consiste en asignar el valor verdadero a un literal, simplificar la fórmula y, de manera recursiva, comprobar si la expresión lógica es satisfactoria o no.
Ahora bien, dado que en la computación cuántica existen los cúbits, con propiedades como la superposición o el entrelazamiento, ello hace que resolver este problema a través de la computación cuántica resulte considerablemente más rápido, escalable y eficiente. La solución propuesta en el artículo de Shang-Wei Lin et al. [4], para el problema SAT consiste en hacer uso de una adaptación del algoritmo de Grover [6], definiendo, igualmente, un oráculo y un difusor. Partiendo de investigaciones anteriores[7] [8], se propone el siguiente método de trabajo descrito en cuatro pasos: en primer lugar, se analiza la expresión a estudiar, identificando cuantas variables, literales y cláusulas se emplean en la definición, para así determinar el número de cúbits necesarios. En segundo lugar, se define el oráculo del algoritmo de Grover. Después, se determina una versión cuántica del difusor y, finalmente, se mide el estado del sistema.
El planteamiento propuesto para manejar la expresión lógica consiste en identificar los diferentes literales empleados y las repeticiones de éstos en las distintas cláusulas, con el fin de tratar cada una de dichas repeticiones de manera individual, mientras que se mantienen entrelazadas durante el proceso. De esta forma se logra que las repeticiones de una misma variable, manejadas en todo momento como si se tratase de variables independientes, den siempre el mismo valor, pues representan la misma variable. En consecuencia, al analizar una fórmula booleana, el número de cúbits necesarios será la suma de: un cúbit por cada literal empleado, repetido o no; uno por cada cláusula; y uno para representar la expresión F final, ordenados de esta forma. La inicialización de estos cúbits consiste en situar la primera aparición de cada variable en el estado , colocar una puerta X en los cúbits referidos a las cláusulas, y entrelazar todas las repeticiones de una misma variable.
En lo referido al oráculo, éste constará de tres partes diferenciadas que se denominarán: Ω, Ꞙ y Ω‑1. Comienza Ω situando una puerta X (Id) a todos aquellos literales positivos (negativos) que aparecen en F. A continuación, se sitúa una puerta CNOT, o Toffoli, de tal forma que se relacionen cada uno de los literales de F con la cláusula donde aparecen. Es decir, se sitúan tantos controles como literales definen la cláusula a estudiar, y el target de la puerta se situará en el cúbit correspondiente a la cláusula en donde éstos aparecen. En cuanto a la segunda sección, Ꞙ, ésta servirá para unificar las distintas cláusulas, es decir, para aplicar el operador y entre las mismas. Para ello, se añade una puerta de multi-control, donde los controles serán las diferentes cláusulas y el target el último cúbit, referido a la expresión final, F. A continuación, se añade una puerta Z al último cúbit y la misma puerta multi-control del paso anterior. Finalmente, como indica su nombre, Ω‑1 aplica las mismas puertas que Ω invirtiendo el orden de actuación.
Es fácil ver que el oráculo dependerá de la expresión lógica a evaluar. Sin embargo, en el caso del difusor se tendrá un operador cuya estructura es análoga para todas las expresiones. Por tanto, en primer lugar, será necesario desentrelazar las diferentes repeticiones de los literales mediante tantas puertas CNOT como sean necesarias. Después, se eligen los cúbits referentes a la primera aparición de cada literal como representantes de los mismos, y se aplica el difusor sobre ellos. Es decir, aplicar el difusor consiste en situar una puerta H y una puerta X a cada uno de los cúbits; añadir una puerta multi-control donde el target, con una puerta Z, será el último de estos cúbits y los controles el resto de ellos; situar una puerta X y una puerta H, de manera análoga al paso anterior; y, finalmente, volver a entrelazar los cúbits referentes a las mismas variables.
Por último, teniendo ya la inicialización de los cúbits, el oráculo, formado por Ω, Ꞙ y Ω‑1, y el difusor, se procede a medir el estado del sistema obteniendo así la solución esperada. Explicar el razonamiento detrás del diseño del algoritmo queda fuera del alcance de este artículo. Sin embargo, para más información se recomienda acudir al citado artículo, el cual contiene dicha explicación, por Shang-Wei Lin et al. [4].
De esta forma, el circuito que representa el algoritmo explicado cuando la expresión lógica es F1 es tal y como muestra la Figura 1.
Figura 1: Representación del solucionador cuántico SAT para “F1: (no a o b) y (a)”.
Implementación en QuantumPath® con Q xCompositor
A lo largo de esta sección se va a mostrar cómo aplicar el solucionador cuántico del problema SAT en QuantumPath® cuando se tiene una expresión algo más compleja que F1. A partir de la Figura 1, se puede prever que, a mayor complejidad en la fórmula lógica a analizar, mayor número de cúbits se necesitarán y mayor profundidad tendrá el circuito. Además, gracias a la opción Gate Colors, en la pestaña xCompositor Settings, los colores en las diferente puertas facilitan visualizar la simetría de cada una de las partes. Todo esto hace que, en vez de crear el circuito desde Q Assets Compositor®, merezca la pena hacerlo desde Q xCompositor pues, como ya se ha mencionado antes, la herramienta integra perfectamente las propiedades de QPath® y de Excel.
En consecuencia, Q xCompositor contiene las herramientas básicas del programa incorporado, como es poder copiar, pegar, o incluso arrastrar distintas partes del circuito, instrumentos a los que se recurrirá en numerosas ocasiones. Sin embargo, al mismo tiempo, comprende también elementos más elaborados como son los macros de Excel: automatizaciones con las que se pueden configuran tareas repetitivas. En la primera subsección se muestra una manera de emplear tanto las herramientas básicas como aquellas más avanzadas de manera conjunta. Por otra parte, en la segunda subsección se expone, para el lector que lo desee, la opción de generalizar el algoritmo a través únicamente de macros, creando así un caso de uso completo donde las herramientas de Q xCompositor facilitan, notablemente, la creación de diferentes circuitos cuánticos de puertas.
En el artículo base del algoritmo propuesto se emplea como ejemplo la siguiente expresión: “F2: (a) y (no a o b o c) y (no c) y (a)”, cuyo resultado es que F2 es verdadera si, y solo si, las variables a, b y c son verdaderas. Con el fin de proporcional al lector de más material, en este artículo se trabajará con “F3: (a o no b) y (b o no c) y (no a o b o c) y (no c) y (a)”, cuya tabla de verdad se muestra en la Tabla 2.
a | b | c | F3: (a o no b) y (b o no c) y (no a o b o c) y (no c) y (a) |
F | F | F | F |
F | F | T | F |
F | T | F | F |
F | T | T | F |
T | F | F | F |
T | F | T | F |
T | T | F | T |
T | T | T | F |
Tabla 2: Tabla de verdad de “F3: (a o no b) y (b o no c) y (no a o b o c) y (no c) y (a).
Es decir, F3, es un fórmula satisfactoria, pues es verdadera cuando a y b son variables verdaderas, y c es falsa.
Para poder implementar el circuito empleando Q xCompositor, se debe tener de una solución de puertas creada en QuantumPath®, [9]. Desde ésta, seleccionando la opción de crear un circuito en Excel, Figura 2, se descarga el fichero donde se definirá el circuito.
Figura 2: Botón para crear un circuito en Excel.
1. Implementación híbrida
Teniendo ya el documento sobre el cual se definirá el circuito, se procede a analizar la expresión lógica F3 e inicializar los cúbits, paso 1 del algoritmo. Es fácil comprobar que F3 está formada por tres variables (a, b, y c), distribuidas en nueve literales y cinco cláusulas, por tanto, el circuito del solucionador cuántico requerirá de 15 cúbits. Como se ha indicado anteriormente el orden es secuencial. En consecuencia, la relación entre los 15 cúbits y los diferentes parámetros de F3 será la mostrada en la Tabla 3.
q1 | q2 | q3 | q4 | q5 | q6 | q7 | q8 | q9 | q10 | q11 | q12 | q13 | q14 | q15 |
a1 | b1 | b2 | c1 | a2 | b3 | c3 | c3 | a3 | Cl1 | Cl2 | Cl3 | Cl4 | Cl5 | F3 |
Tabla 3: Asignación de cúbits con elementos de F3.
Donde qi indica el i-ésimo cúbit; ai, bi y ci, la i-ésima aparición de la variable a, b y c, respectivamente; Cli, la cláusula i-ésima, y F3 la expresión global.
Para definir dichos cúbits, en la pestaña xCompositor Settings, se introduce como parámetro el número 15 y presionando Restore Qubits se aplican los cambios, Figura 3.
Figura 3: Definición de 15 cúbits con Q xCompositor.
Con el fin de inicializar los cúbits se sitúa la primera aparición de cada variable, cúbits q1, q2 y q4, en el estado . Esto se hace eligiendo en el desplegable, situado en la primera columna del documento, el estado en cuestión. A continuación, se entrelazan todas las repeticiones de una misma variable, mediante puertas CNOT; y se añade una puerta X a todos los cúbits referidos a cláusulas, q10-q14. Este último paso puede hacerse arrastrando hacia abajo la primera puerta X o insertando las puertas manualmente. Es más, todas las puertas empleadas pueden ser escritas o bien seleccionándolas en la pestaña Quantum Gates, o bien, escribiéndolas en las celdas correspondientes. De esta forma el circuito descrito hasta el momento sería el mostrado en la Figura 4.
Figura 4: Paso 1. Análisis e inicialización de los cúbits.
A continuación, se procede a implementar el oráculo, formado por Ω, Ꞙ y Ω‑1. Para ello, se añade una puerta X a cada cúbit que represente un literal positivo y se entrelazan los diferentes literales con las cláusulas en las que están contenidos. Hasta aquí el bloque Ω, mostrado en la Figura 5 y diferenciado por las barreras.
Figura 6: Paso 2, bloque Ꞙ. Conjunción de las cláusulas y aplicación de la puerta Z.
Es fácil ver como el bloque Ꞙ, empieza y termina igual, por lo que se puede copiar la primera columna del mismo y pegarla en la siguiente columna disponible. Sin embargo, también se puede analizar como una inversión de la columna Q, conjunción de las cláusulas, respecto de la columna R, puerta Z. La utilidad de plantearlo de esta forma se puede apreciar con mayor facilidad en el siguiente bloque.
La implementación del último bloque del oráculo, Ω‑1, consiste en aplicar todas las puertas realizadas en el bloque Ω de forma invertida. Como se puede apreciar del paso anterior, y de la estructura que tiene el difusor, el proceso de invertir ciertas columnas resulta recursivo en el diseño del algoritmo. En consecuencia, se puede hacer uso de los macros de Excel para automatizar el proceso de inversión de puertas. La intención detrás de emplear los macros reside tanto en ahorrar tiempo en la definición del circuito, como en hacer uso de las herramientas que se ponen al alcance del usuario, que son muchas, al integrar QPath® con el programa Excel. Por tanto, se explica a continuación como crear un macro que, dadas unas columnas, invierta el orden de las mismas, colocándolas a partir de un columna dada.
Debido a que los macros que definen las propiedades de QPath® en el Q xCompositor están protegidas por motivos evidentes, se definirá el macro en cuestión en un nuevo Excel, y se habilitará para poder ser implementado contra el archivo de Q xCompositor. Es decir, para ello créese un fichero auxiliar de Excel, llamado, por ejemplo, Macro SAT Solver, y guárdese como Libro de Excel habilitado para macros, como muestra la Figura 7. Esta parte tiene especial relevancia pues, sino no se podrá trabajar con los macros correctamente.
Figura 7: Definición del libro de Excel auxiliar.
A continuación, con ambos libros abiertos, en la pestaña Programador de Macro SAT Solver, se selecciona Visual Basic (Alt+F11), herramienta que hace uso del lenguaje de programación Visual Basic for Application, VBA. En ese momento, se abrirá una nueva ventana como la mostrada en la Figura 8, donde se pueden ver los dos libros de Excel abiertos. Igualmente figurarán los elementos que contienen cada uno de los archivos.
Figura 9: Creación del módulo en Visual Basic.
Dicho código, mostrado en la Figura 10, toma como parámetro de entrada el conjunto de columnas seleccionadas, las cuales deben ser invertidas, además de la columna en donde se quiere situar el comienzo de dichas puertas. El parámetro Selection.Column toma el valor de la primera columna seleccionada; y, por su parte, Selection.Columns.Count cuenta el número de ellas. Recorriendo, por tanto, las columnas seleccionadas desde la última a la primera, se procede a copiar dichas columnas enteras a partir de la columna introducida en el sistema, y desplazando la columna de destino mediante el comando Offset. Por otro lado, debido a que resulta más ágil la ejecución si la representación gráfica del circuito se visualiza al finalizar, y no cada vez que se copia una columna, se hace uso del comando ScreenUpdating.
Figura 10: Definición del macro de inversión.
Con todo esto ya se tienen las herramientas para invertir cualquier conjunto de puertas de manera rápida y sencilla. En consecuencia, teniendo en cuenta que ya se ha implementado el bloque Ꞙ, Figura 6, perteneciente al oráculo del algoritmo para la expresión F3, ahora es el momento de implementar Ω‑1, mediante el macro que se acaba de definir.
Para ello, se selecciona en el libro de Excel principal, denominado aquí Quantum SAT Solver, la zona referente al bloque Ω, bloque a invertir, y se ejecuta el macro. Inmediatamente después de ejecutarlo aparece en pantalla un cuadro de entrada preguntando la columna en donde se quieren copiar las puertas, tal y como se puede apreciar en la Figura 11.
Fig. 12: Paso 2, bloque Ω 1. Descripción final del oráculo de Grover.
A continuación, se procede a escribir el difusor. Como se ha explicado, el primer paso es desentrelazar todos los literales pertenecientes a las mismas variables, para ello, haciendo uso del macro definido, se deben seleccionar las primeras seis columnas del circuito y situarlas a continuación. El segundo paso consiste en situar una puerta H y una puerta X en la primera aparición de cada variable, es decir, en los cúbits q1, q2 y q4. En tercer lugar, se sitúa una puerta de control sobre los dos primeros cúbits antes mencionados, y una puerta Z sobre el último. Seguidamente, se repiten el segundo y primer paso de forma invertida, para lo cual resulta especialmente útil emplear el macro definido. De esta forma, el circuito pasa a tener la forma mostrada en la Figura 13.
Figura 14: Paso 4. Realización de las mediciones.
Nótese que, debido al tamaño tan grande del circuito, no se puede visualizar en pantalla el circuito completo con claridad. De ahí que sea realmente útil tener asignados los diferentes colores a las distintas puertas. De esta forma, visualizando el circuito de manera reducida, los colores permiten identificar a simple vista y con claridad qué tipo de puerta se tiene en cada casilla, así como el patrón general del circuito, Figura 15.
Figura 15: Representación del solucionador cuántico SAT. “F3: (a o no b) y (b o no c) y (no a o b o c) y (no c) y (a)”.
Teniendo ya definido el circuito correspondiente al solucionador cuántico del problema SAT para la expresión a analizar, F3, solo faltaría exportarlo a QuantumPath®, ejecutarlo y analizar los resultados. Para exportarlo, basta con seleccionar la opción Circuit to QuantumPath® en la pestaña denominada QuantumPath. Al hacerlo se abre una ventana solicitando el inicio de sesión y los datos que definen al circuito, Figura 16.
Figura 17: Estructura del flujo creado en QuantumPath®.
Una vez guardado, compilado y transpilado el mismo, el siguiente paso es ejecutarlo en las diferentes máquinas dadas de alta en la solución sobre la que se está trabajando. En este caso se procede a lanzar el algoritmo contra el simulador denominado Amazon Braket 25qbits Local Simulator. En la Figura 18 se muestran los resultados obtenidos tras la ejecución.
Figura 18: Resultados obtenidos al ejecutarse en Amazon Braket 25qbits Local Simulator desde QuantumPath®.
Para visualizar más fácilmente estos resultados véase la Tabla 4, donde se establece la relación entre los diferentes cúbits, literales y resultados obtenidos. En dicha tabla se puede comprobar como todos los cúbits referidos a una misma variable toman el mismo valor, en este caso:
Es más, esto se puede observar que ocurre también en la Figura 18, donde todos los posibles resultados cumplen esta condición. Esto se debe a que, como se ha comentado anteriormente, pese a que todos los literales se traten como variables independientes representan, en realidad, un único valor. Acción que se consigue mediante la propiedad cuántica del entrelazamiento, de ahí que resulte especialmente conveniente y útil emplear la computación cuántica para resolver el problema SAT, problema de especial relevancia en lógica e informática.
q1 | q2 | q3 | q4 | q5 | q6 | q7 | q8 | q9 | q10 | q11 | q12 | q13 | q14 | q15 |
a1 | b1 | b2 | c1 | a2 | b3 | c3 | c3 | a3 | Cl1 | Cl2 | Cl3 | Cl4 | Cl5 | F3 |
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
Tabla 4: Asignación de cúbits y elementos de F3 con los resultados obtenidos.
Por último, comparando los resultados obtenidos, mostrados en la Tabla 4, y los resultados esperados, mostrados en la tabla de verdad de F3, Tabla 2, se puede apreciar como el algoritmo propuesto, e implementado en QuantumPath®, funciona correctamente, devolviendo el resultado correcto para el problema SAT.
1. Implementación con VBA
En esta sección se propone, como alternativa a crear manualmente el circuito, hacer uso de los macros para definir un único programa que implemente el algoritmo por completo. Es decir, generalizar el algoritmo para así poder hacer uso de la herramienta Visual Basic a través de Q xCompositor.
Con ese fin y siguiendo la estructura planteada en la subsección anterior, la función que representa el circuito completo tomará como parámetros de entrada el número de cláusulas en una expresión lógica dada, así como la definición de cada una de ellas. A continuación, se deben implementar los siguientes pasos: en primer lugar, se analizan los datos introducidos. Luego, se inicializa el sistema e implementan los bloques Ω, Ꞙ y Ω‑1, correspondientes al oráculo. Después, se definen los bloques correspondientes al difusor y las mediciones, y finalmente, se representa el sistema, obteniendo así el circuito correspondiente.
Empleando VBA, los datos serán introducidos en el sistema mediante un UserForm como muestra la Figura 19. Seleccionando el botón CONSTRUIR, se ejecuta el programa.
Figura 19: Ventana con el cuadro de entrada y los parámetros de F3 introducidos.
Para ello, se determinan como partes troncales la definición de: las variables, las subfunciones correspondientes a los diferentes bloques del algoritmo, y la visualización del circuito. Estas subfunciones, descritas anteriormente, se muestran en la Figura 20.
Figura 20: Descripción del algoritmo mediante las subfunciones principales.
De esta forma, como resultado de la ejecución, el macro rellena el documento Excel con el circuito correspondiente a la expresión introducida. El código completo se puede obtener de [10]. Como se puede comprobar en la Figura 21, esta implementación también hace uso de la posibilidad de inicializar los cúbits, ventaja que ofrece QuantumPath®.
Figura 21: Representación del solucionador cuántico SAT, para F3, mediante VBA.
Nótese que, como se era de esperar, la Figura 15 y la Figura 21 son análogas ya que ambas corresponden a la representación del solucionador cuántico SAT para la expresión F3. Sin embargo, a diferencia del proceso que lleva a la Figura 15, la técnica empleada en esta subsección permite que, lanzando el mismo macro, se genere de manera automática el circuito correspondiente. Esto resulta de gran utilidad si se pretende implementar el algoritmo sobre diferentes expresiones lógicas pues, una vez se tiene descrito el macro, solo sería necesario introducir la expresión. Por otro lado, teniendo el circuito definido, implementarlo en QuantumPath® es realmente sencillo y se realiza de manera análoga a lo mostrado en la subsección anterior.
Conclusiones
En definitiva, debido a la relevancia que tiene el problema SAT, tanto en lógica como en informática, la cuantización de la solución al problema constituye un caso de uso realmente significativo y actual. Dicha cuantización implica la creación de un circuito, con ciertos patrones de diseño, que crece en número de cúbits y profundidad según aumenta la dificultad de la expresión lógica a analizar. Es debido a estos motivos, que la herramienta Q xCompositor, proporcionada por QuantumPath®, se convierte en el instrumento adecuado para crear el correspondiente circuito de puertas.
Q xCompositor proporciona al usuario las herramientas de creación de circuitos, facilitadas por QPath®, al mismo tiempo que ofrece los comandos y utilidades definidos en el programa Excel. Como se muestra en la sección Implementación en QuantumPath® con Q xCompositor, la fusión e incorporación de los dos elementos provee al usuario de propiedades como son copiar, pegar, o incluso, permitir la creación de macros. La utilidad de esas propiedades se muestra a través de la subsección Implementación híbrida, donde se pone en evidencia las ventajas y facilidades que ofrece Q xCompositor, así como la necesidad de ellas si se pretende definir de manera ágil un circuito de grandes dimensiones. Por otro lado, la subsección Implementación con VBA manifiesta el amplio rango de actuación de los elementos que constituyen la herramienta Q xCompositor, así como la gran cantidad de acciones que se pueden definir con los elementos puestos a disposición del usuario.
Finalmente, en lo referente al algoritmo propuesto por Shang-Wei Lin et al. [4], implementado en este artículo, es necesario realizar una anotación. Si bien es cierto que la ejecución del algoritmo con la expresión “F3: (a o no b) y (b o no c) y (no a o b o c) y (no c) y (a)” devuelve el resultado correcto, ver Tabla 2 y Tabla 4, la realidad es que el algoritmo solo es aplicable cuando la tabla de verdad de la expresión a analizar sólo contiene una combinación verdadera. La justificación detrás de esto, así como las modificaciones necesarias para generalizar el algoritmo quedan fuera del alcance de esta investigación, aunque se invita al lector a implementar y acceder a los recursos proporcionados en esta publicación y analizarlos.
[1] J.L. Hevia, M. Piattini y G. Peterssen. Crece la familia de Q Assets Compositor® de QuantumPath®: nueva herramienta para el desarrollo de software cuántico para la empresa. El Blog de QPath®. Julio 2023.
[2] Microsoft Office y Microsoft Excel son propiedad de Microsoft Corporation, sobre los que Microsoft posee todos los derechos de autor.
[3] J.L. Hevia y A. Martin-Toledano. Q xCompositor, ejemplos prácticos del desarrollo de circuitos cuánticos de puertas. El Blog de QPath®. Julio 2023.
[4] S-W. Lin, T-F. Wang, Y-R. Chen, Z. Hou, D. Sanán y Y.S. Teo. A Parallel and Distributed Quantum SAT Solver Based on Entanglement and Quantum Teleportation. Agosto 2023.
[5] M. Davis, G Logemann y D. Loveland. A machine program for theorem‑proving. Communications of the ACM. Julio 1962.
[6] L.K. Grover. A fast quantum mechanical algorithm for database search. Proceedings of the 28th annual ACM symposium on Theory of Computing. Julio 1996.
[7] I. Dutra y D. Fernandes. Using Grover’s search quantum algorithm to solve Boolean satisfiability problems, part 1. XRDS: Crossroads, The ACM Magazine for Students. Septiembre 2019.
[8] I. Dutra, D. Fernandes y C. Silva. Using Grover’s search quantum algorithm to solve Boolean satisfiability problems, part 2. XRDS: Crossroads, The ACM Magazine for Students. Noviembre 2019.
[9] Plataforma de desarrollo de software cuántico. QuantumPath®. 2020
[10] Macro correspondiente al solucionador cuántico del problema SAT. 2023.