aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Spiwack2014-07-23 15:16:18 +0200
committerArnaud Spiwack2014-07-23 17:43:18 +0200
commite143cffaeab1a294ca08a49443747c66bc963c29 (patch)
tree604425df88d5cb36916d562b67b9426c7d30bd0d
parent474197250baa3366385563bc5403a0871d106275 (diff)
When closing a proof, make sure that the types have their evar substituted.
When starting proofs with [start_dependent_proof], we may have initial goals with existential variables in their conclusion. They will be solved by the proof, but this information was not propagated in close proof, and the kernel failed on uninstanciated evars.
-rw-r--r--proofs/proof_global.ml6
1 files changed, 5 insertions, 1 deletions
diff --git a/proofs/proof_global.ml b/proofs/proof_global.ml
index 673f614e3a..bfbe3dd9ed 100644
--- a/proofs/proof_global.ml
+++ b/proofs/proof_global.ml
@@ -275,7 +275,11 @@ let close_proof ?feedback_id ~now fpl =
if poly || now then Future.force univs
else Proof.in_proof proof (fun x -> Evd.evar_universe_context x)
in
- let nf = Universes.nf_evars_and_universes_opt_subst (fun x -> None)
+ (* Because of dependent subgoals at the begining of proofs, we could
+ have existential variables in the initial types of goals, we need to
+ normalise them for the kernel. *)
+ let subst_evar k = Proof.in_proof proof (fun m -> Evd.existential_opt_value m k) in
+ let nf = Universes.nf_evars_and_universes_opt_subst subst_evar
(Evd.evar_universe_context_subst universes) in
let make_body =
if poly || now then