J'essaie de comprendre la signification exacte du :
(deux points) dans les preuves de Coq/ssreflect en termes de Coq non-ssreflect. J'ai lu que cela a quelque chose à voir avec le déplacement de choses vers l'objectif (comme généraliser ??) et est l'opposé de =>
, qui déplacent les choses vers les hypothèses. Cependant, je trouve souvent cela confus parce que les preuves fonctionnent de toute façon avec ou sans le :
. Voici un exemple d'un tutoriel:quand le `:` (deux-points) est-il nécessaire dans ssreflect/Coq?
Lemma tmirror_leaf2 t : tmirror (tmirror t) = Leaf -> t = Leaf.
Proof.
move=> e.
by apply: (tmirror_leaf (tmirror_leaf e)).
Qed.
où,
tmirror_leaf
: forall t, tmirror t = Leaf -> t = Leaf
est un lemme qui dit que si le miroir d'un arbre est une feuille, puis l'arbre est une feuille.
Je ne comprends pas pourquoi nous avons besoin du :
ici et ne faisons pas simplement le Coq apply
. En fait, si je supprime le :
, cela fonctionne très bien. Pourquoi fait-il une différence?