C'est une question un peu théorique. Nous pouvons définir fx
mais apparemment pas fx'
:Coq: Prouver une application
Function fx {A} (x:A) (f:A->Type) (g:Type->f x): f x := g (f x).
Definition fx' {A} (x:A) (f:A->Type): f x.
D'une certaine manière, cela a du sens, comme on ne peut pas prouver de la f
et x
que f
a été (ou sera) appliquée à x
. Mais nous pouvons appliquer f
-x
pour obtenir quelque chose du type Type
:
assert (h := f x).
Cela semble déroutante: on peut appliquer f
-x
mais encore ne peut pas obtenir un témoin y: f x
qu'il a fait.
La seule explication que je peux penser est la suivante: en tant que type, f x
est une application, en tant que terme, c'est juste un type. Nous ne pouvons pas déduire une application passée d'un type; De même, nous ne pouvons pas déduire une application future d'une fonction et son argument potentiel. Quant à l'application de soi, ce n'est pas une étape dans une preuve, nous ne pouvons donc pas en avoir le témoignage. Mais je devine juste. La question:
Est-il possible de définir fx'
? Si oui, comment? si non, pourquoi (s'il vous plaît donner une explication théorique)
'Fonction fx' n'est pas vraiment nécessaire ici,' Definition fx' fonctionnerait aussi. –
Oui (j'ai utilisé les deux pour montrer que les deux fonctionnent) – jaam