我想要將目標從S x = S y
更改爲x = y
。這就像inversion
,但爲了目標而不是假設。在Coq中,將目標從'S x = S y'更改爲'x = y'的策略
這種戰術似乎合法的,因爲當我們有x = y
,我們可以簡單地使用rewrite
和reflexivity
證明的目標。
目前我總是發現自己使用assert (x = y)
來引入一個新的子目標,但是當編寫x
和y
是一個複雜的表達時,它是很繁瑣的。
我想要將目標從S x = S y
更改爲x = y
。這就像inversion
,但爲了目標而不是假設。在Coq中,將目標從'S x = S y'更改爲'x = y'的策略
這種戰術似乎合法的,因爲當我們有x = y
,我們可以簡單地使用rewrite
和reflexivity
證明的目標。
目前我總是發現自己使用assert (x = y)
來引入一個新的子目標,但是當編寫x
和y
是一個複雜的表達時,它是很繁瑣的。
的戰術apply f_equal.
會做你想要什麼,對於任何構造或功能。
該lema 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
你也可以使用'f_equal'策略,它可以節省一些打字。 – hugomg