ExistentialVariablesInEapply - coq/coq GitHub Wiki
eapply
introduces an existential variable which is denoted by a numbered question mark. You can let Coq itself fill the suitable candidate for the question mark later on in your proof. Alternatively you can explicitely ask Coq to instantiate the question mark with a term. For the latter you should use the instantiate
tactic:
instantiate (1:=H)
This will instantiate the rightmost existential variable with the term H
. You can instantiate more existential variables at once:
instantiate (1:=H1) (2:=H2)
This will instantiate the rightmost and the second from right existential variables by H1
and H2
respectively.
If you have existential variables in your goal (or context) you can see their local environment by
Show Existentials.
For instance if you have one existential variable in your goal, this will give an output like the following.
Existential 1 =
?87 : [
n : nat
H: 0 < n]
The terms that you pass to instantiate
for ?n
should appear in the environment of ?n
.
If existentials remain after discharging all proof obligations, you must instantiate the existentials before you will be able to finish the proof with Defined
or Qed
. You can do this with the Existential
command:
Existential 1:=term.
This assumes that you are able to provide an exact term for the existential.
If you want to use tactics to build this term, you should use the Unshelve
(or Grab Existential Variables
) command to transform these existential variables into goals.