+(** Pretty printing of the automaton *)
+
+val copy : t -> t
+(** [copy a] creates a copy of automaton [a], that is a new automaton with
+ the same transitions but with fresh states, such that [get_states a] and
+ [get_states (copy a)] are distinct
+*)
+val concat : t -> t -> t
+(** [concat a a'] creates a new automaton [a''] such that, given a set of tree
+ nodes [N], [a'' N = a' (a N)].
+*)
+
+val merge : t -> t -> t
+(** [merge a a'] creates a new automaton [a''] that evaluates both [a] and [a'']
+ in parallel
+*)
+
+val union : t -> t -> t
+(** [union a a'] creates a new automaton [a''] that selects node
+ selected by either [a] or [a']
+*)
+
+val inter : t -> t -> t
+(** [inter a a'] creates a new automaton [a''] that selects node
+ selected by both [a] and [a']
+*)
+
+val neg : t -> t
+(** [neg a] creates a new automaton [a'] that selects the nodes not
+ selected by [a]
+*)
+
+val diff : t -> t -> t
+(** [diff a a'] creates a new automaton [a''] that select nodes selected
+ by [a] but not selected by [a']
+*)
+
+module Builder :
+sig
+ type auto = t
+ (** Alias type for the automata type *)
+
+ type t
+ (** Abstract type for a builder *)
+
+ val make : unit -> t
+ (** Create a fresh builder *)
+
+ val add_state : t -> ?starting:bool -> ?selecting:bool -> State.t -> unit
+ (** Add a state to the set of states of the automaton. The
+ optional arguments [?starting] and [?selecting] (defaulting
+ to [false]) allow one to specify whether the state is
+ starting/selecting. *)
+
+ val add_trans : t -> State.t -> QNameSet.t -> Formula.t -> unit
+ (** Add a transition to the automaton *)
+
+ val finalize : t -> auto
+(** Finalize the automaton and return it. Clean-up unused states
+ (states that do not occur in any transitions and remove
+ instantes of negative [move] atoms by creating fresh states
+ that accept the complement of the negated state. *)
+end
+ (** Builder facility for the automaton *)