From eaddcc04b04512d9c60e7f832abdb1e13f2df6dc Mon Sep 17 00:00:00 2001 From: filliatr Date: Wed, 13 Oct 1999 12:04:52 +0000 Subject: redeplacement des var. ex. dans kernel :-) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@97 85f007b7-540e-0410-9357-904b9bb8a0f7 --- .depend | 24 ++++++++++++-------- Makefile | 6 +++-- kernel/evd.ml | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ kernel/evd.mli | 48 +++++++++++++++++++++++++++++++++++++++ proofs/evd.ml | 68 -------------------------------------------------------- proofs/evd.mli | 48 --------------------------------------- proofs/logic.mli | 6 +++-- 7 files changed, 139 insertions(+), 129 deletions(-) create mode 100644 kernel/evd.ml create mode 100644 kernel/evd.mli delete mode 100644 proofs/evd.ml delete mode 100644 proofs/evd.mli diff --git a/.depend b/.depend index b50cf35e4b..d122ff5a24 100644 --- a/.depend +++ b/.depend @@ -6,6 +6,7 @@ kernel/constant.cmi: kernel/names.cmi kernel/sign.cmi kernel/term.cmi \ kernel/environ.cmi: kernel/abstraction.cmi kernel/constant.cmi \ kernel/inductive.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi \ kernel/univ.cmi +kernel/evd.cmi: kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/generic.cmi: kernel/names.cmi lib/util.cmi kernel/indtypes.cmi: kernel/environ.cmi kernel/inductive.cmi kernel/names.cmi \ kernel/term.cmi kernel/univ.cmi @@ -44,10 +45,9 @@ parsing/coqast.cmi: lib/dyn.cmi parsing/g_minicoq.cmi: kernel/names.cmi lib/pp.cmi kernel/sign.cmi \ kernel/term.cmi parsing/pcoq.cmi: parsing/coqast.cmi -proofs/evd.cmi: kernel/names.cmi kernel/sign.cmi kernel/term.cmi -proofs/logic.cmi: proofs/evd.cmi lib/pp.cmi proofs/proof_trees.cmi +proofs/logic.cmi: kernel/evd.cmi lib/pp.cmi proofs/proof_trees.cmi proofs/pfedit.cmi: lib/pp.cmi -proofs/proof_trees.cmi: parsing/coqast.cmi proofs/evd.cmi kernel/names.cmi \ +proofs/proof_trees.cmi: parsing/coqast.cmi kernel/evd.cmi kernel/names.cmi \ kernel/term.cmi toplevel/errors.cmi: parsing/coqast.cmi lib/pp.cmi toplevel/himsg.cmi: kernel/environ.cmi kernel/names.cmi lib/pp.cmi \ @@ -84,6 +84,10 @@ kernel/environ.cmx: kernel/abstraction.cmx kernel/constant.cmx \ kernel/generic.cmx kernel/inductive.cmx kernel/names.cmx lib/pp.cmx \ kernel/sign.cmx lib/system.cmx kernel/term.cmx kernel/univ.cmx \ lib/util.cmx kernel/environ.cmi +kernel/evd.cmo: kernel/names.cmi kernel/sign.cmi kernel/term.cmi lib/util.cmi \ + kernel/evd.cmi +kernel/evd.cmx: kernel/names.cmx kernel/sign.cmx kernel/term.cmx lib/util.cmx \ + kernel/evd.cmi kernel/generic.cmo: kernel/names.cmi lib/pp.cmi lib/util.cmi \ kernel/generic.cmi kernel/generic.cmx: kernel/names.cmx lib/pp.cmx lib/util.cmx \ @@ -220,13 +224,15 @@ parsing/coqast.cmo: lib/dyn.cmi lib/hashcons.cmi parsing/coqast.cmi parsing/coqast.cmx: lib/dyn.cmx lib/hashcons.cmx parsing/coqast.cmi parsing/lexer.cmo: lib/util.cmi parsing/lexer.cmi parsing/lexer.cmx: lib/util.cmx parsing/lexer.cmi -proofs/evd.cmo: kernel/names.cmi kernel/sign.cmi kernel/term.cmi lib/util.cmi \ - proofs/evd.cmi -proofs/evd.cmx: kernel/names.cmx kernel/sign.cmx kernel/term.cmx lib/util.cmx \ - proofs/evd.cmi -proofs/proof_trees.cmo: parsing/coqast.cmi proofs/evd.cmi kernel/names.cmi \ +proofs/logic.cmo: parsing/coqast.cmi kernel/evd.cmi kernel/names.cmi \ + lib/pp.cmi proofs/proof_trees.cmi kernel/reduction.cmi kernel/term.cmi \ + kernel/typing.cmi proofs/logic.cmi +proofs/logic.cmx: parsing/coqast.cmx kernel/evd.cmx kernel/names.cmx \ + lib/pp.cmx proofs/proof_trees.cmx kernel/reduction.cmx kernel/term.cmx \ + kernel/typing.cmx proofs/logic.cmi +proofs/proof_trees.cmo: parsing/coqast.cmi kernel/evd.cmi kernel/names.cmi \ kernel/sign.cmi lib/stamps.cmi kernel/term.cmi proofs/proof_trees.cmi -proofs/proof_trees.cmx: parsing/coqast.cmx proofs/evd.cmx kernel/names.cmx \ +proofs/proof_trees.cmx: parsing/coqast.cmx kernel/evd.cmx kernel/names.cmx \ kernel/sign.cmx lib/stamps.cmx kernel/term.cmx proofs/proof_trees.cmi toplevel/errors.cmo: parsing/ast.cmi lib/options.cmi lib/pp.cmi lib/util.cmi \ toplevel/errors.cmi diff --git a/Makefile b/Makefile index 18195d6ee1..c72be1451a 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ LIB=lib/pp_control.cmo lib/pp.cmo lib/util.cmo \ lib/bstack.cmo lib/edit.cmo lib/stamps.cmo KERNEL=kernel/names.cmo kernel/generic.cmo kernel/univ.cmo kernel/term.cmo \ - kernel/sign.cmo kernel/constant.cmo \ + kernel/sign.cmo kernel/constant.cmo kernel/evd.cmo \ kernel/inductive.cmo kernel/sosub.cmo kernel/abstraction.cmo \ kernel/environ.cmo kernel/instantiate.cmo \ kernel/closure.cmo kernel/reduction.cmo \ @@ -51,7 +51,7 @@ PARSING=parsing/lexer.cmo parsing/coqast.cmo parsing/pcoq.cmo parsing/ast.cmo \ parsing/g_prim.cmo parsing/g_basevernac.cmo parsing/g_vernac.cmo \ parsing/g_command.cmo parsing/g_tactic.cmo parsing/g_multiple_case.cmo -PROOFS=proofs/evd.cmo proofs/proof_trees.cmo proofs/logic.cmo +PROOFS=proofs/proof_trees.cmo proofs/logic.cmo TOPLEVEL=toplevel/himsg.cmo toplevel/errors.cmo toplevel/vernac.cmo \ toplevel/protectedtoplevel.cmo toplevel/toplevel.cmo @@ -189,6 +189,7 @@ archclean:: rm -f lib/*.cmx lib/*.[so] rm -f kernel/*.cmx kernel/*.[so] rm -f library/*.cmx library/*.[so] + rm -f proofs/*.cmx proofs/*.[so] rm -f parsing/*.cmx parsing/*.[so] cleanall:: archclean @@ -198,6 +199,7 @@ cleanall:: archclean rm -f lib/*.cm[io] lib/*~ rm -f kernel/*.cm[io] kernel/*~ rm -f library/*.cm[io] library/*~ + rm -f proofs/*.cm[io] proofs/*~ rm -f parsing/*.cm[io] parsing/*.ppo parsing/*~ cleanconfig:: diff --git a/kernel/evd.ml b/kernel/evd.ml new file mode 100644 index 0000000000..48b2a4b577 --- /dev/null +++ b/kernel/evd.ml @@ -0,0 +1,68 @@ + +(* $Id$ *) + +open Util +open Names +open Term +open Sign + +(* The type of mappings for existential variables *) + +type evar_body = + | Evar_empty + | Evar_defined of constr + +type 'a evar_info = { + evar_concl : typed_type; (* the type of the evar ... *) + evar_hyps : typed_type signature; (* ... under a certain signature *) + evar_body : evar_body; (* its definition *) + evar_info : 'a option } (* any other necessary information *) + +type 'a evar_map = 'a evar_info Spmap.t + +let mt_evd = Spmap.empty + +let toList evc = Spmap.fold (fun sp x acc -> (sp,x)::acc) evc [] +let dom evc = Spmap.fold (fun sp _ acc -> sp::acc) evc [] +let map evc k = Spmap.find k evc +let rmv evc k = Spmap.remove k evc +let remap evc k i = Spmap.add k i evc +let in_dom evc k = Spmap.mem k evc + +let add_with_info evd sp newinfo = + Spmap.add sp newinfo evd + +let add_noinfo evd sp sign typ = + let newinfo = + { evar_concl = typ; + evar_hyps = sign; + evar_body = Evar_empty; + evar_info = None} + in + Spmap.add sp newinfo evd + +let define evd sp body = + let oldinfo = map evd sp in + let newinfo = + { evar_concl = oldinfo.evar_concl; + evar_hyps = oldinfo.evar_hyps; + evar_body = Evar_defined body; + evar_info = oldinfo.evar_info} + in + match oldinfo.evar_body with + | Evar_empty -> Spmap.add sp newinfo evd + | _ -> anomaly "cannot define an isevar twice" + +(* The list of non-instantiated existential declarations *) + +let non_instantiated sigma = + let listsp = toList sigma in + List.fold_left + (fun l ((sp,evd) as d) -> + if evd.evar_body = Evar_empty then (d::l) else l) + [] listsp + +let is_evar sigma sp = in_dom sigma sp + +let is_defined sigma sp = + let info = map sigma sp in not (info.evar_body = Evar_empty) diff --git a/kernel/evd.mli b/kernel/evd.mli new file mode 100644 index 0000000000..8063f42b02 --- /dev/null +++ b/kernel/evd.mli @@ -0,0 +1,48 @@ + +(* $Id$ *) + +(*i*) +open Names +open Term +open Sign +(*i*) + +(* The type of mappings for existential variables. + The keys are section paths and the associated information is a record + containing the type of the evar ([concl]), the signature under which + it was introduced ([hyps]), its definition ([body]) and any other + possible information if necessary ([info]). +*) + +type evar_body = + | Evar_empty + | Evar_defined of constr + +type 'a evar_info = { + evar_concl : typed_type; + evar_hyps : typed_type signature; + evar_body : evar_body; + evar_info : 'a option } + +type 'a evar_map + +val dom : 'a evar_map -> section_path list +val map : 'a evar_map -> section_path -> 'a evar_info +val rmv : 'a evar_map -> section_path -> 'a evar_map +val remap : 'a evar_map -> section_path -> 'a evar_info -> 'a evar_map +val in_dom : 'a evar_map -> section_path -> bool +val toList : 'a evar_map -> (section_path * 'a evar_info) list + +val mt_evd : 'a evar_map +val add_with_info : 'a evar_map -> section_path -> 'a evar_info -> 'a evar_map +val add_noinfo : + 'a evar_map -> section_path -> typed_type signature -> typed_type + -> 'a evar_map + +val define : 'a evar_map -> section_path -> constr -> 'a evar_map + +val non_instantiated : 'a evar_map -> (section_path * 'a evar_info) list +val is_evar : 'a evar_map -> section_path -> bool + +val is_defined : 'a evar_map -> section_path -> bool + diff --git a/proofs/evd.ml b/proofs/evd.ml deleted file mode 100644 index 48b2a4b577..0000000000 --- a/proofs/evd.ml +++ /dev/null @@ -1,68 +0,0 @@ - -(* $Id$ *) - -open Util -open Names -open Term -open Sign - -(* The type of mappings for existential variables *) - -type evar_body = - | Evar_empty - | Evar_defined of constr - -type 'a evar_info = { - evar_concl : typed_type; (* the type of the evar ... *) - evar_hyps : typed_type signature; (* ... under a certain signature *) - evar_body : evar_body; (* its definition *) - evar_info : 'a option } (* any other necessary information *) - -type 'a evar_map = 'a evar_info Spmap.t - -let mt_evd = Spmap.empty - -let toList evc = Spmap.fold (fun sp x acc -> (sp,x)::acc) evc [] -let dom evc = Spmap.fold (fun sp _ acc -> sp::acc) evc [] -let map evc k = Spmap.find k evc -let rmv evc k = Spmap.remove k evc -let remap evc k i = Spmap.add k i evc -let in_dom evc k = Spmap.mem k evc - -let add_with_info evd sp newinfo = - Spmap.add sp newinfo evd - -let add_noinfo evd sp sign typ = - let newinfo = - { evar_concl = typ; - evar_hyps = sign; - evar_body = Evar_empty; - evar_info = None} - in - Spmap.add sp newinfo evd - -let define evd sp body = - let oldinfo = map evd sp in - let newinfo = - { evar_concl = oldinfo.evar_concl; - evar_hyps = oldinfo.evar_hyps; - evar_body = Evar_defined body; - evar_info = oldinfo.evar_info} - in - match oldinfo.evar_body with - | Evar_empty -> Spmap.add sp newinfo evd - | _ -> anomaly "cannot define an isevar twice" - -(* The list of non-instantiated existential declarations *) - -let non_instantiated sigma = - let listsp = toList sigma in - List.fold_left - (fun l ((sp,evd) as d) -> - if evd.evar_body = Evar_empty then (d::l) else l) - [] listsp - -let is_evar sigma sp = in_dom sigma sp - -let is_defined sigma sp = - let info = map sigma sp in not (info.evar_body = Evar_empty) diff --git a/proofs/evd.mli b/proofs/evd.mli deleted file mode 100644 index 8063f42b02..0000000000 --- a/proofs/evd.mli +++ /dev/null @@ -1,48 +0,0 @@ - -(* $Id$ *) - -(*i*) -open Names -open Term -open Sign -(*i*) - -(* The type of mappings for existential variables. - The keys are section paths and the associated information is a record - containing the type of the evar ([concl]), the signature under which - it was introduced ([hyps]), its definition ([body]) and any other - possible information if necessary ([info]). -*) - -type evar_body = - | Evar_empty - | Evar_defined of constr - -type 'a evar_info = { - evar_concl : typed_type; - evar_hyps : typed_type signature; - evar_body : evar_body; - evar_info : 'a option } - -type 'a evar_map - -val dom : 'a evar_map -> section_path list -val map : 'a evar_map -> section_path -> 'a evar_info -val rmv : 'a evar_map -> section_path -> 'a evar_map -val remap : 'a evar_map -> section_path -> 'a evar_info -> 'a evar_map -val in_dom : 'a evar_map -> section_path -> bool -val toList : 'a evar_map -> (section_path * 'a evar_info) list - -val mt_evd : 'a evar_map -val add_with_info : 'a evar_map -> section_path -> 'a evar_info -> 'a evar_map -val add_noinfo : - 'a evar_map -> section_path -> typed_type signature -> typed_type - -> 'a evar_map - -val define : 'a evar_map -> section_path -> constr -> 'a evar_map - -val non_instantiated : 'a evar_map -> (section_path * 'a evar_info) list -val is_evar : 'a evar_map -> section_path -> bool - -val is_defined : 'a evar_map -> section_path -> bool - diff --git a/proofs/logic.mli b/proofs/logic.mli index 0366cd25b2..ce5dfbc607 100644 --- a/proofs/logic.mli +++ b/proofs/logic.mli @@ -3,6 +3,8 @@ (*i*) open Pp +open Term +open Sign open Proof_trees (*i*) @@ -11,7 +13,7 @@ val pr_prim_rule : prim_rule -> std_ppcmds val prim_refiner : prim_rule -> 'a Evd.evar_map -> goal -> goal list val prim_extractor : - ((type_judgement, constr) env -> proof_tree -> constr) -> - (type_judgement, constr) env -> proof_tree -> constr + ((typed_type, constr) env -> proof_tree -> constr) -> + (typed_type, constr) env -> proof_tree -> constr val extract_constr : constr assumptions -> constr -> constr -- cgit v1.2.3