Luca Franceschini
ACM Student Research Competition
<Programming>, 3 April 2019, Genoa, Italy
Idea: do not verify programs, verify executions
Ok, but why?
Key ideas:
open matches { name: "open" };
write matches { name: "write" };
close matches { name: "close" };
Main = empty ∨ Something;
Something = open write* close;
open(fd) matches { name: "open", args: [fd, ...] };
write(fd) matches { name: "write", args: [fd, ...] };
close(fd) matches { name: "close", args: [fd, ...] };
Main = empty ∨ Something;
Something = { let fd;
open(fd) write(fd)* close(fd)
};
open(fd) matches { name: "open", args: [fd, ...] };
write(fd) matches { name: "write", args: [fd, ...] };
close(fd) matches { name: "close", args: [fd, ...] };
Main = empty ∨ Something;
Something = { let fd;
open(fd)
(write(fd)* close(fd)) | Main
};
5-value logic for the verdict: