3 ms·
There is a small community of people interested in formal verification. Unfortunately, it is mostly confined to the academic and research communities, rather th
by nwah1 4y ago
There is a small community of people interested in formal verification. Unfortunately, it is mostly confined to the academic and research communities, rather than regular software engineers. In part because the tools they use do not have the same level of productivity.
But it seems like one possible next step in programming language evolution. Security and correctness will likely matter more and more.
Productively producing incorrect and insecure code may be less valuable in an age where machine learning and botnets are constantly improving and trying to break into your systems, and where a greater and greater percentage of GDP is dependent upon systems not failing. Increasingly we are building systems where lives are on the line, and failure is not an option.
I would say that this does kind of end up as a bit of an aesthetic divide. Because this is kind of an old school view. There's whole aspects of computing right now that are very trendy which have thrown that old school approach out the window.
The field of machine learning is fine with having systems where they have no real idea of what a system will do, whether that result will for sure be correct, how it came up with a particular result, or reliably being able to reproduce the same result with the same inputs.
They may recognize that those are deficiencies, and be working to improve that, but ultimately their paradigm is inductive and statistical, and thus error-prone by its very nature. They recognize that this is a valuable tradeoff for many applications, and a way to build systems that do interesting things right now.
The "symbolic" AI approach would likely take decades to make visible progress.
- shadowfox 4y agoWhat are some entry points for (say) a motivated programmer to the topic of formal verification?
- nwah1 4y agoYou are on your own mostly. That's part of the problem. I am right there with you in my lack of understood in how best to get started. The most trendy language on HN (Rust) has an initiative called Prusti, and a working group. Most of the languages that are used for actual formal verification in industry settings are arcane. Like AdaSPARK. And then there a lot of academic-focused languages meant mainly to experiment with dependent types or prove math theorems. TLA+ also has some ability to support it, but not out of the box. DynamoDB at AWS was built with it. The homepage for it has some approachable resources, but for the language itself. The formal verification systems are separate. https://lamport.azurewebsites.net/tla/tla.html https://lamport.azurewebsites.net/tla/tla.html
- jonjacky 4y agoAlloy, mostly used for modeling and analysis but see the program verification section about halfway down this very long page: https://alloytools.org/citations/case-studies.html https://alloytools.org/citations/case-studies.html Linked at the top of that page is a book about Alloy. There is also a book about TLA, mentioned in another comment here.