個別の平等を取り除くことができる場合は、を試してくださいset (name := val)
。unfold
の代わりにを使用rewrite
して、値を元の場所に戻します。
以上の平等が必要な場合、rewrite <-
これを行う組み込みの戦術はありません。ただし、手動で行うことも、戦術/表記法を作成することもできます。これを一緒に投げました。(注:私は専門家ではありません。これはもっと簡単にできるかもしれません。)
Tactic Notation "remember_as_eq" constr(expr) ident(vname) ident(eqname) :=
let v := fresh in
let HHelp := fresh in
set (v := expr);
(assert (HHelp : sigT (fun x => x = v)) by ( apply (existT _ v); reflexivity));
inversion HHelp as [vname eqname];
unfold v in *; clear v HHelp;
rewrite <- eqname in *.
remember_as_eq (2+2) four Heqfour
と同じ結果を得るには、asを使用しremember (2+2) as four
ます。
注:より多くのケースを処理するように更新されました。古いバージョンは、値と目標タイプのいくつかの組み合わせで失敗しました。これでは機能するが、これでは機能しない別のケースを見つけた場合は、コメントを残してくださいrewrite
。