我想證明使用歸納法的Coq中的兩個因子函數是等價的。Coq:證明使用歸納的兩個因子函數的相等性
基本案例n = 0
很容易,但是,歸納案例更加複雜。我明白了,如果我可以將(visit_fac_v2 n' (n * a))
重寫爲n * (visit_fac_v2 n' a)
,那我就完成了。但是,將這個想法轉化爲Coq會給我帶來麻煩。
如何在Coq上證明這一點?
Fixpoint fac_v1 (n : nat) : nat :=
match n with
| 0 => 1
| S n' => n * (fac_v1 n')
end.
Fixpoint visit_fac_v2 (n a : nat) : nat :=
match n with
| 0 => a
| S n' => visit_fac_v2 n' (n * a)
end.
Definition fac_v2 (n : nat) : nat :=
visit_fac_v2 n 1.
Proposition equivalence_of_fac_v1_and_fac_v2 :
forall n : nat,
fac_v1 n = fac_v2 n.
Proof.
Abort.
什麼是「簡單」和「響鈴」? – Shuzheng
戰術。 'simp'計算目標,'ring'解決環上的相等問題。 – gallais
只有使用「重寫」和「應用」才能重新證明證明嗎? – Shuzheng