| ▲ | ndriscoll 4 hours ago | ||||||||||||||||||||||||||||
We do. It's called a type checker. Every "formally verified" system is going to be partially verified. e.g. you might prove your sort procedure sorts, but did you prove its complexity? Under a cost model for integer compares or a cost model for page fetches? Or both? Multi-layer cache page fetch costs? How well you verify just depends on how well you decide to model the problem. Different type checkers have different modeling features. This is a more useful perspective; it's not "we do/don't use formal methods," but instead "how can I more precisely model my domain?" Helpfully, if you model your domain well, code tends to be obvious/write itself. | |||||||||||||||||||||||||||||
| ▲ | yoshuaw 4 hours ago | parent | next [-] | ||||||||||||||||||||||||||||
One of my favorite quotes on this topic is: "Type systems are just the parts of formal verification we've figured out how to make fast." | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
| ▲ | sethhochberg an hour ago | parent | prev [-] | ||||||||||||||||||||||||||||
I think there's an element of this which really breaks down to the type system being the part of formal verification that we've figured out how to do during the course of implementation. Software engineers (myself included, over the years) often argue their real value isn't just writing code, its figuring out the gaps in requirements and how to resolve them. Sometimes that engineering process gets turned back into a formal spec. But much more often, the implementation functionally becomes the spec and contains many details that were never present in the original statement of the requirements. Formal verification techniques in general are a harder sell until we get the industry to a point where there's broader agreement that what we call "implementation" is often a blurry mix of spec development, prototyping, and actual implementation all happening at the same time. | |||||||||||||||||||||||||||||