S x = S y
目標を からに変更したいx = y
。のようなものinversion
ですが、仮説ではなく目標のためです。
このような戦術は正当に思えます。なぜなら、x = y
があれば、単純に and を使用rewrite
しreflexivity
て目的を証明できるからです。
現在、私は常に新しいサブゴールを導入するために使用していることに気づきますが、複雑な表現である場合をassert (x = y)
記述するのは面倒です。x
y
タクティックapply f_equal.
は、任意のコンストラクターまたは関数に対して、必要なことを行います。
レマf_equal
は、どの関数f
に対しても常に を持っていることを示していますx = y -> f x = f y
。f x = f y
これにより、目標を からに減らすことができますx = y
。
Proposition myprop (x y: nat) (H : x = y) : S x = S y.
Proof.
apply f_equal. assumption.
Qed.
(このinjection
タクティックは、逆の含意を実装します — 一部の関数、特にコンストラクターに対しては、f x = f y -> x = y
.)
injection
戦術を見たいと思うかもしれません: http://coq.inria.fr/distrib/V8.4/refman/Reference-Manual011.html#@tactic126