288 lines
9.6 KiB
Plaintext
288 lines
9.6 KiB
Plaintext
|
|
Episode: 3081
|
||
|
|
Title: HPR3081: Why do formal verification?
|
||
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr3081/hpr3081.mp3
|
||
|
|
Transcribed: 2025-10-24 16:21:25
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
This is Hacker Public Radio episode 3,081 for Monday 25 May 2020. Today's show is entitled
|
||
|
|
Why the Formal Verification. Quote,
|
||
|
|
it is hosted by Tuku Toro to
|
||
|
|
and is about 19 minutes long
|
||
|
|
and carries a clean flag. The summer is
|
||
|
|
two tour two talks about testing and formal verification of software.
|
||
|
|
This episode of HPR is brought to you by an honesthost.com.
|
||
|
|
Get 15% discount on all shared hosting
|
||
|
|
with the offer code HPR15. That's HPR15.
|
||
|
|
Better web hosting that's honest and fair at an honesthost.com.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
.
|
||
|
|
each and every of those generated tests it will verify that the properties that you
|
||
|
|
defined are true they hold and if not it will report that hey this specific case
|
||
|
|
failed some tools even try to minimize the test case so as soon as they
|
||
|
|
encounter a failing test they try to make it smaller like if it's a 1 million
|
||
|
|
element listed try to withdraw the list and see if it still fails they try to
|
||
|
|
find a simple example that fails as possible other tools have databases that
|
||
|
|
keep track of all the failed tests over time so when you start a new
|
||
|
|
test run they will execute those failed tests first to see that they
|
||
|
|
haven't been recursion and those have been executed they will start generating
|
||
|
|
more this data but again this will this will cover bigger amount of inputs but
|
||
|
|
this cannot cover in all cases this cannot cover all the inputs if you have two
|
||
|
|
boolands for example then and you're doing some operation with them you have
|
||
|
|
four combinations that doesn't you can actually specify by hand but if you have
|
||
|
|
a some amount of boolands and you are doing some operation to them and the
|
||
|
|
amount of combination is reasonable small this can cover all the all the
|
||
|
|
combinations but if in case you are doing something with numbers like some
|
||
|
|
big numbers then this cannot cover all the possible combinations but this can
|
||
|
|
cover much much larger area of the inputs but then if you have a some some some
|
||
|
|
really critical software that or you have some contractual application that you
|
||
|
|
have to be really really super sure that there's no problems you can try
|
||
|
|
calling with the formal proofs and this is this is the thing that I talk talk about
|
||
|
|
in that episode three thousand fifty seven formal verification look here you
|
||
|
|
treat the code as a mathematical function because if you look them from the
|
||
|
|
certain angle they are they are identical like code and mathematics are different
|
||
|
|
times of the same coin basically and then you can prove mathematically that
|
||
|
|
these properties that somebody wants your list are joining function to have
|
||
|
|
actually hold you can I didn't do this by hand but I won't think if I had to
|
||
|
|
do this I would start with both list at a zero length and prove that you get
|
||
|
|
the resultant list is a zero length list and then if you first one is a
|
||
|
|
zero length and second one is n plus one items and I would be using induction
|
||
|
|
again prove that and then the first one is n plus one items and the second one
|
||
|
|
is zero items and the last usually the most cool tricky to prove is that both
|
||
|
|
are n plus one items and then prove it that it any any arbitrary number here
|
||
|
|
the reason why we will be doing this is because we will be using the induction
|
||
|
|
mathematical induction because if we can prove that the function works as we want
|
||
|
|
with a zero and n plus one then we can say that it works with everything because
|
||
|
|
n plus one is one or two or three or four or whatever so you could you could
|
||
|
|
prove that no matter no matter how long this we give to this function it will
|
||
|
|
the resulting resulting list will be length will be the sum of those two list and
|
||
|
|
they will be all items present in correct order but so why aren't we doing this
|
||
|
|
the thing is that this is suitable only for certain languages the functions
|
||
|
|
that you are proving they there has to be a real mathematical functions so
|
||
|
|
data in data out and no no no touching hard drive no sending messages to
|
||
|
|
other systems matter so data in data out they can go out of functions but those
|
||
|
|
other functions have to obey the same rules data in data out so it really has to
|
||
|
|
be a mathematical view on the software and that's not that's not actually that's
|
||
|
|
not actually that difficult it's just because it's different than what people are
|
||
|
|
usually used to it takes a bit of time to change your change your brain to look
|
||
|
|
cold a little bit differently and learn different ways of abstracting and
|
||
|
|
combining and and splitting the software and all that stuff that every software
|
||
|
|
developer does every day but the biggest one is probably because the
|
||
|
|
proving is really tricky it takes lots of time and effort until you're really
|
||
|
|
cool at that and if redoing test is frustrating when you change the software
|
||
|
|
imagine how frustrating it must be redoing the rules because tests usually
|
||
|
|
look the full function outside they have an interface and they give data into
|
||
|
|
that and they get data out of that and then they can verify that this data that
|
||
|
|
we gave in and this output that we got out that they are what we want it to be
|
||
|
|
so it's a bit easier but when you're proving mathematically that the code
|
||
|
|
does it does what it should be you are looking inside of the function you are
|
||
|
|
looking how it has been implemented and if that implementation changes very
|
||
|
|
drastically then you prove isn't valid anymore and you have to redo it and then
|
||
|
|
of course the usual thing tests of mathematical proofs don't
|
||
|
|
currently correctness so you can have all the tests you want you can have all
|
||
|
|
the proofs that you want but your software still isn't correct this is because
|
||
|
|
the original stack could be wrong I mean the original specification could be
|
||
|
|
wrong whoever wrote it made a mistake or they could have omitted something
|
||
|
|
completely obvious to themselves that is not obvious to the developers who are
|
||
|
|
going to write it or they develop a who is reading the specification
|
||
|
|
mislanders do it or somebody could have made a mistake while writing a test or at
|
||
|
|
herend that they're proving like for example somebody could write that I want
|
||
|
|
to have a function that combines two lists together and they focus to
|
||
|
|
focus to mention that by the way in this business field that we are working on
|
||
|
|
every time you are combining lists we are putting a comma in between for whatever
|
||
|
|
for other reason but because this is not written in the specification then the developer
|
||
|
|
doesn't know that and then they cannot implement it correctly or it could be that
|
||
|
|
the person who write that I want to combine these two lists I wanted that the
|
||
|
|
resulting list only has the each item one so if you have a list one two three and another
|
||
|
|
list two three four you the resulting list will be one two three four so the duplicate
|
||
|
|
should be dropped and for the for them it might be completely obvious for example if they are
|
||
|
|
making a list of cars that are in the storehouse of course the one car is the only one
|
||
|
|
because they only have a one car you can you don't have a same car twice in the bookkeeping
|
||
|
|
so for them for them that is completely obvious but for the developer that probably isn't
|
||
|
|
completely obvious but if they if they had they had been saying that we want to instead of
|
||
|
|
least we want to use that because then the developer might understand hey set that's always
|
||
|
|
only unique items so it's not it's not that easy so as a summary so there's a cost versus gain
|
||
|
|
here like some things are best tested by humans some things are best tested by the
|
||
|
|
automated examples already verified rather so you have to do this do this and this happens
|
||
|
|
that kind of things some but you you can only cover some specific cases in that way you cannot
|
||
|
|
cover all the cases if you want to a bit more product verification you use property
|
||
|
|
property based testing or rather different kind of verification you use property based testing
|
||
|
|
because then the computer generates your test data and you verify that your system can handle
|
||
|
|
that test data be it bullets or be it but whatever use list or account in books of some company
|
||
|
|
computer can generate you that data and then use that verify that your software looks correctly
|
||
|
|
or you can go all out and mathematically prove that your software does what it is supposed to do
|
||
|
|
but then you have to use the specific languages and the cost will be much higher because it will
|
||
|
|
be much slower but in this case you can cover all the inputs hopefully that clarifies why why on
|
||
|
|
will you want to or why you wouldn't want to do formal verification with cook or some other
|
||
|
|
other tool if you have any questions comments or feedback I'm always interested in them you
|
||
|
|
can reach me by email or at the 31st they are to turn at master don't master don't thought social
|
||
|
|
keep on hacking
|
||
|
|
you've been listening to Hacker Public Radio at Hacker Public Radio dot org
|
||
|
|
we are a community podcast network that releases shows every weekday Monday through Friday
|
||
|
|
today's show like all our shows was contributed by an hbr listener like yourself if you ever
|
||
|
|
thought of recording a podcast then click on our contributing to find out how easy it really is
|
||
|
|
Hacker Public Radio was founded by the digital dog pound and the infonomican computer club
|
||
|
|
and is part of the binary revolution at binrev.com if you have comments on today's show
|
||
|
|
please email the host directly leave a comment on the website or record a follow up episode yourself
|
||
|
|
on this otherwise status today's show is released on the creative comments attribution share
|
||
|
|
free dot org lives
|