sig
  type 'a t = 'Cudd.Bdd.t array
  type dt = Cudd.Man.d Reg.t
  type vt = Cudd.Man.v Reg.t
  val lnot : 'Reg.t -> 'Reg.t
  val shift_left :
    'Cudd.Man.t -> int -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t
  val shift_right :
    'Cudd.Man.t -> int -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t
  val shift_right_logical :
    'Cudd.Man.t -> int -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t
  val extend : 'Cudd.Man.t -> signed:bool -> int -> 'Reg.t -> 'Reg.t
  val succ : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t
  val pred : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t
  val add :
    'Cudd.Man.t ->
    'Reg.t -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t * 'Cudd.Bdd.t
  val sub :
    'Cudd.Man.t ->
    'Reg.t -> 'Reg.t -> 'Reg.t * 'Cudd.Bdd.t * 'Cudd.Bdd.t
  val neg : 'Reg.t -> 'Reg.t
  val scale : int -> 'Reg.t -> 'Reg.t
  val mul : 'Reg.t -> 'Reg.t -> 'Reg.t
  val ite : 'Cudd.Bdd.t -> 'Reg.t -> 'Reg.t -> 'Reg.t
  val is_cst : 'Reg.t -> bool
  val zero : 'Cudd.Man.t -> 'Reg.t -> 'Cudd.Bdd.t
  val equal : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t -> 'Cudd.Bdd.t
  val greatereq : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t -> 'Cudd.Bdd.t
  val greater : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t -> 'Cudd.Bdd.t
  val highereq : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t -> 'Cudd.Bdd.t
  val higher : 'Cudd.Man.t -> 'Reg.t -> 'Reg.t -> 'Cudd.Bdd.t
  val min_size : int -> int
  val of_int : 'Cudd.Man.t -> int -> int -> 'Reg.t
  val to_int : signed:bool -> 'Reg.t -> int
  val equal_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  val greatereq_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  val greater_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  val highereq_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  val higher_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  module Minterm :
    sig
      type t = Cudd.Man.tbool array
      val is_indet : Reg.Minterm.t -> bool
      val of_int : int -> int -> Reg.Minterm.t
      val to_int : signed:bool -> Reg.Minterm.t -> int
      val iter : (Reg.Minterm.t -> unit) -> Reg.Minterm.t -> unit
      val map : (Reg.Minterm.t -> 'a) -> Reg.Minterm.t -> 'a list
    end
  val guard_of_minterm :
    'Cudd.Man.t -> 'Reg.t -> Reg.Minterm.t -> 'Cudd.Bdd.t
  val guard_of_int : 'Cudd.Man.t -> 'Reg.t -> int -> 'Cudd.Bdd.t
  val guardints :
    'Cudd.Man.t -> signed:bool -> 'Reg.t -> ('Cudd.Bdd.t * int) list
  val cofactor : 'Reg.t -> 'Cudd.Bdd.t -> 'Reg.t
  val restrict : 'Reg.t -> 'Cudd.Bdd.t -> 'Reg.t
  val tdrestrict : 'Reg.t -> 'Cudd.Bdd.t -> 'Reg.t
  val print :
    (Format.formatter -> int -> unit) -> Format.formatter -> 'Reg.t -> unit
  val print_minterm :
    signed:bool ->
    (Format.formatter -> 'Cudd.Bdd.t -> unit) ->
    Format.formatter -> 'Reg.t -> unit
  val permute : ?memo:Cudd.Memo.t -> 'Reg.t -> int array -> 'Reg.t
  val varmap : 'Reg.t -> 'Reg.t
  val vectorcompose :
    ?memo:Cudd.Memo.t -> 'Cudd.Bdd.t array -> 'Reg.t -> 'Reg.t
end