sig
  type t
  val init :
    filenames:string list ->
    Pattern.Env.t ->
    unit NamedDecls.t ->
    Primitives.alg_expr Locality.annot NamedDecls.t ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array ->
    (string Locality.annot option * LKappa.rule Locality.annot) array *
    Primitives.elementary_rule array ->
    Primitives.alg_expr Locality.annot array ->
    Primitives.perturbation array -> Contact_map.t -> Model.t
  val nb_tokens : Model.t -> int
  val nb_algs : Model.t -> int
  val nb_rules : Model.t -> int
  val nb_syntactic_rules : Model.t -> int
  val nb_perturbations : Model.t -> int
  val domain : Model.t -> Pattern.Env.t
  val get_obs : Model.t -> Primitives.alg_expr Locality.annot array
  val get_rules : Model.t -> Primitives.elementary_rule array
  val new_domain : Pattern.Env.t -> Model.t -> Model.t
  val signatures : Model.t -> Signature.s
  val tokens_finder : Model.t -> int Mods.StringMap.t
  val algs_finder : Model.t -> int Mods.StringMap.t
  val contact_map : Model.t -> Contact_map.t
  val get_alg : Model.t -> int -> Primitives.alg_expr
  val get_algs :
    Model.t -> (string * Primitives.alg_expr Locality.annot) array
  val get_perturbation : Model.t -> int -> Primitives.perturbation
  val get_rule : Model.t -> int -> Primitives.elementary_rule
  val get_ast_rule : Model.t -> int -> LKappa.rule
  val get_ast_rule_rate_pos : unary:bool -> Model.t -> int -> Locality.t
  val map_observables : (Primitives.alg_expr -> 'a) -> Model.t -> 'a array
  val fold_rules :
    (int -> '-> Primitives.elementary_rule -> 'a) -> '-> Model.t -> 'a
  val fold_ast_rules :
    (int -> '-> LKappa.rule -> 'a) -> '-> Model.t -> 'a
  val fold_perturbations :
    (int -> '-> Primitives.perturbation -> 'a) -> '-> Model.t -> 'a
  val get_alg_reverse_dependencies : Model.t -> int -> Operator.DepSet.t
  val get_token_reverse_dependencies : Model.t -> int -> Operator.DepSet.t
  val all_dependencies :
    Model.t ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array
  val num_of_agent : string Locality.annot -> Model.t -> int
  val num_of_alg : string Locality.annot -> Model.t -> int
  val num_of_token : string Locality.annot -> Model.t -> int
  val nums_of_rule : string -> Model.t -> int list
  val print_ast_rule : ?env:Model.t -> Format.formatter -> int -> unit
  val print_rule : ?env:Model.t -> Format.formatter -> int -> unit
  val print_agent : ?env:Model.t -> Format.formatter -> int -> unit
  val print_alg : ?env:Model.t -> Format.formatter -> int -> unit
  val print_token : ?env:Model.t -> Format.formatter -> int -> unit
  val print :
    (Model.t -> Format.formatter -> Primitives.alg_expr -> unit) ->
    (Model.t -> Format.formatter -> Primitives.elementary_rule -> unit) ->
    (Model.t -> Format.formatter -> Primitives.perturbation -> unit) ->
    Format.formatter -> Model.t -> unit
  val print_kappa :
    (Model.t -> Format.formatter -> Primitives.alg_expr -> unit) ->
    (Model.t -> Format.formatter -> Primitives.perturbation -> unit) ->
    Format.formatter -> Model.t -> unit
  val to_yojson : Model.t -> Yojson.Basic.json
  val of_yojson : Yojson.Basic.json -> Model.t
  val check_if_counter_is_filled_enough : Model.t -> unit
  val overwrite_vars : (int * Primitives.alg_expr) list -> Model.t -> Model.t
  val propagate_constant :
    ?max_time:float ->
    ?max_events:int ->
    int list -> (int * Primitives.alg_expr) list -> Model.t -> Model.t
  val unary_patterns : Model.t -> Pattern.Set.t
end