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