sig
  type ('a, 'b) auto_min = {
    etats : 'a list;
    initial : 'a;
    alphabet : 'b list;
    final : '-> bool;
    trans : '-> '-> 'a;
  }
  type 'a mot = 'a list
  val exec : ('b, 'a) Automate.auto_min -> 'Automate.mot -> 'b
  type ('a, 'b) automate =
      'a list * 'a list * 'a list * 'b list * ('a * 'b * 'a) list
  val map :
    ('-> 'b) -> ('a, 'c) Automate.automate -> ('b, 'c) Automate.automate
  val simpl : ('a, 'b) Automate.automate -> (int, 'b) Automate.automate
  val build :
    (module Tools.Base with type t = 'a) ->
    '->
    ('-> bool) -> 'b list -> ('-> '-> 'a) -> ('a, 'b) Automate.automate
  val build_avec_puit :
    (module Tools.Base with type t = 'a) ->
    '->
    ('-> bool) ->
    'b list -> ('-> '-> 'a) -> '-> ('a, 'b) Automate.automate
  val build2 :
    (module Tools.Base with type t = 'a) ->
    '->
    ('-> bool) ->
    'b list -> ('-> '-> 'a list) -> ('a, 'b) Automate.automate
  val build_acc :
    (module Tools.Base with type t = 'a) ->
    '->
    ('-> bool) ->
    'b list ->
    ('-> '-> '-> 'c * 'a) -> '-> ('a, 'b) Automate.automate
  val build2_acc :
    (module Tools.Base with type t = 'a) ->
    'a list ->
    ('-> bool) ->
    'b list ->
    ('-> '-> '-> 'c * 'a list) -> '-> ('a, 'b) Automate.automate
  val rev : ('a, 'b) Automate.automate -> ('a, 'b) Automate.automate
  val determ :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a list, 'b) Automate.automate
  val determ2 :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a list, 'b) Automate.automate
  val min :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a list list, 'b) Automate.automate
  val min2 :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a list list, 'b) Automate.automate
  val convert :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a list list option, 'b) Automate.auto_min
  val equiv :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    (module Tools.Base with type t = 'c) ->
    ('a, 'c) Automate.automate ->
    ('b, 'c) Automate.automate -> 'Automate.mot option
  val hkequiv :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    (module Tools.Base with type t = 'c) ->
    ('a, 'c) Automate.automate ->
    ('b, 'c) Automate.automate -> 'Automate.mot option
  val access :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a, 'b) Automate.automate
  val coaccess :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> ('a, 'b) Automate.automate
  val puits :
    (module Tools.Base with type t = 'a) ->
    ('a, 'b) Automate.automate -> 'a list
  val etats_coaccessibles :
    (module Tools.Base with type t = 'a) ->
    (module Tools.Base with type t = 'b) ->
    ('a, 'b) Automate.automate -> 'a list
  val etats_non_puit :
    (module Tools.Base with type t = 'a) ->
    ('a, 'b) Automate.automate -> 'a list
  val sprint_auto :
    ('-> string) -> ('-> string) -> ('a, 'b) Automate.automate -> string
  val print_auto :
    Pervasives.out_channel ->
    ('-> string) -> ('-> string) -> ('a, 'b) Automate.automate -> unit
  val print_to_file :
    string ->
    ('-> string) -> ('-> string) -> ('a, 'b) Automate.automate -> unit
end