> The pointer's "provenance" says where in memory the pointer is allowed to access when. Is that the definition of provenance or is there a wider definition that we should know?
Isn't this a definition of lifetimes too? A lifetime is some set of memory a reference may refer to. Consider: fn foo (x: &'a str, y: &'b str) -> &'a str Aren't 'a and 'b sets of memory a reference can refer to? As far as this function call is concerned, both 'a and 'b will live throughout, so it's not about life and death, it's about what memory the references may refer too. Is a lifetime and a "provenance" the same…
Lifetimes are a static approximation of provenance. They are erased after being validated by the borrow checker, and do not exist in Miri or have any impact on what transformations the optimizer may perform. In other words, the provenance rules allow a superset of what the borrow checker allows.