Если Вы хотите кодировать в Python и получить большую поддержку поточной обработки, Вы могли бы хотеть проверить IronPython или Jython. Так как код Python в IronPython и Jython работает на CLR.NET и Java VM соответственно, они пользуются большой поддержкой поточной обработки, встроенной в те библиотеки. В дополнение к этому IronPython не имеет GIL, проблемы, которая препятствует тому, чтобы потоки CPython в полной мере пользовались многоядерной архитектурой.
Goal forall (f:bool -> bool) (b:bool), f (f (f b)) = f b.
Proof.
intros.
remember (f true) as ft.
remember (f false) as ff.
destruct ff ; destruct ft ; destruct b ;
try rewrite <- Heqft ; try rewrite <- Heqff ;
try rewrite <- Heqft ; try rewrite <- Heqff ; auto.
Qed.
Немного более короткое доказательство:
Require Import Sumbool.
Goal forall (f : bool -> bool) (b:bool), f (f (f b)) = f b.
Proof.
destruct b; (* case analysis on [b] *)
destruct (sumbool_of_bool (f true)); (* case analysis on [f true] *)
destruct (sumbool_of_bool (f false)); (* case analysis on [f false] *)
congruence. (* equational reasoning *)
Qed.
В SSReflect :
Require Import ssreflect.
Goal forall (f:bool -> bool) (b:bool), f (f (f b)) = f b.
Proof.
move=> f.
by case et:(f true); case ef:(f false); case; rewrite ?et ?ef // !et ?ef.
Qed.