sig
  type pervasives_bool = bool
  type ('mix, 'id) e =
      BIN_ALG_OP of Operator.bin_alg_op *
        ('mix, 'id) Alg_expr.e Locality.annot *
        ('mix, 'id) Alg_expr.e Locality.annot
    | UN_ALG_OP of Operator.un_alg_op * ('mix, 'id) Alg_expr.e Locality.annot
    | STATE_ALG_OP of Operator.state_alg_op
    | ALG_VAR of 'id
    | KAPPA_INSTANCE of 'mix
    | TOKEN_ID of 'id
    | CONST of Nbr.t
    | IF of ('mix, 'id) Alg_expr.bool Locality.annot *
        ('mix, 'id) Alg_expr.e Locality.annot *
        ('mix, 'id) Alg_expr.e Locality.annot
    | DIFF_TOKEN of (('mix, 'id) Alg_expr.e Locality.annot * 'id)
    | DIFF_KAPPA_INSTANCE of (('mix, 'id) Alg_expr.e Locality.annot * 'mix)
  and ('mix, 'id) bool =
      TRUE
    | FALSE
    | BIN_BOOL_OP of Operator.bin_bool_op *
        ('mix, 'id) Alg_expr.bool Locality.annot *
        ('mix, 'id) Alg_expr.bool Locality.annot
    | UN_BOOL_OP of Operator.un_bool_op *
        ('mix, 'id) Alg_expr.bool Locality.annot
    | COMPARE_OP of Operator.compare_op *
        ('mix, 'id) Alg_expr.e Locality.annot *
        ('mix, 'id) Alg_expr.e Locality.annot
  val e_to_yojson :
    filenames:int Mods.StringMap.t ->
    ('-> Yojson.Basic.json) ->
    ('-> Yojson.Basic.json) -> ('a, 'b) Alg_expr.e -> Yojson.Basic.json
  val e_of_yojson :
    filenames:string array ->
    (Yojson.Basic.json -> 'a) ->
    (Yojson.Basic.json -> 'b) -> Yojson.Basic.json -> ('a, 'b) Alg_expr.e
  val print :
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b) Alg_expr.e -> unit
  val bool_to_yojson :
    filenames:int Mods.StringMap.t ->
    ('-> Yojson.Basic.json) ->
    ('-> Yojson.Basic.json) -> ('a, 'b) Alg_expr.bool -> Yojson.Basic.json
  val bool_of_yojson :
    filenames:string array ->
    (Yojson.Basic.json -> 'a) ->
    (Yojson.Basic.json -> 'b) -> Yojson.Basic.json -> ('a, 'b) Alg_expr.bool
  val print_bool :
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> ('a, 'b) Alg_expr.bool -> unit
  val const : Nbr.t -> ('a, 'b) Alg_expr.e Locality.annot
  val int : int -> ('a, 'b) Alg_expr.e Locality.annot
  val float : float -> ('a, 'b) Alg_expr.e Locality.annot
  val add :
    ('a, 'b) Alg_expr.e Locality.annot ->
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val minus :
    ('a, 'b) Alg_expr.e Locality.annot ->
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val mult :
    ('a, 'b) Alg_expr.e Locality.annot ->
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val div :
    ('a, 'b) Alg_expr.e Locality.annot ->
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val pow :
    ('a, 'b) Alg_expr.e Locality.annot ->
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val ln :
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val uminus :
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val sin :
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val cos :
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val sqrt :
    ('a, 'b) Alg_expr.e Locality.annot -> ('a, 'b) Alg_expr.e Locality.annot
  val add_dep :
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array ->
    Operator.rev_dep ->
    ('a, int) Alg_expr.e Locality.annot ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array
  val add_dep_bool :
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array ->
    Operator.rev_dep ->
    ('a, int) Alg_expr.bool Locality.annot ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array
  val setup_alg_vars_rev_dep :
    unit NamedDecls.t ->
    (string Locality.annot * ('a, int) Alg_expr.e Locality.annot) array ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array
  val has_mix :
    ?var_decls:('-> ('c, 'b) Alg_expr.e) ->
    ('a, 'b) Alg_expr.e -> Alg_expr.pervasives_bool
  val has_progress_dep :
    only_time:Alg_expr.pervasives_bool ->
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array ->
    ('a, int) Alg_expr.e Locality.annot -> Alg_expr.pervasives_bool
  val extract_connected_components :
    ('a, 'b) Alg_expr.e Locality.annot -> 'a list
  val extract_connected_components_bool :
    ('a, 'b) Alg_expr.bool Locality.annot -> 'a list
  val propagate_constant :
    ?max_time:float ->
    ?max_events:int ->
    int list ->
    (string Locality.annot * ('a, int) Alg_expr.e Locality.annot) array ->
    ('a, int) Alg_expr.e Locality.annot ->
    ('a, int) Alg_expr.e Locality.annot
  val propagate_constant_bool :
    ?max_time:float ->
    ?max_events:int ->
    int list ->
    (string Locality.annot * ('a, int) Alg_expr.e Locality.annot) array ->
    ('a, int) Alg_expr.bool Locality.annot ->
    ('a, int) Alg_expr.bool Locality.annot
  val is_equality_test_time :
    Operator.DepSet.t * Operator.DepSet.t * Operator.DepSet.t array *
    Operator.DepSet.t array ->
    ('a, int) Alg_expr.bool -> Alg_expr.pervasives_bool
end