sig
  val stack : LogicId.Iset.elt list Pervasives.ref
  val push : LogicId.Iset.elt -> unit
  val pop : LogicId.id -> unit
  val recursive : LogicId.id -> bool
  type state =
      Undefined
    | Defined of LogicDef.item
    | Cyclic of LogicDef.Cofix.cycle
  and cycle = {
    mutable ccitem : LogicDef.Cofix.ccitem;
    mutable stable : bool;
    mutable inners : LogicId.Iset.t;
  }
  and ccitem =
      Cnone
    | Cdefault of LogicDef.item
    | Cupdated of LogicDef.item * LogicDef.description
  val cofix : LogicDef.Cofix.cycle LogicId.Ihmap.t
  val lookup : LogicId.Ihmap.key -> LogicDef.Cofix.state
  val is_stable : LogicId.Ihmap.key -> bool
  val current : LogicDef.Cofix.ccitem -> LogicDef.item
  val define : LogicId.Ihmap.key -> unit
  val is_stable : LogicId.Ihmap.key -> bool
  exception Unstable
  val all_stable : LogicId.Iset.t -> bool
  val set_stable : LogicId.Ihmap.key -> unit
  val get_cycle : LogicId.id -> LogicId.id list -> LogicId.id list
  val add_cycle : LogicId.Iset.elt list -> LogicId.Ihmap.key -> unit
  val compatible_signature : LogicLang.var list -> LogicLang.var list -> bool
  val compatible : LogicDef.item -> LogicDef.item -> bool
  val default : LogicId.Ihmap.key -> LogicDef.item -> unit
  val update :
    LogicId.Ihmap.key -> LogicDef.item -> LogicDef.description -> unit
  val compute : LogicId.Iset.elt -> (LogicId.Iset.elt -> 'a) -> unit
  val fixpoint :
    LogicDef.Cofix.cycle ->
    LogicId.Iset.elt -> (LogicId.Iset.elt -> 'a) -> LogicDef.item
  val obtain : LogicId.Ihmap.key -> (LogicId.Iset.elt -> 'a) -> LogicDef.item
end