sig
  val apron_policy_print :
    'Apron.Policy.man ->
    'Bddapron.Env.t -> Format.formatter -> 'Apron.Policy.t -> unit
  module Dnf : sig type 'a t = 'Bddapron.Cond.cond Bdd.Normalform.dnf end
  module DDDnf :
    sig
      type 'a t = 'Bddapron.Policy.Dnf.t Cudd.Mtbdd.t
      type 'a table = 'Bddapron.Policy.Dnf.t Cudd.Mtbdd.table
    end
  module DPolicy :
    sig
      type 'a t = {
        hash : int;
        dpolicy : 'Apron.Policy.t Bdd.Normalform.disjunction;
      }
      type 'a table = 'Bddapron.Policy.DPolicy.t Cudd.Mtbdd.table
    end
  module PMtbdddomain0 :
    sig
      type ('a, 'b) man = {
        man : ('a, 'b) Bddapron.Mtbdddomain0.man;
        papron : 'Apron.Policy.man;
        ptable : 'Bddapron.Policy.DPolicy.table;
        betable : 'Bddapron.Policy.DDDnf.table;
        symbol : 'Bddapron.Env.symbol;
      }
      type 'a t = 'Bddapron.Policy.DPolicy.t Cudd.Mtbdd.t
    end
  module PDomain0 :
    sig
      type ('a, 'b, 'c, 'd, 'e, 'f) man = {
        man : ('a, 'b, 'c, 'd) Bddapron.Domain0.man;
        pman : 'e;
        print :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> Format.formatter -> '-> unit;
        meet_condition_apply :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> '-> '-> 'Bddapron.Expr0.Bool.t -> 'd;
        meet_condition_improve :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t ->
          'f option -> '-> 'Bddapron.Expr0.Bool.t -> 'f;
      }
    end
  module Domain1 :
    sig
      type ('a, 'b, 'c, 'd, 'e, 'f) man =
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.PDomain0.man = {
        man : ('a, 'b, 'c, 'd) Bddapron.Domain0.man;
        pman : 'e;
        print :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> Format.formatter -> '-> unit;
        meet_condition_apply :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> '-> '-> 'Bddapron.Expr0.Bool.t -> 'd;
        meet_condition_improve :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t ->
          'f option -> '-> 'Bddapron.Expr0.Bool.t -> 'f;
      }
      type ('a, 'b) mtbdd =
          ('a, 'b, ('a, 'b) Bddapron.Mtbdddomain0.man,
           'Bddapron.Mtbdddomain0.t,
           ('a, 'b) Bddapron.Policy.PMtbdddomain0.man,
           'Bddapron.Policy.PMtbdddomain0.t)
          Bddapron.Policy.Domain1.man
      val manager_get_manager :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        ('a, 'b, 'c, 'd) Bddapron.Domain0.man
      val print :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t -> Format.formatter -> '-> unit
      val meet_condition_apply :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        'Bddapron.Cond.t ->
        '->
        ('a, 'd) Bddapron.Domain1.t ->
        'Bddapron.Expr1.Bool.t -> ('a, 'd) Bddapron.Domain1.t
      val meet_condition_improve :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        'Bddapron.Cond.t ->
        'f option ->
        ('a, 'd) Bddapron.Domain1.t -> 'Bddapron.Expr1.Bool.t -> 'f
      val meet_condition2_apply :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        '->
        ('a, 'd) Bddapron.Domain1.t ->
        'Bddapron.Expr2.Bool.t -> ('a, 'd) Bddapron.Domain1.t
      val meet_condition2_improve :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain1.man ->
        'f option ->
        ('a, 'd) Bddapron.Domain1.t -> 'Bddapron.Expr2.Bool.t -> 'f
    end
  module Domain0 :
    sig
      type ('a, 'b, 'c, 'd, 'e, 'f) man =
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.PDomain0.man = {
        man : ('a, 'b, 'c, 'd) Bddapron.Domain0.man;
        pman : 'e;
        print :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> Format.formatter -> '-> unit;
        meet_condition_apply :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t -> '-> '-> 'Bddapron.Expr0.Bool.t -> 'd;
        meet_condition_improve :
          '->
          'Bddapron.Env.t ->
          'Bddapron.Cond.t ->
          'f option -> '-> 'Bddapron.Expr0.Bool.t -> 'f;
      }
      type ('a, 'b) mtbdd =
          ('a, 'b, ('a, 'b) Bddapron.Mtbdddomain0.man,
           'Bddapron.Mtbdddomain0.t,
           ('a, 'b) Bddapron.Policy.PMtbdddomain0.man,
           'Bddapron.Policy.PMtbdddomain0.t)
          Bddapron.Policy.Domain0.man
      val manager_get_manager :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain0.man ->
        ('a, 'b, 'c, 'd) Bddapron.Domain0.man
      val print :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t -> Format.formatter -> '-> unit
      val meet_condition_apply :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t -> '-> '-> 'Bddapron.Expr0.Bool.t -> 'd
      val meet_condition_improve :
        ('a, 'b, 'c, 'd, 'e, 'f) Bddapron.Policy.Domain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t ->
        'f option -> '-> 'Bddapron.Expr0.Bool.t -> 'f
      val make_mtbdd :
        ?global:bool ->
        symbol:'Bddapron.Env.symbol ->
        'Apron.Policy.man -> ('a, 'b) Bddapron.Policy.Domain0.mtbdd
    end
  module Mtbdddomain0 :
    sig
      type ('a, 'b) man =
        ('a, 'b) Bddapron.Policy.PMtbdddomain0.man = {
        man : ('a, 'b) Bddapron.Mtbdddomain0.man;
        papron : 'Apron.Policy.man;
        ptable : 'Bddapron.Policy.DPolicy.table;
        betable : 'Bddapron.Policy.DDDnf.table;
        symbol : 'Bddapron.Env.symbol;
      }
      type 'a t = 'Bddapron.Policy.PMtbdddomain0.t
      val manager_get_manager :
        ('a, 'b) Bddapron.Policy.Mtbdddomain0.man ->
        ('a, 'b) Bddapron.Mtbdddomain0.man
      val make_man :
        ?global:bool ->
        symbol:'Bddapron.Env.symbol ->
        'Apron.Policy.man -> ('a, 'b) Bddapron.Policy.Mtbdddomain0.man
      val equal :
        '->
        'Bddapron.Policy.Mtbdddomain0.t ->
        'Bddapron.Policy.Mtbdddomain0.t -> bool
      val print :
        ('a, 'b) Bddapron.Policy.Mtbdddomain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t ->
        Format.formatter -> 'Bddapron.Policy.Mtbdddomain0.t -> unit
      val meet_condition_apply :
        ('a, 'b) Bddapron.Policy.Mtbdddomain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t ->
        'Bddapron.Policy.Mtbdddomain0.t ->
        'Bddapron.Mtbdddomain0.t ->
        'Bddapron.Expr0.Bool.t -> 'Bddapron.Mtbdddomain0.t
      val meet_condition_improve :
        ('a, 'b) Bddapron.Policy.Mtbdddomain0.man ->
        'Bddapron.Env.t ->
        'Bddapron.Cond.t ->
        'Bddapron.Policy.Mtbdddomain0.t option ->
        'Bddapron.Mtbdddomain0.t ->
        'Bddapron.Expr0.Bool.t -> 'Bddapron.Policy.Mtbdddomain0.t
    end
end