Learning-Aided Program Synthesis and Verification
Total Page:16
File Type:pdf, Size:1020Kb
LEARNING-AIDED PROGRAM SYNTHESIS AND VERIFICATION Xujie Si A DISSERTATION in Computer and Information Science Presented to the Faculties of the University of Pennsylvania in Partial Fulfillment of the Requirements for the Degree of Doctor of Philosophy 2020 Supervisor of Dissertation Mayur Naik, Professor, Computer and Information Science Graduate Group Chairperson Mayur Naik, Professor, Computer and Information Science Dissertation Committee: Rajeev Alur, Zisman Family Professor of Computer and Information Science Osbert Bastani, Research Assistant Professor of Computer and Information Science Steve Zdancewic, Professor of Computer and Information Science Le Song, Associate Professor in College of Computing, Georgia Institute of Technology LEARNING-AIDED PROGRAM SYNTHESIS AND VERIFICATION COPYRIGHT 2020 Xujie Si Licensed under a Creative Commons Attribution 4.0 License. To view a copy of this license, visit: http://creativecommons.org/licenses/by/4.0/ Dedicated to my parents and brothers. iii ACKNOWLEDGEMENTS First and foremost, I would like to thank my advisor, Mayur Naik, for providing a constant source of wisdom, guidance, and support over the six years of my Ph.D. journey. Were it not for his mentorship, I would not be here today. My thesis committee consisted of Rajeev Alur, Osbert Bastani, Steve Zdancewic, and Le Song: I thank them for the careful reading of this document and suggestions for improvement. In addition to providing valuable feedback on this dissertation, they have also provided extremely helpful advice over the years on research, com- munication, networking, and career planning. I would like to thank all my collaborators, particularly Hanjun Dai, Mukund Raghothaman, and Xin Zhang, with whom I have had numerous fruitful discus- sions, which finally lead to this thesis. I deeply enjoyed each research project during my Ph.D. study, which would not be possible without a group of amazing collab- orators including Aws Albarghouthi, Paraschos Koutris from the University of Wis- consin–Madison, Insu Yun, Taesoo Kim, Yuan Yang, Binghong Chen from Georgia Tech, Changwoo Min from Virgina Tech, Yeongjin Jang from Oregon State Univer- sity, Radu Grigore from the University of Kent, Vasco Manquinho, Mikoláš Janota from the University of Lisbon, and Alexey Ignatiev from Monash University. I am grateful to the wonderful group of PhDs and postdocs Mayur has assem- bled. I thank Mukund Raghothaman for great advice on writing and presentation, Kihong Heo and Woosuk Lee for sharing skills on quickly building strong research prototypes, Xin Zhang and Sulekha Kulkarni for kind encouragement during paper rejections, Elizabeth Dinella, Pardis Pashakhanloo, Jiani Huang, and Ziyang Li for timely feedback before paper submissions. I enjoyed many presentations and discussions during the weekly seminars from Penn PLClub and DSL, which also provide invaluable opportunities for me to prac- iv tice conference talks. I appreciate the insightful feedback and helpful advice on pre- sentation from Benjamin Pierce, Stephanie Weirich, Steve Zdancewic, Boon Thau Loo, Zack Ives, Susan Davidson, and Val Tannen. I thank all organizers of TGIFs, where I had the the most relaxing moments in a week and enjoyed many interesting conversations with Jennifer Paykin, Leonidas Lampropoulos, Antal Spector-Zabusky, Caleb Stanford, Richard Zhang, Omar Navarro Leija, Li-yao Xia, Paul He, and Anton Xue. I would like to thank my friends at Penn or near Philly: Meng Xu, Yao Li, Yishuai Li, Qizhen Zhang, Yinjun Wu, Yi Zhang, Haoxian Chen, Hui Lyu, Hua Li, and Yiyuan Zhao. Hanging out with them in the weekends for food or movie or hiking was the perfect way to release pressure and stay optimistic when facing various challenges. I spent an exceptional final year. I am grateful to the wonderful Deep Learning team lead by Oriol Vinyals and Robust AI team lead by Pushmeet Kohli at DeepMind, where I had a fantastic summer working with awesome colleagues Yujia Li, Vinod Nair, and Felix Gimeno. I appreciate the warm support from Arie Gurfinkel in the cold winter, his critical feedback which helped significantly through the tough job search process, and his wonderful students Nham Le and Hari Govind. It is my tremendous blessing to meet my girlfriend, Ningning Xie, who made the second half of my Ph.D. journey wonderful and worthwhile. I am deeply in- debted to Ningning for her unwavering support, heartful companionship, and wise suggestions during the hardest moment. Last but not least, I thank my parents and brothers for their love and support during every stage of my life. For them, no words of gratitude will ever be enough. I dedicate this thesis to them. v ABSTRACT LEARNING-AIDED PROGRAM SYNTHESIS AND VERIFICATION Xujie Si Mayur Naik The enormous rise in the scale, scope, and complexity of software projects has created a thriving marketplace for program reasoning tools. Despite broad adop- tion by industry, developing such tools remains challenging. For each project, spe- cialized heuristics or analysis rules have to be carefully designed and customized, which requires non-trivial expertise. Recently machine learning, especially deep learning, achieved remarkable successes in many challenging areas such as image recognition and strategy game playing. Inspired by these successes, this thesis is concerned with the following question: can program reasoning be effectively learned and automatically improved over time? This thesis demonstrates that learning-based techniques can be a new driving force for tackling fundamental program reasoning challenges, particularly, program synthesis and program verification. First, this thesis presents a scalable inductive logic programming (ILP) framework, Difflog, which can synthesize a rich set of logical rules used in various important domains like program analysis, relational query, and knowledge discovery. Unlike classic program synthesis techniques, which heavily rely on manually designed heuristics or symbolic constraint solvers, Difflog leverages efficient gradient-based approaches, which is possible due to a novel nu- merical relaxation of logical rules. Second, this thesis presents an end-to-end deep learning framework for program verification, Code2Inv, which directly maps a piece of source code to its related proof without requiring any annotations from human experts. Code2Inv is inspired by the recent AI breakthrough, AlphaGo; however, un- like the two dimensional Go game board, programs have sophisticated structures and correct proofs are extremely rare, posing unique challenges on representation vi learning and reinforcement learning. To address these challenges, we leverage ad- vances of graph neural networks and develop a counterexample-based smooth re- ward mechanism. Code2Inv outperforms state-of-the-art approaches that are based on manually designed heuristics or decision tree learning, and the learned policy by Code2Inv can generalize to unseen programs. Furthermore, Code2Inv can be flexi- bly customized as a Constrained Horn Clause (CHC) solver as well as a meta-solver for syntax-guided program synthesis tasks. vii TABLE OF CONTENTS 1 Introduction1 1.1 The New Driving Force for Program Reasoning............1 1.2 A Learning-aided Reasoning Framework...............3 1.3 Contributions and Organizations...................7 2 Background9 2.1 Numerical Relaxation..........................9 2.2 Deep Learning............................. 10 2.3 Reinforcement Learning........................ 14 3 Applications of Rule Learning 16 3.1 Promising Examples.......................... 17 3.2 A Case Study on Detecting API Misuses................ 26 3.3 Discussion................................ 31 4 Learning-aided Rule Synthesis 32 4.1 Introduction............................... 32 4.2 The Datalog Synthesis Problem.................... 34 4.3 Systematic Candidate Rule Generation................ 37 4.4 Rule Selection by Bi-directional Search................ 41 4.5 A Smoothed Interpretation for Datalog................ 47 4.6 Formulating the Optimization Problem................ 51 4.7 Empirical Evaluation.......................... 54 4.8 Related Work.............................. 64 4.9 Conclusion............................... 66 viii 5 Deep Reinforcement Learning for Program Verification 67 5.1 Introduction............................... 67 5.2 Problem Formulation.......................... 69 5.3 End-to-End Reasoning Framework................... 71 5.4 Reinforcement Learning........................ 78 5.5 Experiments............................... 80 5.6 Related Work.............................. 84 5.7 Discussion................................ 86 6 Intriguing Extensions of Code2Inv 87 6.1 Formalization.............................. 87 6.2 Code2Inv as a CHC solver....................... 92 6.3 Meta-Learning for Syntax-guided Synthesis............. 94 6.4 Discussion................................ 100 7 Future Work 101 8 Conclusion 104 A Proofs and Artifacts 106 A.1 Proofs of Properties in Chapter4................... 106 A.2 Artifacts................................. 112 ix LIST OF TABLES 3.1 List of new bugs discovered by APISan. We sent patches of all 76 new bugs; 69 bugs have been already confirmed by corresponding devel- opers (marked Xin the rightmost column); 7 bugs (marked P in the rightmost column) have not been confirmed yet. APISan analyzed 92 million LoC and found one bug per 1.2 million LoC........ 30 4.1 Benchmark characteristics........................ 55 4.2 The performance results of ALPS, Metagol and Zaatar; the timeout limit