Może chcesz wypróbować półautomatyczną metodę sprawdzania. Po prostu przejdźmy do czegoś innego;) Na przykład, jeśli posiadasz specyfikację Java algorytmów Prim i Kruskala, optymalnie opierając się na tym samym modelu wykresu, możesz użyć KeY Prover, aby udowodnić równoważność algorytmu.
Najważniejszą częścią jest sformalizowanie zobowiązania dowodowego w Dynamic Logic (jest to rozszerzenie logiki pierwszego rzędu z typami i sposobami symbolicznego wykonywania programów Java). Formuła udowodnić mógł dopasować następujący wzór (szkicowy):
\forall Graph g. \exists Tree t.
(<{KRUSKAL_CODE_HERE}>resultVar1=t) <-> (<{PRIM_CODE_HERE}>resultVar2=t)
Wyraża że dla wszystkich wykresach, oba algorytmy zakończyć, a wynik jest taki sam drzewo.
Jeśli masz szczęście, a twoja formuła (i implementacje algorytmów) mają rację, to KeY może to dla Ciebie automatycznie sprawdzić. Jeśli nie, może być konieczne utworzenie pewnych zmiennych ilościowych, co powoduje konieczność sprawdzenia poprzedniego drzewa próbnego.
Po sprawdzeniu tego w KeY, możesz być szczęśliwy, że nauczyłeś się czegoś lub spróbować zrekonstruować ręczny dowód z proofa KeY - może to być żmudne zadanie, ponieważ KeY zna wiele zasad specyficznych dla Javy, które nie są łatwe do zrozumienia. Być może jednak możesz zrobić coś takiego, jak wyodrębnienie kombinacji Herbranda z pojęć, które KeY użył do utworzenia kwantyfikatorów egzystencjalnych po prawej stronie sekwencji w dowodzie.
Myślę, że kluczem jest interesującym narzędziem więcej ludzi powinno przyzwyczaić do udowodnienia krytycznej kodu Java przy użyciu narzędzi takich jak to;)
spróbować mathoverflow.com. Myślę, że będziesz miał więcej szczęścia. – Toad
Nie wydaje mi się, żeby takie pytanie dotyczyło mathoverflow.com. –