| `Parent
| `Previous_sibling
| `Stay ]
+
+module Move :
+ sig
+ type t = move
+ type 'a table
+ val create_table : 'a -> 'a table
+ val get : 'a table -> t -> 'a
+ val set : 'a table -> t -> 'a -> unit
+ val iter : (t -> 'a -> unit) -> 'a table -> unit
+ val fold : (t -> 'a -> 'b -> 'b) -> 'a table -> 'b -> 'b
+ val for_all : (t -> 'a -> bool) -> 'a table -> bool
+ val for_all2 : (t -> 'a -> 'b -> bool) -> 'a table -> 'b table -> bool
+ val exists : (t -> 'a -> bool) -> 'a table -> bool
+ end
+
(** Type of moves an automaton can perform *)
type predicate =
module Atom : sig
include Hcons.S with type data = predicate
- include Common_sig.Printable with type t:= t
+ include Common_sig.Printable with type t := t
end
(** Module representing atoms of Boolean formulae, which are simply hashconsed [predicate]s *)
particular kind *)
val get_states : t -> StateSet.t
(** [get_state f] retrieves all the states occuring in [move] predicates in [f] *)
+ val get_states_by_move : t -> StateSet.t Move.table
end
(** Modules representing the Boolean formulae used in transitions *)
val get_selecting_states : t -> StateSet.t
(** return the set of selecting states of the automaton *)
+val get_states_by_rank : t -> StateSet.t array
+(** return an array of states ordered by ranks.
+*)
+
+val get_max_rank : t -> int
+(** return the maximal rank of a state in the automaton, that is the
+ maximum number of runs needed to fuly evaluate the automaton.
+*)
+
val get_trans : t -> QNameSet.elt -> StateSet.t -> TransList.t
-(** [get_trans auto l q] return the list of transitions taken by [auto]
+(** [get_trans auto l q] returns the list of transitions taken by [auto]
for label [l] in state [q]. Takes time proportional to the number of
transitions in the automaton.
*)
+val get_form : t -> QNameSet.elt -> State.t -> Formula.t
+(** [get_form auto l q] returns a single formula for label [l] in state [q].
+ Takes time proportional to the number of transitions in the automaton.
+ *)
+
val print : Format.formatter -> t -> unit
(** Pretty printing of the automaton *)
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