私は現在、容易に生成できる用語(この具体例では、tauto
)を使用して存在量限定子をインスタンス化する手法を作成しようとしています。私の最初の試み:特定の証明で実在をインスタンス化する
Ltac mytac :=
match goal with
| |- (exists (_ : ?X), _) => cut X;
[ let t := fresh "t" in intro t ; exists t; firstorder
| tauto ]
end.
それは私が使用したい
ここLemma obv2(X : Set) : exists f : X -> X, forall x, f x = x.
mytac. (* goal becomes t x = x for arbitrary t,x *)
のような目標では動作しませんが、この戦術は
Lemma obv1(X : Set) : exists f : X -> X, f = f.
mytac.
Qed.
のような単純な問題に取り組みますこの手法は、f
がtauto
であることを確信しているだけで、fun x => x
になります。したがって、特定の証明(識別関数である必要があります)に私の現在のスクリプトのgeneric t
だけではありません。どのように私はそのような戦術を書くことに行くことができますか?
ユニファイアを見つけるためのより強力な戦術があるかどうか知っていますか?ちょっと遊んだだけで、 'eexists' +' eauto/tauto'アプローチは、 ''補題two_ids(X:Set):exists fg:X - > X、for x、fのような複数のインスタンス化(x:y)、f:X→Y、forx x '、fx = f x'.'のように、必要なunifierは 'fun _ => y'です) – user181407