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