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
|
(* $Id$ *)
(*i*)
open Names
(* open Generic *)
open Term
(*i*)
(*s Signatures of ordered named declarations *)
type named_context = named_declaration list
val add_named_decl :
identifier * constr option * typed_type -> named_context -> named_context
val add_named_assum : identifier * typed_type -> named_context -> named_context
val add_named_def :
identifier * constr * typed_type -> named_context -> named_context
val lookup_id : identifier -> named_context -> constr option * typed_type
val lookup_id_type : identifier -> named_context -> typed_type
val lookup_id_value : identifier -> named_context -> constr option
val pop_named_decl : identifier -> named_context -> named_context
val empty_named_context : named_context
val ids_of_named_context : named_context -> identifier list
val map_named_context : (constr -> constr) -> named_context -> named_context
val mem_named_context : identifier -> named_context -> bool
val fold_named_context :
(named_declaration -> 'a -> 'a) -> named_context -> 'a -> 'a
val fold_named_context_reverse :
('a -> named_declaration -> 'a) -> 'a -> named_context -> 'a
val fold_named_context_both_sides :
('a -> named_declaration -> named_context -> 'a) -> named_context -> 'a -> 'a
val it_named_context_quantifier :
(named_declaration -> constr -> constr) -> constr -> named_context -> constr
val instantiate_sign :
named_context -> constr list -> (identifier * constr) list
val keep_hyps : Idset.t -> named_context -> named_context
(*s Signatures of ordered optionally named variables, intended to be
accessed by de Bruijn indices *)
type rel_context = rel_declaration list
val add_rel_decl : (name * constr option * typed_type) -> rel_context -> rel_context
val add_rel_assum : (name * typed_type) -> rel_context -> rel_context
val add_rel_def : (name * constr * typed_type) -> rel_context -> rel_context
val lookup_rel_type : int -> rel_context -> name * typed_type
val lookup_rel_value : int -> rel_context -> constr option
val lookup_rel_id : identifier -> rel_context -> int * typed_type
val empty_rel_context : rel_context
val rel_context_length : rel_context -> int
val lift_rel_context : int -> rel_context -> rel_context
val concat_rel_context : newer:rel_context -> older:rel_context -> rel_context
val ids_of_rel_context : rel_context -> identifier list
val assums_of_rel_context : rel_context -> (name * constr) list
val map_rel_context : (constr -> constr) -> rel_context -> rel_context
(*s This is used to translate names into de Bruijn indices and
vice-versa without to care about typing information *)
type names_context
val add_name : name -> names_context -> names_context
val lookup_name_of_rel : int -> names_context -> name
val lookup_rel_of_name : identifier -> names_context -> int
val names_of_rel_context : rel_context -> names_context
val empty_names_context : names_context
(*s Term destructors *)
(* Transforms a product term $(x_1:T_1)..(x_n:T_n)T$ including letins
into the pair $([(x_n,T_n);...;(x_1,T_1)],T)$, where $T$ is not a
product nor a let. *)
val decompose_prod_assum : constr -> rel_context * constr
(* Transforms a lambda term $[x_1:T_1]..[x_n:T_n]T$ including letins
into the pair $([(x_n,T_n);...;(x_1,T_1)],T)$, where $T$ is not a
lambda nor a let. *)
val decompose_lam_assum : constr -> rel_context * constr
(* Given a positive integer n, transforms a product term
$(x_1:T_1)..(x_n:T_n)T$
into the pair $([(xn,Tn);...;(x1,T1)],T)$. *)
val decompose_prod_n_assum : int -> constr -> rel_context * constr
(* Given a positive integer $n$, transforms a lambda term
$[x_1:T_1]..[x_n:T_n]T$ into the pair $([(x_n,T_n);...;(x_1,T_1)],T)$ *)
val decompose_lam_n_assum : int -> constr -> rel_context * constr
|