aboutsummaryrefslogtreecommitdiffhomepage
path: root/kernel/sign.mli
blob: 5c93bccbf39fa4343d7925efc89024229f4f5062 (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

(*i $Id$ i*)

(*i*)
open Names
open Term
(*i*)

(*s Signatures of ordered named declarations *)

type named_context = named_declaration list

val add_named_decl : 
  identifier * constr option * types -> named_context -> named_context
val add_named_assum : identifier * types -> named_context -> named_context
val add_named_def : 
  identifier * constr * types -> named_context -> named_context
val lookup_id : identifier -> named_context -> constr option * types
val lookup_id_type : identifier -> named_context -> types
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
val instance_from_named_context : named_context -> constr list

(*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 * types) -> rel_context -> rel_context
val add_rel_assum : (name * types) -> rel_context -> rel_context
val add_rel_def : (name * constr * types) -> rel_context -> rel_context
val lookup_rel_type : int -> rel_context -> name * types
val lookup_rel_value : int -> rel_context -> constr option
val lookup_rel_id : identifier -> rel_context -> int * types
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