私はこの問題の簡単な例を与えるだけで、私は証明したいと思うと思いますforall f : nat -> bool, exists i j, i<>j /\ f i = f j.
明白なことはf 0, f 1, f 2,
の値をチェックし、それに応じて進んでください。しかし、単にdestruct (f 0)
と言うと、f 0
は下位には出現しないため、Coqは目標を変更しません。そのため、私は現在、f 0
の価値について何の情報も求めていません。理想的には、Coqが証人をコンテキストに追加して、それを追跡できるようにしたいと思います。文脈に帰納的な項の値を加えるCoctactact
私がこれらの問題を回避するために行ってきたことは、補助的な補題bool_destruct : forall b : bool, b = false \/ b = true
を証明することでした。さて、私がdestruct (bool_destruct (f 0))
と言うなら、Coqは希望するH
を文脈に追加します。当然ながら、これはそれぞれの誘導型に対してこのような補題を証明しなければならないときには面倒です。したがって、私は、これらの状況を処理する素晴らしい戦術があるのだろうかと思っています。
まさに私が探していたものです、ありがとう! – user181407