Introduction to HOL: a theorem proving environment for higher order logic
Introduction to HOL: a theorem proving environment for higher order logic
Programming from specifications (2nd ed.)
Programming from specifications (2nd ed.)
Commutativity analysis: a new analysis technique for parallelizing compilers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Compositional pointer and escape analysis for Java programs
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Putting static analysis to work for verification: A case study
Proceedings of the 2000 ACM SIGSOFT international symposium on Software testing and analysis
Avoiding exponential explosion: generating compact verification conditions
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Incrementalized pointer and escape analysis
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Automatic predicate abstraction of C programs
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
The pointer assertion logic engine
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Pointer and escape analysis for multithreaded programs
PPoPP '01 Proceedings of the eighth ACM SIGPLAN symposium on Principles and practices of parallel programming
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Extended static checking for Java
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Parametric shape analysis via 3-valued logic
ACM Transactions on Programming Languages and Systems (TOPLAS)
Korat: automated testing based on Java predicates
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Verifying reachability invariants of linked structures
POPL '83 Proceedings of the 10th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Journal of Automated Reasoning
Pointer analysis for structured parallel programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Mona: Monadic Second-Order Logic in Practice
TACAS '95 Proceedings of the First International Workshop on Tools and Algorithms for Construction and Analysis of Systems
An LCF-Style Interface between HOL and First-Order Logic
CADE-18 Proceedings of the 18th International Conference on Automated Deduction
PVS: A Prototype Verification System
CADE-11 Proceedings of the 11th International Conference on Automated Deduction: Automated Deduction
Combining superposition, sorts and splitting
Handbook of automated reasoning
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Verification of non-functional programs using interpretations in type theory
Journal of Functional Programming
Interactive Theorem Proving and Program Development
Interactive Theorem Proving and Program Development
TestEra: Specification-Based Testing of Java Programs Using SAT
Automated Software Engineering
Symbolic bounds analysis of pointers, array indices, and accessed memory regions
ACM Transactions on Programming Languages and Systems (TOPLAS)
CUTE: a concolic unit testing engine for C
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Verifying properties of well-founded linked lists
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Modular verification of code with SAT
Proceedings of the 2006 international symposium on Software testing and analysis
Checking JML specifications using an extensible software model checking framework
International Journal on Software Tools for Technology Transfer (STTT)
Deciding Boolean Algebra with Presburger Arithmetic
Journal of Automated Reasoning
AI Communications - CASC
Modular Pluggable Analyses for Data Structure Consistency
IEEE Transactions on Software Engineering
Shape analysis with inductive recursion synthesis
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
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
The hob system for verifying software design properties
The hob system for verifying software design properties
Modular data structure verification
Modular data structure verification
Verification of Mondex electronic purses with KIV: from transactions to a security protocol
Formal Aspects of Computing
Solving Quantified Verification Conditions Using Satisfiability Modulo Theories
CADE-21 Proceedings of the 21st international conference on Automated Deduction: Automated Deduction
Efficient E-Matching for SMT Solvers
CADE-21 Proceedings of the 21st international conference on Automated Deduction: Automated Deduction
Towards Efficient Satisfiability Checking for Boolean Algebra with Presburger Arithmetic
CADE-21 Proceedings of the 21st international conference on Automated Deduction: Automated Deduction
Cooperating Theorem Provers: A Case Study Combining HOL-Light and CVC Lite
Electronic Notes in Theoretical Computer Science (ENTCS)
Existential heap abstraction entailment is undecidable
SAS'03 Proceedings of the 10th international conference on Static analysis
Static analysis of accessed regions in recursive data structures
SAS'03 Proceedings of the 10th international conference on Static analysis
Using first-order theorem provers in the Jahob data structure verification system
VMCAI'07 Proceedings of the 8th international conference on Verification, model checking, and abstract interpretation
Automated verification of shape and size properties via separation logic
VMCAI'07 Proceedings of the 8th international conference on Verification, model checking, and abstract interpretation
Isabelle/HOL: a proof assistant for higher-order logic
Isabelle/HOL: a proof assistant for higher-order logic
Smallfoot: modular automatic assertion checking with separation logic
FMCO'05 Proceedings of the 4th international conference on Formal Methods for Components and Objects
CAV'06 Proceedings of the 18th international conference on Computer Aided Verification
Automatic verification of pointer programs using grammar-based shape analysis
ESOP'05 Proceedings of the 14th European conference on Programming Languages and Systems
VMCAI'06 Proceedings of the 7th international conference on Verification, Model Checking, and Abstract Interpretation
Data structure specifications via local equality axioms
CAV'05 Proceedings of the 17th international conference on Computer Aided Verification
CADE' 20 Proceedings of the 20th international conference on Automated Deduction
An algorithm for deciding BAPA: boolean algebra with presburger arithmetic
CADE' 20 Proceedings of the 20th international conference on Automated Deduction
SAS'05 Proceedings of the 12th international conference on Static Analysis
Safe programming with pointers through stateful views
PADL'05 Proceedings of the 7th international conference on Practical Aspects of Declarative Languages
Incremental Benchmarks for Software Verification Tools and Techniques
VSTTE '08 Proceedings of the 2nd international conference on Verified Software: Theories, Tools, Experiments
A Machine Checked Soundness Proof for an Intermediate Verification Language
SOFSEM '09 Proceedings of the 35th Conference on Current Trends in Theory and Practice of Computer Science
Proceedings of the 14th international conference on Architectural support for programming languages and operating systems
Program verification using templates over predicate abstraction
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
GC assertions: using the garbage collector to check heap properties
Proceedings of the 2009 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
An integrated proof language for imperative programs
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
Verified abstractions on developers' desks
International Workshop on Aliasing, Confinement and Ownership in Object-Oriented Programming
Effective interactive proofs for higher-order imperative programs
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Verifying Component-Based Software: Deep Mathematics or Simple Bookkeeping?
ICSR '09 Proceedings of the 11th International Conference on Software Reuse: Formal Foundations of Reuse and Domain Engineering
CADE-22 Proceedings of the 22nd International Conference on Automated Deduction
Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
A type and effect system for deterministic parallel Java
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
DDT: design and evaluation of a dynamic program analysis for optimizing data structure usage
Proceedings of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture
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
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Verifying safety properties of concurrent heap-manipulating programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parameterized verification of transactional memories
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
PLDI '10 Proceedings of the 2010 ACM SIGPLAN conference on Programming language design and implementation
Combining theories with shared set operations
FroCoS'09 Proceedings of the 7th international conference on Frontiers of combining systems
What can the GC compute efficiently?: a language for heap assertions at GC time
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Statically inferring complex heap, array, and numeric invariants
SAS'10 Proceedings of the 17th international conference on Static analysis
Falling back on executable specifications
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Specifying reusable components
VSTTE'10 Proceedings of the Third international conference on Verified software: theories, tools, experiments
Trace-based verification of imperative programs with I/O
Journal of Symbolic Computation
A shape analysis for optimizing parallel graph programs
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
What's decidable about sequences?
ATVA'10 Proceedings of the 8th international conference on Automated technology for verification and analysis
Robust, generic, modularly-verified map: a software verification challenge problem
Proceedings of the 5th ACM workshop on Programming languages meets program verification
Dafny: an automatic program verifier for functional correctness
LPAR'10 Proceedings of the 16th international conference on Logic for programming, artificial intelligence, and reasoning
Sets with cardinality constraints in satisfiability modulo theories
VMCAI'11 Proceedings of the 12th international conference on Verification, model checking, and abstract interpretation
APLAS'10 Proceedings of the 8th Asian conference on Programming languages and systems
A refinement methodology for object-oriented programs
FoVeOOS'10 Proceedings of the 2010 international conference on Formal verification of object-oriented software
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Mostly-automated verification of low-level programs in computational separation logic
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Verification of semantic commutativity conditions and inverse operations on linked data structures
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Correct code containing containers
TAP'11 Proceedings of the 5th international conference on Tests and proofs
Heaps and data structures: a challenge for automated provers
CADE'11 Proceedings of the 23rd international conference on Automated deduction
An efficient decision procedure for imperative tree data structures
CADE'11 Proceedings of the 23rd international conference on Automated deduction
Forest automata for verification of heap manipulation
CAV'11 Proceedings of the 23rd international conference on Computer aided verification
Monotonic abstraction for programs with multiply-linked structures
RP'11 Proceedings of the 5th international conference on Reachability problems
Developer-oriented correctness proofs a case study of Cheney's algorithm
ICFEM'11 Proceedings of the 13th international conference on Formal methods and software engineering
Communications of the ACM
Recursive proofs for inductive tree data-structures
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Building a calculus of data structures
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Deriving invariants by algorithmic learning, decision procedures, and predicate abstraction
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Shape analysis with reference set relations
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
Collections, cardinalities, and relations
VMCAI'10 Proceedings of the 11th international conference on Verification, Model Checking, and Abstract Interpretation
ACM Transactions on Programming Languages and Systems (TOPLAS)
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Multi-Prover verification of floating-point programs
IJCAR'10 Proceedings of the 5th international conference on Automated Reasoning
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
Automating induction with an SMT solver
VMCAI'12 Proceedings of the 13th international conference on Verification, Model Checking, and Abstract Interpretation
Decision procedures for region logic
VMCAI'12 Proceedings of the 13th international conference on Verification, Model Checking, and Abstract Interpretation
Deciding functional lists with sublist sets
VSTTE'12 Proceedings of the 4th international conference on Verified Software: theories, tools, experiments
Forest automata for verification of heap manipulation
Formal Methods in System Design
Synthesizing iterators from abstraction functions
Proceedings of the 11th International Conference on Generative Programming and Component Engineering
An introduction to data representation synthesis
Communications of the ACM
Predicate abstraction of Java programs with collections
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Challenges in defining a programming language for provably correct dynamic analyses
ISoLA'12 Proceedings of the 5th international conference on Leveraging Applications of Formal Methods, Verification and Validation: technologies for mastering change - Volume Part I
Natural proofs for structure, data, and separation
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Local Reasoning for Global Invariants, Part II: Dynamic Boundaries
Journal of the ACM (JACM)
Local Reasoning for Global Invariants, Part I: Region Logic
Journal of the ACM (JACM)
Development of automatically verifiable systems using data representation synthesis
Proceedings of the 2013 companion publication for conference on Systems, programming, & applications: software for humanity
Detecting quasi-equal clocks in timed automata
FORMATS'13 Proceedings of the 11th international conference on Formal Modeling and Analysis of Timed Systems
Modular reasoning about heap paths via effectively propositional formulas
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.03 |
We present the first verification of full functional correctness for a range of linked data structure implementations, including mutable lists, trees, graphs, and hash tables. Specifically, we present the use of the Jahob verification system to verify formal specifications, written in classical higher-order logic, that completely capture the desired behavior of the Java data structure implementations (with the exception of properties involving execution time and/or memory consumption). Given that the desired correctness properties include intractable constructs such as quantifiers, transitive closure, and lambda abstraction, it is a challenge to successfully prove the generated verification conditions. Our Jahob verification system uses integrated reasoning to split each verification condition into a conjunction of simpler subformulas, then apply a diverse collection of specialized decision procedures, first-order theorem provers, and, in the worst case, interactive theorem provers to prove each subformula. Techniques such as replacing complex subformulas with stronger but simpler alternatives, exploiting structure inherently present in the verification conditions, and, when necessary, inserting verified lemmas and proof hints into the imperative source code make it possible to seamlessly integrate all of the specialized decision procedures and theorem provers into a single powerful integrated reasoning system. By appropriately applying multiple proof techniques to discharge different subformulas, this reasoning system can effectively prove the complex and challenging verification conditions that arise in this context.