This is why I'm more interested in the kinds of formal methods that integrate with the actual program source code.
A couple of examples, in a rough order of approachability by a working programmer:
https://github.com/model-checking/kani
https://github.com/flux-rs/flux
https://github.com/viperproject/prusti-dev
https://creusot.rs/
I really wish one of these projects overcomes its academic origins and becomes a software development tool. Kani is closest to that pragmatism, but correspondingly its theory side is not quite as powerful -- though it's been getting new features that make real code easier to deal with, earlier when I played with it it could only reason about very simple functions. Flux also looked surprisingly approachable, but I haven't used it in anger yet.
There's hope that Rust will include language-level conventions for expressing contracts that all these tools can then take advantage of, because e.g. a `verus! {}` macro wrapping everything was never gonna be a viable way forward, and hopefully this will also gives us a syntax that looks like programming not math (I'm looking at you, Creusot): https://github.com/rust-lang/rust/issues/128044