aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2003-05-21 22:38:38 +0000
committerherbelin2003-05-21 22:38:38 +0000
commit4da48b01f420d8eccf6dcb2fea11bb4d9f8d8a86 (patch)
tree611c3f9b178632a5b610d2031dcc1609d5c58419
parentcb601622d7478ca2d61a4c186d992d532f141ace (diff)
Suppression définitive de lmatch et or_metanum dans tacinterp
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@4054 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--contrib/interface/pbp.ml2
-rw-r--r--contrib/interface/xlate.ml38
-rw-r--r--interp/constrintern.ml46
-rw-r--r--interp/constrintern.mli7
-rw-r--r--interp/genarg.ml1
-rw-r--r--interp/genarg.mli9
-rw-r--r--parsing/g_ltac.ml42
-rw-r--r--parsing/g_ltacnew.ml42
-rw-r--r--parsing/g_tactic.ml416
-rw-r--r--parsing/g_tacticnew.ml426
-rw-r--r--parsing/pcoq.mli2
-rw-r--r--parsing/pptactic.ml32
-rw-r--r--parsing/pptactic.mli1
-rw-r--r--parsing/q_coqast.ml425
-rw-r--r--pretyping/pretyping.ml108
-rw-r--r--pretyping/pretyping.mli11
-rw-r--r--proofs/proof_type.ml6
-rw-r--r--proofs/proof_type.mli6
-rw-r--r--proofs/tacexpr.ml50
-rw-r--r--tactics/elim.ml4
-rw-r--r--tactics/hiddentac.ml10
-rw-r--r--tactics/tacinterp.ml231
-rw-r--r--tactics/tacinterp.mli4
-rw-r--r--toplevel/metasyntax.ml4
-rw-r--r--translate/ppconstrnew.ml2
-rw-r--r--translate/pptacticnew.ml26
-rw-r--r--translate/ppvernacnew.ml4
27 files changed, 288 insertions, 387 deletions
diff --git a/contrib/interface/pbp.ml b/contrib/interface/pbp.ml
index 4abcb5f96f..74ecdaaa3d 100644
--- a/contrib/interface/pbp.ml
+++ b/contrib/interface/pbp.ml
@@ -177,7 +177,7 @@ let make_pbp_atomic_tactic = function
TacAtom
(zz, TacElim ((make_var hyp_name,ExplicitBindings bind),None))
| PbpTryClear l ->
- TacTry (TacAtom (zz, TacClear (List.map (fun s -> AN s) l)))
+ TacTry (TacAtom (zz, TacClear (List.map (fun s -> AI (zz,s)) l)))
| PbpSplit -> TacAtom (zz, TacSplit (false,NoBindings));;
let rec make_pbp_tactic = function
diff --git a/contrib/interface/xlate.ml b/contrib/interface/xlate.ml
index 9fbd1158f5..b83ce2d71e 100644
--- a/contrib/interface/xlate.ml
+++ b/contrib/interface/xlate.ml
@@ -200,16 +200,6 @@ let loc_qualid_to_ct_ID ref =
let int_of_meta n = int_of_string (string_of_id n)
let is_int_meta n = try let _ = int_of_meta n in true with _ -> false
-let qualid_or_meta_to_ct_ID = function
- | AN qid -> tac_qualid_to_ct_ID qid
- | MetaNum (_,n) when is_int_meta n -> CT_metac (CT_int (int_of_meta n))
- | MetaNum _ -> xlate_error "TODO: ident meta"
-
-let ident_or_meta_to_ct_ID = function
- | AN id -> xlate_ident id
- | MetaNum (_,n) when is_int_meta n -> CT_metac (CT_int (int_of_meta n))
- | MetaNum _ -> xlate_error "TODO: ident meta"
-
let xlate_qualid_list l = CT_id_list (List.map loc_qualid_to_ct_ID l)
let reference_to_ct_ID = function
@@ -394,6 +384,10 @@ let (xlate_ident_or_metaid:
AI (_, x) -> xlate_ident x
| MetaId(_, x) -> CT_metaid x;;
+let xlate_hyp = function
+ | AI (_,id) -> xlate_ident id
+ | MetaId _ -> xlate_error "MetaId should occur only in quotations"
+
let xlate_hyp_location =
function
| InHyp (AI (_,id)) -> CT_coerce_ID_to_ID_OR_INTYPE (xlate_ident id)
@@ -495,12 +489,12 @@ let strip_targ_intropatt =
let get_flag r =
let conv_flags, red_ids =
if r.rDelta then
- [CT_delta], CT_unfbut (List.map qualid_or_meta_to_ct_ID r.rConst)
+ [CT_delta], CT_unfbut (List.map tac_qualid_to_ct_ID r.rConst)
else
(if r.rConst = []
then (* probably useless: just for compatibility *) []
else [CT_delta]),
- CT_unf (List.map qualid_or_meta_to_ct_ID r.rConst) in
+ CT_unf (List.map tac_qualid_to_ct_ID r.rConst) in
let conv_flags = if r.rBeta then CT_beta::conv_flags else conv_flags in
let conv_flags = if r.rIota then CT_iota::conv_flags else conv_flags in
let conv_flags = if r.rZeta then CT_zeta::conv_flags else conv_flags in
@@ -560,7 +554,7 @@ let xlate_using = function
let xlate_one_unfold_block = function
(nums,qid) ->
CT_unfold_occ (CT_int_list (List.map (fun x -> CT_int x) nums),
- qualid_or_meta_to_ct_ID qid);;
+ tac_qualid_to_ct_ID qid);;
let xlate_lettac_clauses = function
(opt_l, l') ->
@@ -814,8 +808,8 @@ and xlate_tac =
CT_intro_after(CT_coerce_ID_to_ID_OPT (xlate_ident id1),xlate_ident id2)
| TacIntroMove (None, Some (_,id2)) ->
CT_intro_after(CT_coerce_NONE_to_ID_OPT CT_none, xlate_ident id2)
- | TacMove (true, (_,id1), (_,id2)) ->
- CT_move_after(xlate_ident id1, xlate_ident id2)
+ | TacMove (true, id1, id2) ->
+ CT_move_after(xlate_hyp id1, xlate_hyp id2)
| TacMove (false, id1, id2) -> xlate_error "Non dep Move is only internal"
| TacIntroPattern [] -> CT_intros (CT_intro_patt_list [])
| TacIntroPattern patt_list ->
@@ -961,16 +955,16 @@ and xlate_tac =
| TacDecompose ([],c) ->
xlate_error "Decompose : empty list of identifiers?"
| TacDecompose (id::l,c) ->
- let id' = qualid_or_meta_to_ct_ID id in
- let l' = List.map qualid_or_meta_to_ct_ID l in
+ let id' = tac_qualid_to_ct_ID id in
+ let l' = List.map tac_qualid_to_ct_ID l in
CT_decompose_list(CT_id_ne_list(id',l'),xlate_formula c)
| TacDecomposeAnd c -> CT_decompose_record (xlate_formula c)
| TacDecomposeOr c -> CT_decompose_sum(xlate_formula c)
| TacClear [] ->
xlate_error "Clear expects a non empty list of identifiers"
| TacClear (id::idl) ->
- let idl' = List.map ident_or_meta_to_ct_ID idl in
- CT_clear (CT_id_ne_list (ident_or_meta_to_ct_ID id, idl'))
+ let idl' = List.map xlate_hyp idl in
+ CT_clear (CT_id_ne_list (xlate_hyp id, idl'))
| (*For translating tactics/Inv.v *)
TacExtend (_,("SimpleInversion"|"Inversion"|"InversionClear" as s), [id])
->
@@ -1002,12 +996,10 @@ and xlate_tac =
CT_use_inversion (id, xlate_formula c,
CT_id_list (List.map xlate_ident idlist))
| TacExtend (_,"Omega", []) -> CT_omega
- | TacRename ((_,id1), (_,id2)) -> CT_rename(xlate_ident id1, xlate_ident id2)
+ | TacRename (id1, id2) -> CT_rename(xlate_hyp id1, xlate_hyp id2)
| TacClearBody([]) -> assert false
| TacClearBody(a::l) ->
- CT_clear_body
- (CT_id_ne_list
- (ident_or_meta_to_ct_ID a, List.map ident_or_meta_to_ct_ID l))
+ CT_clear_body (CT_id_ne_list (xlate_hyp a, List.map xlate_hyp l))
| TacDAuto (a, b) -> CT_dauto(xlate_int_opt a, xlate_int_opt b)
| TacNewDestruct(a,b,c) ->
CT_new_destruct
diff --git a/interp/constrintern.ml b/interp/constrintern.ml
index ce671515f9..cfb0c4fb19 100644
--- a/interp/constrintern.ml
+++ b/interp/constrintern.ml
@@ -471,14 +471,12 @@ let internalise isarity sigma env allow_soapp lvar c =
Array.of_list (List.map (intern false env) cl))
| CHole loc ->
RHole (loc, QuestionMark)
- | CPatVar (loc, n) when allow_soapp = None ->
+ | CPatVar (loc, n) when allow_soapp ->
RPatVar (loc, n)
- | CPatVar (loc, n) when Options.do_translate () ->
- RVar (loc, snd n)
+ | CPatVar (loc, (false,n)) when Options.do_translate () ->
+ RVar (loc, n)
| CPatVar (loc, (false,n as x)) ->
- if List.mem n (out_some allow_soapp) or Options.do_translate () then
- RPatVar (loc, x)
- else if List.mem n (fst (let (a,_,_) = lvar in a))
+ if List.mem n (fst (let (a,_,_) = lvar in a))
(* & !Options.v7 : ne pas exiger, Tauto est encore en V7 ! *) then
RVar (loc, n)
else
@@ -589,13 +587,13 @@ let interp_rawconstr_gen isarity sigma env impls allow_soapp ltacvar c =
allow_soapp (ltacvar,Environ.named_context env, []) c
let interp_rawconstr sigma env c =
- interp_rawconstr_gen false sigma env [] (Some []) ([],[]) c
+ interp_rawconstr_gen false sigma env [] false ([],[]) c
let interp_rawtype sigma env c =
- interp_rawconstr_gen true sigma env [] (Some []) ([],[]) c
+ interp_rawconstr_gen true sigma env [] false ([],[]) c
let interp_rawtype_with_implicits sigma env impls c =
- interp_rawconstr_gen true sigma env impls (Some []) ([],[]) c
+ interp_rawconstr_gen true sigma env impls false ([],[]) c
(*
(* The same as interp_rawconstr but with a list of variables which must not be
@@ -612,10 +610,10 @@ let interp_constr sigma env c =
understand sigma env (interp_rawconstr sigma env c)
let interp_openconstr sigma env c =
- understand_gen_tcc sigma env [] [] None (interp_rawconstr sigma env c)
+ understand_gen_tcc sigma env [] None (interp_rawconstr sigma env c)
let interp_casted_openconstr sigma env c typ =
- understand_gen_tcc sigma env [] [] (Some typ) (interp_rawconstr sigma env c)
+ understand_gen_tcc sigma env [] (Some typ) (interp_rawconstr sigma env c)
let interp_type sigma env c =
understand_type sigma env (interp_rawtype sigma env c)
@@ -650,25 +648,25 @@ type ltac_env =
(* Interprets a constr according to two lists *)
(* of instantiations (variables and metas) *)
(* Note: typ is retyped *)
-let interp_constr_gen sigma env (ltacvar,unbndltacvar) lmeta c exptyp =
- let c = interp_rawconstr_gen false sigma env [] (Some (List.map fst lmeta))
- (List.map fst ltacvar,unbndltacvar) c
- and rtype lst = retype_list sigma env lst in
- understand_gen sigma env (rtype ltacvar) (rtype lmeta) exptyp c;;
+let interp_constr_gen sigma env (ltacvars,unbndltacvars) c exptyp =
+ let c = interp_rawconstr_gen false sigma env [] false
+ (List.map fst ltacvars,unbndltacvars) c in
+ let typs = retype_list sigma env ltacvars in
+ understand_gen sigma env typs exptyp c
(*Interprets a casted constr according to two lists of instantiations
(variables and metas)*)
-let interp_openconstr_gen sigma env (ltacvar,unbndltacvar) lmeta c exptyp =
- let c = interp_rawconstr_gen false sigma env [] (Some (List.map fst lmeta))
- (List.map fst ltacvar,unbndltacvar) c
- and rtype lst = retype_list sigma env lst in
- understand_gen_tcc sigma env (rtype ltacvar) (rtype lmeta) exptyp c;;
+let interp_openconstr_gen sigma env (ltacvars,unbndltacvars) c exptyp =
+ let c = interp_rawconstr_gen false sigma env [] false
+ (List.map fst ltacvars,unbndltacvars) c in
+ let typs = retype_list sigma env ltacvars in
+ understand_gen_tcc sigma env typs exptyp c
let interp_casted_constr sigma env c typ =
- understand_gen sigma env [] [] (Some typ) (interp_rawconstr sigma env c)
+ understand_gen sigma env [] (Some typ) (interp_rawconstr sigma env c)
let interp_constrpattern_gen sigma env (ltacvar,unbndltacvar) c =
- let c = interp_rawconstr_gen false sigma env [] None
+ let c = interp_rawconstr_gen false sigma env [] true
(List.map fst ltacvar,unbndltacvar) c in
pattern_of_rawconstr c
@@ -680,7 +678,7 @@ let interp_aconstr vars a =
(* [vl] is intended to remember the scope of the free variables of [a] *)
let vl = List.map (fun id -> (id,ref None)) vars in
let c = for_grammar (internalise false Evd.empty (extract_ids env, [], [])
- (Some []) (([],[]),Environ.named_context env,vl)) a in
+ false (([],[]),Environ.named_context env,vl)) a in
(* Translate and check that [c] has all its free variables bound in [vars] *)
let a = aconstr_of_rawconstr vars c in
(* Returns [a] and the ordered list of variables with their scopes *)
diff --git a/interp/constrintern.mli b/interp/constrintern.mli
index c052dadabf..4f0c803bdc 100644
--- a/interp/constrintern.mli
+++ b/interp/constrintern.mli
@@ -44,7 +44,7 @@ type ltac_env =
(* Interprets global names, including syntactic defs and section variables *)
val interp_rawconstr : evar_map -> env -> constr_expr -> rawconstr
val interp_rawconstr_gen : bool -> evar_map -> env -> implicits_env ->
- patvar list option -> ltac_sign -> constr_expr -> rawconstr
+ bool -> ltac_sign -> constr_expr -> rawconstr
(*s Composing the translation with typing *)
val interp_constr : evar_map -> env -> constr_expr -> constr
@@ -70,14 +70,13 @@ val type_judgment_of_rawconstr :
(* Interprets a constr according to two lists of instantiations (variables and
metas), possibly casting it*)
val interp_constr_gen :
- evar_map -> env -> ltac_env -> patvar_map -> constr_expr ->
- constr option -> constr
+ evar_map -> env -> ltac_env -> constr_expr -> constr option -> constr
(* Interprets a constr according to two lists of instantiations (variables and
metas), possibly casting it, and turning unresolved evar into metas*)
val interp_openconstr_gen :
evar_map -> env -> ltac_env ->
- patvar_map -> constr_expr -> constr option -> evar_map * constr
+ constr_expr -> constr option -> evar_map * constr
(* Interprets constr patterns according to a list of instantiations
(variables)*)
diff --git a/interp/genarg.ml b/interp/genarg.ml
index 833da9e78e..8eb8d2a0d6 100644
--- a/interp/genarg.ml
+++ b/interp/genarg.ml
@@ -40,7 +40,6 @@ type argument_type =
| ExtraArgType of string
type 'a or_var = ArgArg of 'a | ArgVar of identifier located
-type 'a or_metanum = AN of 'a | MetaNum of patvar located
type 'a and_short_name = 'a * identifier located option
type rawconstr_and_expr = rawconstr * constr_expr option
diff --git a/interp/genarg.mli b/interp/genarg.mli
index 8aa82ecb24..6c4da92c76 100644
--- a/interp/genarg.mli
+++ b/interp/genarg.mli
@@ -17,7 +17,6 @@ open Topconstr
open Term
type 'a or_var = ArgArg of 'a | ArgVar of identifier located
-type 'a or_metanum = AN of 'a | MetaNum of patvar located
type 'a and_short_name = 'a * identifier located option
(* In globalize tactics, we need to keep the initial constr_expr to recompute*)
@@ -110,8 +109,8 @@ val rawwit_constr : (constr_expr,constr_expr,'ta) abstract_argument_type
val globwit_constr : (rawconstr_and_expr,rawconstr_and_expr,'ta) abstract_argument_type
val wit_constr : (constr,constr,'ta) abstract_argument_type
-val rawwit_constr_may_eval : ((constr_expr,reference or_metanum) may_eval,constr_expr,'ta) abstract_argument_type
-val globwit_constr_may_eval : ((rawconstr_and_expr,evaluable_global_reference and_short_name or_var or_metanum) may_eval,rawconstr_and_expr,'ta) abstract_argument_type
+val rawwit_constr_may_eval : ((constr_expr,reference) may_eval,constr_expr,'ta) abstract_argument_type
+val globwit_constr_may_eval : ((rawconstr_and_expr,evaluable_global_reference and_short_name or_var) may_eval,rawconstr_and_expr,'ta) abstract_argument_type
val wit_constr_may_eval : (constr,constr,'ta) abstract_argument_type
val rawwit_casted_open_constr : (open_constr_expr,constr_expr,'ta) abstract_argument_type
@@ -122,8 +121,8 @@ val rawwit_constr_with_bindings : (constr_expr with_bindings,constr_expr,'ta) ab
val globwit_constr_with_bindings : (rawconstr_and_expr with_bindings,rawconstr_and_expr,'ta) abstract_argument_type
val wit_constr_with_bindings : (constr with_bindings,constr,'ta) abstract_argument_type
-val rawwit_red_expr : ((constr_expr,reference or_metanum) red_expr_gen,constr_expr,'ta) abstract_argument_type
-val globwit_red_expr : ((rawconstr_and_expr,evaluable_global_reference and_short_name or_var or_metanum) red_expr_gen,rawconstr_and_expr,'ta) abstract_argument_type
+val rawwit_red_expr : ((constr_expr,reference) red_expr_gen,constr_expr,'ta) abstract_argument_type
+val globwit_red_expr : ((rawconstr_and_expr,evaluable_global_reference and_short_name or_var) red_expr_gen,rawconstr_and_expr,'ta) abstract_argument_type
val wit_red_expr : ((constr,evaluable_global_reference) red_expr_gen,constr,'ta) abstract_argument_type
(* TODO: transformer tactic en extra arg *)
diff --git a/parsing/g_ltac.ml4 b/parsing/g_ltac.ml4
index fb3850c900..57f47ca150 100644
--- a/parsing/g_ltac.ml4
+++ b/parsing/g_ltac.ml4
@@ -31,7 +31,7 @@ open Q
type let_clause_kind =
| LETTOPCLAUSE of Names.identifier * constr_expr
| LETCLAUSE of
- (Names.identifier Util.located * (constr_expr, Libnames.reference Genarg.or_metanum) may_eval option * raw_tactic_arg)
+ (Names.identifier Util.located * (constr_expr, Libnames.reference) may_eval option * raw_tactic_arg)
ifdef Quotify then
module Prelude = struct
diff --git a/parsing/g_ltacnew.ml4 b/parsing/g_ltacnew.ml4
index 834e978e48..2000765572 100644
--- a/parsing/g_ltacnew.ml4
+++ b/parsing/g_ltacnew.ml4
@@ -31,7 +31,7 @@ open Q
type let_clause_kind =
| LETTOPCLAUSE of Names.identifier * constr_expr
| LETCLAUSE of
- (Names.identifier Util.located * (constr_expr, Libnames.reference Genarg.or_metanum) may_eval option * raw_tactic_arg)
+ (Names.identifier Util.located * (constr_expr, Libnames.reference) may_eval option * raw_tactic_arg)
ifdef Quotify then
module Prelude = struct
diff --git a/parsing/g_tactic.ml4 b/parsing/g_tactic.ml4
index 62f2300a7b..225aa4728d 100644
--- a/parsing/g_tactic.ml4
+++ b/parsing/g_tactic.ml4
@@ -84,13 +84,13 @@ GEXTEND Gram
;
(* Either an hypothesis or a ltac ref (variable or pattern patvar) *)
id_or_ltac_ref:
- [ [ id = base_ident -> Genarg.AN id
- | "?"; n = natural -> Genarg.MetaNum (loc,Pattern.patvar_of_int n) ] ]
+ [ [ id = base_ident -> AI (loc,id)
+ | "?"; n = natural -> AI (loc,Pattern.patvar_of_int n) ] ]
;
(* Either a global ref or a ltac ref (variable or pattern patvar) *)
global_or_ltac_ref:
- [ [ qid = global -> AN qid
- | "?"; n = natural -> MetaNum (loc,Pattern.patvar_of_int n) ] ]
+ [ [ qid = global -> qid
+ | "?"; n = natural -> Libnames.Ident (loc,Pattern.patvar_of_int n) ] ]
;
(* An identifier or a quotation meta-variable *)
id_or_meta:
@@ -320,10 +320,10 @@ GEXTEND Gram
(* Context management *)
| IDENT "Clear"; l = LIST1 id_or_ltac_ref -> TacClear l
| IDENT "ClearBody"; l = LIST1 id_or_ltac_ref -> TacClearBody l
- | IDENT "Move"; id1 = identref; IDENT "after"; id2 = identref ->
- TacMove (true,id1,id2)
- | IDENT "Rename"; id1 = identref; IDENT "into"; id2 = identref ->
- TacRename (id1,id2)
+ | IDENT "Move"; id1 = id_or_ltac_ref; IDENT "after";
+ id2 = id_or_ltac_ref -> TacMove (true,id1,id2)
+ | IDENT "Rename"; id1 = id_or_ltac_ref; IDENT "into";
+ id2 = id_or_ltac_ref -> TacRename (id1,id2)
(* Constructors *)
| IDENT "Left"; bl = with_binding_list -> TacLeft bl
diff --git a/parsing/g_tacticnew.ml4 b/parsing/g_tacticnew.ml4
index b299a33680..40a292ca19 100644
--- a/parsing/g_tacticnew.ml4
+++ b/parsing/g_tacticnew.ml4
@@ -95,16 +95,6 @@ GEXTEND Gram
[ [ a0 = autoarg_depth; l = autoarg_adding;
a2 = autoarg_destructing; a3 = autoarg_usingTDB -> (a0,l,a2,a3) ] ]
;
- (* Either an hypothesis or a ltac ref (variable or pattern patvar) *)
- id_or_ltac_ref:
- [ [ id = base_ident -> AN id
-(* | "?"; n = natural -> MetaNum (loc,Pattern.patvar_of_int n) *) ] ]
- ;
- (* Either a global ref or a ltac ref (variable or pattern patvar) *)
- global_or_ltac_ref:
- [ [ qid = global -> AN qid
-(* | "?"; n = natural -> MetaNum (loc,Pattern.patvar_of_int n) *) ] ]
- ;
(* An identifier or a quotation meta-variable *)
id_or_meta:
[ [ id = identref -> AI id
@@ -186,15 +176,15 @@ GEXTEND Gram
[ [ "with"; bl = binding_list -> bl | -> NoBindings ] ]
;
unfold_occ:
- [ [ nl = LIST0 integer; c = global_or_ltac_ref -> (nl,c) ] ]
+ [ [ nl = LIST0 integer; c = global -> (nl,c) ] ]
;
red_flag:
[ [ IDENT "beta" -> FBeta
| IDENT "delta" -> FDeltaBut []
| IDENT "iota" -> FIota
| IDENT "zeta" -> FZeta
- | IDENT "delta"; "["; idl = LIST1 global_or_ltac_ref; "]" -> FConst idl
- | IDENT "delta"; "-"; "["; idl = LIST1 global_or_ltac_ref; "]" -> FDeltaBut idl
+ | IDENT "delta"; "["; idl = LIST1 global; "]" -> FConst idl
+ | IDENT "delta"; "-"; "["; idl = LIST1 global; "]" -> FDeltaBut idl
] ]
;
red_tactic:
@@ -310,7 +300,7 @@ GEXTEND Gram
ids = with_names -> TacNewDestruct (c,el,ids)
| IDENT "decompose"; IDENT "record" ; c = lconstr -> TacDecomposeAnd c
| IDENT "decompose"; IDENT "sum"; c = lconstr -> TacDecomposeOr c
- | IDENT "decompose"; "["; l = LIST1 global_or_ltac_ref; "]"; c = lconstr
+ | IDENT "decompose"; "["; l = LIST1 global; "]"; c = lconstr
-> TacDecompose (l,c)
(* Automation tactic *)
@@ -326,11 +316,11 @@ GEXTEND Gram
TacDAuto (n, p)
(* Context management *)
- | IDENT "clear"; l = LIST1 id_or_ltac_ref -> TacClear l
- | IDENT "clearbody"; l = LIST1 id_or_ltac_ref -> TacClearBody l
- | IDENT "move"; id1 = identref; IDENT "after"; id2 = identref ->
+ | IDENT "clear"; l = LIST1 id_or_meta -> TacClear l
+ | IDENT "clearbody"; l = LIST1 id_or_meta -> TacClearBody l
+ | IDENT "move"; id1 = id_or_meta; IDENT "after"; id2 = id_or_meta ->
TacMove (true,id1,id2)
- | IDENT "rename"; id1 = identref; IDENT "into"; id2 = identref ->
+ | IDENT "rename"; id1 = id_or_meta; IDENT "into"; id2 = id_or_meta ->
TacRename (id1,id2)
(* Constructors *)
diff --git a/parsing/pcoq.mli b/parsing/pcoq.mli
index 8558c2d2f3..7bf1d837d2 100644
--- a/parsing/pcoq.mli
+++ b/parsing/pcoq.mli
@@ -151,7 +151,7 @@ module Tactic :
open Rawterm
val castedopenconstr : constr_expr Gram.Entry.e
val constr_with_bindings : constr_expr with_bindings Gram.Entry.e
- val constrarg : (constr_expr,reference or_metanum) may_eval Gram.Entry.e
+ val constrarg : (constr_expr,reference) may_eval Gram.Entry.e
val quantified_hypothesis : quantified_hypothesis Gram.Entry.e
val int_or_var : int or_var Gram.Entry.e
val red_expr : raw_red_expr Gram.Entry.e
diff --git a/parsing/pptactic.ml b/parsing/pptactic.ml
index 0f26e390b8..3022fcbb19 100644
--- a/parsing/pptactic.ml
+++ b/parsing/pptactic.ml
@@ -83,10 +83,6 @@ let pi3 (_,_,a) = a
let pr_arg pr x = spc () ++ pr x
-let pr_or_metanum pr = function
- | AN x -> pr x
- | MetaNum (_,n) -> str "?" ++ pr_patvar n
-
let pr_or_var pr = function
| ArgArg x -> pr x
| ArgVar (_,s) -> pr_id s
@@ -249,13 +245,13 @@ let rec pr_raw_generic prc prlc prtac x =
| SortArgType -> pr_arg pr_sort (out_gen rawwit_sort x)
| ConstrArgType -> pr_arg prc (out_gen rawwit_constr x)
| ConstrMayEvalArgType ->
- pr_arg (pr_may_eval prc (pr_or_metanum pr_reference))
+ pr_arg (pr_may_eval prc pr_reference)
(out_gen rawwit_constr_may_eval x)
| QuantHypArgType ->
pr_arg pr_quantified_hypothesis (out_gen rawwit_quant_hyp x)
| RedExprArgType ->
pr_arg (pr_red_expr
- (prc,pr_or_metanum pr_reference)) (out_gen rawwit_red_expr x)
+ (prc,pr_reference)) (out_gen rawwit_red_expr x)
| TacticArgType -> pr_arg prtac (out_gen rawwit_tactic x)
| CastedOpenConstrArgType ->
pr_arg prc (out_gen rawwit_casted_open_constr x)
@@ -292,12 +288,12 @@ let rec pr_glob_generic prc prlc prtac x =
| ConstrArgType -> pr_arg prc (out_gen globwit_constr x)
| ConstrMayEvalArgType ->
pr_arg (pr_may_eval prc
- (pr_or_metanum (pr_or_var (pr_and_short_name pr_evaluable_reference)))) (out_gen globwit_constr_may_eval x)
+ (pr_or_var (pr_and_short_name pr_evaluable_reference))) (out_gen globwit_constr_may_eval x)
| QuantHypArgType ->
pr_arg pr_quantified_hypothesis (out_gen globwit_quant_hyp x)
| RedExprArgType ->
pr_arg (pr_red_expr
- (prc,pr_or_metanum (pr_or_var (pr_and_short_name pr_evaluable_reference)))) (out_gen globwit_red_expr x)
+ (prc,pr_or_var (pr_and_short_name pr_evaluable_reference))) (out_gen globwit_red_expr x)
| TacticArgType -> pr_arg prtac (out_gen globwit_tactic x)
| CastedOpenConstrArgType ->
pr_arg prc (out_gen globwit_casted_open_constr x)
@@ -481,7 +477,7 @@ and pr_atom1 = function
hov 1 (str "Decompose Sum" ++ pr_arg pr_constr c)
| TacDecompose (l,c) ->
hov 1 (str "Decompose" ++ spc () ++
- hov 0 (str "[" ++ prlist_with_sep spc (pr_or_metanum pr_ind) l
+ hov 0 (str "[" ++ prlist_with_sep spc pr_ind l
++ str "]"))
| TacSpecialize (n,c) ->
hov 1 (str "Specialize" ++ pr_opt int n ++ pr_with_bindings c)
@@ -506,19 +502,19 @@ and pr_atom1 = function
(* Context management *)
| TacClear l ->
- hov 1 (str "Clear" ++ spc () ++ prlist_with_sep spc (pr_or_metanum pr_id) l)
+ hov 1 (str "Clear" ++ spc () ++ prlist_with_sep spc pr_ident l)
| TacClearBody l ->
- hov 1 (str "Clear" ++ spc () ++ prlist_with_sep spc (pr_or_metanum pr_id) l)
- | TacMove (b,(_,id1),(_,id2)) ->
+ hov 1 (str "Clear" ++ spc () ++ prlist_with_sep spc pr_ident l)
+ | TacMove (b,id1,id2) ->
(* Rem: only b = true is available for users *)
assert b;
hov 1
- (str "Move" ++ brk (1,1) ++ pr_id id1 ++ spc () ++
- str "after" ++ brk (1,1) ++ pr_id id2)
- | TacRename ((_,id1),(_,id2)) ->
+ (str "Move" ++ brk (1,1) ++ pr_ident id1 ++ spc () ++
+ str "after" ++ brk (1,1) ++ pr_ident id2)
+ | TacRename (id1,id2) ->
hov 1
- (str "Rename" ++ brk (1,1) ++ pr_id id1 ++ spc () ++
- str "into" ++ brk (1,1) ++ pr_id id2)
+ (str "Rename" ++ brk (1,1) ++ pr_ident id1 ++ spc () ++
+ str "into" ++ brk (1,1) ++ pr_ident id2)
(* Constructors *)
| TacLeft l -> hov 1 (str "Left" ++ pr_bindings l)
@@ -679,7 +675,7 @@ let rec glob_printers =
pr_glob_tactic0,
pr_and_constr_expr Ppconstr.pr_rawconstr,
Printer.pr_pattern,
- pr_or_metanum (pr_or_var (pr_and_short_name pr_evaluable_reference)),
+ pr_or_var (pr_and_short_name pr_evaluable_reference),
pr_or_var pr_inductive,
pr_or_var (pr_located pr_ltac_constant),
pr_located pr_id,
diff --git a/parsing/pptactic.mli b/parsing/pptactic.mli
index 728c8f8cd3..bd06d5e1e2 100644
--- a/parsing/pptactic.mli
+++ b/parsing/pptactic.mli
@@ -17,7 +17,6 @@ open Topconstr
open Rawterm
val pr_or_var : ('a -> std_ppcmds) -> 'a or_var -> std_ppcmds
-val pr_or_metanum : ('a -> std_ppcmds) -> 'a or_metanum -> std_ppcmds
val pr_or_metaid : ('a -> std_ppcmds) -> 'a or_metaid -> std_ppcmds
val pr_and_short_name : ('a -> std_ppcmds) -> 'a and_short_name -> std_ppcmds
val pr_located : ('a -> std_ppcmds) -> 'a Util.located -> std_ppcmds
diff --git a/parsing/q_coqast.ml4 b/parsing/q_coqast.ml4
index bb0164962c..a424655727 100644
--- a/parsing/q_coqast.ml4
+++ b/parsing/q_coqast.ml4
@@ -144,11 +144,6 @@ let mlexpr_of_intro_pattern = function
let mlexpr_of_ident_option = mlexpr_of_option (mlexpr_of_ident)
-let mlexpr_of_or_metanum f = function
- | Genarg.AN a -> <:expr< Genarg.AN $f a$ >>
- | Genarg.MetaNum (_,n) ->
- <:expr< Genarg.MetaNum $dloc$ $mlexpr_of_ident n$ >>
-
let mlexpr_of_or_metaid f = function
| Tacexpr.AI a -> <:expr< Tacexpr.AI $f a$ >>
| Tacexpr.MetaId (_,id) -> <:expr< Tacexpr.AI $anti loc id$ >>
@@ -161,11 +156,11 @@ let mlexpr_of_located f (loc,x) = <:expr< ($dloc$, $f x$) >>
let mlexpr_of_loc loc = <:expr< $dloc$ >>
+let mlexpr_of_hyp = mlexpr_of_or_metaid (mlexpr_of_located mlexpr_of_ident)
+
let mlexpr_of_hyp_location = function
- | Tacexpr.InHyp id ->
- <:expr< Tacexpr.InHyp $mlexpr_of_or_metaid (mlexpr_of_located mlexpr_of_ident) id$ >>
- | Tacexpr.InHypType id ->
- <:expr< Tacexpr.InHypType $mlexpr_of_or_metaid (mlexpr_of_located mlexpr_of_ident) id$ >>
+ | Tacexpr.InHyp id -> <:expr< Tacexpr.InHyp $mlexpr_of_hyp id$ >>
+ | Tacexpr.InHypType id -> <:expr< Tacexpr.InHypType $mlexpr_of_hyp id$ >>
(*
let mlexpr_of_red_mode = function
@@ -185,7 +180,7 @@ let mlexpr_of_red_flags {
Rawterm.rIota = $mlexpr_of_bool bi$;
Rawterm.rZeta = $mlexpr_of_bool bz$;
Rawterm.rDelta = $mlexpr_of_bool bd$;
- Rawterm.rConst = $mlexpr_of_list (mlexpr_of_or_metanum mlexpr_of_reference) l$
+ Rawterm.rConst = $mlexpr_of_list mlexpr_of_reference l$
} >>
let rec mlexpr_of_constr = function
@@ -221,7 +216,7 @@ let mlexpr_of_red_expr = function
<:expr< Rawterm.Lazy $mlexpr_of_red_flags f$ >>
| Rawterm.Unfold l ->
let f1 = mlexpr_of_list mlexpr_of_int in
- let f2 = mlexpr_of_or_metanum mlexpr_of_reference in
+ let f2 = mlexpr_of_reference in
let f = mlexpr_of_list (mlexpr_of_pair f1 f2) in
<:expr< Rawterm.Unfold $f l$ >>
| Rawterm.Fold l ->
@@ -392,15 +387,15 @@ let rec mlexpr_of_atomic_tactic = function
(* Context management *)
| Tacexpr.TacClear l ->
- let l = mlexpr_of_list (mlexpr_of_or_metanum mlexpr_of_ident) l in
+ let l = mlexpr_of_list (mlexpr_of_hyp) l in
<:expr< Tacexpr.TacClear $l$ >>
| Tacexpr.TacClearBody l ->
- let l = mlexpr_of_list (mlexpr_of_or_metanum mlexpr_of_ident) l in
+ let l = mlexpr_of_list (mlexpr_of_hyp) l in
<:expr< Tacexpr.TacClearBody $l$ >>
| Tacexpr.TacMove (dep,id1,id2) ->
<:expr< Tacexpr.TacMove $mlexpr_of_bool dep$
- $mlexpr_of_located mlexpr_of_ident id1$
- $mlexpr_of_located mlexpr_of_ident id2$ >>
+ $mlexpr_of_hyp id1$
+ $mlexpr_of_hyp id2$ >>
(* Constructors *)
| Tacexpr.TacLeft l ->
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml
index 0e76558f1f..0b665d4b29 100644
--- a/pretyping/pretyping.ml
+++ b/pretyping/pretyping.ml
@@ -203,7 +203,7 @@ let pretype_sort = function
(* [pretype tycon env isevars lvar lmeta cstr] attempts to type [cstr] *)
(* in environment [env], with existential variables [(evars_of isevars)] and *)
(* the type constraint tycon *)
-let rec pretype tycon env isevars lvar lmeta = function
+let rec pretype tycon env isevars lvar = function
| RRef (loc,ref) ->
inh_conv_coerce_to_tycon loc env isevars
@@ -224,17 +224,8 @@ let rec pretype tycon env isevars lvar lmeta = function
let j = (Retyping.get_judgment_of env (evars_of isevars) c) in
inh_conv_coerce_to_tycon loc env isevars j tycon
- | RPatVar (loc,(someta,n)) ->
- assert (not someta);
- let j =
- try
- List.assoc n (lmeta@lvar)
- with
- Not_found ->
- user_err_loc
- (loc,"pretype",
- str "Metavariable " ++ pr_patvar n ++ str " is unbound")
- in inh_conv_coerce_to_tycon loc env isevars j tycon
+ | RPatVar (loc,(someta,n)) ->
+ anomaly "Found a pattern variable in a rawterm to type"
| RHole (loc,k) ->
if !compter then nbimpl:=!nbimpl+1;
@@ -245,7 +236,7 @@ let rec pretype tycon env isevars lvar lmeta = function
| RRec (loc,fixkind,names,lar,vdef) ->
let larj =
- Array.map (pretype_type empty_valcon env isevars lvar lmeta) lar in
+ Array.map (pretype_type empty_valcon env isevars lvar) lar in
let lara = Array.map (fun a -> a.utj_val) larj in
let nbfix = Array.length lar in
let names = Array.map (fun id -> Name id) names in
@@ -255,7 +246,7 @@ let rec pretype tycon env isevars lvar lmeta = function
(fun i def -> (* we lift nbfix times the type in tycon, because of
* the nbfix variables pushed to newenv *)
pretype (mk_tycon (lift nbfix (larj.(i).utj_val)))
- newenv isevars lvar lmeta def)
+ newenv isevars lvar def)
vdef in
evar_type_fixpoint loc env isevars names lara vdefj;
let fixj =
@@ -274,7 +265,7 @@ let rec pretype tycon env isevars lvar lmeta = function
inh_conv_coerce_to_tycon loc env isevars (pretype_sort s) tycon
| RApp (loc,f,args) ->
- let fj = pretype empty_tycon env isevars lvar lmeta f in
+ let fj = pretype empty_tycon env isevars lvar f in
let floc = loc_of_rawconstr f in
let rec apply_rec env n resj = function
| [] -> resj
@@ -285,14 +276,14 @@ let rec pretype tycon env isevars lvar lmeta = function
whd_betadeltaiota env (evars_of isevars) resj.uj_type in
match kind_of_term resty with
| Prod (na,c1,c2) ->
- let hj = pretype (mk_tycon c1) env isevars lvar lmeta c in
+ let hj = pretype (mk_tycon c1) env isevars lvar c in
let newresj =
{ uj_val = applist (j_val resj, [j_val hj]);
uj_type = subst1 hj.uj_val c2 } in
apply_rec env (n+1) newresj rest
| _ ->
- let hj = pretype empty_tycon env isevars lvar lmeta c in
+ let hj = pretype empty_tycon env isevars lvar c in
error_cant_apply_not_functional_loc
(join_loc floc argloc) env (evars_of isevars)
resj [hj]
@@ -301,7 +292,7 @@ let rec pretype tycon env isevars lvar lmeta = function
(*
let apply_one_arg (floc,tycon,jl) c =
let (dom,rng) = split_tycon floc env isevars tycon in
- let cj = pretype dom env isevars lvar lmeta c in
+ let cj = pretype dom env isevars lvar c in
let rng_tycon = option_app (subst1 cj.uj_val) rng in
let argloc = loc_of_rawconstr c in
(join_loc floc argloc,rng_tycon,(argloc,cj)::jl) in
@@ -315,33 +306,33 @@ let rec pretype tycon env isevars lvar lmeta = function
| RLambda(loc,name,c1,c2) ->
let (dom,rng) = split_tycon loc env isevars tycon in
let dom_valcon = valcon_of_tycon dom in
- let j = pretype_type dom_valcon env isevars lvar lmeta c1 in
+ let j = pretype_type dom_valcon env isevars lvar c1 in
let var = (name,None,j.utj_val) in
- let j' = pretype rng (push_rel var env) isevars lvar lmeta c2 in
+ let j' = pretype rng (push_rel var env) isevars lvar c2 in
judge_of_abstraction env name j j'
| RProd(loc,name,c1,c2) ->
- let j = pretype_type empty_valcon env isevars lvar lmeta c1 in
+ let j = pretype_type empty_valcon env isevars lvar c1 in
let var = (name,j.utj_val) in
let env' = push_rel_assum var env in
- let j' = pretype_type empty_valcon env' isevars lvar lmeta c2 in
+ let j' = pretype_type empty_valcon env' isevars lvar c2 in
let resj =
try judge_of_product env name j j'
with TypeError _ as e -> Stdpp.raise_with_loc loc e in
inh_conv_coerce_to_tycon loc env isevars resj tycon
| RLetIn(loc,name,c1,c2) ->
- let j = pretype empty_tycon env isevars lvar lmeta c1 in
+ let j = pretype empty_tycon env isevars lvar c1 in
let t = Evarutil.refresh_universes j.uj_type in
let var = (name,Some j.uj_val,t) in
let tycon = option_app (lift 1) tycon in
- let j' = pretype tycon (push_rel var env) isevars lvar lmeta c2 in
+ let j' = pretype tycon (push_rel var env) isevars lvar c2 in
{ uj_val = mkLetIn (name, j.uj_val, t, j'.uj_val) ;
uj_type = type_app (subst1 j.uj_val) j'.uj_type }
(* Special Case for let constructions to avoid exponential behavior *)
| ROrderedCase (loc,st,po,c,[|f|]) when st <> MatchStyle ->
- let cj = pretype empty_tycon env isevars lvar lmeta c in
+ let cj = pretype empty_tycon env isevars lvar c in
let (IndType (indf,realargs) as indt) =
try find_rectype env (evars_of isevars) cj.uj_type
with Not_found ->
@@ -350,7 +341,7 @@ let rec pretype tycon env isevars lvar lmeta = function
in
(match po with
| Some p ->
- let pj = pretype empty_tycon env isevars lvar lmeta p in
+ let pj = pretype empty_tycon env isevars lvar p in
let dep = is_dependent_elimination env pj.uj_type indf in
let ar =
arity_of_case_predicate env indf dep (Type (new_univ())) in
@@ -366,7 +357,7 @@ let rec pretype tycon env isevars lvar lmeta = function
loc env (evars_of isevars) cj (Array.length bty);
let fj =
let tyc = bty.(0) in
- pretype (mk_tycon tyc) env isevars lvar lmeta f
+ pretype (mk_tycon tyc) env isevars lvar f
in
let fv = j_val fj in
let ft = fj.uj_type in
@@ -385,7 +376,7 @@ let rec pretype tycon env isevars lvar lmeta = function
error_number_branches_loc loc env (evars_of isevars)
cj (Array.length expbr);
let expti = expbr.(0) in
- let fj = pretype (mk_tycon expti) env isevars lvar lmeta f in
+ let fj = pretype (mk_tycon expti) env isevars lvar f in
let use_constraint () =
(* get type information from constraint *)
(* warning: if the constraint comes from an evar type, it *)
@@ -425,7 +416,7 @@ let rec pretype tycon env isevars lvar lmeta = function
in
let fj =
if ok then fj
- else pretype (mk_tycon bty.(0)) env isevars lvar lmeta f
+ else pretype (mk_tycon bty.(0)) env isevars lvar f
in
let fv = fj.uj_val in
let ft = fj.uj_type in
@@ -438,7 +429,7 @@ let rec pretype tycon env isevars lvar lmeta = function
| ROrderedCase (loc,st,po,c,lf) ->
let isrec = (st = MatchStyle) in
- let cj = pretype empty_tycon env isevars lvar lmeta c in
+ let cj = pretype empty_tycon env isevars lvar c in
let (IndType (indf,realargs) as indt) =
try find_rectype env (evars_of isevars) cj.uj_type
with Not_found ->
@@ -446,7 +437,7 @@ let rec pretype tycon env isevars lvar lmeta = function
error_case_not_inductive_loc cloc env (evars_of isevars) cj in
let (dep,pj) = match po with
| Some p ->
- let pj = pretype empty_tycon env isevars lvar lmeta p in
+ let pj = pretype empty_tycon env isevars lvar p in
let dep = is_dependent_elimination env pj.uj_type indf in
let ar =
arity_of_case_predicate env indf dep (Type (new_univ())) in
@@ -472,7 +463,7 @@ let rec pretype tycon env isevars lvar lmeta = function
try
let expti = expbr.(i) in
let fj =
- pretype (mk_tycon expti) env isevars lvar lmeta lf.(i) in
+ pretype (mk_tycon expti) env isevars lvar lf.(i) in
let pred =
Cases.pred_case_ml
env (evars_of isevars) isrec indt (i,fj.uj_type) in
@@ -497,7 +488,7 @@ let rec pretype tycon env isevars lvar lmeta = function
else
let lfj =
array_map2
- (fun tyc f -> pretype (mk_tycon tyc) env isevars lvar lmeta f) bty
+ (fun tyc f -> pretype (mk_tycon tyc) env isevars lvar f) bty
lf in
let lfv = Array.map j_val lfj in
let lft = Array.map (fun j -> j.uj_type) lfj in
@@ -517,12 +508,12 @@ let rec pretype tycon env isevars lvar lmeta = function
| RCases (loc,po,tml,eqns) ->
Cases.compile_cases loc
- ((fun vtyc env -> pretype vtyc env isevars lvar lmeta),isevars)
+ ((fun vtyc env -> pretype vtyc env isevars lvar),isevars)
tycon env (* loc *) (po,tml,eqns)
| RCast(loc,c,t) ->
- let tj = pretype_type empty_tycon env isevars lvar lmeta t in
- let cj = pretype (mk_tycon tj.utj_val) env isevars lvar lmeta c in
+ let tj = pretype_type empty_tycon env isevars lvar t in
+ let cj = pretype (mk_tycon tj.utj_val) env isevars lvar c in
(* User Casts are for helping pretyping, experimentally not to be kept*)
(* ... except for Correctness *)
let v = mkCast (cj.uj_val, tj.utj_val) in
@@ -538,8 +529,8 @@ let rec pretype tycon env isevars lvar lmeta = function
else
user_err_loc (loc,"pretype",(str "Not a constr tagged Dynamic"))
-(* [pretype_type valcon env isevars lvar lmeta c] coerces [c] into a type *)
-and pretype_type valcon env isevars lvar lmeta = function
+(* [pretype_type valcon env isevars lvar c] coerces [c] into a type *)
+and pretype_type valcon env isevars lvar = function
| RHole loc ->
if !compter then nbimpl:=!nbimpl+1;
(match valcon with
@@ -551,7 +542,7 @@ and pretype_type valcon env isevars lvar lmeta = function
{ utj_val = new_isevar isevars env loc (mkSort s);
utj_type = s})
| c ->
- let j = pretype empty_tycon env isevars lvar lmeta c in
+ let j = pretype empty_tycon env isevars lvar c in
let tj = inh_coerce_to_sort env isevars j in
match valcon with
| None -> tj
@@ -562,12 +553,12 @@ and pretype_type valcon env isevars lvar lmeta = function
(loc_of_rawconstr c) env (evars_of isevars) tj.utj_val v
-let unsafe_infer tycon isevars env lvar lmeta constr =
- let j = pretype tycon env isevars lvar lmeta constr in
+let unsafe_infer tycon isevars env lvar constr =
+ let j = pretype tycon env isevars lvar constr in
j_nf_evar (evars_of isevars) j
-let unsafe_infer_type valcon isevars env lvar lmeta constr =
- let tj = pretype_type valcon env isevars lvar lmeta constr in
+let unsafe_infer_type valcon isevars env lvar constr =
+ let tj = pretype_type valcon env isevars lvar constr in
tj_nf_evar (evars_of isevars) tj
(* If fail_evar is false, [process_evars] builds a meta_map with the
@@ -601,54 +592,53 @@ let check_evars fail_evar env initial_sigma isevars c =
(* constr with holes *)
type open_constr = evar_map * constr
-let ise_resolve_casted_gen fail_evar sigma env lvar lmeta typ c =
+let ise_resolve_casted_gen fail_evar sigma env lvar typ c =
let isevars = create_evar_defs sigma in
- let j = unsafe_infer (mk_tycon typ) isevars env lvar lmeta c in
+ let j = unsafe_infer (mk_tycon typ) isevars env lvar c in
check_evars fail_evar env sigma isevars (mkCast(j.uj_val,j.uj_type));
(evars_of isevars, j)
let ise_resolve_casted sigma env typ c =
- ise_resolve_casted_gen true sigma env [] [] typ c
+ ise_resolve_casted_gen true sigma env [] typ c
(* Raw calls to the unsafe inference machine: boolean says if we must fail
on unresolved evars, or replace them by Metas; the unsafe_judgment list
allows us to extend env with some bindings *)
-let ise_infer_gen fail_evar sigma env lvar lmeta exptyp c =
+let ise_infer_gen fail_evar sigma env lvar exptyp c =
let tycon = match exptyp with None -> empty_tycon | Some t -> mk_tycon t in
let isevars = create_evar_defs sigma in
- let j = unsafe_infer tycon isevars env lvar lmeta c in
+ let j = unsafe_infer tycon isevars env lvar c in
check_evars fail_evar env sigma isevars (mkCast(j.uj_val,j.uj_type));
(evars_of isevars, j)
-let ise_infer_type_gen fail_evar sigma env lvar lmeta c =
+let ise_infer_type_gen fail_evar sigma env lvar c =
let isevars = create_evar_defs sigma in
- let tj = unsafe_infer_type empty_valcon isevars env lvar lmeta c in
+ let tj = unsafe_infer_type empty_valcon isevars env lvar c in
check_evars fail_evar env sigma isevars tj.utj_val;
(evars_of isevars, tj)
-type meta_map = (patvar * unsafe_judgment) list
type var_map = (identifier * unsafe_judgment) list
let understand_judgment sigma env c =
- snd (ise_infer_gen true sigma env [] [] None c)
+ snd (ise_infer_gen true sigma env [] None c)
let understand_type_judgment sigma env c =
- snd (ise_infer_type_gen true sigma env [] [] c)
+ snd (ise_infer_type_gen true sigma env [] c)
let understand sigma env c =
- let _, c = ise_infer_gen true sigma env [] [] None c in
+ let _, c = ise_infer_gen true sigma env [] None c in
c.uj_val
let understand_type sigma env c =
- let _,c = ise_infer_type_gen true sigma env [] [] c in
+ let _,c = ise_infer_type_gen true sigma env [] c in
c.utj_val
-let understand_gen sigma env lvar lmeta ~expected_type:exptyp c =
- let _, c = ise_infer_gen true sigma env lvar lmeta exptyp c in
+let understand_gen sigma env lvar ~expected_type:exptyp c =
+ let _, c = ise_infer_gen true sigma env lvar exptyp c in
c.uj_val
-let understand_gen_tcc sigma env lvar lmeta exptyp c =
- let metamap, c = ise_infer_gen false sigma env lvar lmeta exptyp c in
+let understand_gen_tcc sigma env lvar exptyp c =
+ let metamap, c = ise_infer_gen false sigma env lvar exptyp c in
metamap, c.uj_val
let interp_sort = function
diff --git a/pretyping/pretyping.mli b/pretyping/pretyping.mli
index e6dc58896c..7558de0ff2 100644
--- a/pretyping/pretyping.mli
+++ b/pretyping/pretyping.mli
@@ -18,7 +18,6 @@ open Rawterm
open Evarutil
(*i*)
-type meta_map = (patvar * unsafe_judgment) list
type var_map = (identifier * unsafe_judgment) list
(* constr with holes *)
@@ -28,7 +27,7 @@ type open_constr = evar_map * constr
(* Generic call to the interpreter from rawconstr to constr, failing
unresolved holes in the rawterm cannot be instantiated.
- In [understand_gen sigma env varmap metamap typopt raw],
+ In [understand_gen sigma env varmap typopt raw],
sigma : initial set of existential variables (typically dependent subgoals)
varmap : partial subtitution of variables (used for the tactic language)
@@ -36,7 +35,7 @@ type open_constr = evar_map * constr
typopt : is not None, this is the expected type for raw (used to define evars)
*)
val understand_gen :
- evar_map -> env -> var_map -> meta_map
+ evar_map -> env -> var_map
-> expected_type:(constr option) -> rawconstr -> constr
@@ -44,7 +43,7 @@ val understand_gen :
unresolved holes into metas. Returns also the typing context of
these metas. Work as [understand_gen] for the rest. *)
val understand_gen_tcc :
- evar_map -> env -> var_map -> meta_map
+ evar_map -> env -> var_map
-> constr option -> rawconstr -> open_constr
(* Standard call to get a constr from a rawconstr, resolving implicit args *)
@@ -69,11 +68,11 @@ val constr_out : Dyn.t -> constr
* Unused outside, but useful for debugging
*)
val pretype :
- type_constraint -> env -> evar_defs -> var_map -> meta_map ->
+ type_constraint -> env -> evar_defs -> var_map ->
rawconstr -> unsafe_judgment
val pretype_type :
- val_constraint -> env -> evar_defs -> var_map -> meta_map ->
+ val_constraint -> env -> evar_defs -> var_map ->
rawconstr -> unsafe_type_judgment
(*i*)
diff --git a/proofs/proof_type.ml b/proofs/proof_type.ml
index b905c0a26b..c8b4fc3ea1 100644
--- a/proofs/proof_type.ml
+++ b/proofs/proof_type.ml
@@ -71,7 +71,7 @@ and tactic_expr =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
@@ -81,7 +81,7 @@ and atomic_tactic_expr =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
@@ -91,7 +91,7 @@ and tactic_arg =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
diff --git a/proofs/proof_type.mli b/proofs/proof_type.mli
index 9337408824..7cbb2355a8 100644
--- a/proofs/proof_type.mli
+++ b/proofs/proof_type.mli
@@ -99,7 +99,7 @@ and tactic_expr =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
@@ -109,7 +109,7 @@ and atomic_tactic_expr =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
@@ -119,7 +119,7 @@ and tactic_arg =
(constr,
constr_pattern,
evaluable_global_reference,
- inductive or_metanum,
+ inductive,
ltac_constant,
identifier,
glob_tactic_expr)
diff --git a/proofs/tacexpr.ml b/proofs/tacexpr.ml
index 2adc93ee50..860a91aff3 100644
--- a/proofs/tacexpr.ml
+++ b/proofs/tacexpr.ml
@@ -25,13 +25,8 @@ type raw_red_flag =
| FBeta
| FIota
| FZeta
- | FConst of reference or_metanum list
- | FDeltaBut of reference or_metanum list
-
-type raw_red_expr = (constr_expr, reference or_metanum) red_expr_gen
-
-type glob_red_expr =
- (rawconstr_and_expr, evaluable_global_reference or_var or_metanum) red_expr_gen
+ | FConst of reference list
+ | FDeltaBut of reference list
let make_red_flag =
let rec add_flag red = function
@@ -138,10 +133,10 @@ type ('constr,'pat,'cst,'ind,'ref,'id,'tac) gen_atomic_tactic_expr =
| TacDAuto of int option * int option
(* Context management *)
- | TacClear of identifier or_metanum list
- | TacClearBody of identifier or_metanum list
- | TacMove of bool * identifier located * identifier located
- | TacRename of identifier located * identifier located
+ | TacClear of 'id list
+ | TacClearBody of 'id list
+ | TacMove of bool * 'id * 'id
+ | TacRename of 'id * 'id
(* Constructors *)
| TacLeft of 'constr bindings
@@ -211,8 +206,8 @@ and ('constr,'pat,'cst,'ind,'ref,'id,'tac) gen_tactic_arg =
type raw_tactic_expr =
(constr_expr,
pattern_expr,
- reference or_metanum,
- reference or_metanum,
+ reference,
+ reference,
reference,
identifier located or_metaid,
raw_tactic_expr) gen_tactic_expr
@@ -220,8 +215,8 @@ type raw_tactic_expr =
type raw_atomic_tactic_expr =
(constr_expr, (* constr *)
pattern_expr, (* pattern *)
- reference or_metanum, (* evaluable reference *)
- reference or_metanum, (* inductive *)
+ reference, (* evaluable reference *)
+ reference, (* inductive *)
reference, (* ltac reference *)
identifier located or_metaid, (* identifier *)
raw_tactic_expr) gen_atomic_tactic_expr
@@ -229,8 +224,8 @@ type raw_atomic_tactic_expr =
type raw_tactic_arg =
(constr_expr,
pattern_expr,
- reference or_metanum,
- reference or_metanum,
+ reference,
+ reference,
reference,
identifier located or_metaid,
raw_tactic_expr) gen_tactic_arg
@@ -238,12 +233,14 @@ type raw_tactic_arg =
type raw_generic_argument =
(constr_expr,raw_tactic_expr) generic_argument
+type raw_red_expr = (constr_expr, reference) red_expr_gen
+
(* Globalized tactics *)
type glob_tactic_expr =
(rawconstr_and_expr,
constr_pattern,
- evaluable_global_reference and_short_name or_var or_metanum,
- inductive or_var or_metanum,
+ evaluable_global_reference and_short_name or_var,
+ inductive or_var,
ltac_constant located or_var,
identifier located,
glob_tactic_expr) gen_tactic_expr
@@ -251,8 +248,8 @@ type glob_tactic_expr =
type glob_atomic_tactic_expr =
(rawconstr_and_expr,
constr_pattern,
- evaluable_global_reference and_short_name or_var or_metanum,
- inductive or_var or_metanum,
+ evaluable_global_reference and_short_name or_var,
+ inductive or_var,
ltac_constant located or_var,
identifier located,
glob_tactic_expr) gen_atomic_tactic_expr
@@ -260,15 +257,18 @@ type glob_atomic_tactic_expr =
type glob_tactic_arg =
(rawconstr_and_expr,
constr_pattern,
- evaluable_global_reference and_short_name or_var or_metanum,
- inductive or_var or_metanum,
- ltac_constant located or_var,
- identifier located,
+ evaluable_global_reference and_short_name or_var,
+ inductive or_var,
+ ltac_constant located,
+ identifier located or_var,
glob_tactic_expr) gen_tactic_arg
type glob_generic_argument =
(rawconstr_and_expr,glob_tactic_expr) generic_argument
+type glob_red_expr =
+ (rawconstr_and_expr, evaluable_global_reference or_var) red_expr_gen
+
type closed_raw_generic_argument =
(constr_expr,raw_tactic_expr) generic_argument
diff --git a/tactics/elim.ml b/tactics/elim.ml
index 9ced398dda..1dcdec03df 100644
--- a/tactics/elim.ml
+++ b/tactics/elim.ml
@@ -128,10 +128,8 @@ let decompose_or c gls =
(fun (_,t) -> is_disjunction t)
c gls
-let inj x = Genarg.AN x
let h_decompose l c =
- Refiner.abstract_tactic
- (TacDecompose (List.map inj l,c)) (decompose_these c l)
+ Refiner.abstract_tactic (TacDecompose (l,c)) (decompose_these c l)
let h_decompose_or c =
Refiner.abstract_tactic (TacDecomposeOr c) (decompose_or c)
diff --git a/tactics/hiddentac.ml b/tactics/hiddentac.ml
index a502b41100..8e953084da 100644
--- a/tactics/hiddentac.ml
+++ b/tactics/hiddentac.ml
@@ -60,14 +60,12 @@ let h_specialize n d = abstract_tactic (TacSpecialize (n,d)) (new_hyp n d)
let h_lapply c = abstract_tactic (TacLApply c) (cut_and_apply c)
(* Context management *)
-let inj x = Genarg.AN x
-let h_clear l = abstract_tactic (TacClear (List.map inj l)) (clear l)
-let h_clear_body l =
- abstract_tactic (TacClearBody (List.map inj l)) (clear_body l)
+let h_clear l = abstract_tactic (TacClear l) (clear l)
+let h_clear_body l = abstract_tactic (TacClearBody l) (clear_body l)
let h_move dep id1 id2 =
- abstract_tactic (TacMove (dep,inj_id id1,inj_id id2)) (move_hyp dep id1 id2)
+ abstract_tactic (TacMove (dep,id1,id2)) (move_hyp dep id1 id2)
let h_rename id1 id2 =
- abstract_tactic (TacRename (inj_id id1,inj_id id2)) (rename_hyp id1 id2)
+ abstract_tactic (TacRename (id1,id2)) (rename_hyp id1 id2)
(* Constructors *)
let h_left l = abstract_tactic (TacLeft l) (left l)
diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml
index b065aac186..02e7e8fb4a 100644
--- a/tactics/tacinterp.ml
+++ b/tactics/tacinterp.ml
@@ -91,7 +91,6 @@ let catch_error loc tac g =
(* Signature for interpretation: val_interp and interpretation functions *)
type interp_sign =
{ lfun : (identifier * value) list;
- lmatch : patvar_map;
debug : debug_info }
let check_is_value = function
@@ -260,8 +259,6 @@ type glob_sign = {
(* ltac variables and the subset of vars introduced by Intro/Let/... *)
ltacrecvars : (identifier * ltac_constant) list;
(* ltac recursive names *)
- metavars : patvar list;
- (* metavariables introduced by patterns *)
gsigma : Evd.evar_map;
genv : Environ.env }
@@ -335,34 +332,21 @@ let get_current_context () =
let strict_check = ref false
(* Globalize a name which must be bound -- actually just check it is bound *)
-let intern_hyp ist (loc,id) =
+let intern_hyp ist (loc,id as locid) =
let (_,env) = get_current_context () in
- if (not !strict_check) or find_ident id ist then id
+ if not !strict_check then
+ locid
+ else if find_ident id ist then
+ (dummy_loc,id)
else
Pretype_errors.error_var_not_found_loc loc id
-let intern_lochyp ist (_loc,_ as locid) = (loc,intern_hyp ist locid)
-
-let error_unbound_metanum loc n =
- user_err_loc
- (loc,"intern_qualid_or_metanum", str "?" ++ pr_patvar n ++ str " is unbound")
-
-let intern_metanum sign loc n =
- if List.mem n sign.metavars or find_var n sign then n
- else error_unbound_metanum loc n
-
-let intern_hyp_or_metanum ist = function
- | AN id -> AN (intern_hyp ist (loc,id))
- | MetaNum (_loc,n) -> MetaNum (loc,intern_metanum ist loc n)
+let intern_hyp_or_metaid ist id = intern_hyp ist (skip_metaid id)
let intern_inductive ist = function
| Ident (loc,id) when find_var id ist -> ArgVar (loc,id)
| r -> ArgArg (Nametab.global_inductive r)
-let intern_or_metanum f ist = function
- | AN x -> AN (f ist x)
- | MetaNum (_loc,n) -> MetaNum (loc,intern_metanum ist loc n)
-
let intern_global_reference ist = function
| Ident (loc,id) as r when find_var id ist -> ArgVar (loc,id)
| r -> ArgArg (loc,Nametab.global r)
@@ -414,11 +398,11 @@ let intern_quantified_hypothesis ist x =
statically check the existence of a quantified hyp); thus nothing to do *)
x
-let intern_constr {ltacvars=lfun; metavars=lmatch; gsigma=sigma; genv=env} c =
+let intern_constr {ltacvars=lfun; gsigma=sigma; genv=env} c =
let warn = if !strict_check then fun x -> x else Constrintern.for_grammar in
let c' =
warn (Constrintern.interp_rawconstr_gen false sigma env []
- (Some lmatch) (fst lfun,[])) c
+ false (fst lfun,[])) c
in (c',if !strict_check then None else Some c)
(* Globalize bindings *)
@@ -437,7 +421,7 @@ let intern_clause_pattern ist (l,occl) =
let rec check = function
| (hyp,l) :: rest ->
let (_loc,_ as id) = skip_metaid hyp in
- ((loc,intern_hyp ist id),l)::(check rest)
+ (intern_hyp ist id,l)::(check rest)
| [] -> []
in (l,check occl)
@@ -453,36 +437,32 @@ let intern_induction_arg ist = function
ElimOnIdent (loc,id)
(* Globalizes a reduction expression *)
-let intern_evaluable_or_metanum ist = function
- | AN r ->
- let e = match r with
- | Ident (loc,id) as r when find_ltacvar id ist -> ArgVar (loc,id)
- | Ident (_,id) when
- (not !strict_check & find_hyp id ist) or find_ctxvar id ist ->
- ArgArg (EvalVarRef id, None)
- | r ->
- let _,qid = qualid_of_reference r in
- try
- let e = match Nametab.locate qid with
- | ConstRef c -> EvalConstRef c
- | VarRef c -> EvalVarRef c
- | _ -> error_not_evaluable (pr_reference r) in
- let short_name = match r with
- | Ident (loc,id) when not !strict_check -> Some (loc,id)
- | _ -> None in
- ArgArg (e,short_name)
- with Not_found ->
- match r with
- | Ident (loc,id) when not !strict_check ->
- ArgArg (EvalVarRef id, Some (loc,id))
- | _ -> error_global_not_found_loc loc qid
- in AN e
- | MetaNum (_loc,n) -> MetaNum (loc,intern_metanum ist loc n)
-
-let intern_unfold ist (l,qid) = (l,intern_evaluable_or_metanum ist qid)
+let intern_evaluable ist = function
+ | Ident (loc,id) as r when find_ltacvar id ist -> ArgVar (loc,id)
+ | Ident (_,id) when
+ (not !strict_check & find_hyp id ist) or find_ctxvar id ist ->
+ ArgArg (EvalVarRef id, None)
+ | r ->
+ let _,qid = qualid_of_reference r in
+ try
+ let e = match Nametab.locate qid with
+ | ConstRef c -> EvalConstRef c
+ | VarRef c -> EvalVarRef c
+ | _ -> error_not_evaluable (pr_reference r) in
+ let short_name = match r with
+ | Ident (loc,id) when not !strict_check -> Some (loc,id)
+ | _ -> None in
+ ArgArg (e,short_name)
+ with Not_found ->
+ match r with
+ | Ident (loc,id) when not !strict_check ->
+ ArgArg (EvalVarRef id, Some (loc,id))
+ | _ -> error_global_not_found_loc loc qid
+
+let intern_unfold ist (l,qid) = (l,intern_evaluable ist qid)
let intern_flag ist red =
- { red with rConst = List.map (intern_evaluable_or_metanum ist) red.rConst }
+ { red with rConst = List.map (intern_evaluable ist) red.rConst }
let intern_constr_occurrence ist (l,c) = (l,intern_constr ist c)
@@ -500,10 +480,10 @@ let intern_redexp ist = function
let intern_hyp_location ist = function
| InHyp id ->
let (_loc,_ as id) = skip_metaid id in
- InHyp (loc,intern_hyp ist id)
+ InHyp (intern_hyp ist id)
| InHypType id ->
let (_loc,_ as id) = skip_metaid id in
- InHypType (loc,intern_hyp ist id)
+ InHypType (intern_hyp ist id)
(* Reads a pattern *)
let intern_pattern evc env lfun = function
@@ -519,7 +499,7 @@ let intern_pattern evc env lfun = function
let intern_constr_may_eval ist = function
| ConstrEval (r,c) -> ConstrEval (intern_redexp ist r,intern_constr ist c)
| ConstrContext (locid,c) ->
- ConstrContext ((loc,intern_hyp ist locid),intern_constr ist c)
+ ConstrContext (intern_hyp ist locid,intern_constr ist c)
| ConstrTypeOf c -> ConstrTypeOf (intern_constr ist c)
| ConstrTerm c -> ConstrTerm (intern_constr ist c)
@@ -564,7 +544,7 @@ let rec intern_atomic lf ist x =
| TacIntrosUntil hyp -> TacIntrosUntil (intern_quantified_hypothesis ist hyp)
| TacIntroMove (ido,ido') ->
TacIntroMove (option_app (intern_ident lf ist) ido,
- option_app (fun (_loc,_ as x) -> (loc,intern_hyp ist x)) ido')
+ option_app (intern_hyp ist) ido')
| TacAssumption -> TacAssumption
| TacExact c -> TacExact (intern_constr ist c)
| TacApply cb -> TacApply (intern_constr_with_bindings ist cb)
@@ -597,8 +577,7 @@ let rec intern_atomic lf ist x =
| TacTrivial l -> TacTrivial l
| TacAuto (n,l) -> TacAuto (n,l)
| TacAutoTDB n -> TacAutoTDB n
- | TacDestructHyp (b,(_loc,_ as id)) ->
- TacDestructHyp(b,(loc,intern_hyp ist id))
+ | TacDestructHyp (b,id) -> TacDestructHyp(b,intern_hyp ist id)
| TacDestructConcl -> TacDestructConcl
| TacSuperAuto (n,l,b1,b2) -> TacSuperAuto (n,l,b1,b2)
| TacDAuto (n,p) -> TacDAuto (n,p)
@@ -620,18 +599,17 @@ let rec intern_atomic lf ist x =
TacDoubleInduction (h1,h2)
| TacDecomposeAnd c -> TacDecomposeAnd (intern_constr ist c)
| TacDecomposeOr c -> TacDecomposeOr (intern_constr ist c)
- | TacDecompose (l,c) ->
- let l = List.map (intern_or_metanum intern_inductive ist) l in
+ | TacDecompose (l,c) -> let l = List.map (intern_inductive ist) l in
TacDecompose (l,intern_constr ist c)
| TacSpecialize (n,l) -> TacSpecialize (n,intern_constr_with_bindings ist l)
| TacLApply c -> TacLApply (intern_constr ist c)
(* Context management *)
- | TacClear l -> TacClear (List.map (intern_hyp_or_metanum ist) l)
- | TacClearBody l -> TacClearBody (List.map (intern_hyp_or_metanum ist) l)
+ | TacClear l -> TacClear (List.map (intern_hyp_or_metaid ist) l)
+ | TacClearBody l -> TacClearBody (List.map (intern_hyp_or_metaid ist) l)
| TacMove (dep,id1,id2) ->
- TacMove (dep,intern_lochyp ist id1,intern_lochyp ist id2)
- | TacRename (id1,id2) -> TacRename (intern_lochyp ist id1, intern_lochyp ist id2)
+ TacMove (dep,intern_hyp_or_metaid ist id1,intern_hyp_or_metaid ist id2)
+ | TacRename (id1,id2) -> TacRename (intern_hyp_or_metaid ist id1, intern_hyp_or_metaid ist id2)
(* Constructors *)
| TacLeft bl -> TacLeft (intern_bindings ist bl)
@@ -746,11 +724,11 @@ and intern_match_rule ist = function
| (All tc)::tl ->
All (intern_tactic ist tc) :: (intern_match_rule ist tl)
| (Pat (rl,mp,tc))::tl ->
- let {ltacvars=(lfun,l2); metavars=lmeta; gsigma=sigma; genv=env} = ist in
+ let {ltacvars=(lfun,l2); gsigma=sigma; genv=env} = ist in
let lfun',metas1,hyps = intern_match_context_hyps sigma env lfun rl in
let metas2,pat = intern_pattern sigma env lfun mp in
- let metas = list_uniquize (metas1@metas2@lmeta) in
- let ist' = { ist with ltacvars = (metas@lfun',l2); metavars = [] } in
+ let metas = list_uniquize (metas1@metas2) in
+ let ist' = { ist with ltacvars = (metas@lfun',l2) } in
Pat (hyps,pat,intern_tactic ist' tc) :: (intern_match_rule ist tl)
| [] -> []
@@ -760,7 +738,7 @@ and intern_genarg ist x =
| IntArgType -> in_gen globwit_int (out_gen rawwit_int x)
| IntOrVarArgType ->
let f = function
- | ArgVar (_loc,id) -> ArgVar (loc,intern_hyp ist (loc,id))
+ | ArgVar (_loc,id) -> ArgVar (intern_hyp ist (loc,id))
| ArgArg n as x -> x in
in_gen globwit_int_or_var (f (out_gen rawwit_int_or_var x))
| StringArgType ->
@@ -768,7 +746,7 @@ and intern_genarg ist x =
| PreIdentArgType ->
in_gen globwit_pre_ident (out_gen rawwit_pre_ident x)
| IdentArgType ->
- in_gen globwit_ident (intern_hyp ist (dummy_loc,out_gen rawwit_ident x))
+ in_gen globwit_ident (snd (intern_hyp ist (dummy_loc,out_gen rawwit_ident x)))
| RefArgType ->
in_gen globwit_ref (intern_global_reference ist (out_gen rawwit_ref x))
| SortArgType ->
@@ -1004,10 +982,6 @@ let eval_name ist = function
| Anonymous -> Anonymous
| Name id -> Name (eval_ident ist id)
-let interp_hyp_or_metanum ist gl = function
- | AN id -> eval_variable ist gl (dummy_loc,id)
- | MetaNum (loc,n) -> constr_to_id loc (List.assoc n ist.lfun)
-
(* To avoid to move to much simple functions in the big recursive block *)
let forward_vcontext_interp = ref (fun ist v -> failwith "not implemented")
@@ -1031,30 +1005,23 @@ let interp_reference ist env = function
let pf_interp_reference ist gl = interp_reference ist (pf_env gl)
-let interp_inductive_or_metanum ist = function
- | MetaNum (loc,n) ->
- coerce_to_inductive (List.assoc n ist.lfun)
- | AN r -> match r with
- | ArgArg r -> r
- | ArgVar (_,id) ->
- coerce_to_inductive (unrec (List.assoc id ist.lfun))
-
-let interp_evaluable_or_metanum ist env = function
- | MetaNum (loc,n) ->
- coerce_to_evaluable_ref env (List.assoc n ist.lfun)
- | AN r -> match r with
- | ArgArg (r,Some (loc,id)) ->
- (* Maybe [id] has been introduced by Intro-like tactics *)
- (try match Environ.lookup_named id env with
- | (_,Some _,_) -> EvalVarRef id
- | _ -> error_not_evaluable (pr_id id)
- with Not_found ->
- match r with
- | EvalConstRef _ -> r
- | _ -> Pretype_errors.error_var_not_found_loc loc id)
- | ArgArg (r,None) -> r
- | ArgVar (_,id) ->
- coerce_to_evaluable_ref env (unrec (List.assoc id ist.lfun))
+let interp_inductive ist = function
+ | ArgArg r -> r
+ | ArgVar (_,id) -> coerce_to_inductive (unrec (List.assoc id ist.lfun))
+
+let interp_evaluable ist env = function
+ | ArgArg (r,Some (loc,id)) ->
+ (* Maybe [id] has been introduced by Intro-like tactics *)
+ (try match Environ.lookup_named id env with
+ | (_,Some _,_) -> EvalVarRef id
+ | _ -> error_not_evaluable (pr_id id)
+ with Not_found ->
+ match r with
+ | EvalConstRef _ -> r
+ | _ -> Pretype_errors.error_var_not_found_loc loc id)
+ | ArgArg (r,None) -> r
+ | ArgVar (_,id) ->
+ coerce_to_evaluable_ref env (unrec (List.assoc id ist.lfun))
(* Interprets an hypothesis name *)
let interp_hyp_location ist gl = function
@@ -1083,15 +1050,15 @@ let retype_list sigma env lst =
let interp_casted_constr ocl ist sigma env (c,ce) =
let (l1,l2) = constr_list ist env in
- let rtype lst = retype_list sigma env lst in
+ let tl1 = retype_list sigma env l1 in
let csr =
match ce with
| None ->
- Pretyping.understand_gen sigma env (rtype l1) (rtype ist.lmatch) ocl c
+ Pretyping.understand_gen sigma env tl1 ocl c
(* If at toplevel (ce<>None), the error can be due to an incorrect
context at globalization time: we retype with the now known
intros/lettac/inversion hypothesis names *)
- | Some c -> interp_constr_gen sigma env (l1,l2) ist.lmatch c ocl
+ | Some c -> interp_constr_gen sigma env (l1,l2) c ocl
in
db_constr ist.debug env csr;
csr
@@ -1103,17 +1070,16 @@ let interp_constr ist sigma env c =
let pf_interp_casted_openconstr ist gl (c,ce) =
let sigma = project gl in
let env = pf_env gl in
- let (ltacvar,l) = constr_list ist env in
- let rtype lst = retype_list sigma env lst in
+ let (ltacvars,l) = constr_list ist env in
+ let typs = retype_list sigma env ltacvars in
let ocl = Some (pf_concl gl) in
match ce with
| None ->
- Pretyping.understand_gen_tcc sigma env (rtype ltacvar) (rtype ist.lmatch)
- ocl c
+ Pretyping.understand_gen_tcc sigma env typs ocl c
(* If at toplevel (ce<>None), the error can be due to an incorrect
context at globalization time: we retype with the now known
intros/lettac/inversion hypothesis names *)
- | Some c -> interp_openconstr_gen sigma env (ltacvar,l) ist.lmatch c ocl
+ | Some c -> interp_openconstr_gen sigma env (ltacvars,l) c ocl
(* Interprets a constr expression *)
let pf_interp_constr ist gl =
@@ -1125,11 +1091,10 @@ let pf_interp_casted_constr ist gl c =
(* Interprets a reduction expression *)
let interp_unfold ist env (l,qid) =
- (l,interp_evaluable_or_metanum ist env qid)
+ (l,interp_evaluable ist env qid)
let interp_flag ist env red =
- { red
- with rConst = List.map (interp_evaluable_or_metanum ist env) red.rConst }
+ { red with rConst = List.map (interp_evaluable ist env) red.rConst }
let interp_pattern ist sigma env (l,c) = (l,interp_constr ist sigma env c)
@@ -1257,7 +1222,7 @@ and eval_tactic ist = function
and interp_ltac_reference isapplied ist gl = function
| ArgVar (loc,id) -> unrec (List.assoc id ist.lfun)
| ArgArg (loc,r) ->
- let v = val_interp {lfun=[];lmatch=[];debug=ist.debug} gl (lookup r) in
+ let v = val_interp {lfun=[];debug=ist.debug} gl (lookup r) in
if isapplied then v else locate_tactic_call loc v
and interp_tacarg ist gl = function
@@ -1280,7 +1245,6 @@ and interp_tacarg ist gl = function
val_interp ist gl
(intern_tactic {
ltacvars = (List.map fst ist.lfun,[]); ltacrecvars = [];
- metavars = List.map fst ist.lmatch;
gsigma = project gl; genv = pf_env gl }
(f ist))
else if tg = "value" then
@@ -1403,8 +1367,7 @@ and match_context_interp ist g lr lmr =
let lctxt = give_context ctxt id in
if mhyps = [] then
let lgoal = List.map (fun (id,c) -> (id,VConstr c)) lgoal in
- eval_with_fail {ist with lfun=lgoal@lctxt@ist.lfun; lmatch=ist.lmatch}
- mt goal
+ eval_with_fail { ist with lfun=lgoal@lctxt@ist.lfun } mt goal
else
apply_hyps_context ist env goal mt lgoal mhyps hyps
with
@@ -1488,8 +1451,7 @@ and apply_hyps_context ist env goal mt (lgmatch:(Rawterm.patvar * Term.constr) l
| [] ->
let lmatch = List.map (fun (id,c) -> (id,VConstr c)) lmatch in
db_mc_pattern_success ist.debug;
- eval_with_fail {ist with lfun=lmatch@lfun@ist.lfun;
- lmatch=ist.lmatch} mt goal
+ eval_with_fail {ist with lfun=lmatch@lfun@ist.lfun} mt goal
in
apply_hyps_context_rec [] lgmatch hyps (hyps,0) mhyps
@@ -1545,7 +1507,7 @@ and match_interp ist g constr lmr =
let (lm,ctxt) = sub_match nocc c csr in
let lctxt = give_context ctxt id in
let lm = List.map (fun (id,c) -> (id,VConstr c)) lm in
- val_interp {ist with lfun=lm@lctxt@ist.lfun; lmatch=ist.lmatch} g mt
+ val_interp {ist with lfun=lm@lctxt@ist.lfun} g mt
with | NextOccurrence _ -> raise No_match
in
let rec apply_match ist csr = function
@@ -1646,15 +1608,15 @@ and interp_atomic ist gl = function
| TacDecomposeAnd c -> Elim.h_decompose_and (pf_interp_constr ist gl c)
| TacDecomposeOr c -> Elim.h_decompose_or (pf_interp_constr ist gl c)
| TacDecompose (l,c) ->
- let l = List.map (interp_inductive_or_metanum ist) l in
+ let l = List.map (interp_inductive ist) l in
Elim.h_decompose l (pf_interp_constr ist gl c)
| TacSpecialize (n,l) ->
h_specialize n (interp_constr_with_bindings ist gl l)
| TacLApply c -> h_lapply (pf_interp_constr ist gl c)
(* Context management *)
- | TacClear l -> h_clear (List.map (interp_hyp_or_metanum ist gl) l)
- | TacClearBody l -> h_clear_body (List.map (interp_hyp_or_metanum ist gl) l)
+ | TacClear l -> h_clear (List.map (interp_hyp ist gl) l)
+ | TacClearBody l -> h_clear_body (List.map (interp_hyp ist gl) l)
| TacMove (dep,id1,id2) ->
h_move dep (interp_hyp ist gl id1) (interp_hyp ist gl id2)
| TacRename (id1,id2) ->
@@ -1707,20 +1669,19 @@ and interp_atomic ist gl = function
in tactic_of_value v gl
(* Initial call for interpretation *)
-let interp_tac_gen lfun lmatch debug t gl =
- interp_tactic { lfun=lfun; lmatch=lmatch; debug=debug }
+let interp_tac_gen lfun debug t gl =
+ interp_tactic { lfun=lfun; debug=debug }
(intern_tactic {
ltacvars = (List.map fst lfun, []); ltacrecvars = [];
- metavars = List.map fst lmatch;
gsigma = project gl; genv = pf_env gl } t) gl
-let eval_tactic t = interp_tactic { lfun=[]; lmatch=[]; debug=get_debug() } t
+let eval_tactic t = interp_tactic { lfun=[]; debug=get_debug() } t
-let interp t = interp_tac_gen [] [] (get_debug()) t
+let interp t = interp_tac_gen [] (get_debug()) t
(* Hides interpretation for pretty-print *)
let hide_interp t ot gl =
- let ist = { ltacvars = ([],[]); ltacrecvars = []; metavars = [];
+ let ist = { ltacvars = ([],[]); ltacrecvars = [];
gsigma = project gl; genv = pf_env gl } in
let te = intern_tactic ist t in
let t = eval_tactic te in
@@ -1763,10 +1724,6 @@ let subst_and_short_name f (c,n) =
assert (n=None); (* since tacdef are strictly globalized *)
(f c,None)
-let subst_or_metanum f = function
- | AN x -> AN (f x)
- | MetaNum (_loc,n) -> MetaNum (loc,n)
-
let subst_or_var f = function
| ArgVar _ as x -> x
| ArgArg (x) -> ArgArg (f x)
@@ -1779,8 +1736,7 @@ let subst_global_reference subst =
subst_or_var (subst_located (subst_global subst))
let subst_evaluable subst =
- subst_or_metanum (subst_or_var
- (subst_and_short_name (subst_evaluable_reference subst)))
+ subst_or_var (subst_and_short_name (subst_evaluable_reference subst))
let subst_unfold subst (l,e) =
(l,subst_evaluable subst e)
@@ -1864,8 +1820,7 @@ let rec subst_atomic subst (t:glob_atomic_tactic_expr) = match t with
| TacDecomposeAnd c -> TacDecomposeAnd (subst_rawconstr subst c)
| TacDecomposeOr c -> TacDecomposeOr (subst_rawconstr subst c)
| TacDecompose (l,c) ->
- let l =
- List.map (subst_or_metanum (subst_or_var (subst_inductive subst))) l in
+ let l = List.map (subst_or_var (subst_inductive subst)) l in
TacDecompose (l,subst_rawconstr subst c)
| TacSpecialize (n,l) -> TacSpecialize (n,subst_raw_with_bindings subst l)
| TacLApply c -> TacLApply (subst_rawconstr subst c)
@@ -2038,8 +1993,8 @@ let make_absolute_name (loc,id) =
sp
let make_empty_glob_sign () =
- { ltacvars = ([],[]); ltacrecvars = [];
- metavars = []; gsigma = Evd.empty; genv = Global.env() }
+ { ltacvars = ([],[]); ltacrecvars = [];
+ gsigma = Evd.empty; genv = Global.env() }
let add_tacdef isrec tacl =
let isrec = if !Options.p1 then isrec else true in
@@ -2062,7 +2017,7 @@ let add_tacdef isrec tacl =
let glob_tactic x = intern_tactic (make_empty_glob_sign ()) x
let interp_redexp env evc r =
- let ist = { lfun=[]; lmatch=[]; debug=get_debug () } in
+ let ist = { lfun=[]; debug=get_debug () } in
let gist = {(make_empty_glob_sign ()) with genv = env; gsigma = evc } in
redexp_interp ist evc env (intern_redexp gist r)
@@ -2072,9 +2027,9 @@ let interp_redexp env evc r =
let _ = Auto.set_extern_interp
(fun l ->
let l = List.map (fun (id,c) -> (id,VConstr c)) l in
- interp_tactic {lfun=l;lmatch=[];debug=get_debug()})
+ interp_tactic {lfun=l;debug=get_debug()})
let _ = Auto.set_extern_intern_tac
- (fun l -> intern_tactic {(make_empty_glob_sign()) with metavars=l})
+ (fun l -> intern_tactic {(make_empty_glob_sign()) with ltacvars=(l,[])})
let _ = Auto.set_extern_subst_tactic subst_tactic
let _ = Dhyp.set_extern_interp eval_tactic
let _ = Dhyp.set_extern_intern_tac
diff --git a/tactics/tacinterp.mli b/tactics/tacinterp.mli
index ddd5175da4..9d8a7e57c4 100644
--- a/tactics/tacinterp.mli
+++ b/tactics/tacinterp.mli
@@ -36,7 +36,6 @@ type value =
(* Signature for interpretation: val\_interp and interpretation functions *)
and interp_sign =
{ lfun : (identifier * value) list;
- lmatch : Pattern.patvar_map;
debug : debug_info }
(* Gives the identifier corresponding to an Identifier [tactic_arg] *)
@@ -70,7 +69,6 @@ val add_tacdef :
type glob_sign = {
ltacvars : identifier list * identifier list;
ltacrecvars : (identifier * Nametab.ltac_constant) list;
- metavars : Rawterm.patvar list;
gsigma : Evd.evar_map;
genv : Environ.env }
@@ -99,7 +97,7 @@ val interp_redexp : Environ.env -> Evd.evar_map -> raw_red_expr
-> Tacred.red_expr
(* Interprets tactic expressions *)
-val interp_tac_gen : (identifier * value) list -> Pattern.patvar_map ->
+val interp_tac_gen : (identifier * value) list ->
debug_info -> raw_tactic_expr -> tactic
(* Initial call for interpretation *)
diff --git a/toplevel/metasyntax.ml b/toplevel/metasyntax.ml
index 43785836af..9be6eb3932 100644
--- a/toplevel/metasyntax.ml
+++ b/toplevel/metasyntax.ml
@@ -726,7 +726,7 @@ let add_notation_in_scope local df c (assoc,n,etyps,onlyparse) omodv8 sc toks =
if onlyparse then None
else
let r = interp_rawconstr_gen
- false Evd.empty (Global.env()) [] (Some []) (vars,[]) c in
+ false Evd.empty (Global.env()) [] false (vars,[]) c in
Some (make_old_pp_rule ppn ppsymbols pptyps r notation scope vars) in
(* Declare the interpretation *)
let vars = List.map (fun id -> id,[] (* insert the right scope *)) vars in
@@ -802,7 +802,7 @@ let add_notation local df c modifiers mv8 sc =
let onlyparse = modifiers = [SetOnlyParsing] in
let a = interp_aconstr vars c in
let a_for_old = interp_rawconstr_gen
- false Evd.empty (Global.env()) [] (Some []) (vars,[]) c in
+ false Evd.empty (Global.env()) [] false (vars,[]) c in
add_notation_interpretation_core local vars symbs df
(a,a_for_old) sc onlyparse
| Some n ->
diff --git a/translate/ppconstrnew.ml b/translate/ppconstrnew.ml
index a3b430c7d9..cd208fa09c 100644
--- a/translate/ppconstrnew.ml
+++ b/translate/ppconstrnew.ml
@@ -531,7 +531,7 @@ let transf_pattern env c =
if Options.do_translate() then
Constrextern.extern_rawconstr (Termops.vars_of_env env)
(Constrintern.for_grammar
- (Constrintern.interp_rawconstr_gen false Evd.empty env [] None ([],[]))
+ (Constrintern.interp_rawconstr_gen false Evd.empty env [] true ([],[]))
c)
else c
diff --git a/translate/pptacticnew.ml b/translate/pptacticnew.ml
index 67d6638a07..0c4f571d7c 100644
--- a/translate/pptacticnew.ml
+++ b/translate/pptacticnew.ml
@@ -39,10 +39,6 @@ let pr_quantified_hypothesis = function
let pr_quantified_hypothesis_arg h = spc () ++ pr_quantified_hypothesis h
-let pr_or_metanum pr = function
- | AN x -> pr x
- | MetaNum (_,n) -> Pattern.pr_patvar n
-
(*
let pr_binding prc = function
| NamedHyp id, c -> hov 1 (pr_id id ++ str " := " ++ cut () ++ prc c)
@@ -296,7 +292,7 @@ and pr_atom1 env = function
| TacDecompose (l,c) ->
let vars = Termops.vars_of_env env in
hov 1 (str "decompose" ++ spc () ++
- hov 0 (str "[" ++ prlist_with_sep spc (pr_or_metanum (pr_ind vars)) l
+ hov 0 (str "[" ++ prlist_with_sep spc (pr_ind vars) l
++ str "]" ++ pr_lconstrarg env c))
| TacSpecialize (n,c) ->
hov 1 (str "specialize " ++ pr_opt int n ++ pr_with_bindings env c)
@@ -321,19 +317,19 @@ and pr_atom1 env = function
(* Context management *)
| TacClear l ->
- hov 1 (str "clear" ++ spc () ++ prlist_with_sep spc (pr_or_metanum pr_id) l)
+ hov 1 (str "clear" ++ spc () ++ prlist_with_sep spc pr_ident l)
| TacClearBody l ->
- hov 1 (str "clear" ++ spc () ++ prlist_with_sep spc (pr_or_metanum pr_id) l)
- | TacMove (b,(_,id1),(_,id2)) ->
+ hov 1 (str "clear" ++ spc () ++ prlist_with_sep spc pr_ident l)
+ | TacMove (b,id1,id2) ->
(* Rem: only b = true is available for users *)
assert b;
hov 1
- (str "move" ++ brk (1,1) ++ pr_id id1 ++ spc () ++
- str "after" ++ brk (1,1) ++ pr_id id2)
- | TacRename ((_,id1),(_,id2)) ->
+ (str "move" ++ brk (1,1) ++ pr_ident id1 ++ spc () ++
+ str "after" ++ brk (1,1) ++ pr_ident id2)
+ | TacRename (id1,id2) ->
hov 1
- (str "rename" ++ brk (1,1) ++ pr_id id1 ++ spc () ++
- str "into" ++ brk (1,1) ++ pr_id id2)
+ (str "rename" ++ brk (1,1) ++ pr_ident id1 ++ spc () ++
+ str "into" ++ brk (1,1) ++ pr_ident id2)
(* Constructors *)
| TacLeft l -> hov 1 (str "left" ++ pr_bindings env l)
@@ -502,7 +498,7 @@ let rec raw_printers =
Ppconstrnew.pr_constr_env,
Ppconstrnew.pr_lconstr_env,
Ppconstrnew.pr_pattern,
- pr_or_metanum pr_reference,
+ pr_reference,
(fun _ -> pr_reference),
pr_reference,
pr_or_metaid (pr_located pr_id),
@@ -525,7 +521,7 @@ let rec glob_printers =
(fun env -> pr_and_constr_expr (Ppconstrnew.pr_rawconstr_env env)),
(fun env -> pr_and_constr_expr (Ppconstrnew.pr_lrawconstr_env env)),
Printer.pr_pattern,
- pr_or_metanum (pr_or_var (pr_and_short_name pr_evaluable_reference)),
+ pr_or_var (pr_and_short_name pr_evaluable_reference),
(fun vars -> pr_or_var (pr_inductive vars)),
pr_or_var (pr_located pr_ltac_constant),
pr_located pr_id,
diff --git a/translate/ppvernacnew.ml b/translate/ppvernacnew.ml
index da4d7928a7..08ec0d87aa 100644
--- a/translate/ppvernacnew.ml
+++ b/translate/ppvernacnew.ml
@@ -508,7 +508,7 @@ let rec pr_vernac = function
| None -> mt()
| Some r ->
str"Eval" ++ spc() ++
- pr_red_expr (pr_constr, pr_lconstr, Pptactic.pr_or_metanum pr_reference) r ++
+ pr_red_expr (pr_constr, pr_lconstr, pr_reference) r ++
str" in" ++ spc() in
let pr_def_body = function
| DefineBody (bl,red,c,d) ->
@@ -826,7 +826,7 @@ let rec pr_vernac = function
let pr_mayeval r c = match r with
| Some r0 ->
hov 2 (str"Eval" ++ spc() ++
- pr_red_expr (pr_constr,pr_lconstr,Pptactic.pr_or_metanum pr_reference) r0 ++
+ pr_red_expr (pr_constr,pr_lconstr,pr_reference) r0 ++
spc() ++ str"in" ++ spc () ++ pr_lconstr c)
| None -> hov 2 (str"Check" ++ spc() ++ pr_lconstr c)
in pr_mayeval r c