Module InferModules.Bindings

include AbstractDomain.S
include AbstractDomain.NoJoin
val (<=) : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val empty : t
val add : InferIR.Var.t -> InferIR.HilExp.AccessExpression.t -> t -> t
val exit_scope : InferIR.Var.t -> t -> t * InferIR.Var.t list

returns the new bindings as well as a list of variables that became dead

val resolve : t -> InferIR.Var.t -> InferIR.HilExp.AccessExpression.t option
val fold : t -> init:'accum -> f:(InferIR.Var.t -> InferIR.HilExp.AccessExpression.t -> 'accum -> 'accum) -> 'accum