aboutsummaryrefslogtreecommitdiff
path: root/kernel/safe_typing.mli
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/safe_typing.mli')
-rw-r--r--kernel/safe_typing.mli228
1 files changed, 228 insertions, 0 deletions
diff --git a/kernel/safe_typing.mli b/kernel/safe_typing.mli
new file mode 100644
index 0000000000..57b01f15e3
--- /dev/null
+++ b/kernel/safe_typing.mli
@@ -0,0 +1,228 @@
+(************************************************************************)
+(* * The Coq Proof Assistant / The Coq Development Team *)
+(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
+(* <O___,, * (see CREDITS file for the list of authors) *)
+(* \VV/ **************************************************************)
+(* // * This file is distributed under the terms of the *)
+(* * GNU Lesser General Public License Version 2.1 *)
+(* * (see LICENSE file for the text of the license) *)
+(************************************************************************)
+
+open Names
+
+type vodigest =
+ | Dvo_or_vi of Digest.t (* The digest of the seg_lib part *)
+ | Dvivo of Digest.t * Digest.t (* The digest of the seg_lib + seg_univ part *)
+
+val digest_match : actual:vodigest -> required:vodigest -> bool
+
+(** {6 Safe environments } *)
+
+(** Since we are now able to type terms, we can define an abstract type
+ of safe environments, where objects are typed before being added.
+
+ We also provide functionality for modules : [start_module], [end_module],
+ etc.
+*)
+
+type safe_environment
+
+val empty_environment : safe_environment
+
+val is_initial : safe_environment -> bool
+
+val env_of_safe_env : safe_environment -> Environ.env
+
+(** The safe_environment state monad *)
+
+type safe_transformer0 = safe_environment -> safe_environment
+type 'a safe_transformer = safe_environment -> 'a * safe_environment
+
+
+(** {6 Stm machinery } *)
+
+type private_constants
+
+val side_effects_of_private_constants :
+ private_constants -> Entries.side_eff list
+(** Return the list of individual side-effects in the order of their
+ creation. *)
+
+val empty_private_constants : private_constants
+val concat_private : private_constants -> private_constants -> private_constants
+(** [concat_private e1 e2] adds the constants of [e1] to [e2], i.e. constants in
+ [e1] must be more recent than those of [e2]. *)
+
+val private_con_of_con : safe_environment -> Constant.t -> private_constants
+val private_con_of_scheme : kind:string -> safe_environment -> (inductive * Constant.t) list -> private_constants
+
+val mk_pure_proof : Constr.constr -> private_constants Entries.proof_output
+val inline_private_constants_in_constr :
+ Environ.env -> Constr.constr -> private_constants -> Constr.constr
+val inline_private_constants_in_definition_entry :
+ Environ.env -> private_constants Entries.definition_entry -> unit Entries.definition_entry
+
+val universes_of_private : private_constants -> Univ.ContextSet.t list
+
+val is_curmod_library : safe_environment -> bool
+
+(* safe_environment has functional data affected by lazy computations,
+ * thus this function returns a new safe_environment *)
+val join_safe_environment :
+ ?except:Future.UUIDSet.t -> safe_environment -> safe_environment
+
+val is_joined_environment : safe_environment -> bool
+(** {6 Enriching a safe environment } *)
+
+(** Insertion of local declarations (Local or Variables) *)
+
+val push_named_assum :
+ (Id.t * Constr.types * bool (* polymorphic *))
+ Univ.in_universe_context_set -> safe_transformer0
+
+(** Returns the full universe context necessary to typecheck the definition
+ (futures are forced) *)
+val push_named_def :
+ Id.t * Entries.section_def_entry -> safe_transformer0
+
+(** Insertion of global axioms or definitions *)
+
+type 'a effect_entry =
+| EffectEntry : private_constants effect_entry
+| PureEntry : unit effect_entry
+
+type global_declaration =
+ | ConstantEntry : 'a effect_entry * 'a Entries.constant_entry -> global_declaration
+ | GlobalRecipe of Cooking.recipe
+
+type exported_private_constant =
+ Constant.t * Entries.side_effect_role
+
+val export_private_constants : in_section:bool ->
+ private_constants Entries.definition_entry ->
+ (unit Entries.definition_entry * exported_private_constant list) safe_transformer
+
+(** returns the main constant plus a list of auxiliary constants (empty
+ unless one requires the side effects to be exported) *)
+val add_constant :
+ in_section:bool -> Label.t -> global_declaration ->
+ Constant.t safe_transformer
+
+(** Adding an inductive type *)
+
+val add_mind :
+ Label.t -> Entries.mutual_inductive_entry ->
+ MutInd.t safe_transformer
+
+(** Adding a module or a module type *)
+
+val add_module :
+ Label.t -> Entries.module_entry -> Declarations.inline ->
+ (ModPath.t * Mod_subst.delta_resolver) safe_transformer
+val add_modtype :
+ Label.t -> Entries.module_type_entry -> Declarations.inline ->
+ ModPath.t safe_transformer
+
+(** Adding universe constraints *)
+
+val push_context_set :
+ bool -> Univ.ContextSet.t -> safe_transformer0
+
+val add_constraints :
+ Univ.Constraint.t -> safe_transformer0
+
+(* (\** Generator of universes *\) *)
+(* val next_universe : int safe_transformer *)
+
+(** Setting the type theory flavor *)
+val set_engagement : Declarations.engagement -> safe_transformer0
+val set_indices_matter : bool -> safe_transformer0
+val set_typing_flags : Declarations.typing_flags -> safe_transformer0
+val set_share_reduction : bool -> safe_transformer0
+val set_VM : bool -> safe_transformer0
+val set_native_compiler : bool -> safe_transformer0
+
+val check_engagement : Environ.env -> Declarations.set_predicativity -> unit
+
+(** {6 Interactive module functions } *)
+
+val start_module : Label.t -> ModPath.t safe_transformer
+
+val start_modtype : Label.t -> ModPath.t safe_transformer
+
+val add_module_parameter :
+ MBId.t -> Entries.module_struct_entry -> Declarations.inline ->
+ Mod_subst.delta_resolver safe_transformer
+
+(** Traditional mode: check at end of module that no future was
+ created. *)
+val allow_delayed_constants : bool ref
+
+(** The optional result type is given without its functorial part *)
+
+val end_module :
+ Label.t -> (Entries.module_struct_entry * Declarations.inline) option ->
+ (ModPath.t * MBId.t list * Mod_subst.delta_resolver) safe_transformer
+
+val end_modtype : Label.t -> (ModPath.t * MBId.t list) safe_transformer
+
+val add_include :
+ Entries.module_struct_entry -> bool -> Declarations.inline ->
+ Mod_subst.delta_resolver safe_transformer
+
+val current_modpath : safe_environment -> ModPath.t
+
+val current_dirpath : safe_environment -> DirPath.t
+
+(** {6 Libraries : loading and saving compilation units } *)
+
+type compiled_library
+
+type native_library = Nativecode.global list
+
+val module_of_library : compiled_library -> Declarations.module_body
+
+val get_library_native_symbols : safe_environment -> DirPath.t -> Nativecode.symbols
+
+val start_library : DirPath.t -> ModPath.t safe_transformer
+
+val export :
+ ?except:Future.UUIDSet.t ->
+ safe_environment -> DirPath.t ->
+ ModPath.t * compiled_library * native_library
+
+(* Constraints are non empty iff the file is a vi2vo *)
+val import : compiled_library -> Univ.ContextSet.t -> vodigest ->
+ ModPath.t safe_transformer
+
+(** {6 Safe typing judgments } *)
+
+type judgment
+
+val j_val : judgment -> Constr.constr
+val j_type : judgment -> Constr.constr
+
+(** The safe typing of a term returns a typing judgment. *)
+val typing : safe_environment -> Constr.constr -> judgment
+
+(** {6 Queries } *)
+
+val exists_objlabel : Label.t -> safe_environment -> bool
+
+val delta_of_senv :
+ safe_environment -> Mod_subst.delta_resolver * Mod_subst.delta_resolver
+
+val constant_of_delta_kn_senv : safe_environment -> KerName.t -> Constant.t
+val mind_of_delta_kn_senv : safe_environment -> KerName.t -> MutInd.t
+
+(** {6 Retroknowledge / Native compiler } *)
+
+open Retroknowledge
+
+val register :
+ field -> GlobRef.t -> safe_transformer0
+
+val register_inline : Constant.t -> safe_transformer0
+
+val set_strategy :
+ Names.Constant.t Names.tableKey -> Conv_oracle.level -> safe_transformer0