sig
type ('a, 'b) t
type setable
type unsetable
type 'a setable_t = ('a, Invariant.setable) Invariant.t
type 'a unsetable_t = ('a, Invariant.unsetable) Invariant.t
val create : ?name:string -> 'a -> 'a Invariant.setable_t
val constant : ?name:string -> 'a -> 'a Invariant.unsetable_t
val set : 'a Invariant.setable_t -> 'a -> unit
val get : ('a, 'b) Invariant.t -> 'a
val id : ('a, 'b) Invariant.t -> int
val name : ('a, 'b) Invariant.t -> string
val fprint :
Pervasives.out_channel ->
?printer:(Pervasives.out_channel -> 'a -> unit) ->
('a, 'b) Invariant.t -> unit
val unary :
?name:string ->
('a -> 'b) -> ('a, 'c) Invariant.t -> 'b Invariant.unsetable_t
val binary :
?name:string ->
('a -> 'b -> 'c) ->
('a, 'd) Invariant.t -> ('b, 'e) Invariant.t -> 'c Invariant.unsetable_t
val ternary :
?name:string ->
('a -> 'b -> 'c -> 'd) ->
('a, 'e) Invariant.t ->
('b, 'f) Invariant.t -> ('c, 'g) Invariant.t -> 'd Invariant.unsetable_t
val sum : (int, 'a) Invariant.t array -> int Invariant.unsetable_t
val prod : (int, 'a) Invariant.t array -> int Invariant.unsetable_t
module Array :
sig
val get :
('a, 'b) Invariant.t array ->
(int, 'c) Invariant.t -> 'a Invariant.unsetable_t
val argmin :
('a, 'b) Invariant.t array -> ('a -> 'c) -> int Invariant.unsetable_t
val min :
('a, 'b) Invariant.t array -> ('a -> 'c) -> 'a Invariant.unsetable_t
end
module type FD =
sig
type fd
type elt
val min : Invariant.FD.fd -> Invariant.FD.elt Invariant.unsetable_t
val max : Invariant.FD.fd -> Invariant.FD.elt Invariant.unsetable_t
val size : Invariant.FD.fd -> int Invariant.unsetable_t
val is_var : Invariant.FD.fd -> bool Invariant.unsetable_t
val unary :
?name:string ->
(Invariant.FD.fd -> 'a) ->
Invariant.FD.fd -> 'a Invariant.unsetable_t
end
module Fd :
sig
type fd = Var.Fd.t
type elt = Var.Fd.elt
val min : fd -> elt unsetable_t
val max : fd -> elt unsetable_t
val size : fd -> int unsetable_t
val is_var : fd -> bool unsetable_t
val unary : ?name:string -> (fd -> 'a) -> fd -> 'a unsetable_t
end
module SetFd :
sig
type fd = Var.SetFd.t
type elt = Var.SetFd.elt
val min : fd -> elt unsetable_t
val max : fd -> elt unsetable_t
val size : fd -> int unsetable_t
val is_var : fd -> bool unsetable_t
val unary : ?name:string -> (fd -> 'a) -> fd -> 'a unsetable_t
end
end