snapshot of the relevant state at the time of a heap access: concurrent thread(s), lock(s) held, ownership precondition

`module OwnershipPrecondition : sig ... end`

precondition for owned access; access is owned if it evaluates to true

`type t````= private` `{`

`access : PathDomain.Sink.t;`
`thread : ThreadsDomain.astate;`
`lock : bool;`
`ownership_precondition : OwnershipPrecondition.t;`

`}```
`include InferStdlib.PrettyPrintable.PrintableOrderedType with type PrintableOrderedType.t := t`
`include InferStdlib.IStd.Caml.Set.OrderedType`
`type t`````
`val compare : t ‑> t ‑> int`
`val pp : InferStdlib.PrettyPrintable.F.formatter ‑> t ‑> unit`
`val make : PathDomain.Sink.t ‑> LocksDomain.astate ‑> ThreadsDomain.astate ‑> OwnershipPrecondition.t ‑> InferIR.Procdesc.t ‑> t`
`val make_from_snapshot : PathDomain.Sink.t ‑> t ‑> t`
`val is_unprotected : t ‑> bool`

return true if not protected by lock, thread, or ownership