sig
  type derivation =
      Good of TypeCore.env * Derivations.judgement * Derivations.rule
    | Bad of TypeCore.env * Derivations.judgement * Derivations.rule list
  and rule = Derivations.rule_instance * Derivations.derivation list
  and rule_instance = string
  and judgement =
      JSubType of TypeCore.typ * TypeCore.typ
    | JSubVar of TypeCore.var * TypeCore.typ
    | JSubPerm of TypeCore.typ
    | JSubPerms of TypeCore.typ list
    | JSubFloating of TypeCore.typ
    | JSubConstraint of TypeCore.mode_constraint
    | JSubConstraints of TypeCore.mode_constraint list
    | JEqual of TypeCore.typ * TypeCore.typ
    | JLt of TypeCore.typ * TypeCore.typ
    | JGt of TypeCore.typ * TypeCore.typ
    | JNothing
    | JAdd of TypeCore.typ
    | JDebug of TypeCore.typ * TypeCore.typ
  type result =
      (TypeCore.env * Derivations.derivation, Derivations.derivation)
      Either.either LazyList.t
  val no_proof : TypeCore.env -> Derivations.judgement -> Derivations.result
  val apply_axiom :
    TypeCore.env ->
    Derivations.judgement ->
    Derivations.rule_instance -> TypeCore.env -> Derivations.result
  val try_several :
    TypeCore.env ->
    Derivations.judgement ->
    Derivations.rule_instance ->
    'a list ->
    (TypeCore.env -> 'a list -> '-> Derivations.result) ->
    Derivations.result
  val par :
    TypeCore.env ->
    Derivations.judgement ->
    Derivations.rule_instance ->
    Derivations.result list -> Derivations.result
  val nothing :
    TypeCore.env -> Derivations.rule_instance -> Derivations.result
  val option_of_result : Derivations.result -> TypeCore.env option
  val is_good : Derivations.result -> bool
  type state
  val try_proof :
    TypeCore.env ->
    Derivations.judgement ->
    Derivations.rule_instance -> Derivations.state -> Derivations.result
  val premises :
    TypeCore.env ->
    (TypeCore.env -> Derivations.result) list -> Derivations.state
  val ( >>= ) :
    Derivations.result ->
    (TypeCore.env -> Derivations.state) -> Derivations.state
  val qed : TypeCore.env -> Derivations.state
  val fail : Derivations.state
  val ( >>~ ) :
    Derivations.state -> (TypeCore.env -> TypeCore.env) -> Derivations.state
end