aboutsummaryrefslogtreecommitdiff
path: root/mathcomp/ssreflect/plugin
diff options
context:
space:
mode:
authorEnrico Tassi2015-12-03 09:59:11 +0100
committerEnrico Tassi2015-12-03 09:59:50 +0100
commitc570d3d8c64d2202b00de7583924515ac1ab54e2 (patch)
treec676d087e09249a4ff9f4d0b0e414a30b99454bf /mathcomp/ssreflect/plugin
parent4d0f111956307c5a134db701fe27f01f8ac50e9d (diff)
fix: autogen + abstract variables clash
Diffstat (limited to 'mathcomp/ssreflect/plugin')
-rw-r--r--mathcomp/ssreflect/plugin/trunk/ssreflect.ml414
-rw-r--r--mathcomp/ssreflect/plugin/v8.5/ssreflect.ml414
2 files changed, 18 insertions, 10 deletions
diff --git a/mathcomp/ssreflect/plugin/trunk/ssreflect.ml4 b/mathcomp/ssreflect/plugin/trunk/ssreflect.ml4
index e82272e..a80fc95 100644
--- a/mathcomp/ssreflect/plugin/trunk/ssreflect.ml4
+++ b/mathcomp/ssreflect/plugin/trunk/ssreflect.ml4
@@ -3304,7 +3304,7 @@ let pf_abs_ssrterm ?(resolve_typeclasses=false) ist gl t =
let sigma = Typeclasses.resolve_typeclasses ~fail:false env sigma in
sigma, Evarutil.nf_evar sigma ct in
let n, c, abstracted_away, ucst = pf_abs_evars gl t in
- List.fold_left Evd.remove sigma abstracted_away, pf_abs_cterm gl n c, ucst
+ List.fold_left Evd.remove sigma abstracted_away, pf_abs_cterm gl n c, ucst, n
let pf_interp_ty ?(resolve_typeclasses=false) ist gl ty =
let n_binders = ref 0 in
@@ -5544,7 +5544,7 @@ ARGUMENT EXTEND ssrcofixfwd TYPED AS ssrfixfwd PRINTED BY pr_ssrcofixfwd
END
let ssrposetac ist (id, (_, t)) gl =
- let sigma, t, ucst = pf_abs_ssrterm ist gl t in
+ let sigma, t, ucst, _ = pf_abs_ssrterm ist gl t in
posetac id t (pf_merge_uc ucst gl)
@@ -5702,7 +5702,7 @@ let unfold cl =
(List.map (fun c -> F.fCONST (fst (destConst c))) cl @ [F.fBETA; F.fIOTA])))
let havegentac ist t gl =
- let sigma, c, ucst = pf_abs_ssrterm ist gl t in
+ let sigma, c, ucst, _ = pf_abs_ssrterm ist gl t in
let gl = pf_merge_uc ucst gl in
let gl, cty = pf_type_of gl c in
apply_type (mkArrow cty (pf_concl gl)) [c] gl
@@ -5758,7 +5758,7 @@ let havetac ist
errorstrm (str"Suff have does not accept a proof term")
| FwdHave, false, true ->
let cty = combineCG cty hole (mkCArrow loc) mkRArrow in
- let _, t, uc = interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
+ let _,t,uc,_ = interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
let gl = pf_merge_uc uc gl in
let gl, ty = pf_type_of gl t in
let ctx, _ = decompose_prod_n 1 ty in
@@ -5774,8 +5774,12 @@ let havetac ist
let skols_args =
List.map (fun id -> examine_abstract (mkVar id) gl) skols in
let gl = List.fold_right unlock_abs skols_args gl in
- let sigma, t, uc =
+ let sigma, t, uc, n_evars =
interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
+ if skols <> [] && n_evars <> 0 then
+ Errors.error ("Automatic generalization of unresolved implicit "^
+ "arguments together with abstract variables is "^
+ "not supported");
let gl = re_sig (sig_it gl) (Evd.merge_universe_context sigma uc) in
let gs =
List.map (fun (_,a) ->
diff --git a/mathcomp/ssreflect/plugin/v8.5/ssreflect.ml4 b/mathcomp/ssreflect/plugin/v8.5/ssreflect.ml4
index d0a430a..20fd720 100644
--- a/mathcomp/ssreflect/plugin/v8.5/ssreflect.ml4
+++ b/mathcomp/ssreflect/plugin/v8.5/ssreflect.ml4
@@ -3298,7 +3298,7 @@ let pf_abs_ssrterm ?(resolve_typeclasses=false) ist gl t =
let sigma = Typeclasses.resolve_typeclasses ~fail:false env sigma in
sigma, Evarutil.nf_evar sigma ct in
let n, c, abstracted_away, ucst = pf_abs_evars gl t in
- List.fold_left Evd.remove sigma abstracted_away, pf_abs_cterm gl n c, ucst
+ List.fold_left Evd.remove sigma abstracted_away, pf_abs_cterm gl n c, ucst, n
let pf_interp_ty ?(resolve_typeclasses=false) ist gl ty =
let n_binders = ref 0 in
@@ -5538,7 +5538,7 @@ ARGUMENT EXTEND ssrcofixfwd TYPED AS ssrfixfwd PRINTED BY pr_ssrcofixfwd
END
let ssrposetac ist (id, (_, t)) gl =
- let sigma, t, ucst = pf_abs_ssrterm ist gl t in
+ let sigma, t, ucst, _ = pf_abs_ssrterm ist gl t in
posetac id t (pf_merge_uc ucst gl)
@@ -5696,7 +5696,7 @@ let unfold cl =
(List.map (fun c -> F.fCONST (fst (destConst c))) cl @ [F.fBETA; F.fIOTA])))
let havegentac ist t gl =
- let sigma, c, ucst = pf_abs_ssrterm ist gl t in
+ let sigma, c, ucst, _ = pf_abs_ssrterm ist gl t in
let gl = pf_merge_uc ucst gl in
let gl, cty = pf_type_of gl c in
apply_type (mkArrow cty (pf_concl gl)) [c] gl
@@ -5752,7 +5752,7 @@ let havetac ist
errorstrm (str"Suff have does not accept a proof term")
| FwdHave, false, true ->
let cty = combineCG cty hole (mkCArrow loc) mkRArrow in
- let _, t, uc = interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
+ let _,t,uc,_ = interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
let gl = pf_merge_uc uc gl in
let gl, ty = pf_type_of gl t in
let ctx, _ = decompose_prod_n 1 ty in
@@ -5768,8 +5768,12 @@ let havetac ist
let skols_args =
List.map (fun id -> examine_abstract (mkVar id) gl) skols in
let gl = List.fold_right unlock_abs skols_args gl in
- let sigma, t, uc =
+ let sigma, t, uc, n_evars =
interp gl false (combineCG ct cty (mkCCast loc) mkRCast) in
+ if skols <> [] && n_evars <> 0 then
+ Errors.error ("Automatic generalization of unresolved implicit "^
+ "arguments together with abstract variables is "^
+ "not supported");
let gl = re_sig (sig_it gl) (Evd.merge_universe_context sigma uc) in
let gs =
List.map (fun (_,a) ->