Die folgende benutzerdefinierte Taktik genau dies tun kann, wenn sie von Umgebung, die Sie den Beweis Umwelt bedeuten.
Ltac printInType t :=
match goal with
| [ H : t |- _ ] =>
idtac H; fail
| _ => idtac
end
.
Theorem test : forall n m, n + m = m + n.
Proof.
intros.
printInType nat.
(* prints in the Message window:
m
n
*)
printInType Set.
(* prints nothing
because nat for instance is not explicitely in the proof environment *)
Was es tut genau das ist es durch den Beweis Umwelt geht und findet eine Hypothese oder eine Variable, die das Argument Typ t
hat. idtac H
druckt es, dann scheitert der Zweig wegen der fail
Taktik. Jetzt versucht Coq wieder den gleichen Zweig auf einer anderen Hypothese/Variable, folglich werden alle solche Hypothesen/Variablen am Ende gedruckt. Jetzt ist der zweite Zweig | _ => idtac
nur um sicherzustellen, dass die Taktik schließlich erfolgreich ist. Wenn dieser Zweig nicht vorhanden wäre, würde die Taktik mit einem Fehler fehlschlagen und beim Drucken des Fehlers würde Coq die zuvor gedruckten Informationen löschen.
Meine Frage war nicht nur über die Beweisumgebung, aber das ist nützlich – jaam