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