643 research outputs found
Provably Correct Floating-Point Implementation of a Point-In-Polygon Algorithm
The problem of determining whether or not a point lies inside a given polygon occurs in many applications. In air traffic management concepts, a correct solution to the point-in-polygon problem is critical to geofencing systems for Unmanned Aerial Vehicles and in weather avoidance applications. Many mathematical methods can be used to solve the point-in-polygon problem. Unfortunately, a straightforward floating- point implementation of these methods can lead to incorrect results due to round-off errors. In particular, these errors may cause the control flow of the program to diverge with respect to the ideal real-number algorithm. This divergence potentially results in an incorrect point-in- polygon determination even when the point is far from the edges of the polygon. This paper presents a provably correct implementation of a point-in-polygon method that is based on the computation of the winding number. This implementation is mechanically generated from a source- to-source transformation of the ideal real-number specification of the algorithm. The correctness of this implementation is formally verified within the Frama-C analyzer, where the proof obligations are discharged using the Prototype Verification System (PVS)
Certifying floating-point implementations using Gappa
High confidence in floating-point programs requires proving numerical
properties of final and intermediate values. One may need to guarantee that a
value stays within some range, or that the error relative to some ideal value
is well bounded. Such work may require several lines of proof for each line of
code, and will usually be broken by the smallest change to the code (e.g. for
maintenance or optimization purpose). Certifying these programs by hand is
therefore very tedious and error-prone. This article discusses the use of the
Gappa proof assistant in this context. Gappa has two main advantages over
previous approaches: Its input format is very close to the actual C code to
validate, and it automates error evaluation and propagation using interval
arithmetic. Besides, it can be used to incrementally prove complex mathematical
properties pertaining to the C code. Yet it does not require any specific
knowledge about automatic theorem proving, and thus is accessible to a wide
community. Moreover, Gappa may generate a formal proof of the results that can
be checked independently by a lower-level proof assistant like Coq, hence
providing an even higher confidence in the certification of the numerical code.
The article demonstrates the use of this tool on a real-size example, an
elementary function with correctly rounded output
Software Validation via Model Animation
This paper explores a new approach to validating software implementations that have been produced from formally-verified algorithms. Although visual inspection gives some confidence that the implementations faithfully reflect the formal models, it does not provide complete assurance that the software is correct. The proposed approach, which is based on animation of formal specifications, compares the outputs computed by the software implementations on a given suite of input values to the outputs computed by the formal models on the same inputs, and determines if they are equal up to a given tolerance. The approach is illustrated on a prototype air traffic management system that computes simple kinematic trajectories for aircraft. Proofs for the mathematical models of the system's algorithms are carried out in the Prototype Verification System (PVS). The animation tool PVSio is used to evaluate the formal models on a set of randomly generated test cases. Output values computed by PVSio are compared against output values computed by the actual software. This comparison improves the assurance that the translation from formal models to code is faithful and that, for example, floating point errors do not greatly affect correctness and safety properties
Properties of two's complement floating point notations
International audienceFew designs, mostly those of Texas Instruments, continue to use tworsquos complement floating point units. Such units are simpler to build and to validate, but they do not comply to the dominant IEEE standard for floating point arithmetic. We compare some properties of the two systems in this text. Some features are lost, but others remain unchanged. One strong example is the case of Sterbenzrsquos theorem and our recent extension. We show in the paper that the theorem and its extension hold for the tworsquos complement architecture. Still, users should ensure that results are large enough on circuits that do not implement gradual underflow. Theorems have been proven and validated using the Coq automatic proof checker
A Taylor Function Calculus for Hybrid System Analysis: Validation in Coq
International audienceWe present a framework for the verification of the numerical algorithms used in Ariadne, a tool for analysis of nonlinear hybrid system. In particular, in Ariadne, smooth functions are approximated by Taylor models based on sparse polynomials. We use the Coq theorem prover for developing Taylor models as sparse polynomials with floating-point coefficients. This development is based on the formalisation of an abstract data type of basic floating-point arithmetic . We show how to devise a type of continuous function models and thereby parametrise the framework with respect to the used approximation, which will allow us to plug in alternatives to Taylor models
PolyARBerNN: A Neural Network Guided Solver and Optimizer for Bounded Polynomial Inequalities
Constraints solvers play a significant role in the analysis, synthesis, and
formal verification of complex embedded and cyber-physical systems. In this
paper, we study the problem of designing a scalable constraints solver for an
important class of constraints named polynomial constraint inequalities (also
known as non-linear real arithmetic theory). In this paper, we introduce a
solver named PolyARBerNN that uses convex polynomials as abstractions for
highly nonlinear polynomials. Such abstractions were previously shown to be
powerful to prune the search space and restrict the usage of sound and complete
solvers to small search spaces. Compared with the previous efforts on using
convex abstractions, PolyARBerNN provides three main contributions namely (i) a
neural network guided abstraction refinement procedure that helps selecting the
right abstraction out of a set of pre-defined abstractions, (ii) a Bernstein
polynomial-based search space pruning mechanism that can be used to compute
tight estimates of the polynomial maximum and minimum values which can be used
as an additional abstraction of the polynomials, and (iii) an optimizer that
transforms polynomial objective functions into polynomial constraints (on the
gradient of the objective function) whose solutions are guaranteed to be close
to the global optima. These enhancements together allowed the PolyARBerNN
solver to solve complex instances and scales more favorably compared to the
state-of-art non-linear real arithmetic solvers while maintaining the soundness
and completeness of the resulting solver. In particular, our test benches show
that PolyARBerNN achieved 100X speedup compared with Z3 8.9, Yices 2.6, and
NASALib (a solver that uses Bernstein expansion to solve multivariate
polynomial constraints) on a variety of standard test benches
- …