aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2000-06-01 20:51:48 +0000
committerherbelin2000-06-01 20:51:48 +0000
commit08e2c28ee98c6a5d235cc9b84bc5690dd9a22666 (patch)
treead7198fd4aa7a08e220fe911e577d6da725aaaff
parent5139432d6087f49ef549d8375a1a61db56f86dd1 (diff)
Mise en place d'un choix constr/typed_type en remplacement de certains Cast
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@485 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--.depend119
-rw-r--r--library/impargs.ml2
-rw-r--r--library/indrec.ml63
-rw-r--r--library/indrec.mli17
-rw-r--r--parsing/printer.mli3
-rw-r--r--proofs/tacinterp.ml2
-rw-r--r--toplevel/discharge.ml26
-rw-r--r--toplevel/himsg.ml15
8 files changed, 80 insertions, 167 deletions
diff --git a/.depend b/.depend
index 7ad0770384..1d5c5d698d 100644
--- a/.depend
+++ b/.depend
@@ -11,8 +11,8 @@ kernel/generic.cmi: kernel/names.cmi lib/util.cmi
kernel/indtypes.cmi: kernel/declarations.cmi kernel/environ.cmi \
kernel/names.cmi kernel/term.cmi kernel/univ.cmi
kernel/inductive.cmi: kernel/declarations.cmi kernel/environ.cmi \
- kernel/evd.cmi kernel/generic.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/univ.cmi
kernel/instantiate.cmi: kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \
kernel/term.cmi
kernel/names.cmi: lib/pp.cmi
@@ -66,8 +66,9 @@ parsing/pcoq.cmi: parsing/coqast.cmi
parsing/pretty.cmi: kernel/declarations.cmi kernel/environ.cmi \
kernel/inductive.cmi library/lib.cmi kernel/names.cmi lib/pp.cmi \
kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi
-parsing/printer.cmi: parsing/coqast.cmi kernel/names.cmi proofs/pattern.cmi \
- lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi
+parsing/printer.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/names.cmi \
+ proofs/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi \
+ kernel/term.cmi
parsing/termast.cmi: parsing/coqast.cmi kernel/names.cmi proofs/pattern.cmi \
pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi
pretyping/cases.cmi: kernel/environ.cmi pretyping/evarutil.cmi kernel/evd.cmi \
@@ -79,7 +80,7 @@ pretyping/classops.cmi: library/declare.cmi kernel/environ.cmi kernel/evd.cmi \
library/libobject.cmi kernel/names.cmi lib/pp.cmi pretyping/rawterm.cmi \
kernel/term.cmi
pretyping/coercion.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
- kernel/evd.cmi kernel/sign.cmi kernel/term.cmi
+ kernel/evd.cmi pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi
pretyping/detyping.cmi: kernel/names.cmi pretyping/rawterm.cmi \
kernel/sign.cmi kernel/term.cmi
pretyping/evarconv.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
@@ -116,9 +117,9 @@ proofs/macros.cmi: parsing/ast.cmi parsing/coqast.cmi kernel/names.cmi \
proofs/proof_type.cmi proofs/tacmach.cmi
proofs/pattern.cmi: kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \
pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi
-proofs/pfedit.cmi: parsing/coqast.cmi library/declare.cmi kernel/environ.cmi \
- kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi kernel/sign.cmi \
- proofs/tacmach.cmi kernel/term.cmi
+proofs/pfedit.cmi: parsing/coqast.cmi kernel/declarations.cmi \
+ library/declare.cmi kernel/environ.cmi kernel/names.cmi lib/pp.cmi \
+ proofs/proof_type.cmi kernel/sign.cmi proofs/tacmach.cmi kernel/term.cmi
proofs/proof_trees.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \
kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi kernel/sign.cmi \
lib/stamps.cmi kernel/term.cmi lib/util.cmi
@@ -196,14 +197,14 @@ dev/top_printers.cmo: parsing/ast.cmi parsing/astterm.cmi proofs/clenv.cmi \
toplevel/command.cmi kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi \
kernel/names.cmi lib/pp.cmi parsing/printer.cmi proofs/proof_trees.cmi \
proofs/refiner.cmi kernel/sign.cmi lib/system.cmi proofs/tacmach.cmi \
- kernel/term.cmi kernel/univ.cmi toplevel/vernacentries.cmi \
- toplevel/vernacinterp.cmi
+ kernel/term.cmi parsing/termast.cmi kernel/univ.cmi \
+ toplevel/vernacentries.cmi toplevel/vernacinterp.cmi
dev/top_printers.cmx: parsing/ast.cmx parsing/astterm.cmx proofs/clenv.cmx \
toplevel/command.cmx kernel/environ.cmx kernel/evd.cmx kernel/generic.cmx \
kernel/names.cmx lib/pp.cmx parsing/printer.cmx proofs/proof_trees.cmx \
proofs/refiner.cmx kernel/sign.cmx lib/system.cmx proofs/tacmach.cmx \
- kernel/term.cmx kernel/univ.cmx toplevel/vernacentries.cmx \
- toplevel/vernacinterp.cmx
+ kernel/term.cmx parsing/termast.cmx kernel/univ.cmx \
+ toplevel/vernacentries.cmx toplevel/vernacinterp.cmx
kernel/abstraction.cmo: kernel/generic.cmi kernel/names.cmi kernel/sosub.cmi \
kernel/term.cmi lib/util.cmi kernel/abstraction.cmi
kernel/abstraction.cmx: kernel/generic.cmx kernel/names.cmx kernel/sosub.cmx \
@@ -484,42 +485,40 @@ parsing/pretty.cmx: pretyping/classops.cmx kernel/declarations.cmx \
parsing/pretty.cmi
parsing/printer.cmo: parsing/ast.cmi parsing/coqast.cmi library/declare.cmi \
kernel/environ.cmi parsing/esyntax.cmi parsing/extend.cmi \
- library/global.cmi kernel/names.cmi lib/options.cmi proofs/pattern.cmi \
- lib/pp.cmi kernel/sign.cmi kernel/term.cmi parsing/termast.cmi \
- lib/util.cmi parsing/printer.cmi
+ library/global.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \
+ proofs/pattern.cmi lib/pp.cmi kernel/sign.cmi kernel/term.cmi \
+ parsing/termast.cmi lib/util.cmi parsing/printer.cmi
parsing/printer.cmx: parsing/ast.cmx parsing/coqast.cmx library/declare.cmx \
kernel/environ.cmx parsing/esyntax.cmx parsing/extend.cmx \
- library/global.cmx kernel/names.cmx lib/options.cmx proofs/pattern.cmx \
- lib/pp.cmx kernel/sign.cmx kernel/term.cmx parsing/termast.cmx \
- lib/util.cmx parsing/printer.cmi
+ library/global.cmx kernel/names.cmx library/nametab.cmx lib/options.cmx \
+ proofs/pattern.cmx lib/pp.cmx kernel/sign.cmx kernel/term.cmx \
+ parsing/termast.cmx lib/util.cmx parsing/printer.cmi
parsing/termast.cmo: parsing/ast.cmi pretyping/classops.cmi \
parsing/coqast.cmi library/declare.cmi pretyping/detyping.cmi \
- kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi library/global.cmi \
- library/impargs.cmi kernel/inductive.cmi kernel/names.cmi \
- library/nametab.cmi proofs/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi \
- kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \
- lib/util.cmi parsing/termast.cmi
+ kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi library/impargs.cmi \
+ kernel/inductive.cmi kernel/names.cmi proofs/pattern.cmi lib/pp.cmi \
+ pretyping/rawterm.cmi kernel/reduction.cmi kernel/sign.cmi \
+ kernel/term.cmi kernel/univ.cmi lib/util.cmi parsing/termast.cmi
parsing/termast.cmx: parsing/ast.cmx pretyping/classops.cmx \
parsing/coqast.cmx library/declare.cmx pretyping/detyping.cmx \
- kernel/environ.cmx kernel/evd.cmx kernel/generic.cmx library/global.cmx \
- library/impargs.cmx kernel/inductive.cmx kernel/names.cmx \
- library/nametab.cmx proofs/pattern.cmx lib/pp.cmx pretyping/rawterm.cmx \
- kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx kernel/univ.cmx \
- lib/util.cmx parsing/termast.cmi
+ kernel/environ.cmx kernel/evd.cmx kernel/generic.cmx library/impargs.cmx \
+ kernel/inductive.cmx kernel/names.cmx proofs/pattern.cmx lib/pp.cmx \
+ pretyping/rawterm.cmx kernel/reduction.cmx kernel/sign.cmx \
+ kernel/term.cmx kernel/univ.cmx lib/util.cmx parsing/termast.cmi
pretyping/cases.cmo: pretyping/coercion.cmi kernel/declarations.cmi \
kernel/environ.cmi pretyping/evarconv.cmi pretyping/evarutil.cmi \
kernel/evd.cmi kernel/generic.cmi library/global.cmi kernel/inductive.cmi \
kernel/names.cmi lib/pp.cmi pretyping/pretype_errors.cmi \
pretyping/rawterm.cmi kernel/reduction.cmi pretyping/retyping.cmi \
kernel/sign.cmi kernel/term.cmi kernel/type_errors.cmi kernel/typeops.cmi \
- lib/util.cmi pretyping/cases.cmi
+ kernel/univ.cmi lib/util.cmi pretyping/cases.cmi
pretyping/cases.cmx: pretyping/coercion.cmx kernel/declarations.cmx \
kernel/environ.cmx pretyping/evarconv.cmx pretyping/evarutil.cmx \
kernel/evd.cmx kernel/generic.cmx library/global.cmx kernel/inductive.cmx \
kernel/names.cmx lib/pp.cmx pretyping/pretype_errors.cmx \
pretyping/rawterm.cmx kernel/reduction.cmx pretyping/retyping.cmx \
kernel/sign.cmx kernel/term.cmx kernel/type_errors.cmx kernel/typeops.cmx \
- lib/util.cmx pretyping/cases.cmi
+ kernel/univ.cmx lib/util.cmx pretyping/cases.cmi
pretyping/class.cmo: pretyping/classops.cmi kernel/declarations.cmi \
library/declare.cmi kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi \
library/global.cmi kernel/inductive.cmi kernel/instantiate.cmi \
@@ -540,13 +539,13 @@ pretyping/classops.cmx: library/declare.cmx kernel/environ.cmx \
pretyping/tacred.cmx kernel/term.cmx lib/util.cmx pretyping/classops.cmi
pretyping/coercion.cmo: pretyping/classops.cmi kernel/environ.cmi \
pretyping/evarconv.cmi kernel/evd.cmi kernel/generic.cmi kernel/names.cmi \
- pretyping/recordops.cmi kernel/reduction.cmi pretyping/retyping.cmi \
- kernel/term.cmi kernel/type_errors.cmi kernel/typeops.cmi lib/util.cmi \
+ pretyping/pretype_errors.cmi pretyping/recordops.cmi kernel/reduction.cmi \
+ pretyping/retyping.cmi kernel/term.cmi kernel/typeops.cmi lib/util.cmi \
pretyping/coercion.cmi
pretyping/coercion.cmx: pretyping/classops.cmx kernel/environ.cmx \
pretyping/evarconv.cmx kernel/evd.cmx kernel/generic.cmx kernel/names.cmx \
- pretyping/recordops.cmx kernel/reduction.cmx pretyping/retyping.cmx \
- kernel/term.cmx kernel/type_errors.cmx kernel/typeops.cmx lib/util.cmx \
+ pretyping/pretype_errors.cmx pretyping/recordops.cmx kernel/reduction.cmx \
+ pretyping/retyping.cmx kernel/term.cmx kernel/typeops.cmx lib/util.cmx \
pretyping/coercion.cmi
pretyping/detyping.cmo: kernel/declarations.cmi library/declare.cmi \
kernel/generic.cmi library/global.cmi library/goptions.cmi \
@@ -569,13 +568,13 @@ pretyping/evarconv.cmx: pretyping/classops.cmx kernel/environ.cmx \
pretyping/evarutil.cmo: kernel/environ.cmi kernel/evd.cmi kernel/generic.cmi \
library/indrec.cmi kernel/instantiate.cmi kernel/names.cmi lib/pp.cmi \
pretyping/pretype_errors.cmi kernel/reduction.cmi pretyping/retyping.cmi \
- kernel/sign.cmi kernel/term.cmi kernel/univ.cmi lib/util.cmi \
- pretyping/evarutil.cmi
+ kernel/sign.cmi kernel/term.cmi kernel/typeops.cmi kernel/univ.cmi \
+ lib/util.cmi pretyping/evarutil.cmi
pretyping/evarutil.cmx: kernel/environ.cmx kernel/evd.cmx kernel/generic.cmx \
library/indrec.cmx kernel/instantiate.cmx kernel/names.cmx lib/pp.cmx \
pretyping/pretype_errors.cmx kernel/reduction.cmx pretyping/retyping.cmx \
- kernel/sign.cmx kernel/term.cmx kernel/univ.cmx lib/util.cmx \
- pretyping/evarutil.cmi
+ kernel/sign.cmx kernel/term.cmx kernel/typeops.cmx kernel/univ.cmx \
+ lib/util.cmx pretyping/evarutil.cmi
pretyping/pretype_errors.cmo: kernel/environ.cmi library/global.cmi \
kernel/names.cmi pretyping/rawterm.cmi kernel/sign.cmi \
kernel/type_errors.cmi pretyping/pretype_errors.cmi
@@ -589,7 +588,7 @@ pretyping/pretyping.cmo: pretyping/cases.cmi pretyping/classops.cmi \
kernel/names.cmi lib/pp.cmi pretyping/pretype_errors.cmi \
pretyping/rawterm.cmi pretyping/recordops.cmi kernel/reduction.cmi \
pretyping/retyping.cmi kernel/sign.cmi kernel/term.cmi \
- kernel/type_errors.cmi kernel/typeops.cmi lib/util.cmi \
+ kernel/type_errors.cmi kernel/typeops.cmi kernel/univ.cmi lib/util.cmi \
pretyping/pretyping.cmi
pretyping/pretyping.cmx: pretyping/cases.cmx pretyping/classops.cmx \
pretyping/coercion.cmx kernel/environ.cmx pretyping/evarconv.cmx \
@@ -598,7 +597,7 @@ pretyping/pretyping.cmx: pretyping/cases.cmx pretyping/classops.cmx \
kernel/names.cmx lib/pp.cmx pretyping/pretype_errors.cmx \
pretyping/rawterm.cmx pretyping/recordops.cmx kernel/reduction.cmx \
pretyping/retyping.cmx kernel/sign.cmx kernel/term.cmx \
- kernel/type_errors.cmx kernel/typeops.cmx lib/util.cmx \
+ kernel/type_errors.cmx kernel/typeops.cmx kernel/univ.cmx lib/util.cmx \
pretyping/pretyping.cmi
pretyping/rawterm.cmo: kernel/names.cmi kernel/sign.cmi kernel/term.cmi \
lib/util.cmi pretyping/rawterm.cmi
@@ -688,14 +687,14 @@ proofs/pattern.cmx: kernel/generic.cmx kernel/names.cmx pretyping/rawterm.cmx \
kernel/reduction.cmx kernel/term.cmx lib/util.cmx proofs/pattern.cmi
proofs/pfedit.cmo: parsing/astterm.cmi kernel/declarations.cmi \
library/declare.cmi lib/edit.cmi kernel/environ.cmi kernel/evd.cmi \
- kernel/generic.cmi library/lib.cmi kernel/names.cmi lib/options.cmi \
- lib/pp.cmi proofs/proof_trees.cmi proofs/proof_type.cmi kernel/sign.cmi \
+ kernel/generic.cmi library/lib.cmi kernel/names.cmi lib/pp.cmi \
+ proofs/proof_trees.cmi proofs/proof_type.cmi kernel/sign.cmi \
proofs/tacmach.cmi kernel/term.cmi pretyping/typing.cmi lib/util.cmi \
proofs/pfedit.cmi
proofs/pfedit.cmx: parsing/astterm.cmx kernel/declarations.cmx \
library/declare.cmx lib/edit.cmx kernel/environ.cmx kernel/evd.cmx \
- kernel/generic.cmx library/lib.cmx kernel/names.cmx lib/options.cmx \
- lib/pp.cmx proofs/proof_trees.cmx proofs/proof_type.cmx kernel/sign.cmx \
+ kernel/generic.cmx library/lib.cmx kernel/names.cmx lib/pp.cmx \
+ proofs/proof_trees.cmx proofs/proof_type.cmx kernel/sign.cmx \
proofs/tacmach.cmx kernel/term.cmx pretyping/typing.cmx lib/util.cmx \
proofs/pfedit.cmi
proofs/proof_trees.cmo: parsing/ast.cmi pretyping/detyping.cmi \
@@ -1021,17 +1020,17 @@ toplevel/fhimsg.cmx: kernel/environ.cmx kernel/generic.cmx kernel/names.cmx \
lib/pp.cmx kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx \
kernel/type_errors.cmx lib/util.cmx toplevel/fhimsg.cmi
toplevel/himsg.cmo: parsing/ast.cmi kernel/environ.cmi kernel/generic.cmi \
- kernel/indtypes.cmi kernel/inductive.cmi proofs/logic.cmi \
- kernel/names.cmi lib/options.cmi lib/pp.cmi parsing/pretty.cmi \
- parsing/printer.cmi kernel/reduction.cmi kernel/sign.cmi \
- proofs/tacmach.cmi kernel/term.cmi kernel/type_errors.cmi lib/util.cmi \
- toplevel/himsg.cmi
+ library/global.cmi kernel/indtypes.cmi kernel/inductive.cmi \
+ proofs/logic.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \
+ parsing/pretty.cmi parsing/printer.cmi kernel/reduction.cmi \
+ kernel/sign.cmi proofs/tacmach.cmi kernel/term.cmi kernel/type_errors.cmi \
+ lib/util.cmi toplevel/himsg.cmi
toplevel/himsg.cmx: parsing/ast.cmx kernel/environ.cmx kernel/generic.cmx \
- kernel/indtypes.cmx kernel/inductive.cmx proofs/logic.cmx \
- kernel/names.cmx lib/options.cmx lib/pp.cmx parsing/pretty.cmx \
- parsing/printer.cmx kernel/reduction.cmx kernel/sign.cmx \
- proofs/tacmach.cmx kernel/term.cmx kernel/type_errors.cmx lib/util.cmx \
- toplevel/himsg.cmi
+ library/global.cmx kernel/indtypes.cmx kernel/inductive.cmx \
+ proofs/logic.cmx kernel/names.cmx lib/options.cmx lib/pp.cmx \
+ parsing/pretty.cmx parsing/printer.cmx kernel/reduction.cmx \
+ kernel/sign.cmx proofs/tacmach.cmx kernel/term.cmx kernel/type_errors.cmx \
+ lib/util.cmx toplevel/himsg.cmi
toplevel/metasyntax.cmo: parsing/ast.cmi parsing/coqast.cmi \
parsing/egrammar.cmi parsing/esyntax.cmi parsing/extend.cmi \
library/lib.cmi library/libobject.cmi library/library.cmi \
@@ -1067,13 +1066,13 @@ toplevel/record.cmx: parsing/ast.cmx parsing/astterm.cmx pretyping/class.cmx \
library/global.cmx kernel/inductive.cmx kernel/names.cmx lib/pp.cmx \
pretyping/recordops.cmx kernel/term.cmx lib/util.cmx toplevel/record.cmi
toplevel/toplevel.cmo: parsing/ast.cmi toplevel/errors.cmi toplevel/mltop.cmi \
- lib/options.cmi parsing/pcoq.cmi proofs/pfedit.cmi lib/pp.cmi \
- toplevel/protectedtoplevel.cmi lib/util.cmi toplevel/vernac.cmi \
- toplevel/vernacinterp.cmi toplevel/toplevel.cmi
+ kernel/names.cmi lib/options.cmi parsing/pcoq.cmi proofs/pfedit.cmi \
+ lib/pp.cmi toplevel/protectedtoplevel.cmi lib/util.cmi \
+ toplevel/vernac.cmi toplevel/vernacinterp.cmi toplevel/toplevel.cmi
toplevel/toplevel.cmx: parsing/ast.cmx toplevel/errors.cmx toplevel/mltop.cmi \
- lib/options.cmx parsing/pcoq.cmx proofs/pfedit.cmx lib/pp.cmx \
- toplevel/protectedtoplevel.cmx lib/util.cmx toplevel/vernac.cmx \
- toplevel/vernacinterp.cmx toplevel/toplevel.cmi
+ kernel/names.cmx lib/options.cmx parsing/pcoq.cmx proofs/pfedit.cmx \
+ lib/pp.cmx toplevel/protectedtoplevel.cmx lib/util.cmx \
+ toplevel/vernac.cmx toplevel/vernacinterp.cmx toplevel/toplevel.cmi
toplevel/usage.cmo: toplevel/usage.cmi
toplevel/usage.cmx: toplevel/usage.cmi
toplevel/vernacentries.cmo: parsing/ast.cmi parsing/astterm.cmi \
diff --git a/library/impargs.ml b/library/impargs.ml
index b334092b92..5b52f19760 100644
--- a/library/impargs.ml
+++ b/library/impargs.ml
@@ -68,7 +68,7 @@ let declare_inductive_implicits sp =
let mib = Global.lookup_mind sp in
let imps_one_inductive mip =
(auto_implicits (body_of_type mip.mind_arity),
- Array.map auto_implicits mip.mind_lc)
+ Array.map (fun c -> auto_implicits (body_of_type c)) mip.mind_lc)
in
let imps = Array.map imps_one_inductive mib.mind_packets in
inductives_table := Spmap.add sp imps !inductives_table
diff --git a/library/indrec.ml b/library/indrec.ml
index f83138b3d0..da5aeec345 100644
--- a/library/indrec.ml
+++ b/library/indrec.ml
@@ -398,66 +398,3 @@ let type_rec_branches recursive env sigma ind pt p c =
else
type_case_branches env sigma ind pt p c
-(***************************************************)
-(* Building ML like case expressions without types *)
-
-let concl_n env sigma =
- let rec decrec m c = if m = 0 then c else
- match whd_betadeltaiota env sigma c with
- | DOP2(Prod,_,DLAM(n,c_0)) -> decrec (m-1) c_0
- | _ -> failwith "Typing.concl_n"
- in
- decrec
-
-let count_rec_arg j =
- let rec crec i = function
- | [] -> i
- | (Mrec k::l) -> crec (if k=j then (i+1) else i) l
- | (_::l) -> crec i l
- in
- crec 0
-
-(* if arity of mispec is (p_bar:P_bar)(a_bar:A_bar)s where p_bar are the
- * K parameters. Then then build_notdep builds the predicate
- * [a_bar:A'_bar](lift k pred)
- * where A'_bar = A_bar[p_bar <- globargs] *)
-
-let build_notdep_pred env sigma indf pred =
- let arsign,_ = get_arity env sigma indf in
- let nar = List.length arsign in
- it_lambda_name env (lift nar pred) arsign
-
-
-let pred_case_ml_fail env sigma isrec (IndType (indf,realargs)) (i,ft) =
- let pred =
- let mispec,_ = dest_ind_family indf in
- let recargs = mis_recarg mispec in
- assert (Array.length recargs <> 0);
- let recargi = recargs.(i-1) in
- let j = mis_index mispec in
- let nbrec = if isrec then count_rec_arg j recargi else 0 in
- let nb_arg = List.length (recargs.(i-1)) + nbrec in
- let pred = concl_n env sigma nb_arg ft in
- if noccur_between 1 nb_arg pred then
- lift (-nb_arg) pred
- else
- failwith "Dependent"
- in
- if realargs = [] then
- pred
- else (* we try with [_:T1]..[_:Tn](lift n pred) *)
- build_notdep_pred env sigma indf pred
-
-let pred_case_ml env sigma isrec indt lf (i,ft) =
- pred_case_ml_fail env sigma isrec indt (i,ft)
-
-(* similar to pred_case_ml but does not expect the list lf of braches *)
-let pred_case_ml_onebranch env sigma isrec indt (i,f,ft) =
- pred_case_ml_fail env sigma isrec indt (i,ft)
-
-(* Used in Program only *)
-let make_case_ml isrec pred c ci lf =
- if isrec then
- DOPN(XTRA("REC"),Array.append [|pred;c|] lf)
- else
- mkMutCaseA ci pred c lf
diff --git a/library/indrec.mli b/library/indrec.mli
index bfb22f4c99..728b3c5dc2 100644
--- a/library/indrec.mli
+++ b/library/indrec.mli
@@ -37,20 +37,3 @@ val make_rec_branch_arg :
env -> 'a evar_map ->
int * ('b * constr) option array * int ->
constr -> constructor_summary -> recarg list -> constr
-
-val pred_case_ml_onebranch : env -> 'c evar_map -> bool ->
- inductive_type -> int * constr * constr -> constr
-
-(*i Info pour JCF : déplacé dans pretyping, sert à Program
-val transform_rec : env -> 'c evar_map -> (constr array)
- -> (constr * constr) -> constr
-i*)
-
-(*i Utilisés dans Program
-val pred_case_ml : env -> 'c evar_map -> bool ->
- constr * (inductive * constr list * constr list)
- -> constr array -> int * constr ->constr
-val make_case_ml :
- bool -> constr -> constr -> case_info -> constr array -> constr
-i*)
-
diff --git a/parsing/printer.mli b/parsing/printer.mli
index 75ac36c081..ff3179c7d3 100644
--- a/parsing/printer.mli
+++ b/parsing/printer.mli
@@ -18,6 +18,9 @@ val prterm_env_at_top : 'a assumptions -> constr -> std_ppcmds
val prterm : constr -> std_ppcmds
val prtype_env : 'a assumptions -> typed_type -> std_ppcmds
val prtype : typed_type -> std_ppcmds
+val prjudge_env :
+ 'a assumptions -> Environ.unsafe_judgment -> std_ppcmds * std_ppcmds
+val prjudge : Environ.unsafe_judgment -> std_ppcmds * std_ppcmds
val pr_rawterm : Rawterm.rawconstr -> std_ppcmds
val pr_cases_pattern : Rawterm.cases_pattern -> std_ppcmds
diff --git a/proofs/tacinterp.ml b/proofs/tacinterp.ml
index bd7ff32a76..6d999b9c5d 100644
--- a/proofs/tacinterp.ml
+++ b/proofs/tacinterp.ml
@@ -588,7 +588,7 @@ and cvt_pattern (evc,env,lfun,lmatch,goalopt)=function
in
let jdt=Typing.unsafe_machine env evc csr
in
- (occs, jdt.Environ.uj_val, jdt.Environ.uj_type)
+ (occs, jdt.Environ.uj_val, body_of_type jdt.Environ.uj_type)
|arg -> invalid_arg_loc (Ast.loc arg,"cvt_pattern")
and cvt_unfold (evc,env,lfun,lmatch,goalopt)=function
Node(_,"UNFOLD", com::nums) ->
diff --git a/toplevel/discharge.ml b/toplevel/discharge.ml
index 67ecd9139b..820100f6fc 100644
--- a/toplevel/discharge.ml
+++ b/toplevel/discharge.ml
@@ -27,15 +27,7 @@ let recalc_sp sp =
let whd_all c = whd_betadeltaiota (Global.env()) Evd.empty c
let generalize_type id var c =
- let c' = mkProd (Name id) (body_of_type var) (subst_var id (body_of_type c)) in
- let c'ty = sort_of_product_without_univ (level_of_type var) (level_of_type c) in
- make_typed c' c'ty
-
-let casted_generalize id var c =
- let c' = mkProd (Name id) (body_of_type var) (subst_var id (cast_term c)) in
- let s = destSort (whd_all (cast_type c)) in
- let c'ty = sort_of_product_without_univ (level_of_type var) s in
- mkCast c' (DOP0 (Sort c'ty))
+ typed_product_without_universes (Name id) var (typed_app (subst_var id) c)
type modification_action = ABSTRACT | ERASE
@@ -116,7 +108,9 @@ let abstract_inductive ids_to_abs hyps inds =
(function (tname,arity,cnames,lc) ->
let arity' = generalize_type id ty arity in
let lc' =
- List.map (fun b-> casted_generalize id ty (substl new_refs b)) lc
+ List.map
+ (fun b -> generalize_type id ty (typed_app (substl new_refs) b))
+ lc
in
(tname,arity',cnames,lc'))
inds
@@ -132,7 +126,10 @@ let abstract_inductive ids_to_abs hyps inds =
in
let (_,inds',revmodl) =
List.fold_left abstract_once (hyps,inds,[]) ids_to_abs in
- let inds'' = List.map (fun (a,b,c,d) -> (a,body_of_type b,c,d)) inds' in
+ let inds'' =
+ List.map
+ (fun (a,b,c,d) -> (a,body_of_type b,c,List.map body_of_type d))
+ inds' in
(inds'', List.rev revmodl)
let abstract_constant ids_to_abs hyps (body,typ) =
@@ -151,10 +148,7 @@ let abstract_constant ids_to_abs hyps (body,typ) =
Some (ref (Recipe
(fun () -> mkLambda name cvar (subst_var id (f())))))
in
- let typ' = make_typed
- (mkProd name cvar (subst_var id (body_of_type typ)))
- (sort_of_product_without_univ (level_of_type var) (level_of_type typ))
- in
+ let typ' = generalize_type id var typ in
(tl_sign hyps,body',typ',ABSTRACT::modl)
in
let (_,body',typ',revmodl) =
@@ -213,7 +207,7 @@ let process_inductive osecsp nsecsp oldenv (ids_to_discard,modlist) mib =
(mip.mind_typename,
expmod_type oldenv modlist mip.mind_arity,
Array.to_list mip.mind_consnames,
- array_map_to_list (expmod_constr oldenv modlist) mip.mind_lc))
+ array_map_to_list (expmod_type oldenv modlist) mip.mind_lc))
mib.mind_packets
in
let (inds',modl) = abstract_inductive ids_to_discard mib.mind_hyps inds in
diff --git a/toplevel/himsg.ml b/toplevel/himsg.ml
index b824c20abf..28df858fdf 100644
--- a/toplevel/himsg.ml
+++ b/toplevel/himsg.ml
@@ -97,7 +97,7 @@ let explain_ill_formed_branch k ctx c i actty expty =
let explain_generalization k ctx (name,var) c =
let ctx = make_all_name_different ctx in
let pe = pr_ne_env [< 'sTR"in environment" >] k ctx in
- let pv = prterm_env ctx (body_of_type var) in
+ let pv = prtype_env ctx var in
let pc = prterm_env (add_rel (name,var) ctx) c in
[< 'sTR"Illegal generalization: "; pe; 'fNL;
'sTR"Cannot generalize"; 'bRK(1,1); pv; 'sPC;
@@ -118,14 +118,12 @@ let explain_actual_type k ctx c ct pt =
let explain_cant_apply_bad_type k ctx (n,exptyp,actualtyp) rator randl =
let ctx = make_all_name_different ctx in
let pe = pr_ne_env [< 'sTR"in environment" >] k ctx in
- let pr = prterm_env ctx rator.uj_val in
- let prt = prterm_env ctx rator.uj_type in
+ let pr,prt = prjudge_env ctx rator in
let term_string = if List.length randl > 1 then "terms" else "term" in
let many = match n mod 10 with 1 -> "st" | 2 -> "nd" | _ -> "th" in
let appl = prlist_with_sep pr_fnl
(fun c ->
- let pc = prterm_env ctx c.uj_val in
- let pct = prterm_env ctx c.uj_type in
+ let pc,pct = prjudge_env ctx c in
hOV 2 [< pc; 'sPC; 'sTR": " ; pct >]) randl
in
[< 'sTR"Illegal application (Type Error): "; pe; 'fNL;
@@ -141,12 +139,12 @@ let explain_cant_apply_not_functional k ctx rator randl =
let ctx = make_all_name_different ctx in
let pe = pr_ne_env [< 'sTR"in environment" >] k ctx in
let pr = prterm_env ctx rator.uj_val in
- let prt = prterm_env ctx rator.uj_type in
+ let prt = prterm_env ctx (body_of_type rator.uj_type) in
let term_string = if List.length randl > 1 then "terms" else "term" in
let appl = prlist_with_sep pr_fnl
(fun c ->
let pc = prterm_env ctx c.uj_val in
- let pct = prterm_env ctx c.uj_type in
+ let pct = prterm_env ctx (body_of_type c.uj_type) in
hOV 2 [< pc; 'sPC; 'sTR": " ; pct >]) randl
in
[< 'sTR"Illegal application (Non-functional construction): "; pe; 'fNL;
@@ -167,8 +165,7 @@ let explain_ill_formed_rec_body k ctx str lna i vdefs =
'sTR "is not well-formed" >]
let explain_ill_typed_rec_body k ctx i lna vdefj vargs =
- let pvd = prterm_env ctx (vdefj.(i)).uj_val in
- let pvdt = prterm_env ctx (vdefj.(i)).uj_type in
+ let pvd,pvdt = prjudge_env ctx (vdefj.(i)) in
let pv = prterm_env ctx (body_of_type vargs.(i)) in
[< 'sTR"The " ;
if Array.length vdefj = 1 then [<>] else [<'iNT (i+1); 'sTR "-th">];