diff options
| author | Enrico Tassi | 2015-12-03 09:59:11 +0100 |
|---|---|---|
| committer | Enrico Tassi | 2015-12-03 09:59:50 +0100 |
| commit | c570d3d8c64d2202b00de7583924515ac1ab54e2 (patch) | |
| tree | c676d087e09249a4ff9f4d0b0e414a30b99454bf /mathcomp/ssreflect/plugin | |
| parent | 4d0f111956307c5a134db701fe27f01f8ac50e9d (diff) | |
fix: autogen + abstract variables clash
Diffstat (limited to 'mathcomp/ssreflect/plugin')
| -rw-r--r-- | mathcomp/ssreflect/plugin/trunk/ssreflect.ml4 | 14 | ||||
| -rw-r--r-- | mathcomp/ssreflect/plugin/v8.5/ssreflect.ml4 | 14 |
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) -> |
