`type astate````=` `{`

`stack : Stack.astate;`
`heap : Heap.astate;`
`alias : Alias.astate;`
`latest_prune : LatestPrune.astate;`

`}```
`type t``= astate```
`val init : t`
`val (<=) : lhs:astate ‑> rhs:astate ‑> bool`
`val widen : prev:astate ‑> next:astate ‑> num_iters:int ‑> astate`
`val join : t ‑> t ‑> t`
`val pp : F.formatter ‑> t ‑> unit`
`val pp_summary : F.formatter ‑> t ‑> unit`
`val find_stack : AbsLoc.Loc.t ‑> t ‑> Val.t`
`val find_stack_set : AbsLoc.PowLoc.t ‑> t ‑> Val.t`
`val find_heap : AbsLoc.Loc.t ‑> t ‑> Val.t`
`val find_heap_set : AbsLoc.PowLoc.t ‑> t ‑> Val.t`
`val find_set : AbsLoc.PowLoc.t ‑> t ‑> Val.t`
`val find_alias : InferIR.Ident.t ‑> t ‑> AliasTarget.t option`
`val find_simple_alias : InferIR.Ident.t ‑> t ‑> AbsLoc.Loc.t option`
`val find_ret_alias : t ‑> AliasTarget.t option`
`val load_alias : InferIR.Ident.t ‑> AliasTarget.t ‑> t ‑> t`
`val store_simple_alias : AbsLoc.Loc.t ‑> InferIR.Exp.t ‑> t ‑> t`
`val store_empty_alias : Val.t ‑> AbsLoc.Loc.t ‑> InferIR.Exp.t ‑> t ‑> t`
`val add_stack : AbsLoc.Loc.t ‑> Val.t ‑> t ‑> t`
`val add_heap : AbsLoc.Loc.t ‑> Val.t ‑> t ‑> t`
`val strong_update_heap : AbsLoc.PowLoc.t ‑> Val.t ‑> t ‑> t`
`val transform_heap : f:(Val.t ‑> Val.t) ‑> AbsLoc.PowLoc.t ‑> t ‑> t`
`val weak_update_heap : AbsLoc.PowLoc.t ‑> Val.t ‑> t ‑> t`
`val get_return : t ‑> Val.t`
`val can_strong_update : AbsLoc.PowLoc.t ‑> bool`
`val update_mem : AbsLoc.PowLoc.t ‑> Val.t ‑> t ‑> t`
`val transform_mem : f:(Val.t ‑> Val.t) ‑> AbsLoc.PowLoc.t ‑> t ‑> t`
`val remove_temps : InferIR.Ident.t list ‑> t ‑> t`
`val set_prune_pairs : PrunePairs.t ‑> t ‑> t`
`val apply_latest_prune : InferIR.Exp.t ‑> t ‑> t`
`val update_latest_prune : InferIR.Exp.t ‑> InferIR.Exp.t ‑> t ‑> t`
`val get_new_heap_locs : prev:t ‑> next:t ‑> AbsLoc.PowLoc.t`
`val get_reachable_locs_from : AbsLoc.PowLoc.t ‑> t ‑> AbsLoc.PowLoc.t`
`val heap_range : filter_loc:(AbsLoc.Loc.t ‑> bool) ‑> t ‑> Itv.NonNegativePolynomial.astate`