Module Facile.Invariant

module Invariant: sig .. end

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