blob: 574cb04fa6d7e51c4b2547258a8320de4f843613 (
plain)
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
129
|
(***********************************************************************)
(* v * The Coq Proof Assistant / The Coq Development Team *)
(* <O___,, * INRIA-Rocquencourt & LRI-CNRS-Orsay *)
(* \VV/ *************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(***********************************************************************)
(*i $Id$ i*)
(*i*)
open Names
open Univ
open Term
open Sign
(*i*)
(* This module defines the internal representation of global
declarations. This includes global constants/axioms, mutual
inductive definitions, modules and module types *)
(*s Constants (Definition/Axiom) *)
type constant_body = {
const_hyps : section_context; (* New: younger hyp at top *)
const_body : constr option;
const_type : types;
const_constraints : constraints;
const_opaque : bool }
val subst_const_body : substitution -> constant_body -> constant_body
(*s Inductive types (internal representation with redundant
information). *)
type recarg =
| Norec
| Mrec of int
| Imbr of inductive
val subst_recarg : substitution -> recarg -> recarg
type wf_paths = recarg Rtree.t
val mk_norec : wf_paths
val mk_paths : recarg -> wf_paths list array -> wf_paths
val dest_recarg : wf_paths -> recarg
val dest_subterms : wf_paths -> wf_paths list array
val subst_wf_paths : substitution -> wf_paths -> wf_paths
(* [mind_typename] is the name of the inductive; [mind_arity] is
the arity generalized over global parameters; [mind_lc] is the list
of types of constructors generalized over global parameters and
relative to the global context enriched with the arities of the
inductives *)
type one_inductive_body = {
mind_typename : identifier;
mind_nparams : int;
mind_params_ctxt : rel_context;
mind_nrealargs : int;
mind_nf_arity : types;
mind_user_arity : types;
mind_sort : sorts;
mind_kelim : sorts_family list;
mind_consnames : identifier array;
mind_nf_lc : types array; (* constrs and arity with pre-expanded ccl *)
mind_user_lc : types array;
mind_recargs : wf_paths;
}
type mutual_inductive_body = {
mind_finite : bool;
mind_ntypes : int;
mind_hyps : section_context;
mind_packets : one_inductive_body array;
mind_constraints : constraints;
mind_singl : constr option;
mind_equiv : kernel_name option;
}
val subst_mind : substitution -> mutual_inductive_body -> mutual_inductive_body
(*s Modules: signature component specifications, module types, and
module declarations *)
type specification_body =
| SPBconst of constant_body
| SPBmind of mutual_inductive_body
| SPBmodule of module_specification_body
| SPBmodtype of module_type_body
and module_signature_body = (label * specification_body) list
and module_type_body =
| MTBident of kernel_name
| MTBfunsig of mod_bound_id * module_type_body * module_type_body
| MTBsig of mod_self_id * module_signature_body
and module_expr_body =
| MEBident of module_path
| MEBfunctor of mod_bound_id * module_type_body * module_expr_body
| MEBstruct of mod_self_id * module_structure_body
| MEBapply of module_expr_body * module_expr_body
* constraints
and module_specification_body = module_type_body * module_path option
and structure_elem_body =
| SEBconst of constant_body
| SEBmind of mutual_inductive_body
| SEBmodule of module_body
| SEBmodtype of module_type_body
and module_structure_body = (label * structure_elem_body) list
and module_body =
{ mod_expr : module_expr_body option;
mod_user_type : (module_type_body * constraints) option;
mod_type : module_type_body;
mod_equiv : module_path option }
|