POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The essence of compiling with continuations
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
Forcing behavioral subtyping through specification inheritance
Proceedings of the 18th international conference on Software engineering
Data groups: specifying the modification of extended state
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Safely creating correct subclasses without seeing superclass code
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
BI as an assertion language for mutable data structures
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Local reasoning for stateful programs
Local reasoning for stateful programs
Transition predicate abstraction and fair termination
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Preliminary design of JML: a behavioral interface specification language for java
ACM SIGSOFT Software Engineering Notes
Modular invariants for layered object structures
Science of Computer Programming - Special issue on source code analysis and manipulation (SCAM 2005)
BI-hyperdoctrines, higher-order separation logic, and abstraction
ACM Transactions on Programming Languages and Systems (TOPLAS) - Special Issue ESOP'05
Enhancing modular OO verification with separation logic
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Using history invariants to verify observers
ESOP'07 Proceedings of the 16th European conference on Programming
Abstract predicates and mutable adts in hoare type theory
ESOP'07 Proceedings of the 16th European conference on Programming
The spec# programming system: an overview
CASSIS'04 Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
A verification methodology for model fields
ESOP'06 Proceedings of the 15th European conference on Programming Languages and Systems
Enhancing modular OO verification with separation logic
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Separation Logic for Multiple Inheritance
Electronic Notes in Theoretical Computer Science (ENTCS)
A Simple Model of Separation Logic for Higher-Order Store
ICALP '08 Proceedings of the 35th international colloquium on Automata, Languages and Programming, Part II
Separation Logic Contracts for a Java-Like Language with Fork/Join
AMAST 2008 Proceedings of the 12th international conference on Algebraic Methodology and Software Technology
A Unified Framework for Verification Techniques for Object Invariants
ECOOP '08 Proceedings of the 22nd European conference on Object-Oriented Programming
jStar: towards practical verification for java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Higher-Order Separation Logic in Isabelle/HOLCF
Electronic Notes in Theoretical Computer Science (ENTCS)
Classical BI: a logic for reasoning about dualising resources
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Incremental Reasoning for Multiple Inheritance
IFM '09 Proceedings of the 7th International Conference on Integrated Formal Methods
Local reasoning for abstraction and sharing
Proceedings of the 2009 ACM symposium on Applied Computing
The need for flexible object invariants
International Workshop on Aliasing, Confinement and Ownership in Object-Oriented Programming
Checking Framework Interactions with Relationships
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Implicit Dynamic Frames: Combining Dynamic Frames and Separation Logic
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Practical API Protocol Checking with Access Permissions
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
Memory Usage Verification Using Hip/Sleek
ATVA '09 Proceedings of the 7th International Symposium on Automated Technology for Verification and Analysis
A relational modal logic for higher-order stateful ADTs
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Verifying event-driven programs using ramified frame properties
Proceedings of the 5th ACM SIGPLAN workshop on Types in language design and implementation
Nested Hoare triples and frame rules for higher-order store
CSL'09/EACSL'09 Proceedings of the 23rd CSL international conference and 18th EACSL Annual conference on Computer science logic
The design of SafeJML, a specification language for SCJ with support for WCET specification
Proceedings of the 8th International Workshop on Java Technologies for Real-Time and Embedded Systems
Reasoning about multiple related abstractions with MultiStar
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Task types for pervasive atomicity
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Verifying executable object-oriented specifications with separation logic
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Verifying generics and delegates
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Capabilities for uniqueness and borrowing
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
The next 700 separation logics
VSTTE'10 Proceedings of the Third international conference on Verified software: theories, tools, experiments
Reasoning about function objects
TOOLS'10 Proceedings of the 48th international conference on Objects, models, components, patterns
Loop invariant synthesis in a combined domain
ICFEM'10 Proceedings of the 12th international conference on Formal engineering methods and software engineering
Kopitiam: modular incremental interactive full functional static verification of java code
NFM'11 Proceedings of the Third international conference on NASA Formal methods
Incremental reasoning with lazy behavioral subtyping for multiple inheritance
Science of Computer Programming
jStar-eclipse: an IDE for automated verification of Java programs
Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering
Revisiting information hiding: reflections on classical and nonclassical modularity
Proceedings of the 25th European conference on Object-oriented programming
Verifying object-oriented programs with higher-order separation logic in Coq
ITP'11 Proceedings of the Second international conference on Interactive theorem proving
Specification patterns and proofs for recursion through the store
FCT'11 Proceedings of the 18th international conference on Fundamentals of computation theory
WP semantics and behavioral subtyping
ICTAC'11 Proceedings of the 8th international conference on Theoretical aspects of computing
Specifying subtypes in SCJ programs
Proceedings of the 9th International Workshop on Java Technologies for Real-Time and Embedded Systems
Proceedings of the 10th SIGPLAN symposium on New ideas, new paradigms, and reflections on programming and software
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Towards a program logic for JavaScript
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Memory leaks detection in java by bi-abductive inference
FASE'10 Proceedings of the 13th international conference on Fundamental Approaches to Software Engineering
ACM Transactions on Programming Languages and Systems (TOPLAS)
A semantic foundation for hidden state
FOSSACS'10 Proceedings of the 13th international conference on Foundations of Software Science and Computational Structures
A separation logic for OO programs
FACS'10 Proceedings of the 7th international conference on Formal Aspects of Component Software
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
Verifying the reflective visitor pattern
Proceedings of the 14th Workshop on Formal Techniques for Java-like Programs
LICS '12 Proceedings of the 2012 27th Annual IEEE/ACM Symposium on Logic in Computer Science
Loop invariant synthesis in a combined abstract domain
Journal of Symbolic Computation
Modular verification of OO programs with interfaces
ICFEM'12 Proceedings of the 14th international conference on Formal Engineering Methods: formal methods and software engineering
Model-Checking higher-order programs with recursive types
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Local Reasoning for Global Invariants, Part II: Dynamic Boundaries
Journal of the ACM (JACM)
A flow-insensitive, modular effect system for purity
Proceedings of the 15th Workshop on Formal Techniques for Java-like Programs
A formal semantics for isorecursive and equirecursive state abstractions
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Separation logic for object-oriented programming
Aliasing in Object-Oriented Programming
Aliasing in Object-Oriented Programming
Hi-index | 0.00 |
Inheritance is a fundamental concept in object-oriented programming, allowing new classes to be defined in terms of old classes. When used with care, inheritance is an essential tool for object-oriented programmers. Thus, for those interested in developing formal verification techniques, the treatment of inheritance is of paramount importance. Unfortunately, inheritance comes in a number of guises, all requiring subtle techniques. To address these subtleties, most existing verification methodologies typically adopt one of two restrictions to handle inheritance: either (1) they prevent a derived class from restricting the behaviour of its base class (typically by syntactic means) to trivialize the proof obligations; or (2) they allow a derived class to restrict the behaviour of its base class, but require that every inherited method must be reverified. Unfortunately, this means that typical inheritance-rich code either cannot be verified or results in an unreasonable number of proof obligations. In this paper, we develop a separation logic for a core object-oriented language. It allows derived classes which override the behaviour of their base class, yet supports the inheritance of methods without reverification where this is safe. For each method, we require two specifications: a static specification that is used to verify the implementation and direct method calls (in Java this would be with a super call); and a dynamic specification that is used for calls that are dynamically dispatched; along with a simple relationship between the two specifications. Only the dynamic specification is involved with behavioural subtyping. This simple separation of concerns leads to a powerful system that supports all forms of inheritance with low proof-obligation overheads. We both formalize our methodology and demonstrate its power with a series of inheritance examples.