Aufbauend auf @gallais' Vorschlag auf f_equal
verwenden. Wir beginnen in dem folgenden Zustand:
n : nat
x : nat
H : n - x = n
============================
n - x + x = n + x
(1) Erste Variante über "vorwärts" Argumentation mit dem f_equal
Lemma (wo man Theoreme Hypothesen gelten).
Check f_equal.
f_equal
: forall (A B : Type) (f : A -> B) (x y : A), x = y -> f x = f y
es die Funktion f
benötigt, so
apply f_equal with (f := fun t => t + x) in H.
Dies gibt Ihnen:
H : n - x + x = n + x
Dies kann über apply H.
oder exact H.
oder assumption.
oder auto.
... oder einige gelöst werden eine andere Art, die Ihnen am meisten zusagt.
(2) Oder Sie können "rückwärts" Argumentation verwenden (wo man Sätze auf das Ziel anwendet). Es gibt auch die f_equal2
Lemma:
Check f_equal2.
f_equal2
: forall (A1 A2 B : Type) (f : A1 -> A2 -> B)
(x1 y1 : A1) (x2 y2 : A2),
x1 = y1 -> x2 = y2 -> f x1 x2 = f y1 y2
Wir haben es nur auf das Ziel anzuwenden, die in zwei trivialen subgoals führt.
apply f_equal2. assumption. reflexivity.
oder nur
apply f_equal2; trivial.
(3) Es besteht auch die speziellere Lemma f_equal2_plus
:
Check f_equal2_plus.
(*
f_equal2_plus
: forall x1 y1 x2 y2 : nat,
x1 = y1 -> x2 = y2 -> x1 + x2 = y1 + y2
*)
Mit diesem Lemma können wir das Ziel, mit dem folgenden lösen Einstrich:
apply (f_equal2_plus _ _ _ _ H eq_refl).
Zur Verdeutlichung/Bestätigung ist 'n - x = n' eine Hypothese und' (n - x) + x = n + x' ist das aktuelle Ziel, richtig? – augurar
Ja, das ist korrekt –
Sie können das Lemma 'f_equal' anwenden. – gallais