blob: 5a7f040d9476377c69b8ee2797b302f0f382ce1b (
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
|
(* $Id$ *)
(*i*)
open Names
open Univ
open Term
open Declarations
open Environ
(*i*)
(*s The different kinds of errors that may result of a malformed inductive
definition. *)
type inductive_error =
(* These are errors related to inductive constructions in this module *)
| NonPos of name list * constr * constr
| NotEnoughArgs of name list * constr * constr
| NotConstructor of name list * constr * constr
| NonPar of name list * constr * int * constr * constr
| SameNamesTypes of identifier
| SameNamesConstructors of identifier * identifier
| NotAnArity of identifier
| BadEntry
(* These are errors related to recursors building in Indrec *)
| NotAllowedCaseAnalysis of bool * sorts * inductive
| BadInduction of bool * identifier * sorts
| NotMutualInScheme
exception InductiveError of inductive_error
(*s The following functions are utility functions to check and to
decompose a declaration. *)
(* [mind_check_names] checks the names of an inductive types declaration
i.e. that all the types and constructors names are distinct.
It raises an exception [InductiveError _] if it is not the case. *)
val mind_check_names : mutual_inductive_entry -> unit
(* [mind_extract_and_check_params] extracts the parameters of an inductive
types declaration. It raises an exception [InductiveError _] if there is
not enough abstractions in any of the terms of the field
[mind_entry_inds]. *)
val mind_extract_and_check_params :
mutual_inductive_entry -> (name * constr) list
val mind_extract_params : int -> constr -> (name * constr) list * constr
val mind_check_lc : (name * constr) list -> mutual_inductive_entry -> unit
(* [mind_check_arities] checks that the types declared for all the
inductive types are some arities. *)
val mind_check_arities : env -> mutual_inductive_entry -> unit
(* [cci_inductive] checks positivity and builds an inductive body *)
val cci_inductive :
env -> env -> path_kind -> int -> bool ->
(identifier * typed_type * identifier list * bool * bool * typed_type array)
list ->
constraints ->
mutual_inductive_body
|