type instr = | SELF of unit | LEFT of State.t | RIGHT of State.t type opcode = | OP_NOP of unit | OP_LEFT1 of State.t | OP_LEFT2 of State.t * State.t | OP_RIGHT1 of State.t | OP_RIGHT2 of State.t * State.t | OP_LEFT1_RIGHT1 of State.t * State.t | OP_LEFT2_RIGHT1 of State.t * State.t * State.t | OP_LEFT1_RIGHT2 of State.t * State.t * State.t | OP_LEFT2_RIGHT2 of State.t * State.t * State.t * State.t | OP_SELF of unit | OP_SELF_LEFT1 of State.t | OP_SELF_LEFT2 of State.t * State.t | OP_SELF_RIGHT1 of State.t | OP_SELF_RIGHT2 of State.t * State.t | OP_SELF_LEFT1_RIGHT1 of State.t * State.t | OP_SELF_LEFT2_RIGHT1 of State.t * State.t * State.t | OP_SELF_LEFT1_RIGHT2 of State.t * State.t * State.t | OP_SELF_LEFT2_RIGHT2 of State.t * State.t * State.t * State.t | OP_OTHER of instr array type code = Nil | Cons of State.t * opcode * code val compile : (State.t * instr list) list -> code * bool type 'a update = 'a -> 'a -> 'a -> Tree.t -> Tree.node -> StateSet.t * 'a type 'a cache = 'a update Cache.Lvl3.t val dummy_update : 'a update val create : unit -> 'a cache val update : ('a array -> 'a array -> 'a array -> Tree.node -> code -> unit) -> 'a array cache -> Ata.t -> Translist.t -> StateSet.t -> StateSet.t -> 'a array -> 'a array -> 'a array -> Tree.t -> Tree.node -> StateSet.t * 'a array val count_exec : NodeSet.Count.t array -> NodeSet.Count.t array -> NodeSet.Count.t array -> Tree.node -> code -> unit val mat_exec : NodeSet.Mat.t array -> NodeSet.Mat.t array -> NodeSet.Mat.t array -> Tree.node -> code -> unit module type S = sig module NS : NodeSet.S type t = NS.t array val exec : t -> t -> t -> Tree.node -> code -> unit val update : t cache -> Ata.t -> Translist.t -> StateSet.t -> StateSet.t -> t -> t -> t -> Tree.t -> Tree.node -> StateSet.t * t val print : Format.formatter -> t -> unit val var : int -> t -> t val close : ((int*State.t, NS.t) Hashtbl.t) -> t -> t val is_open : t -> bool end module Count : S with type NS.t = int module Mat : S with type NS.t = Tree.node NodeSet.mat module Make(U : NodeSet.S) : S with type NS.t = U.t