Ich möchte beweisen, dass zwei Fakultät Funktionen in Coq mit Induktion äquivalent sind.Coq: Beweisen Sie die Gleichheit von zwei Fakultät Funktionen mit Induktion
Der Basisfall n = 0
ist einfach, jedoch ist der Induktionsfall komplizierter. Ich sehe, dass ich fertig wäre, wenn ich (visit_fac_v2 n' (n * a))
zu n * (visit_fac_v2 n' a)
umschreiben könnte. Die Übersetzung dieser Idee in Coq verursacht jedoch Probleme.
Wie würde man das in Coq beweisen?
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.
Was ist "simpl" und "ring"? – Shuzheng
Taktiken. 'simpl 'berechnet im Ziel und' ring' löst die Gleichheit eines Rings. – gallais
Wäre es möglich, den Beweis nur mit "rewrite" und "apply" zu überarbeiten? – Shuzheng