Joachim Breitner
2018-02-01 04:17:50 UTC
Hi containers maintainers,
you might have already read it between the lines, but some people here
at Penn are currently using hs-to-coq to translate the containers
library to Coq and verify it. We just reached a milestone by verifying
a portion of Data.IntSet large enough to instantiate Coqâs
FSetInterface:
https://github.com/antalsz/hs-to-coq/blob/master/examples/containers/theories/IntSetProofs.v
There is work on verifying Data.Set as well:
https://github.com/antalsz/hs-to-coq/blob/master/examples/containers/theories/SetProofs.v
Isnât that exciting?
It raises the question whether there is value in integrating these
proofs in some way into the development process of containers. One
could imagine adding a job to travis that translates containerâs master
into Coq and checks if the proofs go through.
On the one hand, thatâs of course great, because itâd make containers
one of the most thoroughly verified pieces of Haskell in use out there.
On the other hand, weâd have to choose the least bad of a bunch of bad
options when it comes to future contributions (I am listing unfeasible
options as well):
- we essentially freeze the code
- weâd lose the verification again quickly, once someone makes a non-
trivial change to the code
- weâd have to restrict contributions to those who are able to update
the proofs
- weâd still welcome contributions that break the proofs, but let them
sit in pull requests until someone updates the proofs on the PR and
then merge
- (maybe a bit far fetched, but who knows)
we get funding to pay someone to keep the proofs in sync, without
slowing down other contributions
I honestly donât know which of these are the most viable, or if none of
them make any sense and we should not hook up the verification with
containerâs development.
What do you think?
Cheers,
Joachim
you might have already read it between the lines, but some people here
at Penn are currently using hs-to-coq to translate the containers
library to Coq and verify it. We just reached a milestone by verifying
a portion of Data.IntSet large enough to instantiate Coqâs
FSetInterface:
https://github.com/antalsz/hs-to-coq/blob/master/examples/containers/theories/IntSetProofs.v
There is work on verifying Data.Set as well:
https://github.com/antalsz/hs-to-coq/blob/master/examples/containers/theories/SetProofs.v
Isnât that exciting?
It raises the question whether there is value in integrating these
proofs in some way into the development process of containers. One
could imagine adding a job to travis that translates containerâs master
into Coq and checks if the proofs go through.
On the one hand, thatâs of course great, because itâd make containers
one of the most thoroughly verified pieces of Haskell in use out there.
On the other hand, weâd have to choose the least bad of a bunch of bad
options when it comes to future contributions (I am listing unfeasible
options as well):
- we essentially freeze the code
- weâd lose the verification again quickly, once someone makes a non-
trivial change to the code
- weâd have to restrict contributions to those who are able to update
the proofs
- weâd still welcome contributions that break the proofs, but let them
sit in pull requests until someone updates the proofs on the PR and
then merge
- (maybe a bit far fetched, but who knows)
we get funding to pay someone to keep the proofs in sync, without
slowing down other contributions
I honestly donât know which of these are the most viable, or if none of
them make any sense and we should not hook up the verification with
containerâs development.
What do you think?
Cheers,
Joachim
--
Joachim Breitner
***@joachim-breitner.de
http://www.joachim-breitner.de/
Joachim Breitner
***@joachim-breitner.de
http://www.joachim-breitner.de/