aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping
diff options
context:
space:
mode:
Diffstat (limited to 'pretyping')
-rwxr-xr-xpretyping/classops.ml2
-rw-r--r--pretyping/indrec.ml2
-rwxr-xr-xpretyping/recordops.ml23
-rwxr-xr-xpretyping/recordops.mli4
-rw-r--r--pretyping/tacred.ml12
-rw-r--r--pretyping/termops.ml8
6 files changed, 32 insertions, 19 deletions
diff --git a/pretyping/classops.ml b/pretyping/classops.ml
index c4e88f5ae..7fb1bb2cc 100755
--- a/pretyping/classops.ml
+++ b/pretyping/classops.ml
@@ -158,7 +158,7 @@ let subst_cl_typ subst ct = match ct with
| CL_FUN
| CL_SECVAR _ -> ct
| CL_CONST kn ->
- let kn' = subst_kn subst kn in
+ let kn' = subst_con subst kn in
if kn' == kn then ct else
CL_CONST kn'
| CL_IND (kn,i) ->
diff --git a/pretyping/indrec.ml b/pretyping/indrec.ml
index 11cb50c83..60c9321ad 100644
--- a/pretyping/indrec.ml
+++ b/pretyping/indrec.ml
@@ -518,7 +518,7 @@ let lookup_eliminator ind_sp s =
let id = add_suffix ind_id (elimination_suffix s) in
(* Try first to get an eliminator defined in the same section as the *)
(* inductive type *)
- let ref = ConstRef (make_kn mp dp (label_of_id id)) in
+ let ref = ConstRef (make_con mp dp (label_of_id id)) in
try
let _ = sp_of_global ref in
constr_of_reference ref
diff --git a/pretyping/recordops.ml b/pretyping/recordops.ml
index 339f76392..6d7921f0d 100755
--- a/pretyping/recordops.ml
+++ b/pretyping/recordops.ml
@@ -34,20 +34,20 @@ type struc_typ = {
s_PROJ : constant option list }
let structure_table = ref (Indmap.empty : struc_typ Indmap.t)
-let projection_table = ref KNmap.empty
+let projection_table = ref Cmap.empty
let option_fold_right f p e = match p with Some a -> f a e | None -> e
let cache_structure (_,(ind,struc)) =
structure_table := Indmap.add ind struc !structure_table;
projection_table :=
- List.fold_right (option_fold_right (fun proj -> KNmap.add proj struc))
+ List.fold_right (option_fold_right (fun proj -> Cmap.add proj struc))
struc.s_PROJ !projection_table
let subst_structure (_,subst,((kn,i),struc as obj)) =
let kn' = subst_kn subst kn in
let proj' = list_smartmap
- (option_smartmap (subst_kn subst))
+ (option_smartmap (subst_con subst))
struc.s_PROJ
in
if proj' == struc.s_PROJ && kn' == kn then obj else
@@ -67,7 +67,7 @@ let add_new_struc (s,c,n,l) =
let find_structure indsp = Indmap.find indsp !structure_table
let find_projection_nparams = function
- | ConstRef cst -> (KNmap.find cst !projection_table).s_PARAM
+ | ConstRef cst -> (Cmap.find cst !projection_table).s_PARAM
| _ -> raise Not_found
(*s Un "object" est une fonction construisant une instance d'une structure *)
@@ -139,12 +139,23 @@ let add_new_objdef (o,c,la,lp,l) =
let cache_objdef1 (_,sp) = ()
-let (inObjDef1,outObjDef1) =
+let (inObjDef10,outObjDef10) =
declare_object {(default_object "OBJDEF1") with
open_function = (fun i o -> if i=1 then cache_objdef1 o);
cache_function = cache_objdef1;
export_function = (function x -> Some x) }
+let outObjDef1 obj = constant_of_kn (outObjDef10 obj)
+
+let inObjDef1 con =
+ (*CSC: Here I am cheating by violating the fact that "constant" is an ADT
+ and this is the only place in the whole Coq code. My feeling is that the
+ implementation of "Canonical Structure"s should be improved to avoid this
+ situation (that is avoided for all the other non-logical objects). *)
+ let mp,sp,l = repr_con con in
+ let kn = make_kn mp sp l in
+ inObjDef10 kn
+
let objdef_info o = List.assoc o !object_table
let freeze () =
@@ -154,7 +165,7 @@ let unfreeze (s,p,o) =
structure_table := s; projection_table := p; object_table := o
let init () =
- structure_table := Indmap.empty; projection_table := KNmap.empty;
+ structure_table := Indmap.empty; projection_table := Cmap.empty;
object_table:=[]
let _ = init()
diff --git a/pretyping/recordops.mli b/pretyping/recordops.mli
index 7dae554b6..949dc4e80 100755
--- a/pretyping/recordops.mli
+++ b/pretyping/recordops.mli
@@ -47,5 +47,5 @@ val add_new_objdef :
val inStruc : inductive * struc_typ -> obj
val outStruc : obj -> inductive * struc_typ
-val inObjDef1 : kernel_name -> obj
-val outObjDef1 : obj -> kernel_name
+val inObjDef1 : constant -> obj
+val outObjDef1 : obj -> constant
diff --git a/pretyping/tacred.ml b/pretyping/tacred.ml
index e91ea75b7..5b150303c 100644
--- a/pretyping/tacred.ml
+++ b/pretyping/tacred.ml
@@ -55,7 +55,7 @@ let is_evaluable env ref =
match ref with
EvalConstRef kn ->
let (ids,kns) = Conv_oracle.freeze() in
- KNpred.mem kn kns &
+ Cpred.mem kn kns &
let cb = Environ.lookup_constant kn env in
cb.const_body <> None & not cb.const_opaque
| EvalVarRef id ->
@@ -206,8 +206,8 @@ let invert_name labs l na0 env sigma ref = function
| EvalRel _ | EvalEvar _ -> None
| EvalVar id' -> Some (EvalVar id)
| EvalConst kn ->
- let (mp,dp,_) = repr_kn kn in
- Some (EvalConst (make_kn mp dp (label_of_id id))) in
+ let (mp,dp,_) = repr_con kn in
+ Some (EvalConst (make_con mp dp (label_of_id id))) in
match refi with
| None -> None
| Some ref ->
@@ -392,8 +392,8 @@ let reduce_mind_case_use_function func env mia =
match names.(i) with
| Name id ->
if isConst func then
- let (mp,dp,_) = repr_kn (destConst func) in
- let kn = make_kn mp dp (label_of_id id) in
+ let (mp,dp,_) = repr_con (destConst func) in
+ let kn = make_con mp dp (label_of_id id) in
(match constant_opt_value env kn with
| None -> None
| Some _ -> Some (mkConst kn))
@@ -664,7 +664,7 @@ let rec substlin env name n ol c =
with
NotEvaluableConst _ ->
errorlabstrm "substlin"
- (pr_kn kn ++ str " is not a defined constant")
+ (pr_con kn ++ str " is not a defined constant")
else
((n+1), ol, c)
diff --git a/pretyping/termops.ml b/pretyping/termops.ml
index d89d5a879..d4e23af28 100644
--- a/pretyping/termops.ml
+++ b/pretyping/termops.ml
@@ -35,6 +35,7 @@ let pr_name = function
| Anonymous -> str "_"
let pr_sp sp = str(string_of_kn sp)
+let pr_con sp = str(string_of_con sp)
let rec pr_constr c = match kind_of_term c with
| Rel n -> str "#"++int n
@@ -63,7 +64,7 @@ let rec pr_constr c = match kind_of_term c with
| Evar (e,l) -> hov 1
(str"Evar#" ++ int e ++ str"{" ++
prlist_with_sep spc pr_constr (Array.to_list l) ++str"}")
- | Const c -> str"Cst(" ++ pr_sp c ++ str")"
+ | Const c -> str"Cst(" ++ pr_con c ++ str")"
| Ind (sp,i) -> str"Ind(" ++ pr_sp sp ++ str"," ++ int i ++ str")"
| Construct ((sp,i),j) ->
str"Constr(" ++ pr_sp sp ++ str"," ++ int i ++ str"," ++ int j ++ str")"
@@ -691,7 +692,7 @@ let hdchar env c =
| Cast (c,_) -> hdrec k c
| App (f,l) -> hdrec k f
| Const kn ->
- let c = lowercase_first_char (id_of_label (label kn)) in
+ let c = lowercase_first_char (id_of_label (con_label kn)) in
if c = "?" then "y" else c
| Ind ((kn,i) as x) ->
if i=0 then
@@ -799,7 +800,6 @@ let rec is_imported_modpath = function
let is_imported_ref = function
| VarRef _ -> false
- | ConstRef kn
| IndRef (kn,_)
| ConstructRef ((kn,_),_)
(* | ModTypeRef ln *) ->
@@ -807,6 +807,8 @@ let is_imported_ref = function
(* | ModRef mp ->
is_imported_modpath mp
*)
+ | ConstRef kn ->
+ let (mp,_,_) = repr_con kn in is_imported_modpath mp
let is_global id =
try