Supposons le scénario particulier suivant.Pourquoi est-il impossible d'effectuer une induction sur un terme utilisé en conclusion?
Nous avons une définition de l'égalité:
Inductive eqwal {A : Type} (x : A) : A -> Prop :=
eqw_refl : eqwal x x.
Et nats Peano:
Inductive nawt : Prop :=
| zewro : nawt
| sawc : nawt -> nawt.
Nous définissons plus sur nats:
Fixpoint plaws (m n : nawt) : nawt :=
match m with
| zewro => n
| sawc m' => sawc (plaws m' n)
end.
Et maintenant, nous voulons prouver que zéro est neutre par rapport à sommateur:
Theorem neutral_r : forall n : nawt, eqwal (plaws n zewro) n.
Malheureusement, la dernière ligne des proofscripts suivants dit "Erreur: n est utilisé en guise de conclusion.".
Proof.
intros.
induction n. - this is the culprit
Il n'y a pas beaucoup d'erreur dans la documentation officielle et je suis un peu confus - pourquoi cette erreur se produit-elle?
Utilisation de la bibliothèque standard, je peux prouver le théorème facilement:
Theorem neutral_r : forall n : nat,
n + 0 = n.
Proof.
induction n; try reflexivity.
cbn; rewrite IHn; reflexivity.
Qed.
"Je déconseille généralement de définir un type de nombres naturels dans Prop" En effet! En fait, pedantically parlant, il n'est pas possible de définir le type de "nombres naturels" dans Prop. Vous ne serez pas en mesure de satisfaire qu'ils rencontrent les axiomes Peano, ainsi ils peuvent difficilement être appelés "nombres naturels". – ejgallego
Merci!J'ai toujours pensé que je pouvais facilement ignorer les différences entre Type et Prop et jusqu'ici, cela a fonctionné. Mais après une lecture attentive, il semble qu'ils soient fondamentalement différents et que les implications s'étendent bien au-delà de l'efficacité du calcul et de l'effacement des preuves. J'apprécie ta réponse. – AntlerM