An Introduction to Proving the Correctness of Programs
ACM Computing Surveys (CSUR)
Communications of the ACM
Communications of the ACM
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A Discipline of Programming
Symbolic evaluation of programs: a look at loop analysis
SYMSAC '76 Proceedings of the third ACM symposium on Symbolic and algebraic computation
A program verifier
Data flow analysis is model checking of abstract interpretations
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Dynamically discovering likely program invariants to support program evolution
Proceedings of the 21st international conference on Software engineering
Dynamically Discovering Likely Program Invariants to Support Program Evolution
IEEE Transactions on Software Engineering - Special issue on 1999 international conference on software engineering
Data flow analysis of applicative programs using minimal function graphs
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Automatic generation of program specifications
ISSTA '02 Proceedings of the 2002 ACM SIGSOFT international symposium on Software testing and analysis
Flow analysis and optimization of LISP-like structures
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Secure calling contexts for stack inspection
Proceedings of the 4th ACM SIGPLAN international conference on Principles and practice of declarative programming
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Guaranteed Optimization: Proving Nullspace Properties of Compilers
SAS '02 Proceedings of the 9th International Symposium on Static Analysis
Abstract Interpretation Based Formal Methods and Future Challenges
Informatics - 10 Years Back. 10 Years Ahead.
Constraint Representation for Propagation
CP '98 Proceedings of the 4th International Conference on Principles and Practice of Constraint Programming
Modular Static Program Analysis
CC '02 Proceedings of the 11th International Conference on Compiler Construction
The semantics and execution of a synchronous block-diagram language
Science of Computer Programming
Interfaces for stack inspection
Journal of Functional Programming
Ownership confinement ensures representation independence for object-oriented programs
Journal of the ACM (JACM)
Propositional Satisfiability and Constraint Programming: A comparative survey
ACM Computing Surveys (CSUR)
Efficient solving of quantified inequality constraints over the real numbers
ACM Transactions on Computational Logic (TOCL)
An Integrated Approach to High Integrity Software Verification
Journal of Automated Reasoning
Science of Computer Programming
Automatic generation of polynomial invariants of bounded degree using abstract interpretation
Science of Computer Programming
Polynomial approximations of the relational semantics of imperative programs
Science of Computer Programming
Generating Java Compiler Optimizers Using Bidirectional CTL
Electronic Notes in Theoretical Computer Science (ENTCS)
Certification Using the Mobius Base Logic
Formal Methods for Components and Objects
Internal and external logics of abstract interpretations
VMCAI'08 Proceedings of the 9th international conference on Verification, model checking, and abstract interpretation
Invariant generation for P-solvable loops with assignments
CSR'08 Proceedings of the 3rd international conference on Computer science: theory and applications
Parallelizing a symbolic compositional model-checking algorithm
HVC'10 Proceedings of the 6th international conference on Hardware and software: verification and testing
Incremental computation of succinct abstractions for hybrid systems
FORMATS'11 Proceedings of the 9th international conference on Formal modeling and analysis of timed systems
Invariant functions and invariant relations: An alternative to invariant assertions
Journal of Symbolic Computation
Hi-index | 0.00 |
The problem of discovering invariant assertions of programs is explored in light of the fixpoint approach in the static analysis of programs, Cousot [1977a], Cousot[1977b]. In section 2 we establish the lattice theoric foundations upon which the synthesis of invariant assertions is based. We study the resolution of a fixpoint system of equations by Jacobi's successive approximations method. Under continuity hypothesis we show that any chaotic iterative method converges to the optimal solution. In section 3 we study the deductive semantics of programs. We show that a system of logical forward equations can be associated with a program using the predicate transformer rules which define the semantics of elementary instructions. The resolution of this system of semantic equations by chaotic iterations leads to the optimal invariants which exactly define the semantics of this program. Therefore these optimal invariants can be used for total correctness proofs (section 4). Next we show that usually a system of inequations is used as a substitute for the system of equations. Hence the solutions to this system of inequations are approximate invariants which can only be used for proofs of partial correctness (section 5). In section 6 we show that symbolic execution of programs consists in fact in solving the semantic equations associated with this program. The construction of the symbolic execution tree corresponds to the chaotic successive approximations method. Therefore symbolic execution permits optimal invariant assertions to be discovered provided that one can pass to the limit, that is consider infinite paths in the symbolic execution tree. Induction nrinciDles can be used for that purpose. In section 7 we show how difference equations can be utilized to discover the general term of the sequence of successive approximations so that optimal invariants are obtained by a mere passage to the limit. In section 8 we show that an approximation of the optimal solution to a fixpoint system of equations can be obtained by strengthening the term of a chaotic iteration sequence. This formalizes the synthesis of approximate invariants by heuristic methods. Various examples provide a helpful intuitive support to the technical sections.