To be fair, it's a very hard problem. Even in Rust, the formal model of how provenance works is very much WIP