Replies: 1 comment 7 replies
-
Sadly, CrossHair alone won't meet the bar for most verification tasks. It's hopefully a good bug finder, but cases that it can fully verify are pretty trivial. Quicksort is beyond what CrossHair can manage: at a minimum, it requires iterating over the input list, which results in an infinite number of unique execution paths. There's a product-design tradeoff here: real verification systems require the engineer to guide the proof; you might need to specify lemmas or provide loop invariants and likely prove termination properties before you even start. CrossHair doesn't expect or even allow you to say such things. And (in my experience) learning how to guide verification systems effectively is really hard! Perhaps a small footnote: You can do something like bounded model checking with CrossHair; e.g. you can prove that quicksort works for lists that are smaller than a certain size. (by adding a restriction on the length as a precondition) It would still be informative to have standard examples like quicksort and compare it to verification tool solutions - it might be a good way to talk about CrossHair's design tradeoffs. |
Beta Was this translation helpful? Give feedback.
-
CrossHair verifies a contract if, with the
--report_all
flag, it tells us the contract was "Confirmed over all paths". It would be cool if we could exhibit an implementation of Quicksort together with a contract asserting its correctness which CrossHair verifies.For reference, implementations of Quicksort have been verified by the F* type checker and Isabelle.
Beta Was this translation helpful? Give feedback.
All reactions