1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
(************************************************************************)
(* * The Coq Proof Assistant / The Coq Development Team *)
(* v * Copyright INRIA, CNRS and contributors *)
(* <O___,, * (see version control and CREDITS file for authors & dates) *)
(* \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 locality = Discharge | Global of Declare.import_status
(** Declaration hooks *)
module Hook : sig
type t
(** Hooks allow users of the API to perform arbitrary actions at
proof/definition saving time. For example, to register a constant
as a Coercion, perform some cleanup, update the search database,
etc... *)
module S : sig
type t =
{ uctx : UState.t
(** [ustate]: universe constraints obtained when the term was closed *)
; obls : (Id.t * Constr.t) list
(** [(n1,t1),...(nm,tm)]: association list between obligation
name and the corresponding defined term (might be a constant,
but also an arbitrary term in the Expand case of obligations) *)
; scope : locality
(** [scope]: Locality of the original declaration *)
; dref : GlobRef.t
(** [dref]: identifier of the original declaration *)
}
end
val make : (S.t -> unit) -> t
val call : ?hook:t -> S.t -> unit
end
module ClosedDef : sig
type t
(* Don't use for non-interactive proofs *)
val of_proof_entry : Evd.side_effects Declare.proof_entry -> t
end
val declare_definition
: name:Id.t
-> scope:locality
-> kind:Decls.logical_kind
-> ?hook_data:(Hook.t * UState.t * (Id.t * Constr.t) list)
-> ubind:UnivNames.universe_binders
-> impargs:Impargs.manual_implicits
-> ClosedDef.t
-> GlobRef.t
val declare_assumption
: ?fix_exn:(Exninfo.iexn -> Exninfo.iexn)
-> name:Id.t
-> scope:locality
-> hook:Hook.t option
-> impargs:Impargs.manual_implicits
-> uctx:UState.t
-> Entries.parameter_entry
-> GlobRef.t
module Recthm : sig
type t =
{ name : Id.t
(** Name of theorem *)
; typ : Constr.t
(** Type of theorem *)
; args : Name.t list
(** Names to pre-introduce *)
; impargs : Impargs.manual_implicits
(** Explicitily declared implicit arguments *)
}
end
val declare_mutually_recursive
: opaque:bool
-> scope:locality
-> kind:Decls.logical_kind
-> poly:bool
-> uctx:UState.t
-> udecl:UState.universe_decl
-> ntns:Vernacexpr.decl_notation list
-> rec_declaration:Constr.rec_declaration
-> possible_indexes:int list list option
-> ?restrict_ucontext:bool
(** XXX: restrict_ucontext should be always true, this seems like a
bug in obligations, so this parameter should go away *)
-> Recthm.t list
-> Names.GlobRef.t list
(* The common use of the returned evar_map is to obtain the universe
binders and context for the hook; we should refactor that soon by
merging prepare and declare. *)
val prepare_definition
: ?opaque:bool
-> ?inline:bool
-> ?fix_exn:(Exninfo.iexn -> Exninfo.iexn)
-> poly:bool
-> udecl:UState.universe_decl
-> types:EConstr.t option
-> body:EConstr.t
-> Evd.evar_map
-> Evd.evar_map * ClosedDef.t
val prepare_obligation
: ?opaque:bool
-> ?inline:bool
-> name:Id.t
-> poly:bool
-> udecl:UState.universe_decl
-> types:EConstr.t option
-> body:EConstr.t
-> Evd.evar_map
-> Constr.constr * Constr.types * UState.t * RetrieveObl.obligation_info
val prepare_parameter
: poly:bool
-> udecl:UState.universe_decl
-> types:EConstr.types
-> Evd.evar_map
-> Evd.evar_map * Entries.parameter_entry
|