← Últimos artículos
🤖 AI

Diversifying to Verify: When Task-Equivalent Programs Differ in Verifiability

Este artículo presenta Diversify2Verify, un flujo de trabajo basado en LLM que demuestra cómo la generación de implementaciones de programas diversas y equivalentes en términos de tarea mejora significativamente las tasas de éxito de la verificación automatizada al identificar variantes que son más propensas a la prueba formal.

Autores originales: Shirley Yu, Ruben Martins

Publicado 2026-07-13
📖 7 min de lectura🧠 Análisis profundo

Autores originales: Shirley Yu, Ruben Martins

Artículo original bajo licencia CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo

Imagina que estás intentando construir un robot que pueda resolver un acertijo matemático. Tienes un asistente de IA superinteligente (un Modelo de Lenguaje Extenso) que es excelente escribiendo código. Normalmente, le pedimos a la IA: "Escribe código que resuelva este acertijo", y comprobamos si el robot pasa algunas pruebas de ejecución. Si pasa, decimos: "¡Buen trabajo!".

Pero en el mundo de la verificación formal, pasar unas pocas pruebas no es suficiente. Es como construir un puente y solo pasar un coche de juguete por encima. Para que sea verdaderamente seguro, necesitas una prueba matemática de que el puente aguantará cualquier coche, en cualquier momento, bajo cualquier condición. Esto es lo que el artículo llama "verificación deductiva".

¿El problema? Conseguir que la IA escriba código que no solo sea correcto, sino también fácil de probar es increíblemente difícil. A veces, la IA escribe una solución que funciona perfectamente pero que es tan desordenada o extrañamente estructurada que el "comprobador de pruebas" (una herramienta llamada Why3) se confunde y no puede verificarla.

La Gran Idea: No intentes solo un camino

Los autores, Shirley Yu y Ruben Martins, se hicieron una pregunta sencilla: ¿Qué pasaría si no solo pedimos una solución, sino muchas versiones diferentes de la misma solución?

Piensa en esto como intentar abrir un frasco rebelde.

  • Versión A: Intentas girar la tapa con la mano derecha.
  • Versión B: Intentas girar la tapa con la izquierda.
  • Versión C: Intentas golpear la tapa con una cuchara.
  • Versión D: Intentas ponerla bajo el agua caliente.

Tal vez el "giro con la mano derecha" (el primer código que escribe la IA) es demasiado resbaladizo para que el comprobador de pruebas pueda agarrarlo. Pero el "giro con la izquierda" podría tener una forma que encaje perfectamente con la lógica del comprobador. El artículo llama a esto Diversify2Verify. En lugar de esperar un código perfecto, generan cuatro "sabores" diferentes de la misma tarea:

  1. Array + Imperativo: Como caminar a través de una fila de personas una por una, revisando sus nombres.
  2. Array + Recursivo: Como un juego del "teléfono descompuesto" donde pasas la tarea a una línea de ayudantes.
  3. Lista + Imperativo: Como hojear una pila de fichas de índice.
  4. Lista + Recursivo: Como una muñeca rusa donde cada muñeca contiene el siguiente paso.

El Experimento: 73 Acertijos, 292 Intentos

El equipo construyó un patio de juegos especial con 73 diferentes acertijos de programación (principalmente involucrando números, listas y arreglos/arrays). Para cada acertijo, pidieron a la IA generar los cuatro "sabores" mencionados. Eso les dio 292 intentos de código diferentes para probar.

No se limitaron a dejar que la IA escribiera el código; establecieron un proceso estricto de tres etapas:

  1. Etapa 1 (El Contrato): Primero, hicieron que la IA escribiera un "contrato" (un libro de reglas formal) describiendo lo que el código debe hacer, sin preocuparse por cómo lo hace. Comprobaron este libro de reglas contra ejemplos para asegurarse de que tuviera sentido. Una vez aceptado el libro de reglas, este quedó congelado. ¡No más cambios en las reglas después!
  2. Etapa 2 (El Código): Luego, pidieron a la IA que escribiera el código real para cada uno de los cuatro sabores, asegurándose de que pasara algunas ejecuciones de prueba básicas.
  3. Etapa 3 (La Prueba): Finalmente, intentaron probar que cada versión del código satisfacía el libro de reglas congelado. Si la prueba fallaba, le dieron una pista (una "reparación") a la IA para arreglar la prueba, pero solo la prueba, no el código ni las reglas.

Los Resultados: La Diversidad Gana

Esto es lo que sucedió cuando analizaron los números:

  • El Fracaso de "Un Solo Intento": Si simplemente tomabas el primer código que la IA escribía e intentabas probarlo, solo 96 de 292 (aproximadamente el 32.9%) funcionaban. ¡Eso es menos de uno de cada tres!
  • El Poder de la Reparación: Cuando dejaron que la IA intentara arreglar las pruebas dos veces, la cifra saltó a 154 de 292 (aproximadamente el 52.7%).
  • El Poder de la Diversidad (El Verdadero Ganador): Cuando observaron los 73 acertijos en su conjunto, descubrieron que para 49 de ellos (una tasa de éxito del 67.1%), al menos una de las cuatro versiones diferentes podía ser probada como correcta.

Este es el hallazgo principal: Las implementaciones equivalentes de una tarea pueden diferir sustancialmente en su verificabilidad. En otras palabras, dos piezas de código que hacen exactamente lo mismo pueden estar a mundos de distancia en cuanto a su facilidad para ser probadas.

Lo que Descartaron (Lo que NO es)

El artículo es muy cuidadoso con lo que no afirma:

  • No se trata de un mejor código: No encontraron que "los Arrays sean mejores que las Listas" o que "la Recursión sea mejor que los Bucles". De hecho, los resultados fueron mixtos. El código recursivo fue generalmente más fácil de probar que el código imperativo (basado en bucles), pero los arrays y las listas se comportaron de manera similar en general. La clave no era elegir el "mejor" estilo, sino tener opciones.
  • No se trata de cambiar las reglas: Prohibieron estrictamente que la IA cambiara el "contrato" (el objetivo) durante la fase de reparación. Si la IA intentaba cambiar el objetivo para que la prueba fuera más fácil, eso se contaba como un fallo. Querían probar el objetivo original, no uno más débil.
  • No es una solución mágica para todo: El estudio solo analizó acertijos que involucraban enteros, arrays y listas. No afirman que esto funcione para números de punto flotante, gráficos 3D complejos o programas que se comunican con internet.

¿Qué tan seguros están?

Los autores confían en sus mediciones pero son cautelosos con el panorama general.

  • Medido: Tienen números duros. Ejecutaron las herramientas, contaron los éxitos y vieron que la diversidad aumentó la tasa de éxito del 32.9% al 52.7% para artefactos individuales, y al 67.1% para las tareas.
  • Sugerido: Sugieren que la razón por la que el código imperativo (bucles) fue más difícil de probar es que requiere "invariantes de bucle" (reglas sobre lo que está sucediendo dentro de un bucle) que son difíciles de inventar automáticamente para la IA. Sospechan que si se le dan mejores herramientas a la IA para adivinar estas reglas, la brecha podría cerrarse.
  • No Probado (Aún): Admiten que no probaron que el "Contrato de Array" y el "Contrato de Lista" sean matemáticamente idénticos. Simplemente asumieron que significaban lo mismo basándose en la descripción de la tarea. También señalan que su "juez" (una IA que comprobaba si las reglas coincidían con el acertijo) no es un experto humano perfecto, por lo que algunos errores sutiles podrían haberse colado.

La Conclusión

El artículo sugiere que cuando pedimos a la IA que escriba software "verificado", no debemos pedir solo una respuesta y esperar lo mejor. En su lugar, debemos pedir un menú de opciones. Al generar diferentes formas de resolver el mismo problema, aumentamos nuestras posibilidades de encontrar la versión que el comprobador de pruebas realmente pueda entender.

Es como intentar encontrar una llave que encaje en una cerradura. Si solo tienes una llave, podrías quedarte atrapado. Pero si tienes un llavero completo, aunque todas abran la misma puerta, es casi seguro que una de ellas encajará perfectamente en la cerradura.

¿Ahogado en artículos de tu campo?

Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.

Probar Digest →