Correctness Proofs of Communicating Processes: Three Illustrative Examples From the Literature
ACM Transactions on Programming Languages and Systems (TOPLAS)
The characterization problem for Hoare logics
Proc. of a discussion meeting of the Royal Society of London on Mathematical logic and programming languages
A generalization of Owicki-Gries's Hoare logic for a concurrent while language
Theoretical Computer Science - Thirteenth International Colloquim on Automata, Languages and Programming, Renne
Tentative steps toward a development method for interfering programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
In transition from global to modular temporal reasoning about programs
Logics and models of concurrent systems
CML: A higher concurrent language
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Automated proofs of object code for a widely used microprocessor
Automated proofs of object code for a widely used microprocessor
ACM Transactions on Programming Languages and Systems (TOPLAS)
A syntactic approach to type soundness
Information and Computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parallel composition of assumption-commitment specifications
Acta Informatica
Safe kernel extensions without run-time checking
OSDI '96 Proceedings of the second USENIX symposium on Operating systems design and implementation
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type-safe linking and modular assembly language
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Programming Language Constructs for Which It Is Impossible To Obtain Good Hoare Axiom Systems
Journal of the ACM (JACM)
Proving Liveness Properties of Concurrent Programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
The ``Hoare Logic'' of CSP, and All That
ACM Transactions on Programming Languages and Systems (TOPLAS)
Communicating sequential processes
Communications of the ACM
Communications of the ACM
An axiomatic basis for computer programming
Communications of the ACM
Concurrency verification: introduction to compositional and noncompositional methods
Concurrency verification: introduction to compositional and noncompositional methods
A type system for certified binaries
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Calculus of Communicating Systems
A Calculus of Communicating Systems
The logical approach to stack typing
Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
Thread-Modular Verification for Shared-Memory Programs
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
Separation Logic: A Logic for Shared Mutable Data Structures
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
A Syntactic Approach to Foundational Proof-Carrying Code
LICS '02 Proceedings of the 17th Annual IEEE Symposium on Logic in Computer Science
Inductive Definitions in the system Coq - Rules and Properties
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
An Assume-Guarantee Rule for Checking Simulation
FMCAD '98 Proceedings of the Second International Conference on Formal Methods in Computer-Aided Design
On Unifying Assumption-Commitment Style Proof Rules for Concurrency
CONCUR '94 Proceedings of the Concurrency Theory
A Proof Technique for Rely/Guarantee Properties
Proceedings of the Fifth Conference on Foundations of Software Technology and Theoretical Computer Science
A Sound Framework for Untrusted Verification-Condition Generators
LICS '03 Proceedings of the 18th Annual IEEE Symposium on Logic in Computer Science
Foundational Proof-Carrying Code
LICS '01 Proceedings of the 16th Annual IEEE Symposium on Logic in Computer Science
Separation and information hiding
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Building certified libraries for PCC: dynamic storage allocation
Science of Computer Programming - Special issue on 12th European symposium on programming (ESOP 2003)
Building certified libraries for PCC: dynamic storage allocation
ESOP'03 Proceedings of the 12th European conference on Programming
The verifying compiler: a grand challenge for computing research
CC'03 Proceedings of the 12th international conference on Compiler construction
Modular verification of concurrent assembly code with dynamic thread creation and termination
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Certified assembly programming with embedded code pointers
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Modular verification of assembly code with stack-based control abstractions
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
An open framework for foundational proof-carrying code
TLDI '07 Proceedings of the 2007 ACM SIGPLAN international workshop on Types in languages design and implementation
A general framework for certifying garbage collectors and their mutators
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Formal Functional Verification of Device Drivers
VSTTE '08 Proceedings of the 2nd international conference on Verified Software: Theories, Tools, Experiments
Local rely-guarantee reasoning
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Certifying concurrent programs using transactional memory
Journal of Computer Science and Technology
On the relationship between concurrent separation logic and assume-guarantee reasoning
ESOP'07 Proceedings of the 16th European conference on Programming
Software model checking without source code
Innovations in Systems and Software Engineering
Formal reasoning about lazy-STM programs
Journal of Computer Science and Technology
Formal verification of a memory model for C-like imperative languages
ICFEM'05 Proceedings of the 7th international conference on Formal Methods and Software Engineering
ITP'13 Proceedings of the 4th international conference on Interactive Theorem Proving
Hi-index | 0.00 |
Concurrency, as a useful feature of many modern programming languages and systems, is generally hard to reason about. Although existing work has explored the verification of concurrent programs using high-level languages and calculi, the verification of concurrent assembly code remains an open problem, largely due to the lack of abstraction at a low-level. Nevertheless, it is sometimes necessary to reason about assembly code or machine executables so as to achieve higher assurance.In this paper, we propose a logic-based "type" system for the static verification of concurrent assembly programs, applying the "invariance proof" technique for verifying general safety properties and the "assume-guarantee" paradigm for decomposition. In particular, we introduce a notion of "local guarantee" for the thread-modular verification in a non-preemptive setting.Our system is fully mechanized. Its soundness has been verified using the Coq proof assistant. A safety proof of a program is semi-automatically constructed with help of Coq, allowing the verification of even undecidable safety properties. We demonstrate the usage of our system using three examples, addressing mutual exclusion, deadlock freedom, and partial correctness respectively.