J'ai la question suivante, regardez dans le code.Correspondance de modèle en utilisant les informations des théorèmes
(* Suppose we have type A *)
Variable A: Type.
(* Also we have a function that returns the type (option A) *)
Definition f_opt x: option A := ...
(* Then, I can prove that this function always returns something: *)
Theorem always_some: forall x, exists y, f_opt x = Some y.
Admitted.
(* Or, equivalently: *)
Theorem always_not_none: forall x, f_opt x <> None.
Admitted.
Maintenant, je voudrais obtenir une version de f_opt
qui retourne toujours une valeur de type A
. Quelque chose comme ceci:
Definition f x: A :=
match f_opt x with
| Some y => y
end.
Mais je reçois l'erreur suivante:
Non exhaustive pattern-matching: no clause found for pattern
None
.
Je comprends que je dois faire une sorte de travail avec des types, mais je ne comprends pas ce que je dois faire exactement.
Pour vérifier si 'f' dépend d'axiomes supplémentaires, on peut utiliser la commande' Print Assumptions f.'. –