Type inference with polymorphic recursion
ACM Transactions on Programming Languages and Systems (TOPLAS)
ACM SIGPLAN Notices
Cayenne—a language with dependent types
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Dependent types in practical programming
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Types and programming languages
Types and programming languages
TVLA: A System for Implementing Static Analyses
SAS '00 Proceedings of the 7th International Symposium on Static Analysis
Polymorphic Type Schemes and Recursive Definitions
Proceedings of the 6th Colloquium on International Symposium on Programming
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Bit level types for high level reasoning
Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering
Back to the future: revisiting precise program verification using SMT solvers
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lifting abstract interpreters to quantified logical domains
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Relational inductive shape analysis
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Full functional verification of linked data structures
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Type-based data structure verification
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
TACAS'08/ETAPS'08 Proceedings of the Theory and practice of software, 14th international conference on Tools and algorithms for the construction and analysis of systems
System description: ATS: a language that combines programming with theorem proving
FroCoS'05 Proceedings of the 5th international conference on Frontiers of Combining Systems
Type-based data structure verification
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Decision procedures for algebraic data types with abstractions
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Refinement types for secure implementations
ACM Transactions on Programming Languages and Systems (TOPLAS)
RV'10 Proceedings of the First international conference on Runtime verification
When is a type refinement an inductive type?
FOSSACS'11/ETAPS'11 Proceedings of the 14th international conference on Foundations of software science and computational structures: part of the joint European conferences on theory and practice of software
Automatically refining partial specifications for program verification
FM'11 Proceedings of the 17th international conference on Formal methods
HMC: verifying functional programs using abstract interpreters
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Dsolve: safety verification via liquid types
CAV'10 Proceedings of the 22nd international conference on Computer Aided Verification
Binary reachability analysis of higher order functional programs
SAS'12 Proceedings of the 19th international conference on Static Analysis
Towards a scalable software model checker for higher-order programs
PEPM '13 Proceedings of the ACM SIGPLAN 2013 workshop on Partial evaluation and program manipulation
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Automatically refining partial specifications for heap-manipulating programs
Science of Computer Programming
Hi-index | 0.00 |
We present a refinement type-based approach for the static verification of complex data structure invariants. Our approach is based on the observation that complex data structures are typically fashioned from two elements: recursion (e.g., lists and trees), and maps (e.g., arrays and hash tables). We introduce two novel type-based mechanisms targeted towards these elements: recursive refinements and polymorphic refinements. These mechanisms automate the challenging work of generalizing and instantiating rich universal invariants by piggybacking simple refinement predicates on top of types, and carefully dividing the labor of analysis between the type system and an SMT solver. Further, the mechanisms permit the use of the abstract interpretation framework of liquid type inference to automatically synthesize complex invariants from simple logical qualifiers, thereby almost completely automating the verification. We have implemented our approach in dsolve, which uses liquid types to verify ocaml programs. We present experiments that show that our type-based approach reduces the manual annotation required to verify complex properties like sortedness, balancedness, binary-search-ordering, and acyclicity by more than an order of magnitude.