6,648 research outputs found
Weakest Preconditions for Progress
Predicate transformers that map the postcondition and all intermediate conditions of a command to a precondition are introduced. They can be used to specify certain progress properties of sequential programs
Complete algorithms for algebraic strongest postconditions and weakest preconditions in polynomial ODEs
A system of polynomial ordinary differential equations (ODEs) is specified
via a vector of multivariate polynomials, or vector field, . A safety
assertion means that the trajectory of the system will
lie in a subset (the postcondition) of the state-space, whenever the
initial state belongs to a subset (the precondition). We consider the
case when and are algebraic varieties, that is, zero sets of
polynomials. In particular, polynomials specifying the postcondition can be
seen as a system's conservation laws implied by . Checking the validity
of algebraic safety assertions is a fundamental problem in, for instance,
hybrid systems. We consider a generalized version of this problem, and offer an
algorithm that, given a user specified polynomial set and an algebraic
precondition , finds the largest subset of polynomials in implied by
(relativized strongest postcondition). Under certain assumptions on
, this algorithm can also be used to find the largest algebraic invariant
included in and the weakest algebraic precondition for .
Applications to continuous semialgebraic systems are also considered. The
effectiveness of the proposed algorithm is demonstrated on several case studies
from the literature.Comment: 19 page
Reducing the Number of Annotations in a Verification-oriented Imperative Language
Automated software verification is a very active field of research which has
made enormous progress both in theoretical and practical aspects. Recently, an
important amount of research effort has been put into applying these techniques
on top of mainstream programming languages. These languages typically provide
powerful features such as reflection, aliasing and polymorphism which are handy
for practitioners but, in contrast, make verification a real challenge. In this
work we present Pest, a simple experimental, while-style, multiprocedural,
imperative programming language which was conceived with verifiability as one
of its main goals. This language forces developers to concurrently think about
both the statements needed to implement an algorithm and the assertions
required to prove its correctness. In order to aid programmers, we propose
several techniques to reduce the number and complexity of annotations required
to successfully verify their programs. In particular, we show that high-level
iteration constructs may alleviate the need for providing complex loop
annotations.Comment: 15 pages, 8 figure
On a New Notion of Partial Refinement
Formal specification techniques allow expressing idealized specifications,
which abstract from restrictions that may arise in implementations. However,
partial implementations are universal in software development due to practical
limitations. Our goal is to contribute to a method of program refinement that
allows for partial implementations. For programs with a normal and an
exceptional exit, we propose a new notion of partial refinement which allows an
implementation to terminate exceptionally if the desired results cannot be
achieved, provided the initial state is maintained. Partial refinement leads to
a systematic method of developing programs with exception handling.Comment: In Proceedings Refine 2013, arXiv:1305.563
An Axiomatic Approach to Liveness for Differential Equations
This paper presents an approach for deductive liveness verification for
ordinary differential equations (ODEs) with differential dynamic logic.
Numerous subtleties complicate the generalization of well-known discrete
liveness verification techniques, such as loop variants, to the continuous
setting. For example, ODE solutions may blow up in finite time or their
progress towards the goal may converge to zero. Our approach handles these
subtleties by successively refining ODE liveness properties using ODE
invariance properties which have a well-understood deductive proof theory. This
approach is widely applicable: we survey several liveness arguments in the
literature and derive them all as special instances of our axiomatic refinement
approach. We also correct several soundness errors in the surveyed arguments,
which further highlights the subtlety of ODE liveness reasoning and the utility
of our deductive approach. The library of common refinement steps identified
through our approach enables both the sound development and justification of
new ODE liveness proof rules from our axioms.Comment: FM 2019: 23rd International Symposium on Formal Methods, Porto,
Portugal, October 9-11, 201
Inferring Concise Specifications of APIs
Modern software relies on libraries and uses them via application programming
interfaces (APIs). Correct API usage as well as many software engineering tasks
are enabled when APIs have formal specifications. In this work, we analyze the
implementation of each method in an API to infer a formal postcondition.
Conventional wisdom is that, if one has preconditions, then one can use the
strongest postcondition predicate transformer (SP) to infer postconditions.
However, SP yields postconditions that are exponentially large, which makes
them difficult to use, either by humans or by tools. Our key idea is an
algorithm that converts such exponentially large specifications into a form
that is more concise and thus more usable. This is done by leveraging the
structure of the specifications that result from the use of SP. We applied our
technique to infer postconditions for over 2,300 methods in seven popular Java
libraries. Our technique was able to infer specifications for 75.7% of these
methods, each of which was verified using an Extended Static Checker. We also
found that 84.6% of resulting specifications were less than 1/4 page (20 lines)
in length. Our technique was able to reduce the length of SMT proofs needed for
verifying implementations by 76.7% and reduced prover execution time by 26.7%
- …
