我想将目标从 更改S x = S y
为x = y
。就像inversion
,但为了目标而不是假设。
这样的策略似乎是合法的,因为当我们有 时x = y
,我们可以简单地使用rewrite
andreflexivity
来证明目标。
目前我总是发现自己assert (x = y)
用来引入一个新的子目标,但是写 whenx
和y
are 复杂的表达式很乏味。
对于任何构造函数或函数,该策略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