Accelerating Verified-Compiler Development with a Verified ...
A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1....
Transcript of A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1....
![Page 1: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/1.jpg)
A Coq Framework For Verified Property-Based Testing
Cătălin Hrițcu INRIA Paris
(part of QuickChick)
![Page 2: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/2.jpg)
Coq Verification Is Expensive
• When designing and verifying real systems, most enlightenment comes from counterexamples
• but finding counterexamples via failed proofs very costly
• Want to find counterexamples as early as possible
• Counterexample convinces engineer better than failed proof
• Designs evolve, definitions and properties often wrong
• Even when design correct & stable, proving still costly: countless iterations for discovering lemmas and invariants
• this is the itch we’re trying to scratch with QuickChick
2
![Page 3: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/3.jpg)
QuickChick: Property-Based Testing for Coq
• We believe that property-based testing can – lower the cost of Coq proofs
– become a part of the Coq proving process (similarly to Isabelle, ACL2, PVS, TLA+, etc)
• Not there yet ... but at the moment we have – a working clone of Haskell’s QuickCheck
• Prototype Coq plugin written mostly in Coq itself https://github.com/QuickChick
– various other prototypes and experiments
– lots of ideas we’re trying out
3
![Page 4: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/4.jpg)
Collaborators
4
Maxime Dénès (Inria)
John Hughes (Chalmers)
Leo Lampropoulos (UPenn)
Benjamin Pierce (UPenn)
Antal Spector-Zabusky (UPenn)
Dimitris Vytiniotis (MSR Cambridge)
Arthur Azevedo de Amorim (UPenn, recent Inria intern)
Cătălin Hrițcu (Inria)
Li-yao Xia (ENS Paris, upcoming
Inria intern)
Zoe Paraskevopoulou (ENS Cachan, Inria intern last summer)
![Page 5: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/5.jpg)
• writing our testing framework in Coq enables
proving formal statements about testing itself
• this is the main topic of this talk 5
![Page 6: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/6.jpg)
Verified Property-Based Testing? Why?
1. QuickChick is not push button
– users will always have to write some code • property checkers (efficiently executable variants of properties)
• property-based generators (producing data satisfying properties)
– writing correct probabilistic programs is hard
– easy to test things badly and not notice it until proving (e.g. test weaker property); this reduces benefit of testing
– when testing finds no bugs, how can we know that we are testing things right? are we even testing the right thing? • answer #1: formal verification
• answer #2: polarized mutation testing
6
![Page 7: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/7.jpg)
Verified Property-Based Testing? Why?
2. Need to trust QuickChick itself
– Subtle bugs found in Haskell QuickCheck even after 14 years of widespread usage
– The more smarts we add to QuickChick, the bigger this issue becomes
– Any extension we make needs to be correct
• e.g. we would like to work out the metatheory of our upcoming property-based generator language
• but for this we need at first define what generator and checker correctness means
7
![Page 8: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/8.jpg)
A Coq Framework for Verified PBT
• Formally verify QuickChick generators and checkers
– wrt high-level properties they are supposed to test
• Methodology for verification of probabilistic programs
– abstraction: reasoning about the sets of outcomes a they
can produce with non-zero probability
• Framework integrated in QuickChick, used to verify
– almost all the QuickChick combinators
– red-black trees and noninterference examples
• Modular, scalable, requires minimal code changes
8
![Page 9: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/9.jpg)
A QUICK INTRODUCTION TO QUICKCHICK
9
![Page 10: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/10.jpg)
Red-Black Trees Implementation
10
![Page 11: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/11.jpg)
Declarative Proposition
11
![Page 12: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/12.jpg)
Property Checker (efficiently executable definitions)
12
![Page 13: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/13.jpg)
Generator for Arbitrary Trees (this could one day be produced automatically)
13
![Page 14: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/14.jpg)
Finding a Bug
14
![Page 15: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/15.jpg)
Generator for Red-Black Trees (handwritten property-based generator)
15
...........
![Page 16: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/16.jpg)
Property-Based Generator at Work
16
in less than 4 seconds
![Page 17: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/17.jpg)
VERIFIED PROPERTY-BASED TESTING
Are we testing the right property?
17
Cătălin Hrițcu (Inria)
Zoe Paraskevopoulou (ENS Cachan, ..
Inria intern last summer)
![Page 18: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/18.jpg)
Proving correctness of generators
18
![Page 19: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/19.jpg)
Proving correctness of checkers
19
![Page 20: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/20.jpg)
Set of outcomes semantics
– semantics of a generator is a set
• intuitively containing the values that can be generated
with >0 probability
– semantics of a checker is a Coq proposition
20
![Page 21: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/21.jpg)
Formally we define
21
![Page 22: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/22.jpg)
22
![Page 23: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/23.jpg)
QuickChick/Proof Organization
23
Internal Primitives (OCaml)
Low-Level Generators
High-Level Generators & Checkers
User Code
![Page 24: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/24.jpg)
Internal Primitives & Axiom(s)
• random seed type + 8 primitive functions written only in OCaml and only assumed in Coq
• 5 axioms about these primitive functions
– 4 of them would disappear if we implemented a splittable random number generator in Coq
– remaining axiom is inherent to our abstraction!
• makes the type RandomSeed infinite in Coq, while in OCaml it is finite (seeds are bounded integers)
– we assume real randomness (an oracle) in the proofs, but can only implement pseudo-randomeness
24
![Page 25: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/25.jpg)
Lemmas for Low-Level QC Generators (10)
25
• bind proof crucially relies on axiom about rndSplit • we can’t abstract over the sizes (existentially quantify)
• they rely on primitives and concrete representation of Gen
![Page 26: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/26.jpg)
High-Level Generators & Checkers (12)
26
![Page 27: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/27.jpg)
Summary
• Coq framework for verified PBT
• Integrated in QuickChick
– https://github.com/QuickChick
• Reasoning about sets of outcomes
• The first verified QuickCheck implementation
• Examples: red-black trees and noninterference
• Modular, scalable, minimal code changes
27
![Page 28: A Coq Framework For Verified Property-Based Testing...Verified Property-Based Testing? Why? 1. QuickChick is not push button –users will always have to write some code •property](https://reader034.fdocuments.in/reader034/viewer/2022050201/5f54cd35f7db72109523bd3a/html5/thumbnails/28.jpg)
Future Work
• More proof automation and infrastructure
– changing to efficient data representations
– SMT-based verification for sets of outcomes
• Verify property-based generator language
• Probabilistic verification
• Splittable RNG in Coq
• Try to reduce testing cost, now significant
– break even point very much problem-specific
28