aboutsummaryrefslogtreecommitdiff
path: root/plugins/micromega/mutils.mli
blob: 9692bc631bcc581b8ceca04c4152072d68a467e1 (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
130
131
132
133
134
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2019       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \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)         *)
(************************************************************************)

module Int : sig type t = int val compare : int -> int -> int val equal : int -> int -> bool end


module ISet : sig
  include Set.S with type elt = int
  val pp : out_channel -> t -> unit
end

module IMap :
sig
  include Map.S with type key = int

  (** [from k  m] returns the submap of [m] with keys greater or equal k *)
  val from : key -> 'elt t -> 'elt t

end

val numerator : Num.num -> Big_int.big_int
val denominator : Num.num -> Big_int.big_int

module Cmp : sig

  val compare_list : ('a -> 'b -> int) -> 'a list -> 'b list -> int
  val compare_lexical : (unit -> int) list -> int

end

module Tag : sig

  type t

  val pp : out_channel -> t -> unit
  val next : t -> t
  val max  :  t -> t -> t
  val from : int -> t
  val to_int : t -> int

end

module TagSet : CSig.SetS with type elt = Tag.t

val pp_list : string -> (out_channel -> 'a -> unit) -> out_channel -> 'a list -> unit

module CamlToCoq : sig

  val positive : int -> Micromega.positive
  val bigint : Big_int.big_int -> Micromega.z
  val n : int -> Micromega.n
  val nat : int -> Micromega.nat
  val q : Num.num -> Micromega.q
  val index : int -> Micromega.positive
  val z : int -> Micromega.z
  val positive_big_int : Big_int.big_int -> Micromega.positive

end

module CoqToCaml : sig

  val z_big_int : Micromega.z -> Big_int.big_int
  val z         : Micromega.z -> int
  val q_to_num  : Micromega.q -> Num.num
  val positive  : Micromega.positive -> int
  val n         : Micromega.n -> int
  val nat       : Micromega.nat -> int
  val index     : Micromega.positive -> int

end

module Hash : sig

  val eq_op1      : Micromega.op1 -> Micromega.op1 -> bool

  val eq_positive : Micromega.positive -> Micromega.positive -> bool

  val eq_z : Micromega.z -> Micromega.z -> bool

  val eq_q : Micromega.q -> Micromega.q -> bool

  val eq_pol  : ('a -> 'a -> bool) -> 'a Micromega.pol -> 'a Micromega.pol -> bool

  val eq_pair : ('a -> 'a -> bool) -> ('b -> 'b -> bool) -> 'a * 'b -> 'a * 'b -> bool

  val hash_op1 : int -> Micromega.op1 -> int

  val hash_pol  : (int -> 'a -> int) -> int -> 'a Micromega.pol -> int

  val hash_pair : (int -> 'a -> int) -> (int -> 'b -> int) -> int -> 'a * 'b -> int

  val hash_z   : int -> Micromega.z -> int

  val hash_q   : int -> Micromega.q -> int

  val hash_string : int -> string -> int

  val hash_elt : ('a -> int) -> int -> 'a -> int

end


val ppcm : Big_int.big_int -> Big_int.big_int -> Big_int.big_int

val all_pairs : ('a -> 'a -> 'b) -> 'a list -> 'b list
val try_any : (('a -> 'b option) * 'c) list -> 'a -> 'b option
val is_sublist : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool

val extract : ('a -> 'b option) -> 'a list -> ('b * 'a) option * 'a list

val extract_all : ('a -> 'b option) -> 'a list -> ('b * 'a) list * 'a list

val extract_best : ('a -> 'b option) -> ('b -> 'b -> bool) -> 'a list -> ('b *'a) option * 'a list

val find_some : ('a -> 'b option) -> 'a list  -> 'b option

val iterate_until_stable : ('a -> 'a option) -> 'a -> 'a

val simplify : ('a -> 'a option) -> 'a list -> 'a list option

val saturate : ('a -> 'b option) -> ('b * 'a -> 'a -> 'a option) -> 'a list -> 'a list

val generate : ('a -> 'b option) -> 'a list -> 'b list

val app_funs : ('a -> 'b option) list -> 'a -> 'b option

val command : string -> string array -> 'a -> 'b