Annot.IAnnotAn intermediate derivation, still containing undecided choices.
type res = (Rid.t * Mlsem_types.Ty.t) optionThe result type a branch of an intersection was explored for, tagged with the node that produced it. None is the default branch, which assumes nothing.
type coverage = res * Mlsem_common.REnv.tWhat a branch of an intersection covers: the result it was explored for, and the refinement of the environment under which it was explored. Used to skip branches subsumed by those already explored (cf. Domain).
One branch of an intersection; ann = None once the branch has been found untypeable.
and inter = inter_branch listand part = (Mlsem_types.Ty.t * LazyIAnnot.t option) listand a = | UntypKnown untypeable; fails immediately.
*)| AVar of Mlsem_types.MVarSet.t -> Mlsem_types.Subst.t| AConstruct of t list| ALet of t * part| ALet' of t * t| AApp of t * t * Mlsem_types.Ty.t| AOp of Mlsem_types.MVarSet.t -> Mlsem_types.Subst.t * t * Mlsem_types.Ty.t| AProj of t * Mlsem_types.Ty.t| ACast of Mlsem_types.GTy.t * t| ACoerce of Mlsem_types.GTy.t * t| AIte of t * Mlsem_types.GTy.t * branch * branch| ALambda of Mlsem_types.GTy.t * t| ALambdaRec of (Mlsem_types.GTy.t * t) list| AAlt of bool * t option list| AInter of interand t = | A of Annot.tAn already completed sub-derivation.
*)| I of {rid : Rid.t;ann : a;refinement : Mlsem_common.REnv.t;}val pp : Stdlib.Format.formatter -> t -> unitval pp_a : Stdlib.Format.formatter -> a -> unitval pp_coverage : Stdlib.Format.formatter -> coverage -> unitval pp_res : Stdlib.Format.formatter -> res -> unit