|
|
|
|
|
by mafribe
1121 days ago
|
|
Since there is often a misconception that formally verified software must be absolutely free from problems,
from the conclusion of the paper: "Extensive testing on formally verified software is necessary for at least two reasons.
First, the formal specification may not guarantee all the properties expected
by users, but only critical ones (e.g. no miscompilation for CompCert). Second,
critical bugs may still remain, because the formal specification might not exactly
fit reality. However, in this case, critical bugs are in the—much smaller and
simpler—[trusted computing base]" |
|
"Formally verified software" means that some portion of the software's expected behavior has been rendered as a proposition, and that proposition has been proven correct using some kind of proof assistant or theorem-proving software that we assume correctly validates the proof of the proposition. Bugs can exist in three places, then:
1. Within the theorem-proving software. 2. Within the proposition itself. 3. Within the portions of the code that are not formally verified.
We generally have good reason to suspect bugs in (1) are almost nonexistent. Bugs in (2) and (3) are relatively common, but (3) is no different from the bugs present in software with no formal verification.
A lot of modern theorem-proving research lies in helping people to address bugs in (2) by making propositions easier to write and verify, and in (3) through the same mechanism (because then we can formally verify a greater portion of the software).