Using Ghost Ownership to Verify Union-Find and Persistent Arrays in Rust