sig
  module type EVENT = Model_intf.EVENT
  module type EVENTS = Model_intf.EVENTS
  module type S = Model_intf.S
  module Make :
    functor (Event : EVENT->
      sig
        module Events :
          sig
            module Event :
              sig
                type t = Event.t
                val compare : t -> t -> int
                val pp : Format.formatter -> t -> unit
                val show : t -> string
              end
            type t
            val compare : t -> t -> int
            val is_empty : t -> bool
            val join : t -> t -> t
            val empty : t
            val of_list : Event.t list -> t
            val to_list : t -> Event.t list
            val subsets : t -> t list
          end
        module Event : Model_intf.EVENT
        type update_rule = Prob_cache_common.Update_rules.Update_fn.t
        type prior_count = Events.t -> int
        type prior_exp = Events.t -> float
        type t
        val create :
          ?update_rule:update_rule ->
          ?prior_count:prior_count ->
          ?prior_exp:prior_exp -> name:string -> t
        val count : Events.t -> t -> int
        val observe : ?cnt:int -> ?exp:float -> Events.t -> t -> t
        val prob : ?cond:Events.t -> Events.t -> t -> float
        val exp : ?cond:Events.t -> Events.t -> t -> float
        val name : t -> string
      end
end