type state = int val mk_state : unit -> state type formula_expr = False | True | Or of formula * formula | And of formula * formula | Atom of ([ `Left | `Right | `LLeft | `RRight ] * bool * state) and formula = { fid : int; fkey : int; pos : formula_expr; neg : formula; st : (Ptset.t*Ptset.t*Ptset.t)*(Ptset.t*Ptset.t*Ptset.t); size: int;} val true_ : formula val false_ : formula val atom_ : [`Left | `Right | `LLeft | `RRight ] -> bool -> state -> formula val and_ : formula -> formula -> formula val or_ : formula -> formula -> formula val not_ : formula -> formula (*val equal_form : formula -> formula -> bool *) val pr_frm : Format.formatter -> formula -> unit module HTagSet : Hashtbl.S with type key = Ptset.t*Tag.t type 'a t = { id : int; mutable states : Ptset.t; init : Ptset.t; mutable final : Ptset.t; universal : Ptset.t; starstate : Ptset.t option; (* Transitions of the Alternating automaton *) phi : (state,(TagSet.t*(bool*formula*bool)) list) Hashtbl.t; sigma : (int,('a t -> Tree.t -> Tree.t -> Ptset.t*'a)) Hashtbl.t; } val dump : Format.formatter -> 'a t -> unit module Transitions : sig type t = state*TagSet.t*bool*formula*bool (* Doing this avoid the parenthesis *) val ( ?< ) : state -> state val ( >< ) : state -> TagSet.t*bool -> state*(TagSet.t*bool*bool) val ( ><@ ) : state -> TagSet.t*bool -> state*(TagSet.t*bool*bool) val ( >=> ) : state*(TagSet.t*bool*bool) -> formula -> t val ( +| ) : formula -> formula -> formula val ( *& ) : formula -> formula -> formula val ( ** ) : [`Left | `Right | `LLeft | `RRight ] -> state -> formula end type transition = Transitions.t val equal_trans : transition -> transition -> bool module type ResultSet = sig type t val empty : t val cons : Tree.t -> t -> t val concat : t -> t -> t val iter : (Tree.t -> unit) -> t -> unit val fold : (Tree.t -> 'a -> 'a) -> t -> 'a -> 'a val map : (Tree.t -> Tree.t) -> t -> t val length : t -> int end module IdSet : ResultSet val top_down_count : 'a t -> Tree.t -> int val top_down : 'a t -> Tree.t -> IdSet.t type jump_kind = [ `TAG of Tag.t | `CONTAINS of string | `NOTHING ] val bottom_up_count : 'a t -> Tree.t -> jump_kind -> int