Single abstraction for all the kinds of variables in SIL

`type t````= private`

`|` `LogicalVar of Ident.t`
`|` `ProgramVar of Pvar.t`

``
`include sig ... end`
`val compare : t ‑> t ‑> int`
`val equal : t ‑> t ‑> bool`
`val compare_modulo_this : t ‑> t ‑> int`
`val of_id : Ident.t ‑> t`
`val of_pvar : Pvar.t ‑> t`
`val of_formal_index : int ‑> t`

Create a variable representing the ith formal of the current procedure

`val to_exp : t ‑> Exp.t`
`val is_global : t ‑> bool`
`val is_return : t ‑> bool`
`val is_footprint : t ‑> bool`
`val appears_in_source_code : t ‑> bool`

return true if this variable appears in source code (i.e., is not a LogicalVar or a frontend-generated ProgramVar)

`val is_cpp_temporary : t ‑> bool`
`val get_footprint_index : t ‑> int option`
`val pp : Format.formatter ‑> t ‑> unit`
`module Map : InferStdlib.PrettyPrintable.PPMap with type PPMap.key = t`