Quizás desee probar un método de prueba semiautomático. Solo para ir a algo diferente;) Por ejemplo, si tiene una especificación Java de los algoritmos de Prim y Kruskal, basándose óptimamente en el mismo modelo de gráfico, puede usar el KeY Prover para probar la equivalencia del algoritmo.
La parte crucial es formalizar su obligación de prueba en Dynamic Logic (esta es una extensión de lógica de primer orden con tipos y medios de ejecución simbólica de programas Java). La fórmula para demostrar podría coincidir con el (incompleta) siguiente patrón:
\forall Graph g. \exists Tree t.
(<{KRUSKAL_CODE_HERE}>resultVar1=t) <-> (<{PRIM_CODE_HERE}>resultVar2=t)
Esto expresa que para todos los gráficos, los dos algoritmos terminan y el resultado es el mismo árbol.
Si tiene suerte y su fórmula (y las implementaciones de algoritmo) son correctas, entonces KeY puede probarlo automáticamente. De lo contrario, es posible que necesite crear instancias de algunas variables cuantificadas, lo que hace que sea necesario inspeccionar el árbol de pruebas anterior.
Después de haber probado lo que sucede con KeY, puede estar contento de haber aprendido algo o intentar reconstruir una prueba manual de la prueba KeY: esto puede ser una tarea tediosa ya que KeY conoce muchas reglas específicas de Java que no son fáciles de comprender Sin embargo, tal vez pueda hacer algo como extraer una disyunción de Herbrand de los términos que KeY usó para crear instancias de cuantificadores existenciales en el lado derecho de los secuentes en la prueba.
Bueno, creo que la clave es una herramienta interesante y más gente debe acostumbrarse a probar el código Java crítica utilizando herramientas como eso;)
tratar mathoverflow.com. Creo que tendrás más suerte allí – Toad
No creo que este tipo de pregunta sea para lo que es mathoverflow.com. –