From f5ab2e37b0609d8edb8d65dfae49741442a90657 Mon Sep 17 00:00:00 2001 From: letouzey Date: Tue, 2 Apr 2013 22:08:44 +0000 Subject: Revised infrastructure for lazy loading of opaque proofs Get rid of the LightenLibrary hack : no more last-minute collect of opaque terms and Obj.magic tricks. Instead, we make coqc accumulate the opaque terms as soon as constant_bodies are created outside sections. In these cases, the opaque terms are placed in a special table, and some (DirPath.t * int) are used as indexes in constant_body. In an interactive session, the local opaque terms stay directly stored in the constant_body. The structure of .vo file stays similar : magic number, regular library structure, digest of the first part, array of opaque terms. In addition, we now have a final checksum for checking the integrity of the whole .vo file. The other difference is that lazy_constr aren't changed into int indexes in .vo files, but are now coded as (substitution list * DirPath.t * int). In particular this approach allows to refer to opaque terms from another library. This (and accumulating substitutions in lazy_constr) seems to greatly help decreasing the size of opaque tables : -20% of vo size on the standard library :-). The compilation times are slightly better, but that can be statistic noise. The -force-load-proofs isn't active anymore : it behaves now just like -lazy-load-proofs. The -dont-load-proofs mode has slightly changed : opaque terms aren't seen as axioms anymore, but accessing their bodies will raise an error. Btw, API change : Declareops.body_of_constant now produces directly a constr option instead of a constr_substituted option git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16382 85f007b7-540e-0410-9357-904b9bb8a0f7 --- toplevel/coqtop.ml | 3 +-- toplevel/lemmas.ml | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'toplevel') diff --git a/toplevel/coqtop.ml b/toplevel/coqtop.ml index 386567deea..1f0ccf0fcc 100644 --- a/toplevel/coqtop.ml +++ b/toplevel/coqtop.ml @@ -218,8 +218,7 @@ let parse_args arglist = | "-batch" :: rem -> set_batch_mode (); parse rem | "-boot" :: rem -> boot := true; no_load_rc (); parse rem | "-quality" :: rem -> term_quality := true; no_load_rc (); parse rem - | "-outputstate" :: s :: rem -> - Flags.load_proofs := Flags.Force; set_outputstate s; parse rem + | "-outputstate" :: s :: rem -> set_outputstate s; parse rem | "-outputstate" :: [] -> usage () | ("-noinit"|"-nois") :: rem -> load_init := false; parse rem diff --git a/toplevel/lemmas.ml b/toplevel/lemmas.ml index e1f17b5711..3779815e97 100644 --- a/toplevel/lemmas.ml +++ b/toplevel/lemmas.ml @@ -41,7 +41,7 @@ let retrieve_first_recthm = function (pi2 (Global.lookup_named id),variable_opacity id) | ConstRef cst -> let cb = Global.lookup_constant cst in - (Option.map Lazyconstr.force (body_of_constant cb), is_opaque cb) + (body_of_constant cb, is_opaque cb) | _ -> assert false let adjust_guardness_conditions const = function -- cgit v1.2.3