あなたの説明と例を考えると、あなたが抱えている一般的な問題を正しく推測できないと思います。
をすでに知っている場合は、とについて何かを示したい場所にH : f = g
使用したり、一度にすべてを書き直したりすることができます。ヘルパー定理は必要ありません。必要な場合は、明らかにorのようなものが必要になります。rewrite H
f
g
elim H
assert
assert
pose proof
あなたの例のように、その等式が一部の eta-expansion の下に隠されている場合は、そのレイヤーを削除してから、上記のように進みます。これを行うための (多くの) 2 つの方法を次に示します。
intros A B P Q a H. assert (P = Q) as H0 by apply H. rewrite H0; reflexivity.
assert
これは、等式を調べてから書き直すことで、例の証明を解決します。もう 1 つの可能性は、eta リダクション ヘルパーを定義し (事前定義されたヘルパーが見つからない)、これらを使用することです。これはより冗長になりますが、より複雑なケースでは機能する可能性があります。
あなたが定義する場合
Lemma eta_reduce : forall (A B : Type) (f : A -> B),
(fun x => f x) = f.
intros. reflexivity.
Defined.
Tactic Notation "eta" constr(f) "in" ident(H) :=
pattern (fun x => f x) in H;
rewrite -> eta_reduce in H.
次のことができます。
intros A B P Q a H. eta P in H. eta Q in H. rewrite H; reflexivity.
(この表記法は大まかな大砲のようなもので、間違った場所で書き直す可能性があります。それに依存しないでください。異常が発生した場合は手動でpattern
andを実行してください。)rewrite