Возможно, вы хотите попробовать полуавтоматический метод доказательства. Просто пойти на что-то другое;) Например, если у вас есть спецификация Java алгоритмов Prim и Kruskal, оптимально построенная на одной и той же модели графа, вы можете использовать KeY Prover, чтобы доказать эквивалентность алгоритма.
Важнейшая часть состоит в том, чтобы формализовать ваше доказательство в Dynamic Logic (это расширение логики первого порядка с типами и средствами символического выполнения Java-программ). Формула, чтобы доказать, может соответствовать следующему (эскизный) схеме:
\forall Graph g. \exists Tree t.
(<{KRUSKAL_CODE_HERE}>resultVar1=t) <-> (<{PRIM_CODE_HERE}>resultVar2=t)
Это выражает, что для всех графиков, оба алгоритма прекращается, и результат будет тот же дерево.
Если вам повезло, и ваша формула (и реализация алгоритмов) правильна, то KeY может доказать это автоматически для вас. Если нет, вам может потребоваться создать некоторые количественные переменные, из-за чего необходимо проверить предыдущее дерево доказательств.
После того, как вы доказали это с помощью KeY, вы можете быть счастливы узнать что-то или попытаться восстановить ручное доказательство из доказательства KeY - это может быть утомительной задачей, поскольку KeY знает множество правил, специфичных для Java, которые нелегко понять. Тем не менее, возможно, вы можете сделать что-то вроде того, чтобы извлечь разлуку Herbrand из терминов, которые KeY использовал для создания экзистенциальных квантификаторов в правой части секвенций в доказательстве.
Ну, я думаю, что ключ является интересным инструментом и больше людей должны привыкнуть доказать критический код Java с использованием таких инструментов, как это;)
попробовать mathoverflow.com. Я думаю, что у вас будет больше удачи – Toad
Я не думаю, что этот вопрос является вопросом, для чего предназначен mathoverflow.com. –