Implement copy and composition of automata.
[tatoo.git] / src / ata.mli
index 8b7851b..6b4c02a 100644 (file)
@@ -85,6 +85,9 @@ type t
 val get_states : t -> StateSet.t
 (** return the set of states of the automaton *)
 
+val get_starting_states : t -> StateSet.t
+(** return the set of starting states of the automaton *)
+
 val get_selecting_states : t -> StateSet.t
 (** return the set of selecting states of the automaton *)
 
@@ -97,6 +100,15 @@ val get_trans : t -> QNameSet.elt -> StateSet.t -> TransList.t
 val print : Format.formatter -> t -> unit
 (** 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)].
+*)
 
 module Builder :
 sig
@@ -109,10 +121,11 @@ sig
   val make : unit -> t
     (** Create a fresh builder *)
 
-  val add_state : t -> ?selecting:bool -> State.t -> unit
-    (** Add a state to the set of states of the automaton. The optional argument
-        [?selecting] (defaulting to [false]) allows to specify whether the state is
-        selecting. *)
+  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 *)