Je travaille actuellement avec Coq et je rencontre un problème que je ne sais pas comment résoudre.Comment prouver une définition de preuve dans Coq
Supposons que nous travaillions avec un type donné, je prendrai nat
pour l'exemple, et je veux utiliser une fonction f
qui pourrait échouer. Pour compenser l'échec, nous définissons f
comme étant de type nat -> option nat
.
Maintenant, j'ai une hypothèse donnée H: nat -> bool
en vertu de laquelle f ne manque pas, et je l'ai même prouvé le lemme
Lemma no_error_in_f : forall (n:nat), H n = true -> exists (u:nat), f n = Some u.
Je veux définir une fonction g: nat->nat
qui donne le résultat de f
sur n
si H n
est satisfait, et donne simplement n
sinon. Cette fonction devrait être bien définie, mais je ne sais pas comment la définir correctement. Si j'essaie quelque chose de naïf comme Definition g (n:nat) := if H n then f n else n.
, il y a un problème dans le système de frappe.
Est-ce que quelqu'un sait comment rassembler tous les éléments et dire au système que la définition est légale?
Désolé, j'ai fait une erreur, la deuxième erreur n'apparaît pas, parce que 'H n' est de type' bool' et mon lemme a comme prédicat 'H n = true'. Je vais éditer ça. Pour le premier problème, je pensais à quelque chose comme False_rec, ou quelque chose comme ça – tben